Linux команди и умения за командни обвивки
Bash скриптове: от „работи в моята кутия“ до производство
Bash печели мястото си, когато една задача е лепило: оркестрирайте команди, разправете прост текст и останете изцяло на кутията. Репутацията му в индустрията идва от кацането, а не от идеята: нетествани тръбопроводи, изпратени в cron на сървър, където една променлива не е зададена или едно име на файл има интервал. Дисциплината е механична и евтина и има четири части: строг режим, цитиране, shellcheck и регистриране на начина, по който операторите ще го прочетат по-късно.
Ключови точки
- Всеки сериозен скрипт се отваря с set -euo pipefail: ненастроените променливи са неуспешни, командните грешки спират скрипта, тръбопроводът лежи на повърхността; без него грешките преминават тихо, докато не достигнат до производство.
- Променливи в кавички и замествания на команди: "$var" и "$(cmd)"; разделянето на думи на интервали е класиката за всички времена, а IFS бъркането, което някои сайтове препоръчват, е грешка, която избирате да запомните.
- Разширяването на скоби се случва преди променливите: rm -rf "${CLEANUP:?}"/{a,b} с ненастроен CLEANUP се разширява по различен начин от предвиденото и премахва нещата, които сте искали да запазите; Проверките на ${VAR:?} са идиома за rm-безопасност, която си струва да научите веднъж.
- shellcheck печели своето място при всяка промяна: той улавя некотирани глобуси, недостижим код и шаблони „за f в $(ls)“, които изяждат имена на файлове с интервали; стартирайте го в CI и грешките спират да достигат cron.
- Временната работа и почистването са сдвоени: TMP=$(mktemp -d), прихващане 'rm -rf "$TMP"' ИЗХОД и без осиротели директории за издраскване плюс без пръски "ако е грешка, тогава премахнете" на всеки клон.
- Четенето зацикля по безопасния начин: докато IFS= read -r -d '' f обработва имена на файлове с нови редове и интервали чрез find -print0; 'за f в $(ls)' е флаговете за проверка на shellcheck за грешки и старите скриптове навсякъде все още носят.
- Кодовете за изход и регистрационните файлове говорят за операциите: ехо неуспехи към stderr (>&2) със сценично име, изход, различен от нула при реална повреда, и оставете пощата или журнала на cron да ви покаже единствения ред, от който всъщност се нуждаете в 3 сутринта.
- Ескалирайте рано: анализирането на 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 команди и умения за командни обвивки по трудния начин; ние се занимаваме с въвеждането, наблюдението и изненадите в три през нощта.