10 korisnih shell skripte za administratore Linux terminala

Article Image

Zašto treba da koristite shell skripte u svakodnevnom administriranju sistema

Kao administrator Linux sistema, verovatno provodite mnogo vremena u terminalu izvršavajući ponovljive zadatke. Shell skripte vam omogućavaju da te zadatke automatizujete, smanjite broj grešaka i ubrzate rešavanje problema. U ovom vodiču naučićete kako da pišete praktične, bezbedne i održive skripte koje se lako integrišu sa sistemskim alatima kao što su cron, systemd i sudo.

Ne morate biti programer da biste počeli: osnovne skripte koriste jednostavne komande i logiku koja je česta u administratorskom radu. U nastavku razjasnićemo ključne principe, preporučene prakse i preduslove pre nego što počnete da primenjujete prve primere.

Osnovni zahtevi i dobra praksa pre pokretanja skripti

Pre nego što kreirate i pokrenete skriptu, proverite sledeće tačke. One će smanjiti rizik od grešaka i povećati prenosivost vašeg koda:

  • Shebang i prava: Svaka skripta treba da počinje sa shebang linijom (npr. #!/bin/bash ili #!/usr/bin/env bash) i da bude izvršna (chmod +x skripta.sh).
  • Testno okruženje: Prvo testirajte skriptu na neproduktivnom sistemu ili kontejneru kako biste izbegli neočekivane posledice.
  • Dnevnik i izlaz: Preusmeravajte važne poruke u log fajl (/var/log/vaša-skripta.log) i koristite standardni izlaz za rezultate i standardnu grešku za upozorenja.
  • Set opcije: Koristite set -euo pipefail za rigorozniju obradu grešaka i izbegavanje skrivenih neuspeha.
  • Portabilnost: Pišite u skladu sa POSIX-om kada je to moguće ili jasno dokumentujte zavisnost od Bash specifičnih funkcionalnosti.

Bezbednosne smernice i upravljanje privilegijama

Skripte često rade sa privilegijama sistema, zato je bezbednost presudna. Primenite sledeće smernice da biste zaštitili sistem i podatke:

  • Smanjite korišćenje root-a: Ne izvršavajte celu skriptu kao root bez potrebe — ograničite samo one delove koji zahtevaju povišene privilegije (koristite sudo za specifične komande).
  • Ne hardkodirajte lozinke: Koristite alatke poput sudoers sa NOPASSWD kada je opravdano ili čuvajte poverljive podatke u bezbednim menadžerima ključeva.
  • Validacija ulaza: Uvek proverite i očistite argumente skripte da biste izbegli injekcije komandi (koristite citiranje, -- za opcije i regex provere).
  • Upravljanje signalima: Koristite trap za stvaranje čistih završetaka (čišćenje privremenih fajlova, rollback akcije) kada skripta primi SIGINT ili SIGTERM.

Sa ovim pravilima i navikama bićete spremni da bezbedno i efikasno koristite shell skripte. U sledećem delu prelazim na konkretne primere: prvu grupu korisnih skripti koje odmah možete kopirati, prilagoditi i uvesti u svoje administrativne rutine.

Automatsko bekapovanje direktorijuma pomoću rsync-a

Jedna od najčešćih potreba administratora je pouzdan off-site ili lokalni backup. Najjednostavnije i najefikasnije rešenje je skripta zasnovana na rsync. Ključne tačke su: koristiti režim koji čuva permisije i linkove, logovati promene, i zaštititi se od istovremenih pokretanja.

Osnovni primer (napomene u komentarima):

#!/usr/bin/env bash
set -euo pipefail
SRC="/srv/www/"
DEST="/backup/www/"
LOG="/var/log/backup-www.log"
LOCK="/var/run/backup-www.lock"

exec 9>&1  # za lakše logovanje
flock -n 200 || { echo "Druga instanca radi"; exit 1; } 200>"$LOCK"

rsync -aHAX --delete --partial --progress --log-file="$LOG" "$SRC" "$DEST"

Objašnjenje i bezbednosne napomene: koristite flock ili PID fajl da sprečite paralelne instance. Testirajte bez --delete prvo, jer ta opcija briše ciljnu lokaciju da bi je sinhronizovala sa izvorom. Logujte u /var/log i rotirajte logove (videti odeljak o rotaciji). Ako backup zahteva povišene privilegije, ograničite sudo pristup samo na rsync komandu kroz sudoers.

Monitoring prostora na disku i obaveštavanje

Pre punjenja datotečnog sistema, skripta koja proverava zauzeće i šalje obaveštenje može izbeći kritične prekide servisa. Koristite df za ISO-percent i pošaljite samo kada je prag prekoračen.

#!/usr/bin/env bash
set -euo pipefail
THRESH=85
EMAIL="[email protected]"
MNT="/"
USAGE=$(df -P "$MNT" | awk 'NR==2 {gsub("%","",$5); print $5}')
if [ "$USAGE" -ge "$THRESH" ]; then
  echo "Disk $MNT zauzet $USAGE% (> $THRESH%)" | mail -s "Upozorenje: malo prostora" "$EMAIL"
fi

Za skalabilnija rešenja koristite webhook za Slack/Teams ili integraciju sa monitoring sistemom (Prometheus Alertmanager, Zabbix). Uvek validirajte ulaz (npr. da li je df uspeo) i logujte događaje. Ako šaljete mejl iz skripte, osigurajte da je MTA pravilno konfigurisan ili koristite sendmail/ssmtp klijent sa poverljivim kredencijalima čuvanim u zaštićenom fajlu.

Jednostavna rotacija log fajlova i čišćenje /tmp

Iako postoji logrotate, ponekad želite malu skriptu za ad-hoc rotaciju ili čišćenje privremenih direktorijuma pre punjenja particije. Sledeći primer rotira fajlove starije od 7 dana i čuva maksimum N arhiva.

#!/usr/bin/env bash
set -euo pipefail
DIR="/var/log/myapp"
KEEP=5
find "$DIR" -name "*.log" -mtime +7 -print0 | xargs -0 -r gzip -9
ls -1t "$DIR"/*.gz 2>/dev/null | tail -n +$((KEEP+1)) | xargs -r rm --

Za /tmp koristite find /tmp -mindepth 1 -maxdepth 1 -ctime +X -user root -exec rm -rf -- {} + ali budite izuzetno oprezni sa rm -rf. Uvek testirajte sa -ls/-print pre brisanja. Dodajte trap za čišćenje privremenih fajlova koje skripta sama stvara i koristite mktemp za bezbedne privremene fajlove.

Article Image

Završni saveti za sigurno i održivo korišćenje skripti

Kada uvedete skripte u proizvodno okruženje, fokusirajte se na bezbednost, praćenje i automatizaciju procesa umesto na ad-hoc rešenja. Uspostavite praksu verzionisanja skripti (git), testirajte promene u staging okruženju i automatizujte izvršavanje kroz cron ili systemd timere. Ograničite privilegije pomoću sudoers pravila, koristite sigurne mehanizme za čuvanje tajni i obezbedite rotaciju i arhiviranje logova.

  • Uvek dodajte robustan error handling (set -euo pipefail, trap) i detaljno logovanje.
  • Testirajte destruktivne opcije (npr. –delete kod rsync-a) na kopiji podataka pre primene.
  • Centralizujte obaveštavanje (e-mail, Slack, webhook) i integraciju sa monitoringom za bolje reagovanje.
  • Održavajte dokumentaciju i komentare direktno u skriptama; koristite čitljive nazive i strukturu direktorijuma.
  • Za dublje informacije o sinhronizaciji i opcijama rsync-a pogledajte rsync zvanična dokumentacija.

Frequently Asked Questions

Kako bezbedno testirati rsync skriptu bez rizika od brisanja podataka?

Pokrenite rsync u “dry-run” režimu sa opcijom –dry-run ili -n da vidite koje bi fajlove promenio, i testirajte prvo na maloj kopiji podataka. Uklonite ili izostavite –delete dok ne potvrdite da su destinacije tačne. Takođe, radite kopije i koristite pristup sa ograničenim privilegijama dok ne verifikujete ponašanje.

Kako sprečiti istovremeno pokretanje iste skripte?

Koristite mehanizme zaključavanja poput flock ili PID fajlova. Pozicionirajte lock fajl u /var/run ili sličan direktorijum i proveravajte ga na početku skripte; ako lock postoji ili flock ne može da zaključa datoteku, izlazite sa prikladnom porukom. systemd jedinice sa opcijom RefuseManualStart/RefuseManualStop i RestartSec takođe pomažu u kontroli instanci.

Koji je preporučeni način slanja mejlova iz skripte ako nemam lokalni MTA?

Umesto podešavanja punog MTA-ja, koristite lagane klijente kao što su ssmtp, msmtp ili direktne integracije sa SMTP serverom preko alata koji čuvaju akreditive u zaštićenim fajlovima (sa odgovarajućim dozvolama). Alternativno, pošaljite obaveštenja preko webhook-a (Slack, Teams) ili posredstvom monitoring sistema koji već ima konfigurisan transport mejlova.

Zašto treba da koristite shell skripte u svakodnevnom administriranju sistema

Kao administrator Linux sistema, verovatno provodite mnogo vremena u terminalu izvršavajući ponovljive zadatke. Shell skripte vam omogućavaju da te zadatke automatizujete, smanjite broj grešaka i ubrzate rešavanje problema. U ovom vodiču naučićete kako da pišete praktične, bezbedne i održive skripte koje se lako integrišu sa sistemskim alatima kao što su cron, systemd i sudo.

Ne morate biti programer da biste počeli: osnovne skripte koriste jednostavne komande i logiku koja je česta u administratorskom radu. U nastavku razjasnićemo ključne principe, preporučene prakse i preduslove pre nego što počnete da primenjujete prve primere.

Osnovni zahtevi i dobra praksa pre pokretanja skripti

Pre nego što kreirate i pokrenete skriptu, proverite sledeće tačke. One će smanjiti rizik od grešaka i povećati prenosivost vašeg koda:

  • Shebang i prava: Svaka skripta treba da počinje sa shebang linijom (npr. #!/bin/bash ili #!/usr/bin/env bash) i da bude izvršna (chmod +x skripta.sh).
  • Testno okruženje: Prvo testirajte skriptu na neproduktivnom sistemu ili kontejneru kako biste izbegli neočekivane posledice.
  • Dnevnik i izlaz: Preusmeravajte važne poruke u log fajl (/var/log/vaša-skripta.log) i koristite standardni izlaz za rezultate i standardnu grešku za upozorenja.
  • Set opcije: Koristite set -euo pipefail za rigorozniju obradu grešaka i izbegavanje skrivenih neuspeha.
  • Portabilnost: Pišite u skladu sa POSIX-om kada je to moguće ili jasno dokumentujte zavisnost od Bash specifičnih funkcionalnosti.

Bezbednosne smernice i upravljanje privilegijama

Skripte često rade sa privilegijama sistema, zato je bezbednost presudna. Primenite sledeće smernice da biste zaštitili sistem i podatke:

  • Smanjite korišćenje root-a: Ne izvršavajte celu skriptu kao root bez potrebe — ograničite samo one delove koji zahtevaju povišene privilegije (koristite sudo za specifične komande).
  • Ne hardkodirajte lozinke: Koristite alatke poput sudoers sa NOPASSWD kada je opravdano ili čuvajte poverljive podatke u bezbednim menadžerima ključeva.
  • Validacija ulaza: Uvek proverite i očistite argumente skripte da biste izbegli injekcije komandi (koristite citiranje, -- za opcije i regex provere).
  • Upravljanje signalima: Koristite trap za stvaranje čistih završetaka (čišćenje privremenih fajlova, rollback akcije) kada skripta primi SIGINT ili SIGTERM.

Sa ovim pravilima i navikama bićete spremni da bezbedno i efikasno koristite shell skripte. U sledećem delu prelazim na konkretne primere: prvu grupu korisnih skripti koje odmah možete kopirati, prilagoditi i uvesti u svoje administrativne rutine.

Automatsko bekapovanje direktorijuma pomoću rsync-a

Jedna od najčešćih potreba administratora je pouzdan off-site ili lokalni backup. Najjednostavnije i najefikasnije rešenje je skripta zasnovana na rsync. Ključne tačke su: koristiti režim koji čuva permisije i linkove, logovati promene, i zaštititi se od istovremenih pokretanja.

Osnovni primer (napomene u komentarima):

#!/usr/bin/env bash
set -euo pipefail
SRC="/srv/www/"
DEST="/backup/www/"
LOG="/var/log/backup-www.log"
LOCK="/var/run/backup-www.lock"

exec 9>&1  # za lakše logovanje
flock -n 200 || { echo "Druga instanca radi"; exit 1; } 200>"$LOCK"

rsync -aHAX --delete --partial --progress --log-file="$LOG" "$SRC" "$DEST"

Objašnjenje i bezbednosne napomene: koristite flock ili PID fajl da sprečite paralelne instance. Testirajte bez --delete prvo, jer ta opcija briše ciljnu lokaciju da bi je sinhronizovala sa izvorom. Logujte u /var/log i rotirajte logove (videti odeljak o rotaciji). Ako backup zahteva povišene privilegije, ograničite sudo pristup samo na rsync komandu kroz sudoers.

Article Image

Monitoring prostora na disku i obaveštavanje

Pre punjenja datotečnog sistema, skripta koja proverava zauzeće i šalje obaveštenje može izbeći kritične prekide servisa. Koristite df za ISO-percent i pošaljite samo kada je prag prekoračen.

#!/usr/bin/env bash
set -euo pipefail
THRESH=85
EMAIL="[email protected]"
MNT="/"
USAGE=$(df -P "$MNT" | awk 'NR==2 {gsub("%","",$5); print $5}')
if [ "$USAGE" -ge "$THRESH" ]; then
  echo "Disk $MNT zauzet $USAGE% (> $THRESH%)" | mail -s "Upozorenje: malo prostora" "$EMAIL"
fi

Za skalabilnija rešenja koristite webhook za Slack/Teams ili integraciju sa monitoring sistemom (Prometheus Alertmanager, Zabbix). Uvek validirajte ulaz (npr. da li je df uspeo) i logujte događaje. Ako šaljete mejl iz skripte, osigurajte da je MTA pravilno konfigurisan ili koristite sendmail/ssmtp klijent sa poverljivim kredencijalima čuvanim u zaštitћenom fajlu.

Jednostavna rotacija log fajlova i čišćenje /tmp

Iako postoji logrotate, ponekad želite malu skriptu za ad-hoc rotaciju ili čišćenje privremenih direktorijuma pre punjenja particije. Sledeći primer rotira fajlove starije od 7 dana i čuva maksimum N arhiva.

#!/usr/bin/env bash
set -euo pipefail
DIR="/var/log/myapp"
KEEP=5
find "$DIR" -name "*.log" -mtime +7 -print0 | xargs -0 -r gzip -9
ls -1t "$DIR"/*.gz 2>/dev/null | tail -n +$((KEEP+1)) | xargs -r rm --

Za /tmp koristite find /tmp -mindepth 1 -maxdepth 1 -ctime +X -user root -exec rm -rf -- {} + ali budite izuzetno oprezni sa rm -rf. Uvek testirajte sa -ls/-print pre brisanja. Dodajte trap za čišćenje privremenih fajlova koje skripta sama stvara i koristite mktemp za bezbedne privremene fajlove.

Završni saveti za sigurno i održivo korišćenje skripti

Kada uvedete skripte u proizvodno okruženje, fokusirajte se na bezbednost, praćenje i automatizaciju procesa umesto na ad-hoc rešenja. Uspostavite praksu verzionisanja skripti (git), testirajte promene u staging okruženju i automatizujte izvršavanje kroz cron ili systemd timere. Ograničite privilegije pomoću sudoers pravila, koristite sigurne mehanizme za čuvanje tajni i obezbedite rotaciju i arhiviranje logova.

  • Uvek dodajte robustan error handling (set -euo pipefail, trap) i detaljno logovanje.
  • Testirajte destruktivne opcije (npr. –delete kod rsync-a) na kopiji podataka pre primene.
  • Centralizujte obaveštavanje (e-mail, Slack, webhook) i integraciju sa monitoringom za bolje reagovanje.
  • Održavajte dokumentaciju i komentare direktno u skriptama; koristite čitljive nazive i strukturu direktorijuma.
  • Za dublje informacije o sinhronizaciji i opcijama rsync-a pogledajte rsync zvanična dokumentacija.

Testiranje, debagovanje i CI za skripte

Da biste smanjili regresije i ubrzali isporuku, uveste automatizovano testiranje i statičku analizu za vaše skripte. Počnite sa alatima kao što su shellcheck za otkrivanje uobičajenih problema i shfmt za konzistentno formatiranje. Za funkcionalne testove razmotrite bats-core koji omogućava pisanje jednostavnih testova koji se mogu pokretati u CI.

Praktični saveti za debagovanje i CI:

  • Pokrenite skriptu sa bash -n skripta.sh za sintakšku proveru pre izvršenja.
  • Koristite set -x ili dinamički uključite trace sa promenljivom okruženja (npr. DEBUG=1) i podesite PS4 za detaljnije logove.
  • Testirajte u izolovanom okruženju (Docker, LXC) i pokrijte slučajeve sa različitim privilegijama i fajl sistemima.
  • Automatizujte linting i testove u CI (GitHub Actions, GitLab CI) kako bi svaka promene prolazila kroz iste provere pre spajanja.
  • Napravite testne podatke i koristite privremene direktorijume (mktemp -d) da bi testovi bili idempotentni i sigurni.

Ovakav pristup smanjuje rizik pri uvođenju promena i omogućava brže i sigurnije održavanje skripti u proizvodnom okruženju.

Frequently Asked Questions

Kako bezbedno testirati rsync skriptu bez rizika od brisanja podataka?

Pokrenite rsync u “dry-run” režimu sa opcijom –dry-run ili -n da vidite koje bi fajlove promenio, i testirajte prvo na maloj kopiji podataka. Uklonite ili izostavite –delete dok ne potvrdite da su destinacije tačne. Takođe, radite kopije i koristite pristup sa ograničenim privilegijama dok ne verifikujete ponašanje.

Kako sprečiti istovremeno pokretanje iste skripte?

Koristite mehanizme zaključavanja poput flock ili PID fajlova. Pozicionirajte lock fajl u /var/run ili sličan direktorijum i proveravajte ga na početku skripte; ako lock postoji ili flock ne može da zaključa datoteku, izlazite sa prikladnom porukom. systemd jedinice sa opcijom RefuseManualStart/RefuseManualStop i RestartSec takođe pomažu u kontroli instanci.

Koji je preporučeni način slanja mejlova iz skripte ako nemam lokalni MTA?

Umesto podešavanja punog MTA-ja, koristite lagane klijente kao što su ssmtp, msmtp ili direktne integracije sa SMTP serverom preko alata koji čuvaju akreditive u zaštićenim fajlovima (sa odgovarajućim dozvolama). Alternativno, pošaljite obaveštenja preko webhook-a (Slack, Teams) ili posredstvom monitoring sistema koji već ima konfigurisan transport mejlova.