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

Команди Linux і навички оболонки

Сценарії Bash: від «працює на моїй коробці» до виробництва

Bash отримує своє місце, коли завдання клейке: оркеструвати команди, сперечатися з простим текстом і залишатися повністю на коробці. Його галузева репутація походить від посадки, а не від ідеї: неперевірені конвеєри, завантажені в cron на сервері, де одна змінна не встановлена ​​або одне ім’я файлу містить пробіл. Дисципліна є механічною та дешевою, і вона складається з чотирьох частин: строгий режим, цитування, перевірка оболонки та журналювання, як оператори прочитають це пізніше.

Головне

  1. Кожен серйозний сценарій відкривається командою set -euo pipefail: невстановлені змінні не вдаються, помилки команд зупиняють сценарій, конвеєр лежить на поверхні; без нього помилки мовчазно проходять, поки не досягнуть виробництва.
  2. Перемінні в лапки та підстановки команд: "$var" і "$(cmd)"; Розбиття слів на пробіли – це класика всіх часів, а використання IFS, яке рекомендують деякі сайти, є помилкою, яку ви вирішуєте запам’ятати.
  3. Розгортання фігурних дужок відбувається перед змінними: rm -rf "${CLEANUP:?}"/{a,b} з невстановленим CLEANUP розширюється не за призначенням і видаляє те, що ви хотіли зберегти; Перевірки ${VAR:?} — це ідіома rm-safety, яку варто вивчити один раз.
  4. shellcheck займає своє місце при кожній зміні: він виловлює глобуси без лапок, недоступний код і шаблони «для f в $(ls)», які з’їдають імена файлів із пробілами; запустіть його в CI, і помилки перестануть досягати cron.
  5. Тимчасова робота та очищення поєднані: TMP=$(mktemp -d), перехоплення 'rm -rf "$TMP"' ВИХІД, і жодних загублених тимчасових каталогів плюс жодних розсипок "якщо помилка, то видаліть" на кожній гілці.
  6. Цикл читання безпечний спосіб: while IFS= read -r -d '' f обробляє імена файлів із символами нового рядка та пробілами через find -print0; «for f in $(ls)» — це прапорці перевірки оболонки та старі сценарії, які все ще містяться.
  7. Коди виходу та журнали говорять про операції: відтворюйте помилки в stderr (>&2) із ім’ям етапу, виходьте ненульовим у разі реальної помилки, і дозвольте пошті або журналу cron показати вам єдиний рядок, який вам справді потрібен о 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 фактично присутній і shellcheck передає кожну зміну.

Мій сценарій працює вручну, але не працює в cron. чому

Cron працює з чистим середовищем: PATH короткий, немає профілю входу, а відносні шляхи вказують на неправильний дім. Використовуйте абсолютні шляхи, явно встановіть PATH і збережіть bash -x replay для налагодження.

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

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

Як безпечно виконувати видалення сценаріїв?

Поставте в лапки кожну змінну, націлюйте лише створені mktemp або явно налаштовані шляхи, запустіть у режимі сухого запуску, який друкує те, що буде видалено, і дозвольте ${VAR:?} сторожу накласти вето на змінні, перш ніж rm їх побачить.

Допомога Kinetikatech: команди linux і навички оболонки

Чесно: більшість команд приходить до нас, попередньо спробувавши все самі: Команди та сценарії, які вирішують, чи керує адміністратор сервером, чи бореться з ним: шукайте, трансформуйте, пересилайте та контролюйте текст і процеси за допомогою інструментів, які присутні в кожній базовій установці. Служба Безпека серверів Linux та Адміністрування серверів існує, щоб не доводилося опановувати команди linux і навички оболонки гірким досвідом — налаштування, нагляд і нічні сюрпризи о третій беремо на себе.

Поговорити з інженером

Проблема із сервером? Зламаний сайт? Повільна сторінка?

Критичні інциденти — відповідь за 30 хвилин, цілодобово, 7 днів на тиждень.

Запросити екстрену підтримку support@kinetikatech.com