Ukoliko želite da ovladate Bash okruženjem na Linux, macOS ili nekom drugom Unix-sličnom sistemu, posebni simboli (kao što su ~, *, | i >) su ključni. Mi ćemo vam pomoći da razotkrijete ove zagonetne sekvence Linux komandi i da postanete majstor u dešifrovanju istih.
Šta su to posebni karakteri?
Postoji skup karaktera koje Bash shell tretira na dva različita načina. Kada ih unesete u shell, oni deluju kao instrukcije ili komande, govoreći shell-u da izvrši specifičnu radnju. Zamislite ih kao naredbe sastavljene od jednog karaktera.
Ponekad je jedini cilj ispisati dati simbol, bez želje da on deluje kao magični simbol. Postoji način da se simbol koristi kao sam simbol, a ne njegova posebna funkcija.
Pokazaćemo vam koji simboli su „posebni“ ili „meta“ simboli, kao i kako ih možete koristiti funkcionalno i doslovno.
~ Početni direktorijum
Tilda (~) je skraćenica za vaš početni direktorijum. To znači da ne morate pisati punu putanju do vašeg kućnog direktorijuma u komandama. Bez obzira gde se nalazite u sistemu datoteka, ovu komandu možete koristiti da se vratite u vaš kućni direktorijum:
cd ~
Ovu komandu možete koristiti i sa relativnim putanjama. Na primer, ako se nalazite negde u sistemu datoteka van vašeg kućnog foldera, i želite da se prebacite u folder arhiva u okviru vašeg radnog direktorijuma, koristite tildu na sledeći način:
cd ~/work/archive
. Tekući direktorijum
Tačka (.) predstavlja tekući direktorijum. Videćete je u listama direktorijuma ukoliko koristite opciju -a (sve) sa komandom ls.
ls -a
Takođe, možete koristiti tačku u komandama kako biste predstavili putanju do vašeg trenutnog direktorijuma. Na primer, ukoliko želite da pokrenete skriptu iz trenutnog direktorijuma, pozvali biste je na ovaj način:
./script.sh
Ovo govori Bash-u da potraži datoteku script.sh u tekućem direktorijumu. Na taj način, neće pretraživati direktorijume u vašoj putanji u potrazi za odgovarajućim izvršnim fajlom ili skriptom.
.. Nadređeni direktorijum
Dvostruka tačka (..) predstavlja nadređeni direktorijum u odnosu na vaš trenutni. Ovo možete koristiti da se vratite za jedan nivo u stablu direktorijuma.
cd ..
Ovu komandu možete koristiti i sa relativnim putanjama—na primer, ako želite da se popnete za jedan nivo u stablu direktorijuma, a zatim uđete u drugi direktorijum na tom nivou.
Takođe, ovu tehniku možete koristiti da se brzo prebacite na direktorijum koji je na istom nivou stabla direktorijuma kao i vaš trenutni. Preskočite jedan nivo gore, a zatim se vratite dole u drugi direktorijum.
cd ../gc_help
/ Razdvajač direktorijuma putanje
Kosu crtu (/) – često samo zvanu kosom crtom – možete koristiti za razdvajanje direktorijuma u imenu putanje.
ls ~/work/archive
Jedna kosa crta predstavlja najkraću moguću putanju do direktorijuma. S obzirom da sve u stablu Linux direktorijuma počinje u osnovnom direktorijumu, ovu komandu možete koristiti da brzo pređete u korenski direktorijum:
cd /
# Komentar ili skraćivanje stringova
Najčešće koristite heš ili znak broja (#) da kažete shell-u da je ono što sledi komentar i da ga ne treba izvršavati. Možete ga koristiti u shell skriptama i – manje korisno – u komandnoj liniji.
# Ovo će Bash shell ignorisati
Međutim, on nije u potpunosti ignorisan, jer je dodat vašoj istoriji komandi.
Takođe možete koristiti heš za sečenje string promenljive i uklanjanje dela teksta sa početka. Ova komanda kreira string promenljivu nazvanu this_string.
U ovom primeru, dodeljujemo tekst „Dave Geek!“ promenljivoj.
this_string="Dave Geek!"
Ova komanda koristi echo da ispiše reč „How-To“ u terminal. Ona uzima vrednost sačuvanu u promenljivoj string pomoću proširenja parametara. Pošto dodajemo heš i tekst „Dave“, taj deo stringa je isečen pre nego što se prosledi u echo.
echo How-To ${this_string#Dave}
Ovo ne menja vrednost sačuvanu u promenljivoj string; to samo utiče na ono što se šalje u echo. Možemo koristiti echo da ponovo ispišemo vrednost promenljive string i proverimo ovo:
echo $this_string
? Zamenski znak za jedan karakter
Bash shell podržava tri džoker znaka, od kojih je jedan znak pitanja (?). Za zamenu karaktera u šablonima imena datoteka koristite džoker znake. Ime datoteke koje sadrži džoker znak formira šablon koji odgovara nizu imena datoteka, a ne samo jednom.
Džoker znak pitanja predstavlja tačno jedan karakter. Razmotrite sledeći šablon imena datoteke:
ls badge?.txt
Ovo se tumači kao „navedi bilo koju datoteku sa imenom koje počinje sa ‘badge’ i praćeno bilo kojim pojedinačnim znakom pre ekstenzije naziva datoteke.
Ovo odgovara sledećim datotekama. Imajte na umu da neki imaju brojeve, a neki slova iza dela „badge“ naziva datoteke. Upitnik će odgovarati i slovima i brojevima.
Međutim, taj šablon imena datoteke ne odgovara „badge.txt“, jer ime datoteke nema nijedan znak između „badge“ i ekstenzije datoteke. Džoker znak pitanja mora da odgovara odgovarajućem znaku u imenu datoteke.
Takođe, možete koristiti znak pitanja da pronađete sve datoteke sa određenim brojem karaktera u njihovim imenima. Sledeće navodi sve tekstualne datoteke koje imaju tačno pet karaktera u imenu datoteke:
ls ?????.txt
* Zamenski znak sekvence karaktera
Možete koristiti zvezdicu * kao džoker znak za bilo koji niz karaktera, uključujući i nula karaktera. Razmotrite sledeći šablon imena datoteke:
ls badge*
Ovo se poklapa sa „badge.txt“, jer džoker zamenjuje bilo koju sekvencu znakova ili nula karaktera.
ls source.*
[] Zamenski znak skupa karaktera
Kao što je objašnjeno gore, koristite znak pitanja za predstavljanje bilo kog pojedinačnog karaktera, a zvezdicu za predstavljanje bilo koje sekvence znakova (uključujući nula karaktera). Sa uglastim zagradama ([ ]) možete formirati džoker znak sa skupom karaktera koje sadrže. Relevantan karakter u nazivu datoteke tada mora da odgovara bar jednom od karaktera iz skupa džoker karaktera.
ls badge_0[246].txt
ls badge_[01][789].txt
ls badge_[23][1-5].txt
; Shell separator komandi
U komandnu liniju možete da ukucate koliko god želite komandi, sve dok svaku od njih odvojite tačkom i zarezom (;). To ćemo uraditi u sledećem primeru:
ls > count.txt; wc -l count.txt; rm count.txt
count.txt; wc -l count.txt; rm count.txt\“ u terminalu.“ width=“646″ height=“122″>
Važno je napomenuti da se druga komanda pokreće čak i ako prva ne uspe, treća se pokreće čak i ako druga ne uspe i tako dalje.
cd ./doesntexist && cp ~/Documents/reports/* .
& Pozadinski proces
Nakon što unesete komandu u terminal i ona se završi, vraćate se na komandnu liniju. Obično to traje samo trenutak ili dva. Ali ako pokrenete drugu aplikaciju, kao što je gedit, ne možete koristiti terminal dok ne zatvorite aplikaciju.
gedit command_address.page &
Bash vam pokazuje ID procesa onoga što je pokrenuto, a zatim vas vraća u komandnu liniju. Tada možete nastaviti sa korišćenjem terminala.
< Redirekcija ulaza
Mnoge Linux komande prihvataju datoteku kao parametar i preuzimaju podatke iz te datoteke. Većina ovih komandi takođe može preuzeti ulaz iz toka. Da biste kreirali tok, koristite levu uglastu zagradu (<):
sort < words.txt
Kada komanda ima ulaz koji je preusmeren ka njoj, ona se može ponašati drugačije nego kada čita iz datoteke koja ima ime.
Ako koristimo wc da izbrojimo reči, linije i karaktere u datoteci, on ispisuje vrednosti, a zatim i naziv datoteke. Ako preusmerimo sadržaj datoteke u wc, ispisuje iste numeričke vrednosti, ali ne zna ime datoteke iz koje su podaci došli. Ne može da ispiše ime datoteke.
Evo nekih primera kako možete da koristite wc:
wc words.txt
wc < words.txt
> Redirekcija izlaza
Možete koristiti desnu uglastu zagradu (>) da preusmerite izlaz iz komande (obično u datoteku); evo primera:
ls > files.txt
cat files.txt
files.txt\“ u terminalu.“ width=“646″ height=“382″>
wc doesntexist.txt 2> errors.txt
cat errors.txt
| Cev
„Cev“ povezuje komande zajedno. Uzima izlaz iz jedne komande i prenosi ga sledećoj kao ulaz. Broj cevovodnih komandi (dužina lanca) je proizvoljan.
Ovde ćemo koristiti cat da ubacimo sadržaj datoteke words.txt u grep, koji izvlači svaki red koji sadrži malo ili veliko „C“. grep će zatim proslediti ove redove za sortiranje. Sortiranje koristi opciju -r (obrnuto), tako da će se sortirani rezultati pojaviti u obrnutom redosledu.
cat words.txt | grep [cC] | sort -r
! Logičko NE i Operator istorije
Uskličnik (!) je logički operator koji znači NE.
[ ! -d ./backup ] && mkdir ./backup
U ovoj komandnoj liniji postoje dve komande:
Prva komanda je tekst u uglastim zagradama;
Druga komanda je tekst koji prati dvostruke ampersande &&.
Prva komanda koristi ! kao logički operator. Uglaste zagrade označavaju da će se izvršiti test. Opcija -d (direktorijum) testira prisustvo direktorijuma koji se zove backup. Druga komanda kreira direktorijum.
Pošto dvostruki ampersandi razdvajaju dve komande, Bash će izvršiti drugu samo ako prva uspe. Međutim, to je suprotno od onoga što nam treba. Ako test za „backup“ direktorijum uspe, ne treba da ga kreiramo. A ako test za direktorijum „backup” ne uspe, druga komanda se neće izvršiti, a direktorijum koji nedostaje neće biti kreiran.
Ovde logički operator ! stupa na scenu. Deluje kao logičko NE. Dakle, ako test uspe (tj. direktorijum postoji), ! to pretvara u „NE uspeh“, što je neuspeh. Dakle, druga komanda nije aktivirana.
Ako test direktorijuma ne uspe (tj. direktorijum ne postoji), ! menja odgovor u „NE neuspeh“, što je uspeh. Dakle, izvršava se komanda za kreiranje direktorijuma koji nedostaje.
Taj mali ! ima veliki uticaj kada vam zatreba!
ls -l -d backup
!24
!!
Sledeće ponovo pokreće prethodnu komandu:
$ Promenljivi izrazi
U Bash shell-u kreirate promenljive za čuvanje vrednosti. Neke, poput promenljivih okruženja, su uvek prisutne i možete im pristupiti svaki put kada otvorite terminal. One sadrže vrednosti, kao što su vaše korisničko ime, kućni direktorijum i putanja.
echo $USER
echo $HOME
echo $PATH
ThisDistro=Ubuntu
MyNumber=2001
echo $ThisDistro
echo $MyNumber
Dodajte zagrade ({}) oko znaka dolara i izvršite proširenje parametara da biste dobili vrednost promenljive i omogućili dalje transformacije vrednosti.
MyString=123456qwerty
Ovo kreira promenljivu koja sadrži string znakova, kao što je prikazano u nastavku:
echo ${MyString}
Koristite sledeću komandu da ponovite string u terminal:
echo ${myString:6}
Da biste vratili podstring koji počinje na poziciji 6 celog stringa, koristite sledeću komandu (postoji pomak nule, tako da je prva pozicija nula):
echo ${myString:0:6}
Ako želite da ponovite podstring koji počinje na poziciji nula i sadrži sledećih šest znakova, koristite sledeću komandu:
echo ${myString:4:4}
Citiranje posebnih karaktera
Ukoliko želite da koristite poseban karakter kao literalni (ne-specijalni) karakter, morate to reći Bash shell-u. Ovo se zove citiranje i postoje tri načina da se to uradi.
Ako stavite tekst u navodnike (“…”), to sprečava Bash da deluje na većinu specijalnih karaktera, i oni se samo štampaju. Međutim, jedan izuzetak je znak dolara ($). On i dalje funkcioniše kao znak za izraze promenljivih, tako da možete uključiti vrednosti iz promenljivih u svoj izlaz.
echo "Danas je $(date)"
Na primer, ova komanda štampa datum i vreme:
echo 'Danas je $(date)'
Ako stavite tekst u jednostruke navodnike (‘…’), kao što je prikazano ispod, to zaustavlja funkciju svih posebnih karaktera:
echo "Danas je $(date)"
Možete koristiti obrnutu kosu crtu (\) da sprečite da sledeći znak funkcioniše kao specijalni. Ovo se zove „izbegavanje“ znaka; pogledajte primer ispod: