Table of Contents

Osnovne Linux naredbe

U ovom članku pokazat ćemo kako se koriste neke osnovne naredbe u Linuxu na koje se referenciramo u ostalim člancima

Ako nas zanimaju detalji korištenja bilo koje naredbe, u terminal možemo upisati:

man [ime naredbe] 

Ako želimo detalje sâme man (manual) naredbe, u terminal upisujemo

 man man 

Kažemo da Linux ima stablastu strukturu datotečnog sustava, dakle postoji jedan korijen iz kojeg se grana ostatak datoteka. Korijenski direktorij zove se root. Zapravo, struktura izgleda ovako:

root 
|_ ...
|_ home
  |_ korisnički_direktorij
  |_ još korisnika...

Vidimo da struktura zaista podsjeća na stablo.
Svako računalo može imati više korisnika i svatko od njih dobije svoj direktorij unutar home. Tako se njihovi podatci odvajaju jer svaki korisnik ima pristup samo svojem direktoriju. Kao običan korisnik nemamo pravo pristupa root direktoriju, već postoji jedan visokoprivilegiran “korisnik” koji to može. Njegov alias je superuser, a root se smatra njegovim korisnički direktorijem. Zato ima pristup svim ostalim direktorijima. Kad nam jednokratno zatrebaju njegova prava, možemo ih ostvariti tako da ispred željene naredbe dodamo sudo (superuser do). Sustav će nas zatim tražiti root lozinku i tako verificirati da nam smije dati ta prava. Sudo se koristi kad treba pristupiti nekim sustavskim datotekama koje su zaštićene, instalirati neke softvere i slično.

cd (change directory)

Uobičajeno operacijski sustavi imaju grafičko sučelje koje omogućuje pregled i uređivanje datoteka. Međutim, sve se to može ostvariti i određenim naredbama u terminalu. Da bismo posjetili neki direktorij koristimo naredbu cd. Kao i za sve ostale naredbe, ako nas zanimaju detalji njezina korištenja u terminal možemo upisati “man cd”. Ovdje ćemo pokriti ono što je važno za svakodnevno korištenje. Njezina sintaksa je:

cd [putanja do direktorija] 

Zašto nije dovoljno napisati naziv direktorija?
Upravo zbog stablaste strukture datoteka. Korijenski direktorij ima mnogo svojih poddirektorija, a svaki od njih može imati proizvoljno mnogo svojih poddirektrorija. Kad bi sustav morao pretraživati sve moguće kombinacije gdje bi se mogao nalaziti direktorij koji tražimo, proces bi bio iznimno spor. Uz to, moguće je i da dva direktorija imaju isti naziv pa u tom slučaju sustav ne bi znao kamo želimo ići.
Objasnimo funkcioniranje naredbe cd. Koristit ćemo ovakvu strukturu datoteka:

home
 |__ dir1
 |__ dir2
     |__ dir3

Dakle, unutar home direktorija nalaze se dir1 i dir2, a unutar dir2 je dir3. Recimo da se trenutno se nalazimo u home direktoriju. Ako želimo pristupiti direktoriju dir3, nije dovoljno napisati

cd dir3 

jer iz direktorija u kojem se trenutno nalazimo (home) ne vidi direktorij dir3. Kažemo da se oni ne nalaze na istoj razini. Naredba

cd dir1

radila bi bez problema jer se iz home direktorija vidi dir1. Za pristup nekom direktoriju koji nije na istoj razini (dakle poddirektoriju ili naddirektoriju), treba napisati njegovu lokaciju, odnosno putanju. Dakle, mogli bismo napisati:

cd home/dir2/dir3 

Ova će nas naredba prebaciti u traženi direktorij.
Također, koristi se i oznaka za home (~) tako da se može napisati i:

 cd ~/dir2/dir3

