Какие стандартные команды доступны в каждом дистрибутиве на основе 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, я полагаю, что любая система управления конфигурацией была бы излишней для такого случая, если вы не хотите непрерывных проверок работоспособности и самовосстановления системы даже после первоначальной установки.
Вангелис Тасулас
@VangelisTasoulas, я так не думаю. В однопользовательской установке, такой как домашний компьютер, зачем вам это нужно? Управление конфигурацией было бы излишним, но также и проверка по сценарию против руководства. В сценарии, где у вас есть несколько блоков, для которых вы хотите обеспечить согласованность, сценарии не будут излишними, но ни один из них не будет управлять конфигурацией. Или вы разработчик программного обеспечения, просто желающий проводить проверки работоспособности во время установки пакета для вашего продукта? Да, это зависит от вашего сценария, но если вы хотите управлять своей конфигурацией, инструмент управления конфигурацией не является излишним. ;)
Wildcard
1
@Wildcard, когда я писал этот вопрос, я думал о последнем: просто хочу выполнить проверки работоспособности во время установки на одном компьютере, чтобы убедиться, что программное обеспечение будет работать правильно. Конечно, если вы хотите управлять несколькими серверами и распределенными развертываниями и т. Д., Я согласен, что управление конфигурацией - это путь в долгосрочной перспективе.
Вангелис Тасулас

Ответы:

41

К сожалению, нет никакой гарантии, что что-то будет доступно.

Тем не менее, большинство систем будет иметь GNU coreutils . Это само по себе обеспечивает около 105 команд. Вы, вероятно, можете положиться на них, если только это не встроенная система, которая может использовать BusyBox .

Вы также можете полагаться на bash , cron , GNU findutils , GNU grep , gzip , iproute2 , iputils , man-db , module-init-tools , net-tools , passwd ( passwd или shadow ), procps , tar и util- линукс .

Обратите внимание, что некоторые программы могут иметь некоторые различия между дистрибутивами. Например, /usr/bin/awkможет быть gawk или mawk . /bin/shможет быть тире или bash в режиме 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 и пакет procps . Обратите внимание, что /bin/shэто не всегда bash, это может быть оболочка с меньшим количеством функций, таких как одна из множества вилок пепла .

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

Если вы хотите, чтобы все было просто, запросите установку lsb_releaseпакета. Многие дистрибутивы имеют такой пакет, который включает все зависимости, требуемые LSB.

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

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

Существует большинство команд, если не все дистрибутивы Linux, и в этом отношении также будут предоставлены дистрибутивы Unix. Это обязательные команды, указанные в стандарте POSIX .

Большинство команд , которые цитируют ( cd, mkdir, ls, echo, grep, sed, awkи т.д.) из него. Исключением является pingWhiteWinterWolf, правильно прокомментированный.

jlliagre
источник
1
На самом деле pingне является частью POSIX ...
WhiteWinterWolf
На домашней странице POSIX говорится, что они фокусируются на обеспечении «переносимости приложений на уровне исходного кода» , т.е. Насколько я понимаю, они заинтересованы в системном API, поведении системы (включая оболочку) и командах, которые можно использовать для настройки, компиляции и установки приложения, а также для обработки его исходного кода.
WhiteWinterWolf
Они не заботятся о сетевых утилит ( «Конфигурация системы и наличие ресурсов» являются явно вне области видимости), так вездесущих команд , таких как ping, ifconfig, telnetи т.д. , не являются частью этого стандарта (ни какой - либо другой AFAIK, они просто достичь совместимости с «историческими реализациями» на основе максимальных усилий).
WhiteWinterWolf