Чим відрізняється стандартний синтаксис від 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отарги - це стояти на межі прірви, яку людина не мала знати.

Відповіді:


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 (у Вікіпедії є спрощена схема , яка далеко не повна). Зокрема, деякий час існували два основні струми: Система 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-х років я не пам'ятаю точно, коли), автори psдоданих варіантів Linux для людей, які звикли до 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-кеш-шоу coreutils). У BSD є свої версії (GNU не сумісний з ліцензією BSD).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.