Mogli smo ući u direktorij dir1 i napisati istu naredbu, također bi radila.
Ovaj zapis putanje zove se apsolutna putanja jer je zapis neovisan o tome u kojem se direktoriju nalazimo. Međutim, datotečni sustav može sadržavati mnogo direktorija koji mogu biti duboko ugniježđeni pa ovaj način zapisa putanje zna biti nespretan. Zato postoji i relativna putanja. Ona se zadaje od trenutne lokacije. Za definiranje relativne putanje važne su ove oznake:

. oznaka trenutnog direktorija
.. oznaka naddirektorija
/ odvajanje direktorija u nizu

Dakle, ako se nalazimo u home direktoriju i želimo ući u dir3, relativna putanja je:

 cd ./dir2/dir3 

Pri čemu će naredba funkcionirati i bez oznake trenutnog direktorija:

cd dir2/dir3 

Uzmimo da smo u direktoriju dir3 i želimo pristupiti home. Dakle, želimo otići u prvi naddirektorij pa naredba glasi:

cd .. 

Ako pak želimo otići u direktorij dir1, prvo se pomaknemo u naddirektorij (home) i zatim u dir1, dakle pišemo:

 cd ../dir1 

Jedna često korištena funkcionalnost Linuxa je tzv. tab completion. Tijekom pisanja naredbe možemo stisnuti “Tab” i on će nam sâm dovršiti naredbu ako se može jednoznačno odrediti što slijedi. Dakle, ako krenemo pisati:

 cd home/dir2/ 

i stisnemo “Tab”, jedini direktorij u koji se možemo prebaciti je dir3, pa će se dodati taj nastavak na našu naredbu. Ako se ne može dopuniti cijela naredba, dodat će se samo ono što se može jednoznačno odrediti. Primjerice, ako napišemo:

 cd home/ 

i stisnemo Tab, naredba će se dopuniti do cd home/dir jer nazivi svih poddirektorija kreću s “dir”. Još jedan pritisak na Tab ponudit će nam dvije opcije u redu ispod i sad ćemo morati ručno upisati što zapravo želimo.
Ako zadamo putanju koja ne postoji, naredba vraća grešku.



pwd (print working directory)

Pwd je naredba koju koristimo kad želimo saznati u kojem se trenutno direktoriju nalazimo. Vratit će apsolutnu putanju.

Primijetimo razliku između putanje koju je vratio pwd i putanje koja piše pored korisničkog imena. Putanja koju vraća pwd kreće od home direktorija koji je “pravi” korijen datotečnog sustava, a ono što vidimo u terminalu kreće od našeg korisničkog direktorija. Razlog tomu je samo to što mi kao korisnik znamo koji je naš direktorij i nije potrebno da to piše pored našeg imena jer se podrazumijeva. S druge strane, naredba pwd mora vratiti isti rezultat neovisno o tome tko ju je pozvao.

ls (list)

Naredbu ls koristimo da bismo ispisali sadržaj direktorija. Ako je zadana bez ikakvih opcija, ispisat će nazive datoteka trenutnog radnog direktorija. Ako želimo ispis nekog drugog direktorija, pored naredbe pišemo putanju do tog direktorija (apsolutnu ili relativnu). Primjerice, ova će naredba ispisati sadržaj direktorija /var/lib.

 ls /var/lib 

Napomena: Nije isto zadati putanju s oznakom “/” ispred “var” i bez nje! Ako se zada s “/” na početku, to znači da putanju zadajemo apsolutno, dakle kreće se od home direktorija. Bez “/” putanja je zadana relativno, dakle mora se krenuti od direktorija koji nam je trenutno vidljiv.


Ako pokušamo ispisati sadržaj nečega što nije direktorij, rezultat će biti putanja do te datoteke od trenutnog radnog direktorija. Nekad nije jasno što je direktorij, a što datoteka pa ih na ovaj način možemo razlikovati. Prazan direktorij će samo dati prazan ispis. Pogledamo na primjeru. Struktura datoteka je:

folder
|__file.txt
|__subfolder
   |__one-more

