Командне линије: Зашто се људи и даље муче са њима?

Komandna linija, iako stara skoro pola veka, i dalje je relevantna. Tekstualni terminali ostaju najefikasniji način za obavljanje mnogih zadataka, uprkos napretku grafičkih interfejsa i uređaja sa ekranom osetljivim na dodir.

Štaviše, komandna linija dobija na značaju, što se vidi po Microsoftovom razvoju moćne nove aplikacije, Windows Terminal. Iako je Windows 10 PowerShell okruženje izuzetno moćno, Microsoft je uložio napor da u Windows 10 integriše podršku za, u osnovi, kompletno Linux okruženje komandne linije.

Komandna linija je nekada bila jedina opcija

U prošlosti, interakcija sa računarom je podrazumevala kucanje. To je bio jedini način. Iako se to može činiti ograničavajućim i staromodnim, u poređenju sa bušenim karticama i papirnim trakama, kucanje je predstavljalo revolucionarni napredak. Prelazak sa teleprinterskih mašina sa rolama papira na terminale sa ekranima sa katodnom cevi (CRT) predstavljao je još jedan korak u razvoju interakcije čoveka i računara.

Ovaj korak je omogućio razvoj interaktivnog okruženja. Sada je bilo moguće slati instrukcije računaru i dobiti brze povratne informacije na ekranu. Nije više bilo potrebno čekati da štampač odštampa na papiru.

Međutim, tehnologija je značajno napredovala. Osim u situacijama kada je neophodno koristiti računar bez grafičkog okruženja, udaljeni računar putem SSH veze niske propusnosti, ili kontrola beskompjuterskog ili ugrađenog sistema, zašto bi se koristila komandna linija umesto grafičkog okruženja?

Objašnjenje terminologije

Neki ljudi koriste termine komandna linija, prozor terminala i ljuska naizmenično, što je netačno. Iako su povezani, to nisu iste stvari.

Prozor terminala je prozor u grafičkom okruženju koji omogućava emulaciju teleprinterskog terminala.

Ljuska je program koji se pokreće unutar prozora terminala. Ona prima vaš unos i, u zavisnosti od toga šta ste otkucali, pokušava da interpretira i izvrši instrukcije, prosledi ih drugim uslužnim programima operativnog sistema ili pronađe skriptu ili program koji odgovara unetom tekstu.

Komandna linija je mesto gde se unosi tekst. To je znak koji ljuska prikazuje kada čeka unos instrukcija. Termin „komandna linija“ se takođe koristi za označavanje unetog teksta. Na primer, ako sa nekim razgovarate o problemima sa pokretanjem programa, možda će vas pitati: „Koju ste komandnu liniju koristili?“ Ne pitaju koju ljusku ste koristili, već koju ste komandu otkucali.

Svi zajedno, oni čine interfejs komandne linije (CLI).

Zašto koristiti komandnu liniju u 2024. godini?

CLI može izgledati zastarelo i zbunjujuće za one koji nisu upoznati sa njim. Može se postaviti pitanje da li postoji mesto za ovakav način korišćenja računara u modernom operativnom sistemu? Zar nismo sve to ostavili iza sebe kada su se pojavili prozori, ikone, miševi i grafička radna okruženja sa grafičkim korisničkim interfejsima (GUI)?

GUI postoji već decenijama. Prva verzija Microsoft Windows-a je objavljena davne 1985. godine i postala standard za desktop računare sa izdavanjem Windows 3.0 1990. godine.

X Window System, koji se koristi u Unix-u i Linux-u, predstavljen je 1984. godine. Ovo je donelo grafička radna okruženja na Unix i njegove brojne derivate.

Međutim, izdavanje Unix-a je prethodilo ovim događajima za više od jedne decenije. Pošto nije bilo druge opcije, sve je moralo biti moguće putem komandne linije. Sva ljudska interakcija, konfiguracija i upotreba računara morala je biti moguća putem tastature.

Dakle, CLI može sve. GUI još uvek ne može da obavi sve što CLI može. Čak i u onim oblastima gde može, CLI je obično brži, fleksibilniji, može se automatizovati pomoću skripti i skalabilan.

I postoji standard.

Standardizacija zahvaljujući POSIX-u

POSIX je standard za operativne sisteme slične Unix-u – u suštini, sve što nije Windows. Čak i Windows ima Windows podsistem za Linux (WSL). Otvorite prozor terminala na bilo kom operativnom sistemu koji je u skladu sa POSIX-om (ili blizu usaglašenosti) i naći ćete se u ljusci. Čak i ako ljuska ili distribucija pružaju sopstvena proširenja i poboljšanja, sve dok obezbeđuju osnovnu POSIX funkcionalnost, moći ćete da je koristite odmah. I vaše skripte će se pokrenuti.

Komandna linija je najmanji zajednički imenitelj. Naučite kako da je koristite i, bez obzira na Linux distribuciju i grafičko okruženje, moći ćete da obavite sve potrebne zadatke. Različiti desktopi imaju svoj način rada. Različite Linux distribucije povezuju različite uslužne programe i programe.

Ali, otvorite prozor terminala i osećaćete se kao kod kuće.

Komande su dizajnirane za saradnju

Svaka Linux komanda je dizajnirana da obavi određeni zadatak i da to uradi dobro. Osnovna filozofija dizajna je da se doda više funkcionalnosti dodavanjem još jednog uslužnog programa koji se može povezati sa postojećim kako bi se postigao željeni rezultat.

Ovo je toliko korisno da je Microsoft uložio trud da doda podršku za kompletno Linux okruženje komandne linije u Windows 10!

Na primer, komanda za sortiranje se koristi od strane drugih komandi za sortiranje teksta po abecednom redu. Nema potrebe da se funkcija sortiranja integriše u svaku Linux komandu. Generalno, GUI aplikacije ne dozvoljavaju ovaj vid saradnje.

Razmotrite sledeći primer. Koristi se komanda ls za prikaz liste datoteka u trenutnom direktorijumu. Rezultati se prosleđuju komandi sort i sortiraju se prema petoj koloni podataka (što je veličina datoteke). Sortirana lista se zatim šalje u head komandu, koja po podrazumevanim postavkama prikazuje prvih deset redova svog ulaza.

ls -l | sort -nk5,5 | head

Dobijamo urednu listu najmanjih datoteka u trenutnom direktorijumu.

Promenom jedne komande – korišćenjem tail umesto head – možemo dobiti listu deset najvećih datoteka u trenutnom direktorijumu.

ls -l | sort -nk5,5 | tail

Ovo nam daje listu deset najvećih datoteka, kako se i očekivalo.

Izlaz iz komandi se može preusmeriti i snimiti u datoteke. Standardni izlaz (stdout) i poruke o greškama (stderr) mogu se snimati odvojeno.

Komande mogu uključivati promenljive okruženja. Sledeća komanda će prikazati sadržaj vašeg kućnog direktorijuma:

ls $HOME

Ovo funkcioniše bez obzira na to gde se nalazite u strukturi direktorijuma.

Ako vam se ideja o kucanju čini zamornom, tehnike kao što je automatsko dopunjavanje (tab completion) mogu smanjiti količinu kucanja koju treba da obavite.

Skripte omogućavaju automatizaciju i ponovljivost

Ljudi su skloni greškama.

Skripte omogućavaju standardizaciju skupa instrukcija za koje se zna da će se izvršavati na isti način svaki put kada se skripta pokrene. Ovo obezbeđuje doslednost u održavanju sistema. Bezbednosne provere se mogu ugraditi u skripte, omogućavajući skripti da odredi da li treba da nastavi. Ovo eliminiše potrebu da korisnik ima dovoljno znanja za donošenje odluke.

Pošto možete da automatizujete zadatke pomoću cron-a na Linux-u i drugim sistemima sličnim Unix-u, dugi, komplikovani i ponavljajući zadaci se mogu pojednostaviti ili bar jednom obaviti, a zatim automatizovati za budućnost.

PowerShell skripte nude sličnu funkcionalnost na Windows-u, a možete zakazati njihovo pokretanje pomoću Planera zadataka (Task Scheduler). Zašto kliknuti na 50 različitih opcija svaki put kada konfigurirate računar, kada možete pokrenuti komandu koja automatski menja sve?

Najbolje od oba sveta

Da biste izvukli maksimum iz Linux-a – ili bilo kog operativnog sistema kao napredni korisnik – morate koristiti i CLI i GUI.

GUI je nezamenljiv za upotrebu aplikacija. Čak i najvatreniji zagovornici komandne linije moraju ponekad da napuste prozor terminala i koriste kancelarijske pakete, razvojna okruženja i programe za grafičku manipulaciju.

Zavisnici od komandne linije ne mrze GUI. Oni samo preferiraju prednosti korišćenja CLI-a – za odgovarajuće zadatke. Za administraciju, CLI je superiorniji. Možete da koristite CLI da izvršite promene u jednoj datoteci, jednom direktorijumu, izboru datoteka i direktorijuma ili da izvršite globalne promene uz jednak napor. Pokušaj da se ovo uradi pomoću GUI često zahteva duge i ponavljajuće radnje mišem i tastaturom, kako se broj objekata povećava.

Komandna linija vam daje najveću kontrolu. Sve opcije svake komande su vam dostupne. Mnoge Linux komande imaju veliki broj opcija. Uzmimo samo jedan primer, razmotrite komandu lsof. Pogledajte njenu man stranicu i razmislite kako biste to spakovali u GUI.

Postoji previše opcija da bi se efikasno prikazale korisniku u GUI. To bi bilo previše komplikovano, neprivlačno i nezgrapno za korišćenje. A to je u potpunoj suprotnosti sa ciljevima GUI.

To su različite alatke za različite svrhe. Ne bežite od CLI-a. Često je to brži i fleksibilniji alat. Savladajte ga i nikada nećete požaliti.