Linux terminal za početnike: osnovne naredbe i shell skripte

Article Image

Početak rada sa Linux terminalom: šta možeš očekivati

Terminal je tekstualni način da upravljaš Linux sistemom — brzo, efikasno i često moćnije nego grafički alati. Kao početnik, primićeš prompt (npr. username@host:~$) u kojem upisuješ naredbe koje sistem izvršava. Svaka naredba ima oblik naredba [opcije] [argumenti], na primer ls -l /home. Kroz terminal možeš pristupiti fajlovima, instalirati programe, menjati dozvole i pisati skripte koje automatizuju zadatke.

Načini koji ti olakšavaju rad: koristi Tab za automatsko dovršavanje imena fajlova i naredbi, strelica gore za istoriju unetih naredbi, i Ctrl+C za prekidanje trenutne naredbe. Ako nisi siguran šta neka naredba radi, obično pomažu --help (npr. ls --help) ili man stranice (man ls).

Navigacija i osnovne operacije sa fajlovima

Pre nego što pišeš skripte, važno je da se osećaš komotno u fajl sistemu. Evo najčešće korišćenih naredbi i njihovih svrha:

  • pwd — prikazuje trenutni direktorijum (print working directory).
  • ls — lista fajlove i foldere. Korisne opcije: -l (detaljan prikaz), -a (prikaži skrivene fajlove).
  • cd — menja direktorijum (npr. cd /etc ili cd .. za povratak jedan nivo).
  • mkdir — kreira direktorijum (mkdir projekat).
  • touch — kreira prazan fajl ili ažurira timestamp (touch fajl.txt).
  • cp, mv, rm — kopiranje, premeštanje/preimenovanje i brisanje fajlova (budi pažljiv sa rm).
  • cat, less — prikaz sadržaja fajlova; less je koristan za veće fajlove.

Redirekcija i pipe su osnovni koncepti: simboli > i >> preusmeravaju izlaz u fajl, dok | šalje izlaz jedne naredbe kao ulaz drugoj (npr. ls -l | less).

Prvi koraci u pisanju shell skripti: struktura i pokretanje

