NOC online · 24/7Longview, TX · +1 323 412 0665
KinetikatechServers · Security · Websites
RU

Команды Linux и навыки работы с оболочкой

Сценарии Bash: от «работы на моей машине» к производству

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

Главное

  1. Каждый серьезный скрипт открывается с помощью set -euo Pipefail: неустановленные переменные терпят неудачу, сбои команд останавливают скрипт, конвейер лежит на поверхности; без него ошибки проходят молча, пока не достигнут производства.
  2. Кавычки переменных и подстановки команд: «$var» и «$(cmd)»; разделение слов по пробелам — это классика на все времена, а возня с IFS, которую рекомендуют некоторые сайты, — это ошибка, которую вы хотите запомнить.
  3. Расширение скобок происходит перед переменными: rm -rf "${CLEANUP:?}"/{a,b} с неустановленной функцией CLEANUP расширяется не так, как предполагалось, и удаляет вещи, которые вы хотели сохранить; Проверки ${VAR:?} — это идиома rm-безопасности, которую стоит выучить один раз.
  4. Shellcheck зарабатывает свое место при каждом изменении: он выявляет некавыченные глобусы, недоступный код и шаблоны «for f в $(ls)», которые поглощают имена файлов с пробелами; запустите его в CI, и ошибки перестанут достигать cron.
  5. Временная работа и очистка объединены в пару: TMP=$(mktemp -d), ловушка 'rm -rf "$TMP"' EXIT, и никаких потерянных временных каталогов, а также никаких "если ошибка, то удалите" в каждой ветке.
  6. Чтение зацикливается безопасным способом: while IFS= read -r -d '' f обрабатывает имена файлов с символами новой строки и пробелами через find -print0; «for f in $(ls)» — это флаги проверки оболочки и старые скрипты, которые все еще присутствуют повсюду.
  7. Коды выхода и журналы говорят с операторами: отображайте ошибки в stderr (>&2) с этапным именем, выходите ненулевым при реальном сбое и позвольте cron mail или Journald показать вам одну строку, которая вам действительно нужна в 3 часа ночи.
  8. Эскалация на раннем этапе: синтаксический анализ JSON, более трех уровней вложенности, HTTP-вызовы или любая логика с отслеживанием состояния относятся к Python или awk; bash, превращенный в язык общего назначения, заслужил свою репутацию.

Заметка из практики

Наш шрам расширения скобки: rm -rf "${CLEANUP}"/{a,b} с неустановленной CLEANUP расширился именно так, как того хотела оболочка, а не намерение. На каждом подобном пути теперь стоит охрана ${VAR:?}, и никто не оплатил этот счет дважды.

Частые вопросы

#!/bin/bash или #!/usr/bin/env bash?

env выигрывает среди контейнеров и установок macOS, где bash находится где-то еще; shebang имеет меньшее значение, чем фактическое присутствие set -euo Pipefail и передача оболочки при каждом изменении.

Мой скрипт работает вручную, но не работает в cron. Почему?

Cron работает в чистой среде: PATH короткий, профиль входа отсутствует, а относительные пути указывают не на тот дом. Используйте абсолютные пути, явно задавайте PATH и сохраняйте воспроизведение bash -x для отладки.

Bash или Python для серверных задач?

Bash для конвейеров, которые в основном координируют существующие системные инструменты и остаются небольшими; Python для структурированных данных, API и обработки ошибок, которые должны работать при вызове. Заставить bash играть на Python — вот как инциденты получают имена.

Как безопасно выполнить удаление сценария?

Заключайте в кавычки каждую переменную, предназначайтесь только для путей, созданных mktemp или явно настроенных, запускайте в режиме пробного запуска, который печатает то, что будет удалено, и позволяйте ${VAR:?} охранять переменные, не установленные до того, как rm их увидит.

Как мы берём на себя команды linux и навыки работы с оболочкой

Вам не обязательно становиться экспертом в команды linux и навыки работы с оболочкой: Команды и сценарии сценариев, которые решают, управляет ли администратор сервером или борется с ним: поиск, преобразование, передача и контроль текста и процессов с помощью инструментов, которые есть в каждой базовой установке. Именно для этого и существует наша услуга Безопасность серверов Linux и Администрирование серверов — настройка, усиление защиты, мониторинг и живой человек на связи днём и ночью.

Поговорить с инженером

Проблема с сервером? Взломанный сайт? Медленная страница?

Критические инциденты с ответом в течение 30 минут — круглосуточно, 7 дней в неделю.

Запросить экстренную поддержку support@kinetikatech.com