В чем разница между стандартным синтаксисом и синтаксисом BSD?

21

Я видел много команд, которые принимают «синтаксис BSD», а также их стандартный синтаксис. Возьмите psкоманду для одного примера:

To see every process on the system using standard syntax:
      ps -e
      ps -ef
      ps -eF
      ps -ely

To see every process on the system using BSD syntax:
      ps ax
      ps axu

Так в чем же разница между этими двумя маршрутами? Вообще, когда они говорят в синтаксисе BSD, какие элементы я должен помнить? Этот синтаксис только для тех команд, которые они есть в BSD?

Мохаммед Реза Резвани
источник
psИсследовать исторические различия между тем, как системы со временем внедряют optargs, - значит стоять на краю пропасти. Человек не должен был знать.

Ответы:

18

В чем разница между MS Office и LibreOffice? Между Firefox и Chrome?
Они делают примерно то же самое, но они от разных людей с немного разными целями.

Возможно, лучший вопрос: почему в дистрибутивах BSD, Linux, OSX и Unix используется так много команд? Это сводится к соответствию POSIX . POSIX - это набор стандартов для Unix-подобных операционных систем; в нем указывается базовый API, команды и как эти команды должны работать.

В случае ps(обусловленной POSIX команды) требуются определенные аргументы. К ним относятся эти BSD. Все производные от POSIX команды имеют свои собственные справочные страницы, но они нуждаются в отдельной установке. Для ps:

sudo apt-get install manpages-posix
man 1posix ps

Так почему же BSD не использует наш ps(или наоборот)?

  • Наш psпакет ( procpsсм dpkg -S $(which ps)) является вилкой из другого procpsпакета . Оба они имеют лицензию GPL. Это несовместимо с лицензией BSD, поэтому не может быть включено туда. ( Мы могли бы включить BSD, но не обязательно).
  • psдовольно специфично для ядра. Я считаю, что они технически несовместимы.

А как насчет других приложений?

Большинство команд для соответствия POSIX приходят из coreutilsпакета Ubuntu . Этот пакет представляет GNU в GNU / Linux и также имеет лицензию GPL. BSD выпускает свои собственные BSD-совместимые версии с лицензией, которые соответствуют POSIX, но не обязательно полностью совпадают с их аналогами GNU.

psэто не единственная команда POSIX, которая не является GNU . Есть множество из них.

Как я понимаю, почему они должны быть? Они разными людьми за очень, очень долгое время. Это короткий ответ здесь.

Оли
источник
20

Это восходит к нескольким извилистой истории Unix (Википедия имеет упрощенную схему , которая далека от завершения). В частности, какое-то время существовало два основных направления: System V, разработанная AT & T, и BSD, разработанная в Калифорнийском университете в Беркли. Это было в начале 1980-х, задолго до Linux (1991), не говоря уже об Ubuntu (2004). Зачастую эти два потока принимали разные решения, и даже сегодня вы иногда найдете ссылки на варианты или функции «System V» и «BSD».

Эта psкоманда восходит к одному из первых выпусков Unix (ее не было в версии 1, самая ранняя страница руководства, которую я могу найти в Интернете, относится к версии 5 (с.94) в 1974 году). В то время psпросто было несколько вариантов, например ps a, отображал бы все процессы, а не только пользователя, и ps xотображал процессы без присоединенного терминала. Вы заметите, что параметры не начинаются с -: в то время соглашение об использовании -параметров не было почти систематическим, как сегодня, это было в основном для команд, которые принимали имена файлов в качестве обычных аргументов.

Со временем различные направления Unix расширились psи получили еще больше возможностей. Вариант BSD решил сохранить исходный синтаксис без лидирующего -, aи xдо сих пор существует сегодня. Вариант System V решил принять синтаксическое соглашение -для опций и использовал разные буквы (например, ps -eдля отображения всех процессов). Oracle (ранее Sun) Solaris является примером варианта System V (Solaris также поставляет отдельный psисполняемый файл в каталоге, который не используется по умолчанию PATHдля приложений, написанных с учетом BSD).

Когда Linux появился на сцене, люди, которые его использовали, часто имели опыт работы с тем или иным вариантом Unix. Иногда Linux делал что-то в стиле System V, иногда в BSD, иногда по-своему, либо исходя из технических соображений, либо исходя из опыта и вкусов тех, кто реализовывал эту функцию. psКоманда Linux начиналась с BSD-подобных опций, например, ps aeдля отображения всех процессов и включения переменных среды в листинг. Со временем (в конце 1990 - х годов, я не помню точно когда), авторы для Linux psдобавлены опции для людей , которые были использованы для System V. Таким образом , сегодня либо ps axили ps -eперечислит все процессы под Linux, и есть даже переменная окружения ( PS_PERSONALITY) сделатьps вести себя более как различные старые Unix-варианты Unix, ради старых сценариев и людей с заданными привычками.

Людям, которые использовали несколько вариантов Unix, не нравилось, что им придется изменять свои программы и свои привычки при переходе с одного варианта Unix на другой. Поэтому была предпринята попытка стандартизировать подмножество функций. Это привело к стандарту POSIX (ведомому IEEE ), которому в целом следует Ubuntu. Первое издание, в которое входила psкоманда, вышло в 1992 году; этот не доступен онлайн, но выпуск 1997 года . Для этой psкоманды, как и во многих других случаях, POSIX принял System V способ действий.

В psстандартном синтаксисе командный является один , который совместит с System V и POSIX. Кроме того, можно сказать, что этот синтаксис является стандартным, поскольку он использует -параметры по умолчанию. Некоторые параметры существуют только в одном из двух синтаксисов; к счастью, они могут быть смешаны в одном вызове.

Вообще говоря, «BSD» против «System V» не имеет никаких технических последствий. Это относится к истории: «BSD» - это тот выбор, который BSD сделала в 1980-х годах и около того, «System V» - это любой выбор AT & T и их партнеров (особенно Sun). «POSIX» - это тот выбор, который сделал комитет по стандартизации IEEE.

Жиль "ТАК - перестань быть злым"
источник
2

«Стандартный» синтаксис, на который вы ссылаетесь, на самом деле является операционной системой GNU, которая была разработана в 1980-х годах. Основанные на GNU утилиты и философия были объединены с ядром Linux для разработки большинства современных дистрибутивов Linux (включая Ubuntu).

Операционная система BSD была разработана в конце 1970-х годов, независимо от GNU, а позже разветвлена ​​до современных версий, таких как FreeBSD или OpenBSD.

И GNU, и BSD вдохновлены Unix, и у них немного другая философия, синтаксис и т. Д.

Алекс Б
источник
0

Coreutils в Ubuntu - это набор приложений, поддерживаемых GNU, который включает в себя множество вещей (посмотрите на apt-cache show coreutils). BSD имеют свои собственные версии (GNU не совместима с лицензией BSD).

Хади
источник