Skripte ti omogućavaju da snimiš niz naredbi u fajl i izvršiš ih kao program. Najosnovnija struktura izgleda ovako: prva linija je shebang (npr. #!/bin/bash) koji govori koji tumač (shell) će pokrenuti skriptu. Primer koraka za pokretanje skripte:

  • Napraviti fajl, npr. moj_skript.sh.
  • U prvom redu upisati #!/bin/bash, zatim naredbe koje želiš automatizovati.
  • Dozvoliti izvršenje: chmod +x moj_skript.sh.
  • Pokrenuti skriptu: ./moj_skript.sh.

U narednom delu ćemo praktično napisati prve skripte sa promenljivima, uslovima i petljama, i objasniti kako da kombinuješ naredbe u složenije workflow-e.

Article Image

Promenljive, argumenti i zamena komandi

Promenljive u shell skriptama služe za čuvanje vrednosti koje onda koristiš u naredbama. Deklaracija je jednostavna — bez tipova: ime="Vrednost". Kada pristupaš vrednosti, koristiš prefiks $, npr. echo "$ime". Uvek navikavaj da koristiš navodnike "$var" kad očekuješ razmake ili posebne karaktere — to sprečava razdvajanje na više argumenata.

Korisne konstrukcije:

  • ${VAR:-zadano} — koristi zadano ako VAR nije postavljen.
  • ${VAR%pattern} i ${VAR#pattern} — skraćivanje prefiksa/sufiksa (jednostavna manipulacija stringom).
  • Komandna zamena: fajlovi=$(ls *.txt) ili stariji oblik `komanda`. Preporučuje se $(...) jer je čitljivije i podržava ugnježđavanje.

Argumenti prosleđeni skripti dostupni su kroz pozicione parametre: $1, $2, itd. Broj argumenata je u $#, a svi argumenti zajedno u $ ili $@ (razlika: "$" spaja sve u jedan string, "$@" čuva svaki argument kao zaseban). Primer proste provere i poruke pomoći:

if [ $# -lt 1 ]; then
  echo "Upotreba: $0 fajl1 [fajl2 ...]"
  exit 1
fi

Exit status svake komande se čuva u $?. Nulta vrednost znači uspeh, bilo koja druga označava grešku. Za robustnije skripte često se koriste opcije set na početku:

  • set -e — prekida skriptu pri prvoj grešci.
  • set -u — greška ako koristiš nepostavljenu promenljivu.
  • set -x — prikazuje svaku izvršenu naredbu (korisno za debug).

Uslovi, petlje i funkcije: upravljanje tokom izvršavanja

Kontrolni tok omogućava donošenje odluka i ponavljanje zadataka. Najčešći konstrukt je if:

if [[ -f "$1" ]]; then
  echo "Fajl postoje: $1"
elif [[ -d "$1" ]]; then
  echo "Direktorijum: $1"
else
  echo "Ne postoji: $1"
fi

Koristi [[ ... ]] za naprednije poređenja (podržava regex i manje zamke sa navodnicima). U [ ... ] (test) obraćaj pažnju na razmake: svaki element mora biti odvojen razmakom.

Petlje su najjednostavniji način da obradiš skup podataka:

  • For petlja: for fajl in *.log; do gzip "$fajl"; done.
  • Numerički opseg: for i in {1..5}; do echo $i; done.
  • While: while read -r linija; do echo "$linija"; done < fajl.txt — sigurno čitanje linija.
  • Until: radi dok uslov nije zadovoljen (until je suprotan while).

U skripti možeš definisati funkcije radi organizacije:

backup() {
  local src="$1"
  local dest="$2"
  cp -r "$src" "$dest"
  return $?
}

backup "/etc" "/tmp/etc.bak"

Korišćenjem local promenljivih smanjuješ rizik od kolizije imena. Funkcije vraćaju kod izlaza sa return (broj) ili koriste exit da izađu iz cele skripte.

Za naprednije upravljanje greškama koristi trap da obradiš prekide (npr. trap 'echo "Prekinuto"; exit 1' SIGINT) i kombinuješ set -euo pipefail (ako tvoj shell podržava pipefail) za strožiju kontrolu izvršavanja.

U sledećem delu preći ćemo na praktične primere kombinovanja naredbi, rad sa fajl sistemom i sigurnosne prakse pri pisanju skripti.

Za kraj praktičnog dela — kad počneš da kombinuješ naredbe, fokusiraj se na bezbednost i ponovljivost: koristi preusmeravanja i pipe-ove za obradu toka podataka, testiraj skripte na probnim fajlovima pre nego što ih pokreneš nad važnim podacima, i koristi verzionisanje (npr. git) za praćenje promena. Alati kao što su grep, sed, awk i xargs su vrlo moćni u kombinaciji sa osnovnim naredbama, ali vežbaj postupno i uvek prave testove pre masovnog izvršavanja.

Article Image

Dalje učenje i preporuke

Umesto rezimea, evo praktičnih koraka koje možeš odmah da primeniš kako bi unapredio znanje:

  • Napravite malu kolekciju kratkih skripti (backup, čišćenje logova, obrada CSV) i testirajte ih redovno.
  • Koristi opcije kao što su set -euo pipefail i trap da podigneš robusnost skripti.
  • Čitaj zvaničnu dokumentaciju i tutorijale — dobar početak je Bash Reference Manual za dublje razumevanje sintakse i ponašanja.
  • Primenjuj principe najmanjih privilegija pri radu sa fajlovima i automatskim zadacima (cron/systemd timers).

Redovna praksa i male, konkretne skripte su najbrži put da stekneš sigurnost u radu sa Linux terminalom.

Frequently Asked Questions

Zašto treba stavljati promenljive u navodnike kada ih koristim u naredbama?

Navođenje promenljivih sprečava word splitting (razdvajanje po razmacima) i globbing (širenje zvezdice u imena fajlova). Ako promenljiva sadrži razmake ili posebne znakove, bez navodnika će se tretirati kao više argumenata ili će se zvezdice proširiti — što često dovodi do grešaka. Dakle, koristi “$var” kada očekuješ nepredvidive sadržaje.

Šta znači set -euo pipefail i zašto bih to koristio u skripti?

Ove opcije povećavaju sigurnost izvršavanja: -e prekida skriptu na prvoj grešci, -u prijavljuje upotrebu neinicijalizovanih promenljivih, -o pipefail (ako je podržano) čini da cev (|) vraća neuspeh ako bilo koja komanda u cevnom nizu ne uspe. Kombinacija pomaže da greške ne prođu neprimećeno i da skripta ne nastavi u nepovoljnim uslovima.

Koja je razlika između “$*” i “$@” i kada koristiti koji?

“$*” spaja sve pozicione argumente u jedan string razdvojen prvim karakterom iz IFS (obično razmak), dok “$@” tretira svaki argument kao zaseban element (značajno kada se prosleđuju dalje u petlje ili kao parametri drugim komandama). U većini scenarija gde treba sačuvati granice argumenata, koristi “$@”.