Dacă doriți să stăpâniți shell-ul Bash pe Linux, macOS sau alt sistem asemănător UNIX, caracterele speciale (cum ar fi ~, *, | și >) sunt esențiale. Vă vom ajuta să dezlegați aceste secvențe de comenzi Linux criptice și să deveniți un erou al hieroglifelor.
Cuprins
Ce sunt personajele speciale?
Există un set de personaje Bash shell tratează în două moduri diferite. Când le tastați în shell, ele acționează ca instrucțiuni sau comenzi și îi spun shell-ului să îndeplinească o anumită funcție. Gândiți-vă la ele ca la comenzi cu un singur caracter.
Uneori, doriți doar să imprimați un caracter și nu aveți nevoie de el pentru a acționa ca simbol magic. Există o modalitate prin care poți folosi un caracter pentru a se reprezenta mai degrabă decât funcția sa specială.
Vă vom arăta care sunt personajele „speciale” sau „meta-”, precum și cum le puteți folosi funcțional și literal.
~ Director principal
Tidul (~) este prescurtarea pentru directorul dvs. de acasă. Înseamnă că nu trebuie să tastați calea completă către directorul dvs. de acasă în comenzi. Oriunde te-ai afla în sistemul de fișiere, poți folosi această comandă pentru a merge la directorul tău principal:
cd ~
De asemenea, puteți utiliza această comandă cu căi relative. De exemplu, dacă vă aflați undeva în sistemul de fișiere care nu se află în folderul dvs. de acasă și doriți să treceți la directorul de arhivă din directorul de lucru, utilizați tilde pentru a face acest lucru:
cd ~/work/archive
. Directorul curent
Un punct (.) reprezintă directorul curent. O vedeți în listele de directoare dacă utilizați opțiunea -a (toate) cu ls.
ls -a
De asemenea, puteți utiliza punctul din comenzi pentru a reprezenta calea către directorul curent. De exemplu, dacă doriți să rulați un script din directorul curent, l-ați numi astfel:
./script.sh
Acest lucru îi spune lui Bash să caute în directorul curent fișierul script.sh. În acest fel, nu va căuta în directoarele din calea dvs. pentru a se potrivi executabil sau script.
.. Directorul Parinte
Perioada dublă sau „punct dublu” (..) reprezintă directorul părinte al celui curent. Puteți folosi acest lucru pentru a urca cu un nivel în arborele de directoare.
cd ..
De asemenea, puteți utiliza această comandă cu căi relative — de exemplu, dacă doriți să urcați un nivel în arborele de directoare și apoi să introduceți un alt director la acel nivel.
De asemenea, puteți utiliza această tehnică pentru a vă deplasa rapid la un director la același nivel în arborele de directoare cu cel curent. Urci un nivel și apoi cobori unul într-un alt director.
cd ../gc_help
/ Path Directory Separator
Puteți folosi o bară oblică (/) – adesea numită doar o oblică – pentru a separa directoarele într-un nume de cale.
ls ~/work/archive
O bară oblică reprezintă cea mai scurtă cale de director posibilă. Deoarece totul din arborele directorului Linux începe la directorul rădăcină, puteți folosi această comandă pentru a vă muta rapid în directorul rădăcină:
cd /
# Comentați sau tăiați șirurile
Cel mai adesea, utilizați semnul hash sau numărul (#) pentru a spune shell-ului ceea ce urmează este un comentariu și nu ar trebui să acționeze asupra lui. Îl puteți folosi în scripturi shell și, mai puțin util, pe linia de comandă.
# This will be ignored by the Bash shell
Cu toate acestea, nu este ignorat cu adevărat, deoarece este adăugat la istoricul comenzilor dvs.
De asemenea, puteți utiliza hash pentru a tăia o variabilă șir și pentru a elimina un text de la început. Această comandă creează o variabilă șir numită this_string.
În acest exemplu, atribuim textul „Dave Geek!” la variabila.
this_string="Dave Geek!"
Această comandă folosește ecou pentru a imprima cuvintele „Cum se face” în fereastra terminalului. Acesta preia valoarea stocată în variabila șir prin intermediul a extinderea parametrilor. Deoarece adăugăm hash-ul și textul „Dave”, acesta decupează acea parte a șirului înainte de a fi transmis la ecou.
echo How-To ${this_string#Dave}
Acest lucru nu schimbă valoarea stocată în variabila șir; afectează doar ceea ce este trimis la ecou. Putem folosi echo pentru a imprima valoarea variabilei șir încă o dată și verificați acest lucru:
echo $this_string
? Wildcard cu un singur caracter
Bash shell acceptă trei metacaractere, dintre care unul este semnul întrebării (?). Utilizați metacaracterele pentru a înlocui caracterele din șabloanele de nume de fișier. Un nume de fișier care conține un wildcard formează un șablon care se potrivește cu o serie de nume de fișiere, mai degrabă decât doar unul.
Wildcardul semnului de întrebare reprezintă exact un caracter. Luați în considerare următorul șablon de nume de fișier:
ls badge?.txt
Aceasta se traduce prin „lista orice fișier cu un nume care începe cu „insignă” și este urmat de orice caracter înainte de extensia numelui de fișier.”
Se potrivește cu următoarele fișiere. Rețineți că unele au numere, iar altele au litere după porțiunea „insignă” a numelui fișierului. Wildcardul semnului de întrebare se va potrivi atât cu litere, cât și cu cifre.
Totuși, acel șablon de nume de fișier nu se potrivește cu „badge.txt”, deoarece numele fișierului nu are un singur caracter între „insignă” și extensia de fișier. Wildcardul semnului de întrebare trebuie să se potrivească cu un caracter corespunzător din numele fișierului.
De asemenea, puteți utiliza semnul întrebării pentru a găsi toate fișierele cu un anumit număr de caractere în numele fișierelor. Aceasta listează toate fișierele text care conțin exact cinci caractere în numele fișierului:
ls ?????.txt
* Secvență de caractere Wildcard
Puteți folosi asteriscul
ls badge*
wildcard pentru a reprezenta orice secvență de caractere, inclusiv niciun caracter. Luați în considerare următorul șablon de nume de fișier:
Un
Se potrivește cu „badge.txt”, deoarece caracterul metalic reprezintă orice secvență de caractere sau niciun caracter.
ls source.*
[] Un
Setul de caractere Wildcard
După cum sa menționat mai sus, utilizați semnul întrebării pentru a reprezenta orice caracter și asteriscul pentru a reprezenta orice succesiune de caractere (inclusiv niciun caracter). [] Puteți forma un wildcard cu parantezele pătrate (
) și caracterele pe care le conțin. Caracterul relevant din numele fișierului trebuie apoi să se potrivească cu cel puțin unul dintre caracterele din setul de caractere wildcard.
ls badge_0[246].txt
Un
ls badge_[01][789].txt
Un
ls badge_[23][1-5].txt
Un
; Separator de comandă Shell
ls > count.txt; wc -l count.txt; rm count.txt
Un
count.txt; wc -l count.txt; rm count.txt” comandă într-o fereastră de terminal’ width=”646″ height=”122″ onload=”pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);” onerror=”this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);”>
Rețineți că a doua comandă rulează chiar dacă prima eșuează, a treia rulează chiar dacă a doua eșuează și așa mai departe.
cd ./doesntexist && cp ~/Documents/reports/* .
A
& Proces de fundal
După ce tastați o comandă într-o fereastră de terminal și se finalizează, reveniți la promptul de comandă. În mod normal, acest lucru durează doar un moment sau două. Dar dacă lansați o altă aplicație, cum ar fi gedit, nu puteți utiliza fereastra terminalului până când nu închideți aplicația.
gedit command_address.page &
A
Bash vă arată ID-ul procesului a ceea ce a fost lansat și apoi vă întoarce la linia de comandă. Apoi puteți continua să utilizați fereastra terminalului.
sortWhen a command has input redirected into it, it might behave differently than when it reads from a named file.
If we use wc to count the words, lines, and characters in a file, it prints the values, and then the filename. If we redirect the contents of the file to wc, it prints the same numeric values but doesn’t know the name of the file from which the data came. It cannot print a filename.
Here are some examples of how you can use wc:
wc words.txtwc> Output Redirection
You can use the right-angle bracket ( > ) to redirect the output from a command (typically, into a file); here’s an example:
ls > files.txtcat files.txtUn
files.txt" comandă într-o fereastră de terminal." width="646" height="382" >
wc doesntexist.txt 2> errors.txtcat errors.txtA
errors.txt" comandă într-o fereastră de terminal." width="646" height="122" >
| țeavă
O „țeavă” înlănțuiește comenzile împreună. Preia ieșirea de la o comandă și o transmite la următoarea ca intrare. Numărul de comenzi canalizate (lungimea lanțului) este arbitrar.
Aici, vom folosi cat pentru a alimenta conținutul fișierului word.txt în grep, care extrage orice linie care conține fie un „C” mic, fie majuscul. grep va trece apoi aceste linii pentru a sorta. sortarea folosește opțiunea -r (invers), astfel încât rezultatele sortate vor apărea în ordine inversă.
cat words.txt | grep [cC] | sort -rA
! NOT logic pipeline și operator istoric
Semnul de exclamare (!) este un operator logic care înseamnă NU.
[ ! -d ./backup ] && mkdir ./backupExistă două comenzi în această linie de comandă:
Prima comandă este textul dintre paranteze pătrate;Cea de-a doua comandă este textul care urmează dublele și&&.
Prima comandă folosește ! ca operator logic. Parantezele pătrate indică că urmează să fie efectuat un test. Opțiunea -d (director) testează prezența unui director numit backup. A doua comandă creează directorul.
Deoarece semnele și duble separă cele două comenzi, Bash o va executa pe a doua numai dacă prima reușește. Cu toate acestea, acesta este opusul a ceea ce avem nevoie. Dacă testul pentru directorul „backup” reușește, nu este nevoie să-l creăm. Și dacă testul pentru directorul „backup” eșuează, a doua comandă nu va fi executată și directorul lipsă nu va fi creat.
Aici este operatorul logic! intră. Acţionează ca un NU logic. Deci, dacă testul reușește (adică directorul există), ! inversează asta la „NU succes”, ceea ce înseamnă eșec. Deci, a doua comandă nu este activată.
Dacă testul directorului eșuează (adică directorul nu există), ! schimbă răspunsul la „NU eșec”, care este succes. Deci, comanda de creare a directorului lipsă este executată.
Acel mic! are o mulțime de pumn atunci când aveți nevoie!
ls -l -d backupA
!24A
!!Următorul rulează din nou comanda anterioară:
$ Expresii variabile În shell-ul Bash, creați variabile pentru a păstra valori. Ceva ca variabile de mediu,
există întotdeauna și le puteți accesa oricând deschideți o fereastră de terminal. Acestea dețin valori, cum ar fi numele de utilizator, directorul principal și calea.
echo $USERecho $HOMEecho $PATHUn
ThisDistro=UbuntuMyNumber=2001echo $ThisDistroecho $MyNumberUn
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 ulterioare ale valorii.
MyString=123456qwertyAceasta creează o variabilă care conține un șir de caractere, după cum se arată mai jos:
echo ${MyString}Utilizați următoarea comandă pentru a trimite șirul în fereastra terminalului:
echo ${myString:6}Pentru a returna subșirul care începe la poziția 6 a întregului șir, utilizați următoarea comandă (există o compensare zero, deci prima poziție este zero):
echo ${myString:0:6}Dacă doriți să economisiți un subșir care începe la poziția zero și conține următoarele șase caractere, utilizați următoarea comandă:
echo ${myString:4:4}A
Citarea personajelor speciale
Dacă doriți să utilizați un caracter special ca caracter literal (nespecial), trebuie să spuneți shell-ului Bash. Acest lucru se numește citat și există trei moduri de a face acest lucru.
Dacă introduceți textul între ghilimele (“…”), acest lucru îl împiedică pe Bash să acționeze asupra majorității caracterelor speciale, iar acestea doar se imprimă. O excepție notabilă, totuși, este semnul dolarului ($). Încă funcționează ca caracter pentru expresiile variabile, astfel încât să puteți include valorile din variabile în ieșire.
echo "Today is $(date)"De exemplu, această comandă tipărește data și ora:
echo 'Today is $(date)'Dacă introduceți textul între ghilimele simple ('...'), așa cum se arată mai jos, se oprește funcția tuturor caracterelor speciale:
echo "Today is $(date)"Puteți folosi o bară oblică inversă ( ) pentru a împiedica următorul caracter să funcționeze ca caracter special. Aceasta se numește „scăpare” de personaj; vezi exemplul de mai jos:
Gândiți-vă doar la caracterele speciale ca la comenzi foarte scurte. Dacă memorați utilizările lor, vă poate ajuta enorm înțelegerea shell-ului Bash și a scripturilor altor persoane.