Які стандартні команди доступні в кожному дистрибутиві на базі Linux?


39

Я хотів би знати, які є стандартні команди, доступні в кожній системі Linux.

Наприклад, якщо ви отримуєте debian / ubuntu / redhat / suse / arch / slackware тощо, ви завжди знайдете команди, такі як:

cd, mkdir, ls, echo, grep, sed, awk, ping тощо

Я знаю, що деякі з згаданих команд є оболонками, але інші - ні, але вони все ще завжди є (на основі моїх знань та досвіду до цих пір).

З іншого боку, такі команди, як gawk, parted, traceroute та інші досить відомі команди, не встановлені за замовчуванням в різних дистрибутивах Linux.

Я робив різні пошуки в Інтернеті, але не знайшов прямої відповіді на це.

Мета полягає в тому, що я хотів би створити скрипт оболонки, і він повинен зробити деякі перевірки правильності наявності команд, що використовуються в скрипті, наявними в системі. Якщо ні, то він повинен запропонувати користувачеві встановити необхідні бінарні файли.


5
Лише підказка: " слід зробити кілька перевірок правильності наявності команд, що використовуються в скрипті, доступні в системі " дуже схоже на Autoconf .
sr_

Безумовно, випадок автоконфігурації ... або, можливо, його більш наукового родича, теорії обіцянок .
Wildcard

@Wildcard, я вважаю, що будь-яка система управління конфігурацією буде надмірною умовою для такого випадку, якщо тільки ви не хочете постійно перевіряти безпеку та самолікування системи навіть після початкової установки.
Vangelis Tasoulas

@VangelisTasoulas, я так не думаю. У налаштуваннях для одного користувача, таких як домашній комп'ютер, навіщо вам це сценарій? Управління конфігурацією було б надмірним, але це було б і через перевірку сценаріїв у порівнянні з посібником. У сценарії, коли у вас є декілька вікон, на яких ви хочете забезпечити послідовність, сценарії не будуть надмірними, але також не буде налаштовано управління. Або ви розробник програмного забезпечення просто хочете запустити перевірку стану безпеки під час встановлення пакета для вашого продукту? Так, це залежить від вашого сценарію, але якщо ви хочете керувати своєю конфігурацією, інструмент управління конфігурацією не буде зайвим. ;)
Wildcard

1
@Wildcard, Коли я писав це питання, я думав про останнє: просто хочу запустити перевірку стану безпеки під час встановлення на одній машині, щоб гарантувати, що програмне забезпечення буде належним чином працювати. Звичайно, якщо ви хочете керувати декількома серверами та керувати розподіленими розгортаннями тощо, тоді я погоджуюся, що управління конфігурацією - це шлях у довгостроковій перспективі.
Vangelis Tasoulas

Відповіді:


41

На жаль, немає жодної гарантії наявності нічого.

Однак більшість систем матимуть GNU coreutils . Одне лише близько 105 команд. Ви, напевно, можете покластися на тих, якщо це не вбудована система, яка може використовувати натомість BusyBox .

Ви, ймовірно, також можете покластися на bash , cron , GNU findutils , GNU grep , gzip , iproute2 , iputils , man-db , module-init-tools , net-tools , passwd ( passwd або тінь ), propps , tar та util- linux .

Зауважте, що деякі програми можуть мати деякі відмінності між дистрибутивами. Наприклад, /usr/bin/awkможе бути гаук або маук . /bin/shможе бути тире або удару в режимі POSIX . У деяких старих системах /usr/bin/hostнемає такого ж синтаксису, як версія BIND , тому може бути краще використовувати dig .

Якщо ви шукаєте певні стандарти, Linux Standard Base визначає деякі часто зустрічаються програми , але не всі дистрибутиви заявляють, що відповідають стандарту, а деякі роблять це лише якщо встановити додатковий пакет сумісності LSB. Як приклад цього, деякі системи, які я бачив, не мають lsb_releaseвстановлення за замовчуванням.

Крім цього, перелік команд, стандартизованих POSIX, може бути корисним.

Інший підхід до вашої проблеми полягає в упаковці сценарію, використовуючи пакувальні засоби кожного дистрибутива (наприклад, RPM для Red Hat, DEB для Debian тощо) та оголосити залежність від будь-яких інших програм або пакетів, які вам потрібні. Це трохи попрацює, але це означає, що користувачі побачать дружніше повідомлення про помилку, вказуючи їм не тільки те, чого не вистачає, а які пакунки потрібно встановити.

Більше інформації:


Пакет-і додавання залежностей -idea великий, б'є дайвінг в Autoconf руки вниз:)
SR_

2
чудова відповідь, я з усім згоден. я додав би додатковий крок обережності: врахуйте додаткові конкретні параметри конкретної версії команди, яку ви використовуєте ... вони можуть працювати не у всіх версіях (це сталося в проекті, в якому я працював).
JoséNunoFerreira

Я не думаю, що десь є файл простого тексту зі списком цих команд? pubs.opengroup.org/onlinepubs/9699919799/idx/utilities.html порівняно легко можна перетворити на це, але все ще не вистачає купки речей.
Ділан Ніколсон

7

У невбудованих системах Linux, як правило, можна розраховувати на більшість утиліт GNU:

плюс пакет util-linux та набір propps . Зауважте, що /bin/shце не завжди баш, це може бути оболонка з меншими можливостями, наприклад, одна з декількох вилок золи .

Standard Base Linux визначає набір загальних утиліт , з функціями , які , як очікуються , на всі відповідні системи. Ви також можете очікувати більшості утиліт, визначених POSIX . Помітним винятком є ​​те pax, що не є частиною встановлення за замовчуванням багатьох дистрибутивів.

Якщо ви хочете, щоб все було просто, попросіть встановити lsb_releaseпакет. У багатьох дистрибутивах є такий пакет, який охоплює всі залежності, необхідні LSB.

У вбудованій системі всі ставки вимкнено. Вбудовані системи Linux зазвичай працюють за допомогою BusyBox , але багато утиліт та функцій необов’язкові, тому ви можете бути впевнені в отриманні дуже мало.


6

Існує набір команд більшості, якщо не всіх дистрибутивів Linux, і, з цього приводу, також нададуть Unix-дистрибутиви. Це обов'язкові команди, визначені стандартом POSIX .

Більшість команд, які ви цитуєте (cd , mkdir, ls, echo, grep, sed, awkі т.д.) з нього. Виняток, pingяк справедливо прокоментував WhiteWinterWolf.


1
Насправді pingне є частиною POSIX ...
WhiteWinterWolf

На домашній сторінці POSIX зазначається, що вони зосереджені на забезпеченні "портативності додатків на рівні вихідного коду" , тобто. наскільки я розумію, вони зацікавлені в системному API, системній (включаючи оболонку) поведінці та командах, які можуть бути використані для налаштування, компіляції та інсталяції програми та обробки її вихідного коду.
WhiteWinterWolf

Вони не піклуються про мережевих утиліт ( «Конфігурація системи і наявність ресурсів» є явно поза області видимості), так всюдисущих команд , таких як ping, ifconfig, telnetі т.д. , не є частиною цього стандарту (жодної - якої іншої AFAIK, вони просто мета сумісності з "історичними реалізаціями" на основі найкращих зусиль).
WhiteWinterWolf
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.