GNU/Linux - 2. deo - Osnovne komande
Uvod
Nakon uvoda u tematiku GNU/Linux distribucija (i nakon pravilnog 'taloženja inormacija' pre preduzimanja daljih koraka :)), sledi upoznavanje sa osnovnim komandama za administraciju sistema.
Možemo reći da su čak i osnovne komande na UNIX-olikim operativnim sistemima veoma zanimljive same po sebi (i zaista tako smatramo), međutim, sasvim je moguće da mnogi čitaoci neće deliti izneti entuzijazam (na samom početku bavljenja Linux-om), i stoga - pre nego što se posvetimo izučavanju komandi - pokušaćemo da ponudimo praktičan način gledanja na stvari, koji vam možda nije padao na pamet do sada ....
Priprema
Sa jedne strane, osnovne komande (bilo kog) operativnog sistema, mogu delovati kao "gomila koječega, koja se ('eto') mora naučiti", ali, sa druge strane - u najpraktičnijem smislu - u pitanju su komande koje omogućavaju efikasno bavljenje 'konkretnijim' aktivnostima (programiranje, web dizajn, grafički dizajn i sl).
Shodno navedenom, predlažemo da osnovne UNIX komande (umesto kao "gomilu koječega"), radije shvatite kao "kolekciju dobro napisanih pomoćnih programa koji pouzdano obavljaju osnovne zadatke", odnosno (još praktičnije), predlažemo da savladavanje osnovnih komandi (umesto kao "kuluk"), shvatite isključivo kao dugoročnu investiciju u sopstveno obrazovanje - koja se i te kako isplati na duže staze.
Deluje da komandi ima "poprilično", međutim, pod uslovom da se trudite i da se postepeno upoznajete sa komandama (ali - bez napinjanja i želje da sve savladate "odmah i sad"), posle nekog vremena, shvatićete da (već) poznajete prilično velik broj naredbi, opcija i podopcija (na primer, mnogo više nego što je prikazano u ovom članku), i shvatićete da sve - jednostavno rečeno - nije (bilo) toliko teško.
U članku koji je pred nama, upoznaćemo se sa osnovnim komandama, a u narednim člancima pažnju ćemo posvetiti naprednijim konzolnim komandama za obradu teksta i principima funkcionisanja shell skripti.
Nekoliko važnih komandi opšteg tipa
Za sam početak (kao 'lagano zagrevanje' pre nego što pređemo na komande za rad sa datotekama i direktorijumima), prikazaćemo nekoliko važnih i korisnih komandi opšteg tipa.
man - uputstva za korišćenje programa
Moglo bi se reći da je prvo pitanje pri savladavanju (bilo koje) nove veštine: odakle "crpeti" informacije?!
U slučaju GNU/Linux distribucija i programa koji se pokreću pod Linux-om, prva (i gotovo uvek dostupna) opcija, podrazumeva čitanje dokumentacije koja dolazi uz same programe.
Preko komande man
(skraćeno od eng. "manual" - uputstvo), moguće je pristupiti uputstvu za upotrebu određenog programa:
$ man ls
Komanda koju smo naveli u gornjem primeru, prikazaće uputstvo za upotrebu programa ls
, ali - u opštem smislu - princip važi i za druge instalirane programe, uz koje tipično dolazi "man stranica" (eng. man page), specijalno formatirana tekstualna datoteka koja se otvara preko komande man
.
sudo (zadavanje root privilegija)
Druga komanda kojoj posvećujemo pažnju na početku, omogućava pokretanje komandi koje zahtevaju administratorske privilegije, ali (naravno) - bez doslovnog prijavljivanja na administratorski (tj. "root") nalog.
Iako su korisničke privilegije tema kojoj ćemo tek posvetiti pažnju za prave, za početak je dovoljno da se podsetimo na to, da (po pravilu i uz veoma retke izuzetke), root nalog ne treba koristiti direktno, već za svakodnevnu administraciju treba koristiti obične korisničke naloge, ali - korisničke naloge kojima je dato pravo korišćenja komande sudo
(ili, uprošćeno, obične korisničke naloge koji - po potrebi - mogu koristiti administratorske privilegije).
U praksi, kada određenoj komandi prethodi komanda sudo
(Substitute User - Do), osnovna komanda se izvršava sa administratorskim privilegijama (ali, da ponovimo - samo pod uslovom da korisnik ima pravo da koristi komandu sudo
): *
$ sudo reboot
U gornjem primeru, poziva se komanda za restartovanje sistema (koja se na Linux-u zapravo ne može izvršavati bez administratorskih privilegija).
alias (prečice za pokretanje programa)
Treća komanda iz grupe 'uvodnih' komandi, omogućava korisnicima da programe pozivaju korišćenjem alternativnih imena (koja sami biraju).
U praktičnom smislu, može se reći da je u pitanju način za definisanje tekstualnih prečica za komande, u okviru shell programa (najčešće: za komande koje su same po sebi (pre)dugačke, ili, za komande koje nisu (same po sebi) preobimne za kucanje, ali nisu ni "neobimne", i pri tom se koriste veoma često).
Recimo, ukoliko ustanovite da često postoji potreba da se prebacite u direktorijum /home/korisnik_1/kodovi/python
(uzećemo za početak "nedrastičan" primer da ne bismo bez potrebe navodili putanje ili komande od stotinjak znakova), možete otvoriti datoteku ~/.bashrc
, * i dodati sledeću liniju:
alias cdp='cd /home/korisnik_1/kodovi/python'
Pošto restartujete terminal, komanda cdp
imaće (nadalje) isto dejstvo kao i komanda cd /home/korisnik_1/kodovi/python
.
(Kasnije ćemo prikazati još nekoliko sličnih primera.)
Komande za rad sa direktorijumima i datotekama
Pravilna upotreba direktorijuma i datoteka omogućava optimalno raspoređivanje podataka koje koristimo svakodnevno (izvorne datoteke, dokumentacija, slike, izvršne datoteke i sl), i svakako je neophodno biti što bolje upoznat sa komandama za rad sa direktorijumima i datotekama (i koristiti ih na što efikasniji način).
pwd - ispis naziva aktivnog direktorijuma
Komanda pwd
(Print Working Directory), ispisuje naziv trenutno aktivnog direktorijuma.
[korisnik_1@codeblog ~] $ pwd /home/korisnik_1
Može se reći da komanda pwd
nema preveliki značaj u svakodnevnom radu (sama po sebi), budući da shell prompt tipično sadrži naziv aktivnog direktorijuma, ali, u pisanju shell skripti - dobro dođe.
Na ovom mestu, osvrnućemo se i na jednu korisnu prečicu: znak ~
(tilda) koristi se u shell programima (i inače u UNIX/Linux svetu), za označavanje home direktorijuma trenutno prijavljenog korisnika, što praktično znači da se putanja nalik na /home/korisnik_111
, doslovno može zameniti putanjom ~
pri pisanju komandi; naravno - pod uslovom da se naredbe izvršavaju preko naloga korisnik_111
.
ls - prikaz sadržaja aktivnog direktorijuma
Komanda ls
(skraćeno od eng. "List"), prikazuje sadržaj aktivnog direktorijuma.
Ako se komanda ls
pozove bez dodatnih opcija (i ako prethodno nije definisan alias koji menja smisao poziva "ls") ....
$ ls
.... dobija se prost listing trenutno aktivnog direktorijuma:
dir1 dir2 datoteka_1.txt
Osnovni prikaz ima sledeće odlike:
- nisu prikazane skrivene ("dot") datoteke
- direktorijumi i datoteke su sortirani po imenima (pri čemu se direktorijumi ne prikazuju pre datoteka)
- direktorijumi se ni po čemu (vizuelno) ne razlikuju od datoteka
- prikaz je linijski (direktorijumi i datoteke su prikazani jedni pored drugih, umesto jedni ispod drugih)
Ukoliko je potrebno upriličiti prikaz koji podrazumeva tabelarnu strukturu i 'neskrivanje' dot datoteka i direktorijuma (a uključićemo i prikaz u boji i grupisanje direktorijuma i datoteka), komanda ls
se poziva uz sledeće opcije:
-a
(all) - prikaz svih datoteka i direktorijuma (uključujući i dot datoteke i direktorijume)-l
(list) - tabelarni prikaz datoteka i direktorijuma *-h
(human readable) - prikaz veličina datoteka na "prirodan" (tj. "ljudski") način, uz korišćenje jedinica kao što su Kilobajti, Megabajti i druge veće jedinice (u suprotnom, sve prikazane veličine su izražene u Bajtovima)--color
- korišćenje različitih boja pri označavanju direktorijuma i datoteka (u prikazu)--group-directories-first
- prikaz (svih) direktorijuma pre (običnih) datoteka
Kada se pozove sledeća naredba .....
$ ls -l -a -h --color -group-directories-first
.... pri čemu se poziv može dodatno uprostiti na sledeći način ....
$ ls -lha --color -group-directories-first
.... kao izlaz u konzoli dobija se sledeći ispis:
drwxr-xr-x 2 user user 4.0K Sep 15 17:13 dir1 drwxr-xr-x 2 user user 4.0K Sep 15 15:46 dir2 drwx------ 41 user user 4.0K Sep 1 10:05 .config -rw------- 1 user user 0 Aug 6 22:13 .user_dat -rw-r--r-- 1 user user 1.6K Jul 22 08:22 datoteka_1.txt
Naravno, za poslednji poziv može se definisati i alias (koji se može upisati u datoteku ~/.bashrc
):
alias ls='ls -lha --color --group-directories-first'
.... posle čega će prosto pozivanje komande ls
podrazumevati:
- prikaz u obliku tabele (uz korišćenje Kilobajta, Megabajta (i ostalih jedinica))
- prikaz 'skrivenih' datoteka
- korišćenje različitih boja za direktorijume i datoteke
- grupisanje direktorijuma pre datoteka
Ukoliko je (u nekom kasnijem trenutku), zapravo potrebno pozvati komandu ls
u izvornom obliku, može se kao prefiks dodati obrnuta kosa crta:
$ \ls
Rezultat je isti ispis kao na slici #6.
cd - promena aktivnog direktorijuma
Komanda cd
(Change Directory), koristi se za promenu aktivnog direktorijuma.
Najprostiji slučaj podrazumeva prebacivanje u poddirektorijum (trenutno aktivnog direktorijuma), što možemo ilustrovati preko primera komande za prebacivanje iz home direktorijuma aktivnog korisnika, u direktorijum /home/korisnik_1/muzika
:
# pwd = /home/korisnik_1
$ cd muzika
# pwd = /home/korisnik_1/muzika
Po potrebi, moguće je koristiti i apsolutne putanje (sledeća naredba ima isti efekat kao prethodna):
# pwd = /home/korisnik_1
$ cd /home/korisnik_1/muzika
# pwd = /home/korisnik_1/muzika
U praksi, pri prebacivanju u poddirektorijum, nema potrebe za navođenjem apsolutne putanje, ali, apsolutnu putanju je neophodno navesti onda kada se direktorijum u koji se prebacujemo nalazi na proizvoljnoj putanji, koja nema dodirnih tačaka sa trenutnom putanjom (na čijem je kraju trenutni direktorijum).
Na primer:
# pwd = /home/korisnik_1/muzika
$ cd /mnt/usb1
# pwd = /mnt/usb1
Ugrađene prečice
Komanda cd
omogućava lakše dolaženje do određenih uobičajenih lokacija, preko prečica.
Na primer, poziv komande cd
, bez argumen(a)ta ....
$ cd
.... ili uz argument ~
(s tim da je prvi način mnogo praktičniji) ....
$ cd ~
.... zapravo je prečica za prebacivanje u home direktorijum aktivnog korisnika, isto kao da smo pozvali komandu:
cd /home/korisnik_1
Takođe, postoji i jednostavan način za prebacivanje na "roditeljski" direktorijum (tj. direktorijum u kome se aktivni direktorijum nalazi), pozivanjem komande cd
uz argument..
(razmak je obavezan):
$ cd ..
Na primer ....
[korisnik_1@codeblog ~/fotografije/2022] $ cd .. [korisnik_1@codeblog ~/fotografije] $
Ako se greškom prebacimo iz određenog direktorijuma u neki drugi, za povratak se ne mora navoditi apsolutna putanja, već i za tako nešto postoji prečica: cd -
(znak minus).
Na primer:
[korisnik_1@codeblog ~/kodovi/java] $ cd # greška [korisnik_1@codeblog ~] $ cd - # ispravka [korisnik_1@codeblog ~/kodovi/java] $ # sve je ok
mkdir - kreiranje direktorijuma
Komanda mkdir
koristi se za kreiranje direktorijuma.
Tipičan poziv podrazumeva kreiranje poddirektorijuma ....
[korisnik_1@codeblog ~/kodovi] $ mkdir rust
.... pri čemu je, u konkretnom primeru (sa gornje slike), kreiran direktorijum rust
(odnosno putanja /home/korisnik_1/kodovi/rust
- preko postojeće putanje /home/korisnik_1/kodovi
).
Za kreiranje direktorijuma, moguće je koristiti i apsolutne putanje ....
$ mkdir /home/korisnik_1/kodovi/rust
$ mkdir ~/kodovi/rust
.... ali - samo pod uslovom da u navedenoj putanji postoje svi direktorijumi koji prethode direktorijumu koji je potrebno kreirati!
Ukoliko nedostaje bilo koji od prethodećih direktorijuma (koji su navedeni u putanji), sistem će prijaviti grešku, a da se to ne bi dešavalo - potrebno je koristiti dodatni argument (-p
).
mkdir -p - kreiranje celokupne putanje
Ako se komanda mkdir
dopuni argumentom -p
(parent):
$ mkdir -p /home/korisnik_1/kodovi/rust
.... biće (po potrebi) kreirani svi direktorijumi koji nedostaju.
Opcija -p
funkcioniše i sa relativnim putanjama (koristićemo isti primer):
$ mkdir -p ~/kodovi/rust
rmdir - uklanjanje direktorijuma
Komanda rmdir
(remove directory) ....
$ rmdir 2022
$ rmdir /home/korisnik_1/fotografije/2022
$ rmdir ~/fotografije/2022
.... uklanja zadati direktorijum, ali - samo pod uslovom da je navedeni direktorijum prazan!
Ukoliko pomenuti uslov nije zadovoljen, moraju se prethodno ukloniti svi poddirektorijumi i pripadajuće datoteke (tipično: preko komande rm
, uz korišćenje rekurzije).
rm - uklanjanje datoteka i direktorijuma
Komanda rm
koristi se za uklanjanje pojedinačnih datoteka ili grupa datoteka, a uz opciju -r
(recursive), može se koristiti i za (rekurzivno) uklanjanje cele strukture direktorijuma.
Na primer, ako pozovemo sledeću komandu:
[korisnik_1@codeblog ~/docs/pdf] $ rm cenovnik_2022.pdf
.... biće uklonjena (jedna) datoteka (cenovnik_2022.pdf
).
Preko slične komande (uz navođenje dodatnih argumenata) ....
[korisnik_1@codeblog ~/docs/pdf] $ rm cenovnik_2022.pdf cenovnik_2021.pdf cenovnik_2021.txt
.... uklanjaju se tri (nabrojane/pojedinačne) datoteke, ali, sledeći poziv ....
[korisnik_1@codeblog ~/docs/pdf] $ rm -r stari_cenovnici_2011
.... podrazumeva (rekurzivno) uklanjanje svih datoteka (i svih poddirektorijuma) navedenog direktorijuma i, na kraju - uklanjanje samog direktorijuma stari_cenovnici_2011
.
cp - kopiranje datoteka i direktorijuma
Komanda cp
("Copy"), koristi se za kopiranje (tj. umnožavanje) datoteka, uz navođenje: putanje datoteke koja se kopira (u svojstvu prvog argumenta), i putanje nove datoteke (u svojstvu drugog argumenta).
Kao i do sada, putanje mogu biti apsolutne i relativne (naravno, uz poštovanje i svih ostalih prethodno navedenih pravila).
U sledećim primerima smatramo da se komanda poziva iz home direktorijuma aktivnog korisnika (~
), a objašnjenja su u komentarima:
# Kopiranje datoteke u isti direktorijum:
$ cp dat1 dat2
# Kopiranje datoteke u poddirektorijum
# (uz očuvanje naziva datoteke):
$ cp dat1 dir1/
# U gornjem primeru, pod uslovom da direktorijum dir1
# postoji, znak / na kraju se može izostaviti.
# Može i inače, ali, samo pod uslovom da je naveden
# kraj postojeće putanje, jer inače će biti kreirana
# DATOTEKA sa navedenim nazivom (dir1)!
# Kopiranje datoteke, uz promenu naziva:
$ cp dat1 dat2
$ cp dat1 ./dat2
# Kopiranje datoteke u poddirektorijum,
# uz promenu naziva:
$ cp dat1 ./dir1/dat2
# Kopiranje datoteke, uz korišćenje kombinacije
# apsolutnih i relativnih putanja:
$ cp dat1 /home/korisnik_2/dir1
# Kopiranje datoteke, uz korišćenje relativne putanje prema
# direktorijumu na istom nivou strukture, uz promenu naziva:
$ cp ../korisnik_2/dat3 dat3_bekap
# Preko apsolutnih putanja, prethodna komanda se
# može zadati kao:
$ cp /home/korisnik_2/dat3 /home/korisnik_1/dat3_bekap
# Kopiranje datoteke, uz korišćenje relativne putanje prema
# direktorijumu na istom nivou strukture, uz očuvanje naziva:
$ cp ../korisnik_2/dat3 .
# Preko apsolutnih putanja, prethodna komanda se
# može zadati kao:
$ cp /home/korisnik_2/dat3 /home/korisnik_1/dat3
U gornjim primerima mogli ste primetiti i jednu novinu - pojavu (jedne) tačke.
Pojedinačna tačka u putanjama označava trenutni direktorijum (pwd), što praktično znači da se komanda za kopiranje datoteke unutar istog direktorijuma može poz(i)vati na više načina:
$ cp ./dat_1 ./dat_2
$ cp dat_1 ./dat_2
$ cp ./dat_1 dat_2
$ cp dat_1 dat_2
mv - premeštanje i preimenovanje datoteka i direktorijuma
Komanda mv
(move), kao i komanda cp
, takođe prima dva argumenta i može se koristiti za sledeće operacije:
- premeštanje datoteke (u drugi direktorijum)
- promenu naziva datoteke (ukoliko se kao drugi argument preda naziv datoteke na istoj putanji)
U sledećim primerima takođe pretpostavljamo da se nalazimo u home direktorijumu aktivnog korisnika (a opisi su u komentarima):
# Premeštanje datoteke u poddirektorijum (ponovo,
# pod uslovom da relativna putanja ./dir1/ postoji;
# U suprotnom - praktično se obavlja preimenovanje(!):
$ mv dat1 dir1
# U sličnim situacijama (ako se iole dvoumite oko
# strukture datoteka i direktorijuma), radije koristite
# komandu na sledeći način:
$ mv dat1 ./dir1/
# Premeštanje datoteke u direktorijum na istom
# nivou hijerarhije, uz promenu naziva:
$ mv dat1 ../korisnik_2/dat3
# Prethodna komanda se može pozvati i preko
# apsolutnih putanja, na sledeći način:
$ mv /home/korisnik_1/dat1 /home/korisnik_2/dat3
# Premeštanje datoteke u direktorijum na istom
# nivou hijerarhije, uz očuvanje naziva:
$ mv dat1 ../korisnik_2/
# Prethodna komanda se može pozvati i preko
# apsolutnih putanja, na sledeći način:
$ mv /home/korisnik_1/dat1 /home/korisnik_2/dat1
# Preimenovanje datoteke:
$ mv dat1 novo_ime
# Zarad sprečavanja 'slučajnih'
# preimenovanja, preporučujemo upotrebu
# argumenta -i ('interactive'), što praktično
# znači da će komanda ponuditi dijalog preko koga
# korisnik treba da potvrdi izvršavanje komande
$ mv -i dat1 novo_ime
Kao što vidimo, preimenovanje datoteka se takođe obavlja preko komande mv
(što verujemo da većini korisnika koji se prvi put susreću sa Linux-om, deluje prilično 'čudno'), ali, ako zamislimo 'dodatnu' komandu koja bi služila samo za osnovno preimenovanje pojedinačnih datoteka i direktorijuma, pri čemu bi se komanda izvršavala na sledeći način ....
$ ren dat1 dat2
.... vidimo da je izostanak zasebne (jednostavne) komande za preimenovanje, krajnje razuman izbor.
Međutim, na Linux-u zapravo postoji i sveobuhvatan program rename
, koji pruža razne opcije za preimenovanje datoteka i direktorijuma, ali, prevashodno je namenjen složenijim zadacima koji se tiču preimenovanja datoteka i direktorijuma, i (takođe), nije deo paketa GNU Core Utils, pa stoga najčešće nije ni deo diskusije o osnovnim komandama.
rename - preimenovanje uz korišćenje naprednih opcija
Program rename
se izvršava po sledećoj šemi ....
rename obrazac_pretrage datoteke
.... ali, najbolje će biti da razmotrimo nekoliko konkretnijih primera:
# 1)
$ rename 's/stari/bekap' /home/korisnik_1/dokumentacija
# Promena niske 'stari' u nisku 'bekap',
# u nazivima svih datoteka, na putanji
# /home/korisnik_1/dokumentacija
# 2)
$ rename 's/.php/.html' *.php
# Promena ekstenzije svih PHP datoteka,
# iz .php u .html
# Dodatno objašnjenje:
# U nazivima datoteka, traži se obrazac '.php'
# (praktično, ekstenzija 'php'), i menja se
# ekstenzijom .html; u obzir se uzimaju (samo)
# PHP datoteke, a pošto nije navedena putanja,
# komanda uzima u obzir datoteke u okviru
# aktivnog direktorijuma.
# 3)
$ rename 'y/[A-Z]/[a-z]' *.html
# Promena velikih slova u mala slova (u nazivima
# datoteka u aktivnom direktorijumu)
Kao što vidimo u poslednjem primeru (i kao što ste verovatno i sami očekivali), program rename
je u stanju da koristi regularne izraze (pri čemu je u pitanju regex sintaksa iz programskog jezika Perl), što predstavlja ponešto napredniju opciju sa kojom se možete upoznati pošto se upoznate sa ostalim komandama iz ovog i sledećeg članka.
file - informacije o datoteci
Preko komande file
moguće je dobiti osnovnu informaciju o tipu datoteke (čija se putanja navodi kao argument):
[korisnik_1@codeblog ~] $ file .bashrc .bashrc: ASCII text
U primeru sa gornje slike, videli smo da je konfiguraciona datoteka programa Bash formatirana kao obična tekstualna (ASCII) datoteka.
Za kraj priče o osnovnim komandama za rad sa direktorijumima i datotekama, prikazaćemo dve vrlo uobičajene komande koje su "po definiciji" namenjene određenim zadacima, ali, u praksi se tipično koriste van osnovne namene (tj. "za nešto drugo").
touch - ažuriranje postojećih datoteka (kreiranje praznih datoteka)
Osnovna namena komande touch
je ažuriranje podataka o vremenu poslednjeg pristupa direktorijumu ili datoteci (što je podatak koji se čuva u okviru fajl sistema), a budući da je komanda touch
svakako bitna i u svojoj osnovnoj nameni, razmotrićemo prvo 'osnovni' primer.
Recimo, ako pretražujemo određeni direktorijum, u potrazi za datotekama koje su poslednji put ažurirane (npr) u novembru 2021, uredno će biti izlistane sve takve datoteke.
Ako pretragu obavljamo da bismo izdvojili (na određeni način, zarad dalje obrade), sve datoteke koje sadrže podatke koje smatramo zastarelim - i pri tom dalja obrada podrazumeva brisanje - moglo bi se desiti da ostanemo i bez onih datoteka koje nisu dugo ažurirane - ali i dalje sadrže relevantne podatke koji su nam potrebni!
Datoteke se (naravno) mogu otvoriti u editoru, i može se pozvati komanda za čuvanje (čime će biti upisano novo vreme pristupa), ali, u okviru UNIX-a i UNIX-olikih sistema, postoji i komanda touch
koja navedeni posao obavlja na elegantniji način.
Ako pozovemo komandu touch
:
[korisnik_1@codeblog ~/sajtovi/sajt1] $ touch *.log_bak
.... sve datoteke sa navedenom ekstenzijom, na putanji ~/sajtovi/sajt1
, biće ažurirane po pitanju vremena pristupa.
Kreiranje praznih datoteka
Pored osnovne namene (koju smo prethodno opisali), komanda touch
se mnogo češće koristi za kreiranje novih datoteka.
Kreiranje nove (prazne) datoteke funkcioniše na vrlo jednostavan način: ako se komandi touch
kao argument preda naziv nepostojeće datoteke - biće kreirana prazna datoteka sa navedenim nazivom. *
S obzirom na prethodno navedeni princip, može se reći da komanda touch
predstavlja (u praktičnom smislu), nešto nalik na "mkdir za datoteke".
Prethodno opisani pristup, dobro dođe u situacijama kada je potrebno formatirati konfiguracionu datoteku za određeni program (prikazaćemo primer).
Ako korisnik želi da podesi program prema svojim potrebama, uneće podešavanja u konfiguracionu datoteku - ukoliko takva datoteka (uopšte) postoji, ali, ukoliko datoteka ne postoji - potrebno je prvo kreirati datoteku:
$ touch ~/.vimrc
Primer prikazuje kreiranje konfiguracione datoteke za editor Vim (na podrazumevanoj lokaciji).
Ali, da ne zaboravimo još jednu komandu koja tipično "ne radi ono što joj je osnovna namena" ....
cat - spajanje tekstualnih datoteka (prikaz sadržaja datoteke u konzoli)
Osnovna namena komande cat
je spajanje niski (odnosno, tekstualnih datoteka). *
Na primer, preko sledeće naredbe ....
$ cat dat1 dat2 > dat3
.... sadržaj dve datoteke može se spojiti i preusmeriti u datoteku dat3
.
Međutim, iako se komanda cat
sasvim često koristi shodno osnovnoj nameni, mnogo češće se koristi za ispis sadržaja datoteka u konzoli, i stoga se postavlja (očigledno) pitanje: kako je komanda cat
, od komande za spajanje niski, postala nezvanična UNIX komanda za prikaz sadržaja tekstualnih datoteka u terminalu?
Kao prvo (služeći se pravilima koja smo naveli u uvodnom članku), ako se tekstualni izlaz određene komande ne usmeri u imenovanu izlaznu datoteku, biće usmeren na standardni izlaz (praktično - terminal), a pored toga, program cat
je napravljen tako da neće "praviti pitanje" ukoliko se ne preda naziv druge datoteke, već će nedostajuću datoteku pri spajanju tretirati kao praznu nisku.
U prevodu: "nema druge ulazne datoteke" + "nema izlazne datoteke" => tekst se (samo) ispisuje na ekranu.
bat - modernija alternativa
Komanda cat
je sasvim funkcionalna, ali, za korisnike koji žele malo "doteraniji" ispis (uz dodatne opcije), postoji i komanda bat
(s tim da program bat
, za razliku od programa cat
, nije deo osnovnog paketa alata na većini Linux distribucija).
Komanda bat
dodaje u ispis: zaglavlje, redne brojeve i bojenje sintakse za prepoznate jezike.
Pogledajmo primere:
- Izlaz komande cat
(recimo da smo pokrenuli komandu cat proba.py
, koja otvara jednostavnu Python skriptu):
a = 12
print(a)
- Izlaz komande bat
(komanda: bat proba.py
; ista datoteka kao u prethodnom primeru):
-------------------------
| File: proba.py
-------------------------
1 | a = 12
2 | print(a)
-------------------------
Da sve bude još bolje - pri samostalnom pozivanju - komanda bat
se ponaša na opisani način, ali, u "pipeline-u" (kada je potrebno da se izlaz prosledi (tj. "pajpuje") u drugi, tj. sledeći program), izlaz iz komande bat
biće isti (tj. "običan"), kao da smo koristili komandu cat
!
(Lepa, zanimljiva i korisna opcija; jedna od mnogih u svetu Linux-a.)
Komande za rad sa medijima/drajvovima
Komande za rad sa drajvovima, ne koriste se toliko često kao komande za rad sa datotekama i direktorijumima, ali, svakako spadaju u osnovne komande (sa kojima se treba upoznati već na početku).
df - prikaz slobodnog prostora na particijama
Preko komande df
(Disc Free), mogu se dobiti informacije o zauzetom i slobodnom prostoru na određenom drajvu (ssd-u, hard disku, USB drajvu i sl), kao i o tome na kojoj poziciji je dati uređaj montiran u okviru strukture direktorijuma.
Bićemo praktični i odmah ćemo uvrstiti opciju -h
(poznatu iz prethodnih poglavlja):
$ df -h /dev/sda1
.... posle čega se dobija sledeći ispis:
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 511M 62M 450M 12% /boot
du - prikaz zauzeća direktorijuma
Komanda du
(Disk Usage), računa i prikazuje memorijsko zauzeće datoteka i direktorijuma.
Ako se komandi du
kao argument preda putanja do datoteke, dobija se prost ispis koji je vezan (samo) za navedenu datoteku:
[korisnik_1@codeblog ~] $ du .vimrc 12K .vimrc
Ako se komandi kao argument preda putanja do direktorijuma, dobija se ispis koji sadrži: i podatke za poddirektorijume, i podatak o ukupnom zauzeću za navedeni direktorijum:
[korisnik_1@codeblog ~] $ du -h slike 5M slike/screenshots 14M slike/pozadine 20M slike
U prethodnom primeru, struktura poddirektorijum je jednostavna ("nerazuđena") i prikaz je krajnje jasan.
Međutim, ako bismo pozvali komandu ....
$ du -h /home/korisnik_1
.... dobili bismo ispis koji je sačinjen iz stotina i stotina redova!
Da se to ne bi dešavalo (osim, naravno, ako ne želimo da preusmerimo ispis u tekstualnu datoteku i sl), potrebno je koristiti opciju -s
(summary):
[korisnik_1@codeblog ~] $ du -hs /home/korisnik_1 7G /home/korisnik_1
Ovoga puta rezultat je samo informacija o ukupnom zauzeću home direktorijuma aktivnog korisnika.
lsblk - listing priključenih drajvova
Komanda lsblk
izlistava prisutne fizičke drajvove (uz pregled particija), i prikazuje (virtuelnu) lokaciju drajvova i particija u okviru strukture direktorijuma (/dev/sda1
, /dev/sda2
i sl):
[korisnik_1@codeblog ~] $ lsblk sda 259:0 0 465.8G 0 disk ├─sda1 259:1 0 512M 0 part /boot ├─sda2 259:2 0 64G 0 part / ├─sda3 259:3 0 393.3G 0 part /home └─sda4 259:4 0 8G 0 part [SWAP]
Primer radi, ukoliko dodamo USB fleš drajv i ponovo pozovemo komandu:
[korisnik_1@codeblog ~] $ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS sda 259:0 0 465.8G 0 disk ├─sda1 259:1 0 512M 0 part /boot ├─sda2 259:2 0 64G 0 part / ├─sda3 259:3 0 393.3G 0 part /home └─sda4 259:4 0 8G 0 part [SWAP] sdb 8:16 1 3.8G 0 disk ├─sdb1 8:17 1 724.7M 0 part └─sdb2 8:18 1 4M 0 part
.... primećujemo da je drajv prepoznat (i prikazan kao /dev/sdb
), posle čega je moguće drajv "montirati" preko komande mount
.
mount - montiranje drajva u strukturu direktorijuma
Preko komande mount
(kao što je poznato iz uvodnog članka), priključeni uređaji se "montiraju" (tj. prijavljuju ili 'ugrađuju') u strukturu direktorijuma, posle čega im se može pristupati.
Sadržaj USB drajva koji je priključen u prethodnom odeljku, može se prikazati unutar strukture direktorijuma (za šta preporučujemo da izaberete uobičajenu i lako prepoznatljivu putanju, kao na primer):
## mount /dev/sdb2 /mnt/usb1
Primetite da komanda mount
spada u komande koje zahtevaju administratorske privilegije, što se u praksi tipično ostvaruje (kao što smo već opisali), preko komande sudo
, na sledeći način:
$ sudo mount /dev/sdb2 /mnt/usb1
Sada se lako može pristupiti sadržaju USB-a:
$ cd /mnt/usb1
Drajvovi sa kojih se pokreće sistem, i drugi drajvovi koji se ne isključuju (a predviđeno je da budu deo instalacije), montiraju se po posebnoj proceduri pri instalaciji sistema (kao što smo već naveli u uvodnom članku).
umount - uklanjanje drajva iz strukture direktorijuma
Privremeno priključeni uređaj koji je potrebno (fizički) isključiti, prvo je potrebno isključiti iz strukture direktorijuma, to jest "odmontirati" (da ne kažemo "unmount-ovati":)). Na ovaj način, izbegavaju se neprijatne situacije (gubitak podataka i sl), do kojih može doći zato što sistem ("i dalje"/"još uvek") pristupa uređaju.
Ukoliko komanda umount
ne vrati grešku ....
## umount /mnt/usb1
.... sve je u redu i uređaj se može fizički isključiti (pod uslovom da isključivanje uređaja ne narušava njegovu ispravnost i funkcionalnost na neki drugi način).
Pomoćne komande
Za kraj smo ostavili još nekoliko često korišćenih komandi, od kojih mnoge zahtevaju dodatnu pažnju i upoznavanje sa dodatnim opcijama (na šta ćemo se povremeno osvrtati u narednim člancima), ali, za početak je sasvim dovoljno poznavati osnovnu funkcionalnost prikazanih komandi.
free - prikaz zauzeća RAM memorije
Komanda free
prikazuje zauzeće RAM memorije (kao i ukupan kapacitet i druge informacije):
[korisnik_1@codeblog ~] $ free -h total used free shared buff/cache available Mem: 15Gi 1.7Gi 12.1Gi 566Mi 1.7Gi 13.0Gi Swap: 8.0Gi 0B 8.0Gi
Prikazan je tipičan način upotrebe, uz argument -h
(human readable), čiji je smisao poznat od ranije.
date - prikaz datuma i vremena
Komanda date
prikazuje trenutni datum i trenutno vreme.
[korisnik_1@codeblog ~] $ date Mon Sep 26 18:50:17 CEST 2022
Ukoliko je potrebno doći do pojedinačnih podataka, zadatak se može rešiti na više načina: jedan od načina je korišćenje dodatnih opcija pri pozivu komande (ako želite da odmah saznate šta je sve na raspolaganju, pokrenite komandu man date
), a drugi način podrazumeva korišćenje alata za obradu teksta kao što su grep
ili awk
(što smo već videli u uvodnom članku, na primeru nekih drugih komandi, i čime ćemo se takođe detaljnije baviti u narednim člancima).
cal - kalendar
Komanda cal
prikazuje kalendar za trenutni mesec ....
[korisnik_1@codeblog ~] $ cal September 2022 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
.... uz označavanje trenutnog datuma.
(Za samostalno istraživanje - pronađite opciju za prikaz tri meseca odjednom: prethodnog meseca, trenutnog i sledećeg.)
ps - prikaz pokrenutih procesa
Komanda ps
(skraćeno od Processes), prikazuje pokrenute procese ....
[korisnik_1@codeblog ~] $ ps ..PID TTY TIME CMD 29260 pts/2 00:00:01 zsh 31881 pts/2 00:00:00 ps
.... međutim, prikaz koji smo videli, može biti pomalo "suvoparan", i stoga ćemo (za početak) ipak prikazati nešto 'živopisnije' alternative komande ps
.
top (htop/gtop)
Programi kao što su top
i (novije/modernije varijante) htop
i gtop
, predstavljaju svojevrsnu nadogradnju programa ps
, a s obzirom na to da su top
, htop
i gtop
TUI programi (za razliku od programa ps
koji spada u kategoriju CLI programa), informacije o procesima (kao i mnoge druge informacije), prikazuju se na znatno pregledniji način:

Međutim (kao što smo videli), i dalje se radi o konzolnim programima, to jest, nisu u pitanju programi sa pravim grafičkim interfejsom (prikazali smo htop
, ali, i top
i gtop
su slični).
uname - informacije o kernelu
Komanda uname
(koja se tipično koristi uz opciju -a
), prikazuje osnovne informacije o verziji sistema:
[korisnik_1@codeblog ~] $ uname -a Linux codeblog 5.19.10-artix1-1 #1 x86_64 GNU/Linux
U našem slučaju, u pitanju je Linux (kernel), ali, komanda uname
je univerzalna i, u slučaju da se kao operativni sistem koristi (na primer) OpenBSD, izlaz bi bio drugačiji (i sadržao bi informacije o verziji OpenBSD-a).
less - prikaz teksta stranicu po stranicu
Za sam kraj, jedan "pejdžer" (reklo bi se, i dalje najpopularniji).
Pejdžer (eng. pager) je program preko koga se tekstualni izlaz prethodne komande prikazuje 'stranicu-po-stranicu', i stoga, osim što nepregledni listing direktorijuma možemo proslediti u datoteku (kao što smo već videli u prvom članku), možemo koristiti i programe kao što su less
, more
i bat
. *
$ ls ~/ogromni_direktorijum | less
Sledeći koraci ....
Iako smo i ovoga puta izneli poveću količinu informacija, ponovo je u pitanju samo relativno kratak uvod u osnovne komande koje se koriste u GNU/Linux distribucijama.
Sa jedne strane, pomisao da "ima još opcija (i to podosta?!)", može delovati pomalo 'zabrinjavajuće' iz perspektive relativno neiskusnih korisnika Linux-a.
Sa druge strane, treba razumeti da je za sam početak sasvim dovoljno (ali i neophodno), dobro savladati (samo) osnovne opcije, a nove komande i opcije (i podopcije, varijacije i sl), treba dodavati postepeno, po potrebi, bez opterećivanja - onda kada se u svakodnevnom radu javi potreba za dodatnom funkcionalnošću.
U sledećem nastavku, bavićemo se naprednim opcijama za obradu teksta u komandnoj liniji ....