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

Polecenia systemu Linux i umiejętności powłoki

Skrypty Bash: Od „pracy na moim pudełku” do produkcji

Bash zdobywa swoje miejsce, gdy zadanie jest sklejone: koordynuj polecenia, kombinuj z prostym tekstem i pozostań całkowicie na pudełku. Jego reputacja w branży wynika z lądowania, a nie z pomysłu: nieprzetestowane potoki wysłane do cron na serwerze, gdzie jedna zmienna nie została ustawiona lub jedna nazwa pliku zawierała spację. Dyscyplina ta jest mechaniczna i tania i składa się z czterech części: trybu ścisłego, cytowania, sprawdzania powłoki i rejestrowania w sposób, w jaki operatorzy będą to później czytać.

Kluczowe punkty

  • Każdy poważny skrypt otwiera się za pomocą set -euo pipefail: rozbrojenie zmiennych kończy się niepowodzeniem, błędy poleceń zatrzymują skrypt, potok leży na powierzchni; bez niego błędy przechodzą cicho, aż dotrą do produkcji.
  • Cytuj zmienne i podstawienia poleceń: "$var" i "$(cmd)"; dzielenie słów na spacje to klasyk wszechczasów, a majstrowanie przy IFS zalecane przez niektóre witryny to błąd, o którym decydujesz się pamiętać.
  • Rozwijanie nawiasów ma miejsce przed zmiennymi: rm -rf "${CLEANUP:?}"/{a,b} z wyłączoną funkcją CLEANUP rozwija się inaczej niż zamierzono i usuwa rzeczy, które miałeś zachować; Kontrole ${VAR:?} to idiom dotyczący bezpieczeństwa rm, którego warto się choć raz nauczyć.
  • sprawdzanie powłoki sprawdza się przy każdej zmianie: wychwytuje niecytowane glob, nieosiągalny kod i wzorce „for f w $(ls)”, które zjadają nazwy plików ze spacjami; uruchom go w CI, a błędy przestaną docierać do cron.
  • Praca tymczasowa i czyszczenie są sparowane: TMP=$(mktemp -d), pułapka 'rm -rf "$TMP"' EXIT i żadnych osieroconych katalogów tymczasowych oraz żadnych posypek „jeśli błąd, to usuń” na każdej gałęzi.
  • Odczyt pętli w bezpieczny sposób: while IFS= read -r -d '' f obsługuje nazwy plików zawierające znaki nowej linii i spacje poprzez find -print0; „for f in $(ls)” to błąd związany z flagami sprawdzania powłoki i starymi skryptami, które wszędzie są nadal obecne.
  • Kody zakończenia i dzienniki komunikują się z operacjami: echo błędów do stderr (>&2) z nazwą etapu, wyjdź z zerem w przypadku rzeczywistej awarii i pozwól, aby poczta lub dziennik cron pokazał Ci jedyną linię, której faktycznie potrzebujesz o 3 rano.
  • Eskaluj wcześniej: parsowanie JSON, ponad trzy poziomy zagnieżdżenia, wywołania HTTP lub dowolna logika stanowa należy do Pythona lub awk; bash przekształcony w język ogólnego zastosowania, to miejsce, w którym zapracowano na jego reputację.

Notatka z praktyki

Nasza blizna po rozszerzeniu nawiasu klamrowego: rm -rf "${CLEANUP}"/{a,b} z wyłączoną funkcją CLEANUP rozszerzyła się dokładnie tak, jak chciała powłoka, a nie zamierzenie. Na każdej takiej ścieżce obowiązuje teraz strażnik ${VAR:?} i nikt nie zapłacił tego rachunku dwa razy.

Częste pytania

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

env wygrywa w kontenerach i instalacjach macOS tam, gdzie bash działa gdzie indziej; shebang ma mniejsze znaczenie niż ustawienie -euo pipefail jest faktycznie obecny i sprawdzanie powłoki przekazuje każdą zmianę.

Mój skrypt działa ręcznie, ale nie działa w cron. Dlaczego?

Cron działa z gołym środowiskiem: PATH jest krótka, nie ma profilu logowania, a ścieżki względne wskazują na niewłaściwy adres startowy. Użyj ścieżek bezwzględnych, ustaw jawnie PATH i zachowaj bash -x replay na potrzeby debugowania.

Bash czy Python do zadań serwerowych?

Bash dla potoków, które w większości koordynują istniejące narzędzia systemowe i pozostają małe; Python do obsługi danych strukturalnych, interfejsów API i obsługi błędów, które muszą przetrwać na wezwanie. Zmuszanie basha do gry w Pythonie to sposób, w jaki incydenty zyskują nazwy.

Jak bezpiecznie wykonać skrypt usuwania?

Cytuj każdą zmienną, celuj tylko w ścieżki utworzone przez mktemp lub jawnie skonfigurowane, uruchom w trybie próbnym, który drukuje to, co by usunął, i pozwól strażnikowi ${VAR:?} zawetować rozbrojenie zmiennych, zanim rm je zobaczy.

Jak Kinetikatech pomaga w polecenia systemu linux i umiejętności powłoki

Rzeczowo: Polecenia i nawyki związane z tworzeniem skryptów, które decydują o tym, czy administrator obsługuje serwer, czy z nim walczy: przeszukuje, przekształca, przesyła i nadzoruje tekst i procesy za pomocą narzędzi znajdujących się w każdej podstawowej instalacji. Proszę przekazać to naszej usłudze Bezpieczeństwo serwerów Linux i Zarządzanie serwerami, a temat będzie zaopiekowany — rzetelna ocena, czyste wdrożenie i monitoring przez całą dobę.

Porozmawiaj z inżynierem

Problem z serwerem? Zhakowana strona? Wolna witryna?

Incydenty krytyczne w 30 minut — 24 godziny na dobę, 7 dni w tygodniu.

Poproś o wsparcie alarmowe support@kinetikatech.com