Ukazi in spretnosti lupine Linux
Bash skriptiranje: od 'deluje na moji škatli' do produkcije
Bash si prisluži svoje mesto, ko je naloga lepljiva: orkestriraj ukaze, prepiraj preprosto besedilo in ostani v celoti na polju. Njegov ugled v panogi izvira iz pristanka, ne zaradi ideje: nepreizkušeni cevovodi, poslani v cron na strežniku, kjer je bila ena spremenljivka nenastavljena ali je eno ime datoteke imelo presledek. Disciplina je mehanska in poceni ter ima štiri dele: strogi način, navajanje, lupinsko preverjanje in beleženje načina, na katerega bodo operaterji to prebrali pozneje.
Ključne točke
- Vsak resen skript se odpre z set -euo pipefail: nenastavljene spremenljivke ne uspejo, napake ukaza ustavijo skript, cevovod leži na površini; brez tega napake tiho minejo, dokler ne dosežejo proizvodnje.
- Spremenljivke v narekovajih in zamenjave ukazov: "$var" in "$(cmd)"; delitev besed na presledke je klasika vseh časov in igranje IFS, ki ga priporočajo nekatera spletna mesta, je hrošč, ki si ga želite zapomniti.
- Razširitev oklepaja se zgodi pred spremenljivkami: rm -rf "${CLEANUP:?}"/{a,b} z nenastavljenim CLEANUP se razširi drugače, kot je bilo predvideno, in odstrani stvari, ki ste jih želeli obdržati; Preverjanja ${VAR:?} so idiom rm-safety, ki se ga je vredno enkrat naučiti.
- shellcheck si prisluži svoje mesto ob vsaki spremembi: lovi kroglice brez narekovajev, nedosegljivo kodo in vzorce 'za f v $(ls)', ki pojedo imena datotek s presledki; zaženite ga v CI in hrošči prenehajo doseči cron.
- Začasno delo in čiščenje sta seznanjena: TMP=$(mktemp -d), prestrezanje 'rm -rf "$TMP"' EXIT in brez osirotelih scratch dirs plus brez 'if error then remove' na vsaki veji.
- Preberite zanke na varen način: medtem ko IFS= read -r -d '' f obravnava imena datotek z novimi vrsticami in presledki prek find -print0; 'for f in $(ls)' so zastavice za lupino preverjanja napak in stari skripti še vedno povsod.
- Izhodne kode in dnevniki se pogovarjajo z operacijami: odmev napak v stderr (>&2) z umetniškim imenom, izhod, ki ni enak nič, ob resnični napaki in pustite, da vam cron-ova pošta ali dnevnik pokaže eno vrstico, ki jo dejansko potrebujete ob 3. uri zjutraj.
- Zgodnje stopnjevanje: razčlenjevanje JSON, tri in več ravni gnezdenja, klici HTTP ali katera koli logika stanja sodi v Python ali awk; bash, upognjen v splošni jezik, je tisto, kjer si je pridobil ugled.
Terenska beležka
Naša razširitvena brazgotina: rm -rf "${CLEANUP}"/{a,b} z nenastavljenim CLEANUP se je razširila točno tako, kot je želela lupina, ne namen. Vsaka taka pot zdaj nosi ${VAR:?} stražar in nihče ni plačal tega računa dvakrat.
Pogosta vprašanja
#!/bin/bash ali #!/usr/bin/env bash?
env zmaga med vsebniki in macOS namesti tam, kjer bash živi drugje; shebang je manj pomemben kot set -euo pipefail, ki je dejansko prisoten in shellcheck posreduje vsako spremembo.
Moj skript deluje ročno, vendar ne uspe v cronu. Zakaj?
Cron deluje z golim okoljem: PATH je kratka, ni profila za prijavo in relativne poti kažejo na napačen dom. Uporabite absolutne poti, izrecno nastavite PATH in obdržite bash -x replay za odpravljanje napak.
Bash ali Python za strežniške naloge?
Bash za cevovode, ki večinoma usmerjajo obstoječa sistemska orodja in ostanejo majhni; Python za strukturirane podatke, API-je in obravnavanje napak, ki morajo preživeti na klic. Prisiljevanje basha v igranje Pythona je način, kako incidenti dobijo imena.
Kako varno skriptiram brisanja?
Citirajte vsako spremenljivko, ciljajte samo na poti, ki jih ustvari mktemp, ali izrecno konfigurirane poti, zaženite z načinom suhega zagona, ki natisne, kar bi odstranil, in pustite ${VAR:?}, da varuje veto na spremenljivke, preden jih rm vidi.
Kako Kinetikatech pomaga s ukazi in spretnosti lupine linux
Ne morete postati eksperta za ukazi in spretnosti lupine linux: Ukazi in skriptne navade, ki odločajo, ali skrbnik upravlja strežnik ali se bori proti njemu: iskanje, preoblikovanje, prenos in nadzorovanje besedila in procesov z orodji, ki živijo v vsaki osnovni namestitvi. Nekatere za to obstaja Varnost strežnikov Linux in Upravljanje strežnikov: nastavitev, krepitev, monitoring in osebna strega dne in noči.