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

19

Я видел много команд, которые принимают «синтаксис 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?

    
задан M R R 18.06.2014 в 13:18
источник

4 ответа

17

В чем разница между 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) ) является fork другого пакета procps . Оба они лицензированы GPL. Это несовместимо с лицензией BSD, поэтому его нельзя включить. ( We может включать BSD, но не нужно).
  • ps достаточно специфично для ядра. Я считаю, что они технически несовместимы.

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

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

ps - не единственная команда POSIX, которая не является GNU . Их много.

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

    
ответ дан Oli 18.06.2014 в 13:35
источник
17

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

Команда ps восходит к одному из первых выпусков Unix (она не была в версии 1, самая ранняя страница man, которую я могу найти в Интернете, - от версия 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 way, иногда 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» vs «System V» не имеет никаких технических последствий. Это относится к истории: «BSD» - это любой выбор BSD, сделанный в 1980-х годах и около того, «System V» - это любой выбор ATT и их партнеров (особенно Sun). «POSIX» - это какой бы ни был выбран комитет по стандартизации IEEE.

    
ответ дан Gilles 18.06.2014 в 17:18
2

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

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

Оба GNU и BSD вдохновлены Unix, и у них немного разные философии, синтаксис и т. д.

    
ответ дан Alex B 18.06.2014 в 13:32
0

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

    
ответ дан Hadi 18.06.2014 в 17:18