Linuxové příkazy
Bash Scripting: Od 'works on my box' až po produkci
Bash získá svůj slot, když je úkol lepidlem: zorganizovat příkazy, přetahovat jednoduchý text a zůstat zcela na krabici. Jeho reputace v oboru pochází z přistání, nikoli z myšlenky: netestované pipeline dodávané do cronu na serveru, kde jedna proměnná nebyla nastavena nebo jeden název souboru měl mezeru. Disciplína je mechanická a levná a má čtyři části: přísný režim, citování, kontrola shellu a protokolování tak, jak si to ops přečtou později.
Klíčové body
- Každý seriózní skript se otevírá příkazem set -euo pipefail: nenastavené proměnné selžou, selhání příkazů zastaví skript, potrubí leží na povrchu; bez něj chyby procházejí tiše, dokud nedosáhnou výroby.
- Citace proměnných a substituce příkazů: "$var" a "$(cmd)"; dělení slov na mezerách je klasika všech dob a šmejdění IFS, které některé weby doporučují, je chyba, kterou si chcete zapamatovat.
- Expanze složené závorky probíhá před proměnnými: rm -rf "${CLEANUP:?}"/{a,b} s nenastaveným CLEANUP expanduje jinak, než bylo zamýšleno, a odstraňuje věci, které jste chtěli zachovat; ${VAR:?} kontroly jsou rm-safety idiom, který stojí za to se jednou naučit.
- shellcheck si vydobyje své místo při každé změně: zachytí neuvozené globy, nedosažitelný kód a vzory 'for f v $(ls)', které požírají názvy souborů s mezerami; spustit v CI a chyby přestanou dosahovat cronu.
- Dočasná práce a čištění jsou spárovány: TMP=$(mktemp -d), trap 'rm -rf "$TMP"' EXIT a žádné osiřelé škrábací adresáře plus žádné posypání 'if error then remove' na každé větvi.
- Čtení smyček bezpečným způsobem: zatímco IFS= read -r -d '' f zpracovává názvy souborů s novými řádky a mezerami pomocí find -print0; 'for f v $(ls)' je bug shellcheck příznaky a staré skripty všude stále nosí.
- Výstupní kódy a protokoly mluví k operačním: echo selhání na stderr (>&2) s uměleckým jménem, ukončete nenulovou hodnotu při skutečném selhání a nechte cronův mail nebo journald, aby vám ve 3 hodiny ráno ukázal jeden řádek, který skutečně potřebujete.
- Eskalujte včas: analýza JSON, tři a více úrovní vnoření, volání HTTP nebo jakákoli stavová logika patří do Pythonu nebo awk; bash ohnutý do univerzálního jazyka je místem, kde si jeho pověst vysloužila.
Poznámka z terénu
Naše jizva po roztažení rovnátka: rm -rf "${CLEANUP}"/{a,b} s nenastaveným CLEANUP se rozvinula přesně tak, jak si shell, nikoli záměr, přál. Každá taková cesta nyní nese strážce ${VAR:?} a nikdo tento účet nezaplatil dvakrát.
Časté dotazy
#!/bin/bash nebo #!/usr/bin/env bash?
env vítězí mezi kontejnery a instalacemi macOS tam, kde bash žije jinde; na shebang záleží méně než na set -euo pipefail je skutečně přítomen a shellcheck předává každou změnu.
Můj skript funguje ručně, ale selže v cronu. Proč?
Cron běží s holým prostředím: PATH je krátká, neexistuje žádný přihlašovací profil a relativní cesty ukazují na nesprávný domov. Použijte absolutní cesty, nastavte PATH explicitně a ponechte bash -x replay pro ladění.
Bash nebo Python pro úlohy serveru?
Bash pro kanály, které většinou řídí stávající systémové nástroje a zůstávají malé; Python pro strukturovaná data, rozhraní API a zpracování chyb, které musí přežít při volání. Vynucení bashe hrát Python je způsob, jak incidenty získávají jména.
Jak mohu bezpečně odstranit skripty?
Citujte každou proměnnou, zaměřte se pouze na cesty vytvořené mktemp nebo explicitně nakonfigurované cesty, spusťte v režimu suchého běhu, který vypíše, co by odstranila, a nechejte veto veto ${VAR:?} proměnné, než je rm uvidí.
Jak Kinetikatech pomáhá s linuxové příkazy
Nabídka je jednoduchá: Příkazy a skriptovací návyky, které rozhodují o tom, zda správce provozuje server nebo s ním bojuje: prohledávejte, transformujte, přenášejte a dohlížejte na text a procesy pomocí nástrojů, které jsou součástí každé základní instalace. Svěřte to naší službě Zabezpečení linuxových serverů a Správa serverů a získáte kompletní pokrytí: seriózní posouzení, čisté nasazení, nepřetržitý monitoring.