Linux-kommandoer og skallferdigheter
Bash Scripting: Fra «works on my box» til produksjon
Bash får plass når en oppgave er limt: orkestrer kommandoer, krangle med enkel tekst og hold deg helt på boksen. Bransjens rykte kommer fra landingen, ikke ideen: uprøvde rørledninger sendt inn i cron på en server der én variabel var deaktivert eller ett filnavn hadde et mellomrom. Disiplinen er mekanisk og billig, og den har fire deler: streng modus, sitering, shellcheck og logging slik ops vil lese den senere.
Nøkkelpunkter
- Ethvert seriøst skript åpnes med set -euo pipefail: udefinerte variabler mislykkes, kommandofeil stopper skriptet, pipeline ligger på overflaten; uten det går feil stille til de når produksjon.
- Sitatvariabler og kommandoerstatninger: "$var" og "$(cmd)"; orddeling på mellomrom er tidenes klassiker, og IFS-fiklingen som noen nettsteder anbefaler, er en feil du velger å huske.
- Brace-utvidelse skjer før variabler: rm -rf "${CLEANUP:?}"/{a,b} med CLEANUP unset utvides annerledes enn tiltenkt og fjerner ting du mente å beholde; ${VAR:?}-sjekker er rm-sikkerhetsspråket som er verdt å lære en gang.
- shellcheck får sin plass ved hver endring: den fanger globs uten anførselstegn, uoppnåelig kode og 'for f in $(ls)'-mønstre som spiser filnavn med mellomrom; kjør den i CI og feilene slutter å nå cron.
- Temp-arbeid og opprydding er sammenkoblet: TMP=$(mktemp -d), trap 'rm -rf "$TMP"' EXIT, og ingen foreldreløse scratch dirs pluss ingen 'hvis feil så fjern'-dryss på hver gren.
- Lessløyfer på den sikre måten: mens IFS= read -r -d '' f håndterer filnavn med nye linjer og mellomrom via find -print0; 'for f in $(ls)' er bug shellcheck-flaggene og gamle skript overalt som fortsatt har med seg.
- Avslutningskoder og logger snakker til ops: ekkofeil til stderr (>&2) med et scenenavn, avslutt fra null ved reell feil, og la Crons post eller journal vise deg den ene linjen du faktisk trenger klokken 03.00.
- Eskaler tidlig: JSON-parsing, tre pluss-nivåer av nesting, HTTP-kall eller en hvilken som helst stateful logikk hører hjemme i Python eller awk; bash bøyd inn i et generelt språk er der ryktet ble fortjent.
Feltnotat
Vårt arr med ekspansjonsskinne: rm -rf "${CLEANUP}"/{a,b} med CLEANUP unset utvidet nøyaktig slik skallet, ikke intensjonen, ønsket. Hver sti som den bærer nå ${VAR:?}-vakten, og ingen har betalt den regningen to ganger.
Vanlige spørsmål
#!/bin/bash eller #!/usr/bin/env bash?
env vinner på tvers av containere og macOS-installasjoner der bash bor andre steder; shebang betyr mindre enn at euo pipefail faktisk er tilstede og shebang sender videre hver endring.
Skriptet mitt fungerer manuelt, men feiler i cron. Hvorfor?
Cron kjører med bart miljø: PATH er kort, det er ingen påloggingsprofil, og relative stier peker på feil hjem. Bruk absolutte baner, angi PATH eksplisitt, og behold bash -x replay for feilsøking.
Bash eller Python for serveroppgaver?
Bash for rørledninger som stort sett orkestrerer eksisterende systemverktøy og holder seg små; Python for strukturerte data, APIer og feilhåndtering som må overleve på vakt. Å tvinge bash til å spille Python er hvordan hendelser får navn.
Hvordan skripter jeg slettinger på en sikker måte?
Sitat hver variabel, mål kun mktemp-produserte eller eksplisitt konfigurerte baner, kjør med en tørrkjøringsmodus som skriver ut hva den ville fjerne, og la en ${VAR:?} gardere veto mot deaktiverte variabler før rm ser dem.
Slik hjelper Kinetikatech med linux-kommandoer og skallferdigheter
Dette gjør vi i dag: Kommandoene og skriptvanene som avgjør om en administrator driver en server eller bekjemper den: søk, transformer, overføring og overvåk tekst og prosesser med verktøyene som finnes i hver basisinstallasjon. Vår tjeneste Sikring av Linux-servere og Serveradministrasjon dekker alt, fra evaluering til implementering, overvåking 24/7 og nødinngriping i 30 minutter.