Какой выбрать - команды в стиле BSD или Unix, если они доступны?

14

Команды, например, psпоставляются с большим количеством параметров, особенно потому, что они дают возможность использовать выбор между флагами в стиле Unix и BSD. Я надеюсь, вы поняли мою точку зрения здесь.

Итак, когда есть такая опция, которую я должен выбрать для максимальной совместимости во всех системах Linux? (макс. совместимость является одним из приоритетов, например)

Я знаю, что стиль Unix довольно очевиден, но команды BSD по какой-то причине содержат более читаемую информацию (например, заголовки столбцов, столбцы процессора и т. Д.). Конечно, поправьте меня, если я ошибаюсь, но это то, что я чувствовал.

это я
источник

Ответы:

17

Практически все Linux используют версии GNU исходных базовых команд Unix, например ps, которые, как вы заметили, поддерживают опции в стиле BSD и AT & T.

Поскольку ваша заявленная цель - совместимость только между Linux, это означает, что ответ «это не имеет значения».

Встроенные и другие очень маленькие варианты Linux обычно используют BusyBox вместо инструментов GNU, но в случае ps, это действительно не влияет на ответ, так как версия BusyBox настолько урезана, что ее нельзя назвать ни AT & Tish, ни BSDish.

Со временем другие системы Unixy уменьшили psразличия в совместимости. Mac OS X - которая косвенно происходит от BSD Unix и в целом ведет себя почти так же, как BSD Unix - принимает psфлаги AT & Tish и BSDish .

Solaris / OpenIndiana тоже ведет себя подобным образом, хотя это менее удивительно, поскольку у него смешанная история BSD и AT & T.

FreeBSD, OpenBSD и NetBSD по-прежнему исключительно в стиле BSD.

Чем старше блок Unix, тем более вероятно, что он принимает только один стиль флагов. Различия в таком блоке можно записать так же, как мы делаем сейчас: установите инструменты GNU, если они еще не установлены.

Тем не менее, есть еще ловушки. psвыходные данные, как правило, не должны анализироваться в сценариях, которые должны быть переносимыми, например, поскольку системы Unixy различаются в зависимости от доступных столбцов, объема данных, которые ОС хочет сделать видимыми для пользователей без полномочий root и т. д.

(Кстати, обратите внимание, что это «BSD vs. AT & T», а не «BSD vs. Unix». BSD Unix по-прежнему UNIX®. BSD Unix делится историей непосредственного развития с оригинальной веткой AT & T. Это совместное использование также идет в обе стороны : AT & T и ее преемники принесли инновации BSD домой на нескольких этапах своей истории. Такое объединение со временем частично объясняется усилиями The Open Group и ее предшественников.)

Уоррен Янг
источник
Хотя это отличное объяснение (и ответ), оно не помогает в вопросе: какой стиль выбрать для изучения?
Ярл
@ Ярл: Сначала изучай POSIX. Это доступно везде. Затем узнайте, какие странные варианты используются в системах, которые вы используете чаще всего. Не обращайте внимания на остальное.
Уоррен Янг
В случае psстилей аргументов, какой из них (BSD или Unix) является POSIX, тогда?
Ярл
@Jarl: Смотрите спецификацию . Вообще говоря, POSIX использует больше SysVish, чем BSD, поскольку POSIX был экономически ориентирован, и все основные коммерческие Unixes того времени были производными System V.
Уоррен Янг
0

В случае сомнений используйте синтаксис SysV. Это было согласовано многими людьми и является стандартом де-факто. Материал BSD либо датируется предысторией, либо является частью некой расходящейся ветви (SysV была попыткой положить конец войнам Unix, собрав все разрозненные линии под одной крышей).

vonbrand
источник
Де-факто стандарт для Linux, а не для Solaris, * BSD, OSX и т. Д.
chiggsy
Конечно , это является стандартом для Solaris (который был первый SysV выйти, помните). По крайней мере, его придерживались IBM AIX и HP-UX. BSD являются несдержанными из ушедшей эпохи.
vonbrand
1
Вы правы в том, что Solaris является SysV, моя ошибка.
Chiggsy
3
Утверждено, хотя я подвергаю сомнению пренебрежительные ссылки на BSD. Неплохо продолжать делать все правильно.
Chiggsy
2
-1: во-первых, я думаю, вы имеете в виду стандарт де-юре . Чтобы рассмотреть варианты стиля SysV как стандарт де-факто , вам придется игнорировать несколько фактов существования: FreeBSD, OpenBSD и NetBSD. Вы не можете отмахнуться от них с этим «предысторическим» аргументом. Во-вторых, Solaris не был первой Системой V. Возможно, это была первая коммерческая поставка SVR4 , но SVR1 был разработан для Vaxen и PDP-11 .
Уоррен Янг