Как сделать ваши скрипты Bash аппаратными — CloudSavvy IT

Баш Шелл

Написание сценариев для запуска на разных компьютерах Linux — сложная задача. Вы не можете предположить, что у них будут одинаковые характеристики. Команда getconf позволяет вам проверять сотни значений операционной системы и файловой системы.

Скрипты с поддержкой оборудования

Если вы когда-либо писали сценарий, который должен работать на различных машинах Linux, вы, возможно, столкнулись с затруднительным положением «Странно, на моей машине он отлично работает…». Небольшие различия между компьютерной архитектурой, операционными системами и файловыми системами на целевых машинах могут помешать правильной работе ваших сценариев.

Если ваши сценарии просты и ничего из того, что они делают или не пытаются запустить, зависит от совместимого оборудования или определенных возможностей файловой системы, у вас может никогда не возникнуть проблемы. Но чем сложнее становится ваш сценарий, тем важнее становятся детали машины, на которой он работает. Также стоит отметить, что на одном компьютере может быть установлено несколько файловых систем, смонтированных в разных частях дерева каталогов. То, что что-то работает в одном каталоге, не означает, что оно будет работать так же в другом каталоге.

Команда getconf может сообщать буквально о сотнях различных характеристик операционных систем и файловых систем. Некоторые из них имеют форму пар значений, одна из которых удерживает системный максимум, а другая — минимум. Это означает, что вы можете протестировать параметры оборудования или файловой системы, чтобы убедиться, что ваш сценарий отреагирует соответствующим образом.

Конечно, ваш сценарий не может использовать getconf на целевом компьютере, если он не установлен на этом компьютере. Все дистрибутивы, которые были протестированы при исследовании этой статьи, имели уже установленный getconf, включая Ubuntu, Fedora и Manjaro. Интересно, что у всех была одна и та же версия getconf, версия 2.33.

Первые шаги с командой getconf

Вы можете проверить, установлен ли getconf на вашем компьютере, и узнать его версию, используя параметр —version.

getconf —version

Чтобы увидеть, сколько элементов может сообщить getconf, используйте параметр -a (all) и направьте его через команду wc. Это будет подсчитывать строки, слова и символы в выводе.

getconf -a | Туалет

На выходе 320 строк. Чтобы увидеть весь список в удобной форме, мы направим вывод в less.

getconf -a | меньше

Вы можете прокручивать список вперед и назад, чтобы увидеть, о чем может сообщить getconf.

Вывод команды getconv -a в программе просмотра файлов less

Некоторые предметы являются дубликатами. Многие из них могут называться более коротким именем или более длинным, совместимым с POSIX именем.

Отчетность по отдельным значениям

Чтобы getconf сообщал об одном значении, передайте имя значения getconf в командной строке. Обратите внимание, что все имена параметров указаны в верхнем регистре.

getconf LONG_BIT

Опция LONG_BIT сообщает о том, является ли ваше ядро ​​- и, следовательно, ваша операционная система — 32-битным или 64-битным. Для этой команды не требуются никакие другие параметры, только сама опция LONG_BIT. Еще одно простое значение для отчета — LOGIN_NAME_MAX.

getconf LOGIN_NAME_MAX

Это странно большая максимальная длина имени пользователя, но это правда. Если вы действительно хотели создать учетную запись пользователя с невероятно длинным именем, вы могли бы это сделать. В отличие от этого, имя хоста этого компьютера имеет максимальную длину 64 символа:

getconf HOST_NAME_MAX

Чтобы узнать, сколько одновременных процессов может запускать учетная запись пользователя, используйте параметр CHILD_MAX:

getconf CHILD_MAX

Значение OPEN_MAX возвращает максимальное количество файлов, которые процесс может открыть.

getconf OPEN_MAX

Чтобы увидеть подмножество getconfvalues, мы можем использовать параметр -a (all) для генерации всех значений и использовать grep для фильтрации тех, которые нам интересны. Например, чтобы увидеть каждое значение, имеющее «NAME» в его названии используйте:

