Naredbeni redak u Linuxu

Izvor: HrOpenWiki
Inačica od 16:52, 5. listopada 2012. koju je unio/unijela Rpremuz (razgovor | doprinosi)

(razl) ←Starija inačica | vidi trenutačnu inačicu (razl) | Novija inačica→ (razl)
Skoči na: orijentacija, traži
Primjer konzole u desktop okruženju KDE.

Iako je Linux kao korisnički operacijski sustav u zadnje vrijeme jako napredovao i gotovo sve dnevne operacije mogu se napraviti iz grafičkog sučelja nekad je potrebno zasukati rukave u ući u naredbenu liniju (drugi nazivi su: Terminal, Konzola, XTerm, Shell, Ljuska...). Netko čak odlazi u naredbenu liniju jer mu je bolja i draža :-)

Princip funkcioniranja naredbene linije je vrlo jednostavan: imamo jednu aktivnu liniju u koju upisujemo naredbe. Naredbu pokrećemo pritiskom na tipku Enter. Kad se naredba izvrši i ispište se rezultat (ako naredba daje kakav ispis) dana je nova aktivna linija, a stara se pomakla prema gore. Krivo napisana naredba se može korigirati s tipkama Delete i Backspace. Možda princip neodoljivo podsjeća na pisanje teksta na računalu morate biti svjesni da je nemoguće mijenjati gornje neaktivne linije - samo aktivnu i to do pristiska Entera.

Program koji prevodi računalu što je korisnik unio preko naredbene linije zove se interpreter. Postoje više različitih interpretera za naredbenu liniju u Linuxu. Najpoznatiji i najrasporastranjeniji je Bash i mi ćemo ga ovdje koristit. Ostali su sh, ksh, csh, tcsh itd.

Najkorištenije Linux naredbe

Jedna naredba zaslužuje mjesto ispred svih ostalih, a to je naredba man (skraćeno od manual). Ona nam ispisuje pomoć o nekoj naredbi: opće informacije, kako je koristiti, koje argumente i parametre prima i na koji način te mnoge druge informacije. Naredbu koristimo tako da upišemo:

man neka_naredba

Kroz stranice te pomoći krećemo se s strelicama gore/dolje ili PageUp/PageDow, a izlazimo s slovom q. Svaku naredbu spomenutu u ovom tekstu možete bolje proučiti s man. Ako ne znamo ime programa, možemo ga potražiti uz pomoć naredbe man preko ključnih riječi vezanih uz traženi program:

[andy@localhost ~]$ man -k "copy file"
File::Copy []        (3)  - Copy files or filehandles
cp []                (1)  - copy files and directories
cp []                (1p)  - copy files
Još neke naredbe vezane uz pomoć: apropos, help, info.

Naredbena linija pamti svaku unesenu naredbu (do nekih 500 u prošlost) pa nam je poslije omogućeno traženje prijašnjih naredbi. Strelicama gore/dolje se pomičemo za jednu naredbu, stariju/noviju u toj listi (jedan klik gore nam daje zadnje unesenu naredbu).

Navigacija

Kada ste u naredbenoj liniji uvijek se nalazite na nekoj lokaciji unutar hijerarhije datotečnog sustava. U startu je to obično vaš home direktorij, skraćeno se označava s tildom ~. Da bi saznali gdje ste, odnosno koji je vaš trenutni radni direktorij, upišite pwd

[andy@localhost ~]$ pwd
/home/andy

Sad možemo promijeniti direktorij ili u daljnji poddirektorij ili u roditeljski direktorij sadašnjeg. Roditeljski direktorij se uvijek označava s dvije točke (..), a trenutni direktorij s jednom točkom (.). Spuštanje u roditeljski direktorij napravimo ovako:

cd ..

gdje je cd skraćeno od Change Directory, odnosno promijeni direktorij. Koristi se tako da se napiše cd ime_direktorija. Primjetite da naredba cd . nema previše smisla.

Da bi znali u koji poddirektorij želimo ići, pozvat ćemo prvo ispis svih datoteka i direktorija u trenutnom direktoriju s naredbom ls (dolazi od list).

[andy@localhost KM2]$ ls
kolokvij2.jpg  legenderova_transformacija.ggb  zadaci.pdf  Teorija

Dobro proširenje naredbe ls je ls -l - ispisuje sve isto, ali u stupcu i to s dodatnim informacijama (kao vremenu kreacije, dozvolama i vlasniku). Nastavak naredbe -l zove se argument (konkretnije: zastavica). Zastavice obično omogućuju da promijenimo ponašanje originalne naredbe. U ovom slučaju mi smo s -l zatražili detaljniji ispis liste. Običaj je kod svih programa da argumenti s jednim slovom se pozivaju s jednom crticom, a oni s više slova s dvije crtice, no ima iznimaka, zato obavezno provjeriti man naredbe. Ukoliko pozovemo više zastavica, možemo ih pisati sve zajedno, npr. umjesto ls -l -a pišemo ls -la.

Napokon smo našli ime poddirektorija u kojeg želimo ući i pišemo cd Teorija. Prvi hint: dovoljno je napisati samo cd T i ukoliko je to jedini direktorij koji počinje slovom T, pritisnemo tipku Tab na što će nam računalo nadopisati ostatak. Drugi hint: možemo napisati i cd T* u istom slučaju kao i za prvi hint, na što će računalo zamijeniti * s dostupnim nastavkom i izvršiti prvotnu naredbu. Zvijezdica (*) gdje god se u naredbenom retku primjeni zamjenjuje znak ili skupinu znakova, dok upitnik ? zamjenjuje točno jedan znak. Primjer: ako imamo u direktoriju u kojem se nalazimo dva poddirektorija Kuca i Kuhaca i unesemo naredbu cd Ku* računalo bi ušlo u oba direktorija da može (ali ne može, ući će u prvi po abecedi) jer Ku* može zamijeniti i Kuca i Kuhaca. ? i * su tzv. wildcards.

Ukoliko imamo ime datoteke ili direktorija koje se sastoji od dvije ili više riječi koje su odvojene razmakom nastaje mali problem. Ako doslovno prepišemo:

naredba ovo je ime datoteke

naredba će primati svaku od riječi posebno, a neće to shvatiti kao ime za jednu datoteku. U tom slučaju treba koristiti poseban znak ispuštač \ prije svakog razmaka (ukoliko želimo baš znak \, koristimo ga dva puta \\). Drugi pristup je da cijelo ime stavimo pod dvostruke navodnike:

naredba "ovo je ime datoteke"

Da ne bi sve išlo tako pješice, naredbe ne primaju samo imena datoteka ili direktorija, već i cijele puteve do njih. Ovo je primjer takozvanog kombo nastupa:

 cd /var/log/mail/

gdje nas cd odmah odvodi do tog mjesta. Kao što je već u hijerarhiji spomenuto / je oznaka za korijenski direktorij, odnosno onaj koji nema svog roditelja (naredba cd .. u njemu neće nigdje dalje otići). Iz / sve počinje.

Nešto o pretrazi. Klasično traženje datoteke ili direktorija možemo pokrenuti ovako:

find /home/andy/Documents -name riječ

Drugi argument označava mjesto na kojem treba tražiti (najširi uvjet u tom pogledu je dakako /). Postoji i brže traženje (gotovo trenutno) s locate riječ, gdje se pretražuje baza u kojoj su popisane sve datoteke, no da bi baza bila ažurirana potrebno je pokrenuti updatedb (i to s administratorskim ovlastima). Obje ovdje spomenute naredbe za pretragu je moguće koristiti s * i ?. Naredba which ime_programa nam otkriva gdje se izvršna datoteka tog programa i fizički nalazi.

Rad s datotekama i direktorijima

Počnimo s najopasnijom naredbom: naredba za brisanje - rm

Pripaziti!
rm -rf * je vrlo opasna kombinacija jer briše sve poddirektorije i datoteke rekurzivno, bez pitanja.
rm ime_datoteke

