What's the difference between BSD-style and Unix-style command line options?

Solution 1:

It depends on the program. ps is the one that you encounter the most often - somebody who grew up in a BSD environment will type ps auwwx while somebody who grew up in a System V environment will type ps -ef even though ps these days supports both types of options now.

Solution 2:

Much and little, see:

  • http://www.freebsd.org/doc/en/articles/linux-users/article.html
  • http://cb.vu/unixtoolbox.xhtml

Also worry about:

Case sensitivity e.g.

mailx -R  [email protected] .....  # GNU/Linux
mailx -r  [email protected] .....  # Unix

Options required in some flavours but not others e.g.

/usr/bin/echo -e "This\nis a\n test"  # GNU/Linux
/bin/echo        "This\nis a\n test"  # Unix

Additional options e.g.

last -y  # BSD  - include year
last -a  # GNU/Linux - include hostname

Solution 3:

One of the major differences across the platform is positional arguments. Most of the command line utilities will enforce that flags come before positional arguments. That is, on a GNU system, the following is fine:

ls / -la

On BSD, these are typically not valid. Obviously, this isn't the extent of the differences between the two, but its one of the differences that drives me up the wall when I switch between them.