UNIX-, BSD-, GNU-опции в команде ps для Linux. Откуда они?

В руководстве для команды ps на Ubuntu есть этот текст:

Эта версия ps допускает несколько вариантов:

  1 UNIX options, which may be grouped and must be preceded by a dash. 2 BSD options, which may be grouped and must not be used with a dash. 3 GNU long options, which are preceded by two dashes. 

Почему возможно, что команда, встроенная в Ubuntu, использует параметры из разных операционных систем? Я знаю, что происхождение Linux, UNIX и BSD одинаково, но они разные.

Я просто могу дать вам общий ответ: параметры командной строки часто анализируются с использованием библиотечной функции «getopt». Первоначально он принимал только агименты, состоящие из символа. Это эффективно ограничивает количество опций, которые у вас есть, более-менее -A -Z, -a -z и -0 -9. Вы можете себе представить, что вы не будете использовать опцию без хотя бы намека на реальное использование, например -h для справки, или -v для информации о версии или подробного вывода.

В Linux и часто ассоциированной стандартной библиотеке C библиотеки glibc есть расширение getopt, которое также может обрабатывать – как подобные опции. Исходя из этого, многие команды, разработанные в GNU (например, glibc), использовали это расширение. Теперь для многих команд у вас также есть опция стиля GNU. -v и –verbose, -h и –help и т. д. Я думаю, что то же самое произошло в BSD (хотя я не парень BSD, пожалуйста, поправьте меня).

Ваша ps-команда происходит из коллекции программного обеспечения, называемой procps, и я предполагаю, что они хотят имитировать стиль опций, определенный для определенной платформы. Поэтому для ребята UNIX у него есть опции. Для BSD он также принимает что-то вроде «ps aux» и так далее.

PS – это не единственная программа, которая ведет себя так. Многие стандартные программы понимают «старый» стиль UNIX (POSIX) и некоторые современные расширения.