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

Linux-komennot ja komentotulkkitaidot

Bash-käsikirjoitus: "toimii laatikollani" tuotantoon

Bash ansaitsee paikkansa, kun tehtävä on liimaa: orkestroi komentoja, kiistele yksinkertaista tekstiä ja pysyt täysin laatikossa. Sen maine alalla tulee laskeutumisesta, ei ajatuksesta: testaamattomat putkistot lähetettiin croniin palvelimella, jossa yksi muuttuja oli asettamatta tai yhdessä tiedostonimessä oli välilyönti. Kuri on mekaaninen ja halpa, ja siinä on neljä osaa: tiukka tila, lainaus, shellcheck ja kirjaaminen tapaan, jolla ops lukee sen myöhemmin.

Keskeiset kohdat

  • Jokainen vakava skripti avautuu komennolla set -euo pipefail: unset-muuttujat epäonnistuvat, komentovirhe pysäyttää komentosarjan, liukuhihna on pinnalla; ilman sitä virheet kulkevat hiljaa, kunnes ne saavuttavat tuotannon.
  • Lainausmuuttujat ja komentojen korvaukset: "$var" ja "$(cmd)"; Sanojen jakaminen välilyönnillä on kaikkien aikojen klassikko, ja joidenkin sivustojen suosittelema IFS:n vipu on virhe, jonka päätät muistaa.
  • Aaltosulkeiden laajennus tapahtuu ennen muuttujia: rm -rf "${CLEANUP:?}"/{a,b} CLEANUP unset laajenee eri tavalla kuin oli tarkoitettu ja poistaa asiat, jotka oli tarkoitus säilyttää; ${VAR:?} shekit ovat rm-safety idioomi, joka kannattaa opetella kerran.
  • shellcheck ansaitsee paikkansa jokaisessa muutoksessa: se saa kiinni lainaamattomia globeja, tavoittamatonta koodia ja 'for f in $(ls)' -malleja, jotka syövät tiedostonimiä välilyönneillä; Suorita se CI:ssä ja virheet lakkaavat saavuttamasta cronia.
  • Lämpötyö ja puhdistus ovat paritettuja: TMP=$(mktemp -d), trap 'rm -rf "$TMP"' EXIT, eikä orvoiksi jääneitä naarmuja eikä 'jos virhe, poista' sprinklejä jokaisessa haarassa.
  • Lukusilmukat turvallisesti: kun taas IFS= read -r -d '' f käsittelee tiedostonimiä rivinvaihdolla ja välilyönnillä käyttämällä find -print0; 'for f in $(ls)' on bugi shellcheck -liput ja vanhat skriptit ovat edelleen mukana kaikkialla.
  • Poistumiskoodit ja lokit puhuvat operaatioille: toista epäonnistumiset stderr:iin (>&2) taiteilijanimellä, poistu nollasta poikkeavasta todellisesta epäonnistumisesta ja anna cronin sähköpostin tai päiväkirjan näyttää sinulle tarvitsemasi rivi klo 3.00.
  • Eskaloi aikaisin: JSON-jäsennys, yli kolme sisäkkäistasoa, HTTP-kutsut tai mikä tahansa tilallinen logiikka kuuluu Pythoniin tai awkiin; Yleiskäyttöiseksi kieleksi taivutettu bash on paikka, jossa sen maine ansaittiin.

Kenttämuistiinpano

Laajennusarpimme: rm -rf "${CLEANUP}"/{a,b} ilman CLEANUP-asetusta laajeni juuri niin kuin kuori halusi, ei tarkoitus. Jokainen tällainen polku kantaa nyt ${VAR:?}-suojan, eikä kukaan ole maksanut sitä laskua kahdesti.

Usein kysytyt kysymykset

#!/bin/bash vai #!/usr/bin/env bash?

env voittaa säilöissä ja macOS-asennuksissa, joissa bash asuu muualla; shebangilla on vähemmän väliä kuin set -euo pipefailin olemassaolo ja shellcheck välittää jokainen muutos.

Skriptini toimii manuaalisesti, mutta epäonnistuu cronissa. Miksi?

Cron toimii paljaalla ympäristöllä: PATH on lyhyt, sisäänkirjautumisprofiilia ei ole ja suhteelliset polut osoittavat väärään kotiin. Käytä absoluuttisia polkuja, aseta PATH eksplisiittisesti ja pidä bash -x -toisto virheenkorjausta varten.

Bash tai Python palvelintehtäviin?

Bash putkille, jotka enimmäkseen ohjaavat olemassa olevia järjestelmätyökaluja ja pysyvät pieninä; Python strukturoidulle datalle, sovellusliittymille ja virheiden käsittelylle, joiden on selviydyttävä päivystyksen aikana. Bashin pakottaminen pelaamaan Pythonia on tapa, jolla tapaukset saavat nimiä.

Miten poistan komentosarjan turvallisesti?

Lainaa jokaista muuttujaa, kohdista vain mktemp:n tuottamiin tai eksplisiittisesti määritettyihin polkuihin, suorita kuivaustilassa, joka tulostaa sen, mitä se poistaisi, ja anna ${VAR:?}-suojan estää muuttujien asetukset ennen kuin rm näkee ne.

Näin Kinetikatech auttaa: linux-komennot ja komentotulkkitaidot

Olemme hoitaneet tätä satoja kertoja: Komennot ja komentosarjatavat, jotka ratkaisevat, käyttääkö järjestelmänvalvoja palvelinta vai taisteleeko sitä vastaan: etsi, muunna, siirrä ja valvo tekstiä ja prosesseja työkaluilla, jotka ovat jokaisessa perusasennuksessa. Palvelulla Linux-palvelinten tietoturva ja Palvelinten ylläpito saat täyden kierron: arvioimme, otamme käyttöön, seuraamme keskeytyksettä ja reagoimme 30 minuutissa tarvittaessa.

Puhu insinöörin kanssa

Ongelma palvelimella? Sivusto hakkeroitu? Lataus hidasta?

Kriittiset ongelmat ratkaistaan 30 minuutissa — ympäri vuorokauden, seitsemänä päivänä viikossa.

Pyydä hätätukea support@kinetikatech.com