Linux operativni sistem je nezaobilazan alat u svetu DevOps-a. Razumevanje njegovih osnova i tečno korišćenje komandne linije su fundamentalne veštine za svakog DevOps inženjera. Bilo da se radi o konfigurisanju servera, automatizaciji zadataka, implementaciji CI/CD pipeline-a ili rešavanju problema u produkciji, poznavanje Linuxa je ključno. Ovaj tutorijal će vas provesti kroz osnovne koncepte i praktične primere kako biste stekli samopouzdanje u radu sa Linux komandnom linijom.
DevOps filozofija promoviše automatizaciju, efikasnost i saradnju. Linux, sa svojom stabilnošću, fleksibilnošću i bogatim ekosistemom alata, savršeno se uklapa u ove principe. Većina serverskih infrastruktura, cloud okruženja i kontejnerskih platformi (poput Dockera i Kubernetes-a) zasnovana je na Linuxu. Stoga, duboko razumevanje Linuxa omogućava DevOps inženjerima da:
Linux je operativni sistem otvorenog koda, sličan Unixu, koji je postao dominantan u serverskom svetu. Postoji mnogo distribucija (distro-a) Linuxa, kao što su Ubuntu, CentOS, Debian, Red Hat Enterprise Linux (RHEL) i Fedora. Iako se razlikuju po paketskim menadžerima i nekim konfiguracionim detaljima, osnovne komande i principi su uglavnom isti.
Linux fajl sistem je hijerarhijski organizovan, počevši od korenskog direktorijuma (/). Razumevanje ove strukture je ključno za navigaciju i upravljanje fajlovima. Evo nekih važnih direktorijuma:
/: Korenski direktorijum, svi ostali direktorijumi su poddirektorijumi od /./bin: Binarni fajlovi (izvršni programi) koji su esencijalni za sistem (npr. ls, cp, mv)./etc: Konfiguracioni fajlovi za sistem i aplikacije./home: Domaći direktorijumi korisnika (npr. /home/korisnik)./var: Varijabilni podaci, kao što su logovi (/var/log), spool fajlovi, privremeni fajlovi./tmp: Privremeni fajlovi, obično se brišu pri restartu sistema./usr: Korisnički programi i biblioteke (npr. /usr/bin, /usr/lib)./opt: Opcioni softver trećih strana./dev: Fajlovi uređaja (hardvera)./proc: Virtuelni fajl sistem koji sadrži informacije o pokrenutim procesima i sistemskim resursima.Ove komande su osnova za interakciju sa Linux fajl sistemom:
pwd: Print Working Directory - prikazuje putanju do trenutnog direktorijuma. bash pwdls: List - prikazuje sadržaj direktorijuma.
ls -l: Detaljan prikaz (dozvole, vlasnik, veličina, datum).ls -a: Prikazuje sve fajlove, uključujući skrivene (koji počinju sa .).ls -lh: Detaljan prikaz sa veličinama fajlova u čitljivom formatu (npr. 1K, 234M).ls
ls -l
ls -a
ls -lhcd: Change Directory - menja trenutni direktorijum.
cd /putanja/do/direktorijuma: Prelazak na apsolutnu putanju.cd ime_direktorijuma: Prelazak na poddirektorijum.cd ..: Prelazak na nadređeni direktorijum.cd ~: Prelazak na domaći direktorijum korisnika.cd -: Prelazak na prethodni direktorijum.cd /var/log
cd ..
cd ~mkdir: Make Directory - kreira novi direktorijum. bash mkdir novi_direktorijumrmdir: Remove Directory - briše prazan direktorijum. bash rmdir prazan_direktorijumtouch: Kreira prazan fajl ili ažurira vreme poslednje izmene postojećeg fajla. bash touch novi_fajl.txtcp: Copy - kopira fajlove ili direktorijume.
cp fajl.txt novi_fajl.txt: Kopira fajl.cp -r direktorijum/ novi_direktorijum/: Rekurzivno kopira direktorijum.cp dokument.txt dokument_kopija.txt
cp -r projekat/ projekat_bekap/mv: Move - premešta ili preimenuje fajlove/direktorijume. bash mv stari_naziv.txt novi_naziv.txt mv fajl.txt direktorijum/rm: Remove - briše fajlove ili direktorijume.
rm fajl.txt: Briše fajl (traži potvrdu).rm -f fajl.txt: Briše fajl bez potvrde.rm -r direktorijum/: Rekurzivno briše direktorijum (traži potvrdu).rm -rf direktorijum/: Rekurzivno briše direktorijum bez potvrde (koristiti oprezno!).rm nebitan_fajl.txt
rm -rf opasan_direktorijum/cat: Concatenate - prikazuje sadržaj fajla na standardni izlaz. bash cat moj_fajl.txtless: Prikazuje sadržaj fajla po stranicama, omogućava skrolovanje. Pritisnite q za izlaz. bash less veliki_log.loghead: Prikazuje prvih 10 linija fajla (ili head -n X za X linija). bash head -n 5 konfiguracija.conftail: Prikazuje poslednjih 10 linija fajla (ili tail -n X za X linija).
tail -f log_fajl.log: Prati promene u fajlu u realnom vremenu (korisno za logove).tail -n 20 server.log
tail -f aplikacija.logRazumevanje kako se procesi pokreću i upravljaju je ključno za dijagnostiku i održavanje sistema.
ps: Process Status - prikazuje informacije o pokrenutim procesima.
ps aux: Prikazuje sve procese svih korisnika, uključujući procese bez kontrolnog terminala.ps aux | grep nginxtop: Prikazuje dinamički prikaz procesa u realnom vremenu, sortiran po iskorišćenosti CPU-a. Pritisnite q za izlaz. bash topkill: Šalje signal procesu da se zaustavi.
kill PID: Šalje TERM signal (graceful shutdown).kill -9 PID: Šalje KILL signal (forceful shutdown - koristiti samo ako kill ne radi).kill 12345
kill -9 54321htop: Interaktivni menadžer procesa (često nije instaliran po defaultu, ali je vrlo koristan). bash sudo apt install htop # Za Debian/Ubuntu sudo yum install htop # Za CentOS/RHEL htopModerni Linux sistemi koriste systemd za upravljanje servisima.
systemctl status ime_servisa: Proverava status servisa. bash systemctl status nginxsystemctl start ime_servisa: Pokreće servis. bash systemctl start apache2systemctl stop ime_servisa: Zaustavlja servis. bash systemctl stop dockersystemctl restart ime_servisa: Restartuje servis. bash systemctl restart sshdsystemctl enable ime_servisa: Omogućava servisu da se automatski pokrene pri podizanju sistema. bash systemctl enable jenkinssystemctl disable ime_servisa: Onemogućava automatsko pokretanje servisa pri podizanju sistema. bash systemctl disable tomcatBezbednost je ključna, a upravljanje korisnicima i njihovim dozvolama je osnovni deo toga.
whoami: Prikazuje ime trenutnog korisnika. bash whoamiid: Prikazuje ID-je korisnika i grupe. bash iduseradd: Kreira novog korisnika. bash sudo useradd -m -s /bin/bash novi_korisnikpasswd: Postavlja ili menja lozinku korisnika. bash sudo passwd novi_korisnikusermod: Menja atribute korisnika (npr. dodaje u grupu). bash sudo usermod -aG sudo novi_korisnik # Dodaje korisnika u sudo grupuuserdel: Briše korisnika. bash sudo userdel -r stari_korisnik # Briše korisnika i njegov domaći direktorijumgroupadd: Kreira novu grupu. bash sudo groupadd nova_grupagroupdel: Briše grupu. bash sudo groupdel stara_grupaLinux koristi sistem dozvola za fajlove i direktorijume koji se sastoji od tri tipa dozvola (čitanje, pisanje, izvršavanje) za tri kategorije (vlasnik, grupa, ostali).
Dozvole se mogu predstaviti simbolički (npr. rwx) ili numerički (oktalno).
| Dozvola | Numerička vrednost |
|---|---|
| r | 4 |
| w | 2 |
| x | 1 |
| - | 0 |
Primer: rwx r-x r-- (vlasnik ima sve, grupa čita i izvršava, ostali samo čitaju) prevodi se u 754.
chmod: Menja dozvole fajlova/direktorijuma.
chmod 755 skripta.sh: Postavlja dozvole rwxr-xr-x.chmod +x skripta.sh: Dodaje dozvolu izvršavanja.chmod 755 moj_skript.sh
chmod +x pokreni_me.shchown: Menja vlasnika i/ili grupu fajla/direktorijuma.
chown korisnik fajl.txt: Menja vlasnika.chown :grupa fajl.txt: Menja grupu.chown korisnik:grupa fajl.txt: Menja i vlasnika i grupu.chown -R korisnik:grupa direktorijum/: Rekurzivno menja vlasništvo za direktorijum i njegov sadržaj.sudo chown www-data:www-data /var/www/html
sudo chown -R ubuntu:ubuntu /home/ubuntu/projekatBash skripting je moćan alat za automatizaciju zadataka na Linuxu. Omogućava vam da kombinujete više komandi u jedan izvršni fajl.
Svaki bash skript počinje sa shebang linijom koja govori sistemu koji interpreter da koristi:
#!/bin/bashVarijable:
#!/bin/bash
IME="Svete"
echo "Zdravo, $IME!"Uslovi (if/else):
#!/bin/bash
BROJ=10
if [ $BROJ -gt 5 ]; then
echo "Broj je veći od 5."
else
echo "Broj je manji ili jednak 5."
fiPetlje (for/while):
#!/bin/bash
for i in 1 2 3 4 5;
do
echo "Broj: $i"
done
BROJAC=0
while [ $BROJAC -lt 3 ]; do
echo "Brojač: $BROJAC"
BROJAC=$((BROJAC + 1))
doneFunkcije:
#!/bin/bash
pozdrav() {
echo "Zdravo, $1!"
}
pozdrav "Svet"
pozdrav "DevOps"Ovaj skript će kreirati kompresovanu arhivu određenog direktorijuma i sačuvati je sa vremenskom oznakom.
#!/bin/bash
# Direktorijum za bekap
SOURCE_DIR="/var/www/html"
# Direktorijum gde će se čuvati bekapovi
BACKUP_DIR="/home/ubuntu/backups"
# Naziv bekap fajla sa vremenskom oznakom
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
BACKUP_FILE="web_app_backup_${TIMESTAMP}.tar.gz"
# Kreiranje bekap direktorijuma ako ne postoji
mkdir -p "$BACKUP_DIR"
echo "Pokrećem bekap direktorijuma: $SOURCE_DIR"
# Kreiranje kompresovane arhive
tar -czvf "$BACKUP_DIR/$BACKUP_FILE" "$SOURCE_DIR"
if [ $? -eq 0 ]; then
echo "Bekap uspešno kreiran: $BACKUP_DIR/$BACKUP_FILE"
else
echo "Greška prilikom kreiranja bekapa."
fi
# Brisanje starih bekapova (npr. starijih od 7 dana)
find "$BACKUP_DIR" -type f -name "web_app_backup_*.tar.gz" -mtime +7 -delete
echo "Stari bekapovi obrisani."Da biste pokrenuli ovaj skript:
backup.sh.chmod +x backup.sh../backup.sh.SSH (Secure Shell) je protokol za bezbedan remote pristup serverima. Korišćenje SSH ključeva umesto lozinki je standardna praksa u DevOps-u.
ssh-keygen -t rsa -b 4096 -C "vas_email@example.com"Ovo će kreirati dva fajla: id_rsa (privatni ključ) i id_rsa.pub (javni ključ) u direktorijumu ~/.ssh/.
ssh-copy-id korisnik@vas_server_ipOva komanda će kopirati vaš javni ključ na server i dodati ga u ~/.ssh/authorized_keys fajl, omogućavajući vam da se prijavite bez lozinke.
ssh korisnik@vas_server_ipCron je alat za zakazivanje zadataka na Linuxu. Koristi se za automatizaciju ponavljajućih zadataka, kao što su bekapovi, čišćenje logova ili pokretanje skripti.
crontab -eOvo će otvoriti cron tabelu u tekst editoru. Svaki red u cron tabeli predstavlja jedan zakazani zadatak.
Sintaksa je sledeća:
* * * * * komanda_za_izvrsavanje
| Polje | Opis | Dozvoljene vrednosti |
|---|---|---|
| 1 | Minut (0-59) | * ili 0-59 |
| 2 | Sat (0-23) | * ili 0-23 |
| 3 | Dan u mesecu (1-31) | * ili 1-31 |
| 4 | Mesec (1-12) | * ili 1-12 |
| 5 | Dan u nedelji (0-7, 0 i 7 su nedelja) | * ili 0-7 |
Primeri:
0 * * * * /home/ubuntu/skripta.sh: Pokreće skripta.sh svakog sata (u 0. minutu).0 2 * * * /home/ubuntu/backup.sh: Pokreće backup.sh svakog dana u 2 ujutru.0 0 * * 0 /home/ubuntu/weekly_report.sh: Pokreće weekly_report.sh svake nedelje u ponoć (nedelja).Da biste zakazali bekap skriptu koju smo ranije kreirali da se pokreće svakog dana u 3 ujutru, dodajte sledeći red u vašu cron tabelu:
0 3 * * * /home/ubuntu/backup.sh >> /var/log/backup.log 2>&1
>> /var/log/backup.log 2>&1 preusmerava standardni izlaz i greške u log fajl, što je dobra praksa za praćenje izvršavanja cron poslova.
Ovaj tutorijal je pokrio osnovne, ali ključne aspekte Linuxa i komandne linije koji su neophodni za svakog DevOps inženjera. Kontinuiranim vežbanjem i istraživanjem, produbićete svoje znanje i postati efikasniji u automatizaciji i upravljanju infrastrukturom. Zapamtite, komandna linija je vaš najmoćniji alat u DevOps svetu.
Autor: Manus AI Datum: 27. jul 2025.