getconf -a | grep ИМЯ

Аналогичным образом, чтобы увидеть все значения, содержащие «GROUP» в заголовке, используйте:

getconf -a | grep GROUP

Чтобы увидеть значения, в названии которых есть «INT_», используйте:

getconf -a | grep _INT

Здесь показаны максимальные и минимальные значения, которые целочисленная переменная может содержать на этом компьютере.

Использование getconf со значениями файловой системы

Когда вы используете какие-либо параметры, относящиеся к характеристикам файловой системы, вам необходимо указать getconf, о какой файловой системе он должен сообщать. Вам необходимо сделать это, даже если у вас установлен только один жесткий диск и одна файловая система. Команда getconf ничего не предполагает. Чтобы указать, о какой файловой системе должен сообщать getconf, вы должны указать путь к каталогу в этой файловой системе.

Чтобы узнать максимальную длину имени файла для файловой системы, смонтированной в корне дерева каталогов файловой системы, введите:

getconf NAME_MAX /

Чтобы увидеть результат для другой файловой системы, укажите каталог, расположенный в другой файловой системе. Даже если у вас нет различных файловых систем, постоянно смонтированных в дереве каталогов, вы можете обнаружить, что к дереву каталогов временно подключена другая файловая система.

Это именно то, что происходит, когда вы вставляете карту памяти USB, как в этом примере. Карта памяти называется «РОЗОВЫЙ» и устанавливается в «/ media / dave /».

getconf NAME_MAX / media / dave / PINK /

Мы можем проверить, какая файловая система находится на USB-накопителе, с помощью команды df, чтобы узнать, к какому блочному устройству он подключен. Затем мы используем команду lsblk с параметром -f (файловая система).

df / media / dave / РОЗОВЫЙ lsblk -f / dev / sdb1

Карта памяти — это блочное устройство / dev / sdb1, а файловая система — FAT32. Вот почему мы получим разные результаты для двух каталогов в одном дереве каталогов. Они находятся в одном дереве каталогов, но имеют разные файловые системы.

Использование getconf в скриптах

Мы можем легко включить вывод getconf в решения внутри наших сценариев оболочки.

Например, для выполнения различных действий в зависимости от того, запущен ли сценарий в 32-разрядной или 64-разрядной операционной системе, вы можете использовать такой раздел сценария.

#! / bin / bash # у нас 32- или 64-битная ОС? если [ $(getconf LONG_BIT) = «64» ]затем # 64-битное эхо «64-битная машина». else # 32-битное эхо «32-битная машина». фи

Оператор if сравнивает вывод команды getconf LONG_BIT со значением «64». Если они совпадают, выполняется предложение then, в противном случае выполняется предложение else. Вы можете либо выполнить действия, зависящие от версии, в then / elseclauses, либо установить флаги переменных, которые можно проверить в другом месте вашего скрипта.

Скопируйте текст сценария в редактор и сохраните файл как «hw-test.sh». Мы сделаем скрипт исполняемым с помощью команды chmod и параметра -x (исполняемый файл).

chmod + x hw-test.sh

Когда мы запускаем скрипт, он сообщает нам, какое из предложений было запущено. Используя эту технику, вы можете использовать любое из значений getconf, чтобы указать вашему скрипту выполнить соответствующее действие.

./hw-test.sh

Вариант Overkill

Огромное количество значений, которые может сообщить getconf, может быть огромным. Страница руководства на удивление краткая. Если вы ожидаете, что он перечислит варианты и объяснит каждый из них, вы будете разочарованы.

Вы найдете некоторые описания на страницах руководства для sysconf и confstr. Возможно, вам придется обрезать несколько символов перед записями confstr. Например, это не сработало:

getconf _CS_GNU_LIBC_VERSION

но это произошло:

getconf GNU_LIBC_VERSION

Вы также найдете некоторые описания в файле «limits.h». Если вы не знаете, где находится этот файл в вашей системе, используйте:

где limts.h

Затем вы можете использовать less для просмотра этого файла.

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *