Linux komandos ir apvalkalo įgūdžiai
„Bash“ scenarijus: nuo „veikia mano dėžutėje“ iki gamybos
Bash uždirba savo vietą, kai užduotis yra klijuojama: orkestruoja komandas, ginčijasi su paprastu tekstu ir lieka visiškai ant dėžutės. Jo pramonės reputacija kyla dėl nusileidimo, o ne idėjos: nepatikrinti vamzdynai buvo išsiųsti į cron serveryje, kur vienas kintamasis buvo nenustatytas arba viename failo pavadinime buvo tarpas. Ši disciplina yra mechaniška ir pigi, ją sudaro keturios dalys: griežtas režimas, citavimas, apvalkalo patikra ir registravimas, kaip operacinės sistemos tai perskaitys vėliau.
Pagrindiniai punktai
- Kiekvienas rimtas scenarijus atidaromas su set -euo pipefail: nenustatyti kintamieji nepavyksta, komandų gedimai sustabdo scenarijų, vamzdynas guli paviršiuje; be jo klaidos praeina tyliai, kol pasiekia gamybą.
- Cituoti kintamuosius ir komandų pakaitalus: "$var" ir "$(cmd)"; Žodžių skaidymas tarpais yra visų laikų klasika, o kai kuriose svetainėse rekomenduojamas IFS yra klaida, kurią pasirenkate prisiminti.
- Skliaustai išplečiami prieš kintamuosius: rm -rf "${CLEANUP:?}"/{a,b} su CLEANUP nustatymais išplečiamas kitaip nei numatyta ir pašalinami dalykai, kuriuos norėjote pasilikti; ${VAR:?} patikrinimai yra rm-safety idioma, kurią verta išmokti vieną kartą.
- shellcheck užsitarnauja savo vietą kiekviename pakeitime: ji sugauna necituojamas globas, nepasiekiamą kodą ir 'for f in $(ls)' šablonus, kurie suvalgo failų pavadinimus su tarpais; paleiskite jį CI ir klaidos nustos pasiekti cron.
- Laikinasis darbas ir valymas yra suporuoti: TMP=$(mktemp -d), trap 'rm -rf "$TMP"' EXIT, be našlaičių įbrėžimų ir jokių pabarsčių "jei klaida, pašalinkite" ant kiekvienos šakos.
- Skaitymo kilpos saugiai: tuo tarpu IFS= read -r -d '' f tvarko failų pavadinimus su naujomis eilutėmis ir tarpais per find -print0; 'for f in $(ls)' yra bug shellcheck vėliavėlės ir seni scenarijai vis dar yra visur.
- Išėjimo kodai ir žurnalai kalba apie operacijas: aidinkite nesėkmes į stderr (>&2) su sceniniu pavadinimu, išeikite iš nulio, jei tikra nesėkmė, ir leiskite cron paštui arba žurnalui parodyti vieną eilutę, kurios jums iš tikrųjų reikia 3 val.
- Išankstinė eskalacija: JSON analizavimas, trys plius įdėjimo lygiai, HTTP iškvietimai arba bet kokia būsenos logika priklauso Python arba awk; bash, paverstas bendrosios paskirties kalba, yra ta vieta, kur užsitarnavo jo reputaciją.
Pastaba iš praktikos
Mūsų petnešėlių išsiplėtimo randas: rm -rf "${CLEANUP}"/{a,b} su CLEANUP išjungta išsiplėtė tiksliai taip, kaip norėjo apvalkalas, o ne tikslas. Kiekvienas toks kelias dabar turi ${VAR:?} apsaugą, ir niekas tos sąskaitos nesumokėjo du kartus.
Dažniausiai užduodami klausimai
#!/bin/bash arba #!/usr/bin/env bash?
„env“ laimi konteineriuose ir „macOS“ diegimuose, kai bash gyvena kitur; shebang svarbu mažiau nei nustatytas -euo pipefail iš tikrųjų yra ir shellcheck perduoda kiekvieną pakeitimą.
Mano scenarijus veikia rankiniu būdu, bet nepavyksta cron. Kodėl?
„Cron“ veikia su tuščia aplinka: PATH trumpas, nėra prisijungimo profilio, o santykiniai keliai nukreipia į netinkamus namus. Naudokite absoliučius kelius, aiškiai nustatykite PATH ir derinimui palikite bash -x pakartojimą.
„Bash“ ar „Python“ serverio užduotims atlikti?
„Bash“ vamzdynams, kurie dažniausiai orkestruoja esamus sistemos įrankius ir išlieka nedideli; Python skirtas struktūriniams duomenims, API ir klaidų tvarkymui, kurie turi išlikti budėjimo metu. Priverčiant bash žaisti Python incidentai įgauna pavadinimus.
Kaip saugiai ištrinti scenarijus?
Cituokite kiekvieną kintamąjį, taikykite tik į mktemp sukurtus arba aiškiai sukonfigūruotus kelius, paleiskite sausojo paleidimo režimu, kuris atspausdina tai, ką pašalintų, ir leiskite ${VAR:?} apsaugai vetuoti panaikintus kintamuosius, kol rm juos nepamatys.
Kaip Kinetikatech padeda su linux komandos ir apvalkalo įgūdžiai
Tai sprendėme šimtus kartų: Komandos ir scenarijų rašymo įpročiai, kurie nusprendžia, ar administratorius valdo serverį, ar su juo kovoja: ieškokite, transformuokite, perkelkite ir prižiūrėkite tekstą bei procesus naudodami įrankius, esančius kiekviename baziniame diegime. Su Linux serverių sauga ir Serverių administravimas gaunate visą ciklą: vertiname, įgyvendiname, stebime nepertraukiamai ir reaguojame per 30 minučių, kai reikia.