
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/bashili#!/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 pipefailza 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
trapza 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.

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/bashili#!/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 pipefailza 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
trapza 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š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.shza sintakšku proveru pre izvršenja. - Koristite
set -xili dinamički uključite trace sa promenljivom okruženja (npr.DEBUG=1) i podesitePS4za 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.