Vidimo da je file.txt datoteka čija se putanja mijenja ovisno o tome gdje se nalazimo, dakle zadana je relativno. subfolder u sebi sadrži one-more, a po ispisu u idućoj naredbi vidimo da je to prazan direktorij.

Dodatne opcije

Naredbama se općenito mogu dodavati opcije (zastavice) kojima dodatno specificiramo što želimo od te naredbe. Naredba ls bez ikakvih dodatnih opcija ispisuje samo nazive datoteka. Ako dodamo opciju -a (--all) ispisat će se sve skrivene datoteke te oznaka trenutnog i naddirektorija. Opcija -l dodaje u ispis dopuštenja korisnika (čitanje, pisanje, izvršavanje), vlasnika datoteke i još neke informacije. Opcije se mogu ulančavati i redoslijed kojim su zadane ne utječe na izvođenje. Također, duga i kratka verzija opcija koriste se jednako.

rm (remove)

Za brisanje datoteka i direktorija koristimo naredbu rm. Sintaksa je:

rm [putanja_do_tražene_datoteke] 

Ako želimo obrisati direktorij, moramo koristiti dvije dodatne opcije. Prva je -r koja znači recursive, odnosno rekurzivno pozivanje naredbe za svaku datoteku u direktoriju. Opcija -f (--force) znači da se ne treba tražiti potvrda korisnika za brisanje svake datoteke posebno.

cp (copy)

Za kopiranje datoteka u Linuxu koristimo naredbu cp. Sintaksa je:

cp [putanja_do_originala] [nova_lokacija]/[novi_naziv] 

Dobra je funkcionalnost Linuxa što pri kopiranju možemo odmah zadati novi naziv datoteke. Ako zadržavamo isti naziv, ne treba ga pisati. Ako je original u trenutnom direktoriju, ne moramo pisati putanju, već samo naziv. No, ako želimo kopirati datoteku u trenutni direktorij, moramo staviti oznaku trenutnog direktorija, inače dobivamo grešku: Također, ako kopiramo direktorij, moramo dodati opciju -r kako bismo zadali da se naredba rekurzivno zove za svaku datoteku u direktoriju koji brišemo.

head i tail

Nekad ne želimo otvoriti datoteke u cijelosti, već nam trebaju samo početak ili kraj.
Kad želimo vidjeti samo određen broj linija s početka datoteke, koristimo naredbu head. Ako je zadana bez dodatnih opcija, prikazat će prvih 10 linija datoteke. Ako želimo neki drugi broj, zadajemo ga kao opciju. Tipično se ova naredba koristi kad imamo veliku datoteku čiji bi ispis u cijelosti trajao dugo, a ne treba nam. Zamislimo da smo pokrenuli neki program koji se izvršava nekoliko dana. Takvi programi tipično svoj ispis preusmjere u neku datoteku. Recimo da zatrebamo neku informaciju s početka izvođenja, primjerice kad smo ga točno pokrenuli ili koju smo verziju pokrenuli. Tada nam head naredba može pomoći. S druge strane, kad trebamo vidjeti samo nekoliko linija na kraju datoteke, koristimo naredbu tail. Isto kao i head, ako se zada bez opcija, prikazat će zadnjih 10 linija datoteke, a bilo koji drugi broj možemo zadati kao opciju pored naredbe. Tipično se koristi kad pokrećemo neki dugotrajan program koji ispisuje svoj napredak u neku datoteku. Ako želimo provjeriti je li došlo do napretka, treba nam samo kraj datoteke i tad ćemo iskoristiti tail.

Još neke naredbe

echoispis, ekvivalentno print() naredbi viših programskih jezika
catispis sadržaja datoteke u čitljivom formatu
mv [stari_naziv] [novi_naziv]preimenovanje datoteke
mkdir [putanja_do_novog_direktorija] stvaranje direktorija na zadanoj putanji

Izvori

[1] Linux man page