Pentru a deveni un expert în utilizarea shell-ului Bash pe sisteme precum Linux, macOS sau alte sisteme asemănătoare UNIX, este crucial să înțelegeți caracterele speciale, cum ar fi ~, *, | și >. Vom explora aceste simboluri, dezvăluind modul în care funcționează și cum să le folosiți eficient, transformând secvențele de comenzi într-un limbaj ușor de înțeles.
Ce reprezintă caracterele speciale?
În shell-ul Bash, anumite simboluri sunt tratate în mod special. Când sunt introduse în terminal, acestea acționează ca instrucțiuni sau comenzi, determinând shell-ul să execute o anumită acțiune. Le putem considera comenzi concise, formate dintr-un singur caracter. Totuși, uneori dorim să folosim un caracter în mod literal, fără a-l activa funcția specială. Există metode prin care putem face ca un caracter să se reprezinte pe sine, nu acțiunea sa specială.
Vom analiza aceste caractere „speciale” sau „meta-„, explicând atât funcționalitățile, cât și modul de utilizare literal.
~ Directorul personal
Caracterul tilda (~) este o prescurtare pentru directorul dumneavoastră personal. Utilizând acest simbol, nu este necesar să introduceți întreaga cale către directorul personal în comenzi. Indiferent de locația actuală în sistemul de fișiere, puteți folosi această comandă pentru a reveni la directorul dumneavoastră personal:
cd ~
Această comandă poate fi utilizată și cu căi relative. De exemplu, dacă vă aflați într-o altă locație din sistemul de fișiere și doriți să accesați directorul „arhivă” din directorul „lucru” din directorul personal, puteți folosi tilda:
cd ~/lucru/arhivă
. Directorul curent
Un punct (.) reprezintă directorul în care vă aflați. Acesta devine vizibil în listele de directoare dacă utilizați opțiunea „-a” (toate) cu comanda „ls”:
ls -a
De asemenea, punctul poate fi folosit în comenzi pentru a face referire la calea către directorul curent. De exemplu, pentru a executa un script din directorul curent, folosiți:
./script.sh
Această instrucțiune spune shell-ului să caute fișierul „script.sh” în directorul curent, evitând căutarea în directoarele din calea sistemului.
.. Directorul părinte
Dublu punct (..) reprezintă directorul părinte al directorului curent. Această comandă vă permite să urcați cu un nivel în structura de directoare:
cd ..
Comanda poate fi folosită și cu căi relative, de exemplu, pentru a urca un nivel și apoi a intra într-un alt director la acel nivel.
Această tehnică este utilă pentru a naviga rapid la un director aflat la același nivel în structura de directoare cu directorul actual. Se urcă un nivel și apoi se coboară într-un alt director.
cd ../ajutor_gc
/ Separator de cale
O bară oblică (/) este utilizată pentru a separa directoarele într-o cale de fișier:
ls ~/lucru/arhivă
Bara oblică simplă reprezintă, de asemenea, calea scurtă către directorul rădăcină. Deoarece toate căile din Linux încep din rădăcină, această comandă vă va muta direct la directorul rădăcină:
cd /
# Comentarii și trunchierea șirurilor
Simbolul diez (#) este folosit pentru a indica shell-ului că restul liniei reprezintă un comentariu și nu o comandă. Acesta este util în scripturi shell, dar poate fi folosit și pe linia de comandă:
# Această linie va fi ignorată de shell-ul Bash
Comentariile nu sunt ignorate complet, ele fiind înregistrate în istoricul comenzilor.
De asemenea, diez-ul poate fi folosit pentru a trunchia un șir de text de la început. De exemplu, această comandă creează o variabilă șir numită „acest_șir”:
În acest exemplu, textul „Dave Genial!” este atribuit variabilei.
acest_șir="Dave Genial!"
Această comandă utilizează „echo” pentru a afișa textul „Cum să” în terminal. Ea extrage valoarea din variabila „acest_șir” prin intermediul expansiunii parametrilor. Deoarece adăugăm diez și textul „Dave”, aceasta trunchiază acea parte a șirului înainte de a fi transmisă către echo.
echo Cum-să ${acest_șir#Dave}
Acest lucru nu modifică valoarea stocată în variabilă, ci doar ce este trimis către „echo”. Putem verifica acest lucru afișând din nou valoarea variabilei:
echo $acest_șir
? Înlocuirea unui singur caracter
Shell-ul Bash acceptă trei meta-caractere pentru a înlocui caracterele din șabloanele de nume de fișiere. Unul dintre acestea este semnul întrebării (?). Un nume de fișier care conține un astfel de meta-caracter formează un șablon care se potrivește cu mai multe nume de fișiere, nu doar cu unul singur.
Semnul întrebării reprezintă un singur caracter. Luați în considerare următorul șablon de nume de fișier:
ls insignă?.txt
Acesta este interpretat ca „afișează orice fișier cu un nume care începe cu ‘insignă’, urmat de un caracter arbitrar, înainte de extensia ‘.txt'”.
Acest șablon se potrivește cu fișierele de mai jos. Rețineți că unele au numere, altele litere după partea „insignă” a numelui. Semnul întrebării se potrivește atât cu litere, cât și cu cifre.
Totuși, șablonul nu se potrivește cu „insignă.txt”, deoarece nu există niciun caracter între „insignă” și extensia fișierului. Semnul întrebării trebuie să înlocuiască un caracter corespunzător din numele fișierului.
De asemenea, semnul întrebării poate fi folosit pentru a găsi fișiere cu un anumit număr de caractere în nume. Această comandă afișează fișiere text cu exact cinci caractere în nume:
ls ?????.txt
* Înlocuirea unei secvențe de caractere
Puteți folosi asteriscul
ls insignă*
ca meta-caracter pentru a reprezenta orice secvență de caractere, inclusiv absența oricărui caracter. Luați în considerare șablonul următor:
Asteriscul se potrivește cu „insignă.txt”, deoarece simbolul reprezintă orice secvență de caractere sau niciun caracter.
ls sursă.*
[ ] Set de caractere
Ați văzut cum semnul întrebării reprezintă orice caracter, iar asteriscul orice secvență de caractere (inclusiv niciunul). Puteți crea un meta-caracter cu ajutorul parantezelor pătrate ([ ]) și a caracterelor pe care le conțin. Caracterul corespunzător din numele fișierului trebuie să se potrivească cu cel puțin unul din caracterele din setul meta-caracter.
ls insignă_0[246].txt
Puteți utiliza mai multe seturi de paranteze pentru fiecare șablon de nume de fișier:
ls insignă_[01][789].txt
Puteți include și intervale în setul de caractere. Această comandă selectează fișiere cu numerele de la 21 la 25 și de la 31 la 35 în numele fișierului.
ls insignă_[23][1-5].txt
; Separatorul de comenzi
ls > numără.txt; wc -l numără.txt; rm numără.txt
numără.txt; wc -l numără.txt; rm numără.txt” comandă într-o fereastră de terminal” width=”646″ height=”122″>
Puteți introduce mai multe comenzi pe aceeași linie, separate de punct și virgulă (;). A doua comandă va rula, chiar dacă prima a eșuat, iar a treia va rula chiar dacă a doua a eșuat.
cd ./nu_există && cp ~/Documente/rapoarte/* .
Pentru a opri secvența de execuție dacă o comandă eșuează, folosiți ampersand dublu (&&) în loc de punct și virgulă.
& Proces de fundal
Când introduceți o comandă într-un terminal și aceasta se finalizează, terminalul revine la prompt. De obicei, acest proces durează foarte puțin. Dacă executați o aplicație cum ar fi gedit, nu puteți utiliza terminalul până când nu închideți aplicația.
gedit adresa_comenzii.pagină &
Pentru a putea continua utilizarea terminalului în timp ce aplicația rulează, lansați aplicația ca proces de fundal, adăugând un ampersand (&) la sfârșitul liniei de comandă.
Bash vă va afișa ID-ul procesului lansat și vă va reda promptul, permițându-vă să continuați folosirea terminalului.
< Redirecționarea intrării
sort < cuvinte.txt
Multe comenzi Linux acceptă un fișier ca parametru și preiau datele din el. Majoritatea comenzilor pot primi și intrare dintr-un flux. Pentru a crea un flux de date, folosiți paranteza unghiulară stângă (<).
O comandă care primește intrare redirecționată se poate comporta diferit decât una care citește direct dintr-un fișier numit.
De exemplu, comanda „wc” afișează numărul de cuvinte, linii și caractere, urmat de numele fișierului, când este utilizată cu un fișier. Dacă folosim redirecționarea, „wc” va afișa numerele, dar nu va putea afișa numele fișierului, deoarece nu îl cunoaște.
Exemple de utilizare a comenzi „wc”:
wc cuvinte.txt
wc < cuvinte.txt
> Redirecționarea ieșirii
Puteți folosi paranteza unghiulară dreaptă (>) pentru a redirecționa ieșirea unei comenzi, de obicei într-un fișier. Exemplu:
ls > fișiere.txt
cat fișiere.txt
fișiere.txt” într-o fereastră de terminal” width=”646″ height=”382″>
wc nu_există.txt 2> erori.txt
cat erori.txt
erori.txt” în fereastra de terminal” width=”646″ height=”122″>
Redirecționarea ieșirii poate redirecționa și mesajele de eroare, dacă folosiți o cifră (în exemplul de mai sus, 2) împreună cu >.
| Conducta
O „conductă” leagă mai multe comenzi între ele. Ieșirea unei comenzi devine intrarea celei următoare. Lungimea lanțului de comenzi este arbitrară.
În acest exemplu, folosim „cat” pentru a transmite conținutul fișierului „cuvinte.txt” către „grep”, care extrage liniile ce conțin literele „C” sau „c”. Rezultatul este transmis către „sort”, care sortează liniile în ordine inversă folosind opțiunea „-r”.
cat cuvinte.txt | grep [cC] | sort -r
! Operator logic NOT și istoric
Semnul exclamării (!) este un operator logic care înseamnă „NU”.
[ ! -d ./backup ] && mkdir ./backup
Această linie de comandă conține două comenzi:
Prima comandă este textul dintre parantezele pătrate, care efectuează un test.
Cea de-a doua comandă este textul care urmează după „&&”, care este executată condiționat de rezultatul testului.
Prima comandă folosește ! ca operator logic. Parantezele pătrate indică faptul că un test urmează. Opțiunea „-d” (director) verifică prezența unui director numit „backup”. A doua comandă creează directorul.
Deoarece simbolul „&&” separă cele două comenzi, Bash va executa a doua comandă doar dacă prima reușește. Totuși, acest lucru nu este ceea ce dorim. Dacă testul pentru directorul „backup” reușește, nu este nevoie să-l creăm, iar dacă testul eșuează, a doua comandă nu va fi executată și directorul nu va fi creat.
Aici intervine operatorul logic !. Acesta acționează ca un „NU logic”. Așadar, dacă testul reușește (directorul există), ! transformă rezultatul în „NU succes”, care este „eșec”. Prin urmare, a doua comandă nu este activată.
Dacă testul directorului eșuează (directorul nu există), ! transformă rezultatul în „NU eșec”, care este „succes”. Prin urmare, comanda de creare a directorului lipsă este executată.
Acest mic ! are o putere considerabilă!
ls -l -d backup
!24
Puteți, de asemenea, rula comenzi din istoricul comenzilor folosind semnul exclamării. Comanda „history” listează istoricul comenzilor, apoi introduceți numărul comenzii dorite cu „!” pentru a o executa.
!!
Următorul rulează din nou comanda anterioară:
$ Expresii variabile. În shell-ul Bash, creați variabile pentru a stoca valori, cum ar fi variabilele de mediu,
Acestea sunt întotdeauna prezente și disponibile de fiecare dată când deschideți un terminal. Ele conțin informații precum numele de utilizator, directorul personal și căile de acces.
echo $USER
echo $HOME
echo $PATH
Puteți folosi „echo” pentru a afișa valoarea unei variabile, adăugând semnul dolarului ($) înaintea numelui variabilei.
AceastăDistro=Ubuntu
NumărulMeu=2001
echo $AceastăDistro
echo $NumărulMeu
Pentru a crea o variabilă, trebuie să îi dați un nume și o valoare. Nu folosiți semnul dolarului pentru a crea o variabilă, ci doar când faceți referire la ea.
Adăugați acolade ({}) în jurul semnului dolar și efectuați o extindere a parametrilor pentru a obține valoarea variabilei și a permite transformări suplimentare ale acesteia.
ȘirulMeu=123456qwerty
Aceasta creează o variabilă care conține un șir de caractere:
echo ${ȘirulMeu}
Utilizați următoarea comandă pentru a afișa șirul în terminal:
echo ${ȘirulMeu:6}
Pentru a returna subșirul începând de la poziția 6 a întregului șir (poziția 0 este