dolazi od remove i trajno briše označenu datoteku. Ekvivalent za direktorije je rmdir, ali radi samo ako je direktorij potpuno prazan, u obrnutoj situaciji koristiti rm -rf direktorij (briši direktorij i sve u njemu rekurzivno bez pitanja "Da li želite obrisati i ovo... i ovo... i ovo?). Jako oprezno s time jer su obrisani podaci uglavnom nepovratni.

Naredba za kopiranje cp(copy):

cp /jedan/put/do/datoteka1 /gdje/cu/kopiju/smjestiti/kopija_datoteke1

(isto je i s direktorijima). Pogledaj man cp za više.

Naredba mv (move) pomiće objekt s jednog na drugo mjesto (sintaksa ista kao i kod cp).

Želimo da se jedna datoteka nalazi i na nekom drugom mjestu, ali tako da je to drugo mjesto samo putokaz (ili prečac) do prvotnog mjesta:

ln -s originalni_put odredišni_put_prečaca

gdje nam -s simbolizira soft, odnosno simboličku poveznicu (više man ln).

Rad s tekstualnim datotekama

Ekstenzija na datoteci u Unix svijetu ne znači puno, ona služi eventualno kao pomoć čovjeku u raspoznavanju o kojoj vrsti datoteka se radi. Naredba file datoteka nam vraća točno o kojem tipu datoteke se radi, npr.

[andy@localhost Ostalo]$ file polinomi.c
polinomi.c: ASCII C program text

Tekstualne datoteke nisu samo one s nastavkom .txt, već sve koje sadrže čitljivi tekst (slova, razmaci) kad ih otvorite kao tekst (op.a. malo kružna definicija - eh). Nasuprot tekstualnim, postoje i binarne datoteke (kada njih pokušate pročitati kao tekst dobijete hrpu nerazumljivih znakova i vjerojatno ćete trebati posegnuti za naredbom reset.

  • head ime_datoteke prikazuje nekoliko prvih redova unesene datoteke
  • tail ime_datoteke prikazuje kraj (nekoliko završnih redova) unesene datoteke
  • cat ime_datoteke ispisuje cijelu datoteku na ekran (ukoliko je prevelika, prekinite ispis s ctrl+c)
  • more ime_datoteke prikazuje datoteku stranicu po stranicu (Razmak za prebacivanje na sljedeću)

Osnovne operacije s naredbenim retkom

  • exit momentalno izlazi iz naredbenog retka
  • clear očisti sav ekran i aktivni redak za upis naredbi prebaci na vrh
  • reset nam čudesno ozdravi naredbeni redak (kada počne ispisivati nesuvisle znakove umjesto normalnih)

Pozivanje sistemskih programa i naredbi

  • reboot restarta računalo
  • shutdown -h now gasi računalo (isto kao i poweroff)
  • who ispisuje tko je sve prijavljen na trenutno raćunalo
  • passwd je naredba koja mijenja korisnikovu lozinku
  • su dolazi od Substitute User i koristi se tako da se napiše korisničko ime kao argument (su tata). Potrebno je unijeti i lozinku od tog korisnika. Za promjenu u root korisnika (administratora) pišemo su -. Pažnja: neke distribucije Linuxa imaju root korisnika isključenog (tada koristiti sudo - Super User DO).
  • mount postavlja podatkovni medij ili diskovnu particiju (u Linuxu je to neki virtualni uređaj) na određenu lokaciju u datotečnom sustavu gdje joj je moguće pristupiti, npr. mount /dev/sda2 /media/backup - /dev/sda2 je druga particija prvog diska, a /media/backup je mjesto gdje ćemo tu particiju postaviti. U slučaju da se radi o nestandardnim ili automatski neprepoznatim tipovima uređaja treba specificirati -t vrsta (npr. -t vfat za FAT32, -t ntfs-3g za NTFS particiju).

Pokretanje programa i skripti

Pod programom se ovdje misli samo na izvršnu datoteku koja pokreće cijeli željeni program (kao što su na operacijskog sustavu Windows datoteke s nastavkom exe). Osim programa postoje i tzv. skripte što se odnosi (uglavnom) na tekstualne datoteke pisane u nekom od skriptnih/dinamičkih programskih jezika (python, bash, php...). Skripte pokreće interpreter (onaj koji ih interpretira) i prevodi u bytecode koje računalo tada može izvršiti, za razliku od izvršnih datoteka koje su već otprije prevedene u računalu razumljiv kod pomoću prevodioca (eng. compiler).

Svaka izvršna datoteka (bilo skripta bilo program) se izvršava tako da se navede cijeli put (path) do nje, npr.

[user@localhost /]$ /usr/bin/whoami

ili relativan put do nje, npr. kada se nalazimo u direktoriju gdje i ta izvršna datoteka samo upišemo ./ ispred imena:

[user@localhost /]$ cd /usr/bin/
[user@localhost bin]$ ./whoami

Programi i skripte po načinu pokretanja se mogu podijeliti u dvije kategorije:

  • oni koji se nalaze u standardnim (ili nestandardnim), ali točno određenim, direktorijima za izvršne datoteke i skripte
  • oni koji se ne nalaze u takvih direktorijima

Svi programi i skripte koji se nalaze u prvoj kategoriji mogu se pokrenuti samo upisivanjem imena programa (bez ./ ili cijelog puta do njih), npr.

[user@localhost bin]$ whoami

Popis svih direktorija s takvim svojstvom (da se izvršne datoteke u njima mogu pokrenuti samo imenom) se dobiva ovom naredbom:

[user@localhost bin]$ echo $PATH
/usr/lib64/qt-3.3/bin:/usr/kerberos/bin:/usr/local/bin:/usr/bin:/bin:/usr/games:/usr/local/sbin:/usr/sbin:/sbin

U ovom primjeru se izlistao i već gore spomenuti /usr/bin direktorij i zato je bilo moguće pokrenuti program whois samo upisivanjem njegovog imena. Također, sve gore spomenute "naredbe" su zapravo programi ili skripte koji se nalaze unutar ovih standardnih direktorija za izvršne datoteke.

Programe iz obje kategorije je moguće pokretati na prvo navedeni način, a samo one iz prve na ovaj posljednji.

Još jedna stvar je bitan kod pokretanja izvršnih datoteka, a to je dozvola za ubij..., ups. pokretanje. Svaka izvršna datoteka mora imati postavljenu dozvolu execute da bi sustav dozvolio njezino pokretanje. Datoteka ne može sama sebi postaviti tu dozvolu (očito, jer se ne može ni pokrenuti), ali to eksplicitno radi korisnik:

[user@localhost bin]$ chmod u+x ime_izvršne_datoteke

gdje je chmod naredba koja mijenja dozvole nad datotekama i direktorijima, u+x znači da se postavi execute za vlasnika datoteke (ili samo +x za sve korisnike) tako da se datoteka može pokrenuti kao izvršna.

Popis CLI naredbi

Na ovom wikiju postoji popis CLI naredbi koje se češće koriste na Linuxu.

Literatura i reference