Я видел много команд, которые принимают «синтаксис 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?
Каково различие между 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's, но не нуждаемся к).ps
справедливо конкретное ядро. Я считаю, что они являются технически несовместимыми. Что относительно других приложений?
Большинство команд для соответствия POSIX прибывает из Ubuntu coreutils
пакет. Этот пакет представляет GNU в GNU/Linux, и это также - лицензируемый GPL. BSD поставляет свои собственные BSD-compatible-licensed, которые придерживаются POSIX, но являются не обязательно полностью тем же как их дубликатами GNU.
ps
не единственная команда POSIX, которая не является GNU. Существуют загрузки их.
Когда я веду с, почему они должны быть? Они различными людьми по очень, очень долгое время. Это - короткий ответ здесь.
Это относится ко времени несколько извилистой истории Unix (Википедия имеет упрощенную схему, которая является далекоотзавершенным ). В частности, некоторое время было два главных тока: System V, разработанная AT&T и BSD, разработанным в Калифорнийском университете, Беркли. Это было около начала 1980-х, задолго до Linux (1991), уже не говоря о Ubuntu (2004). Часто эти два тока принимали различные решения, и даже сегодня Вы найдете случайную ссылку на “System V” и варианты “BSD” или функции.
ps
команда датируется от одного из первых выпусков Unix (это не было в версии 1, самая ранняя страница справочника, которую я могу найти онлайн, от версии 5 (p.94) в 1974). В то время, ps
просто имел несколько опций, например ps a
отобразил бы все процессы вместо просто пользователя, и ps x
отобразил бы процессы без присоединенного терминала. Вы отметите, что опции не запускаются с -
: в то время, конвенция использования -
поскольку опции не были почти систематичны как он, сегодня, это была главным образом вещь для команд, которые взяли имена файлов в качестве нормальных аргументов.
Со временем, различные скрутки расширенного Unix ps
со значительно большим количеством опций. Вариант BSD принял решение сохранить исходный синтаксис без продвижения -
, и a
и x
все еще существуйте сегодня. Вариант System V принял решение принять синтаксическую конвенцию -
для опций и используемых различных букв (например, ps -e
отобразить все процессы). Oracle (раньше Sun) Солярис является примером варианта System V (Солярис также поставляет отдельное ps
исполняемый файл, в каталоге, который не находится на значении по умолчанию PATH
, для приложений, записанных с BSD в памяти).
В то время, когда Linux появился на сцену, у людей, которые использовали его, часто будет предшествующий опыт одного варианта Unix или другого. Linux иногда делал вещи System V путь, иногда путь BSD, иногда его собственный путь, или на основе технических соображений или на основе опыта и вкусов того, кто бы ни реализовал опцию. Linux ps
команда, начатая с подобными 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.
coreutils Ubuntu является набором сохраняемых GNU приложений, что inclues целая загрузка материала (смотрят на шоу способного кэша coreutils). BSDs имеют свои собственные версии (GNU не совместим с лицензией BSD).
'Стандартный' синтаксис, к которому Вы обращаетесь, является на самом деле операционной системой GNU, которая была разработана в 1980-х. Основанные на GNU утилиты и философия были объединены с ядром Linux для разработки большинства современных дневных дистрибутивов Linux (включая Ubuntu).
операционная система BSD была разработана в конце 1970-х, независимых от GNU, и позже перешла в современные дневные версии как FreeBSD или OpenBSD.
И GNU и BSD вдохновлены Unix, и у них есть немного отличающиеся основные положения, синтаксис, и т.д.