Baza shell este mediul terminal standard inclus în majoritatea distribuțiilor Linux, inclus în MacOS și disponibil pentru instalare pe Windows 10. Își amintește comenzile pe care le tastați și le stochează într-un fișier istoric. Probabil știți câteva elemente de bază ale istoriei bash, dar este mult mai puternic decât ați putea realiza.
Pentru a parcurge istoricul bash, puteți utiliza câteva comenzi rapide de la tastatură utile pentru bash. Apăsați aceste comenzi rapide și comenzile pe care le-ați utilizat anterior vor apărea la prompt.
Bash are, de asemenea, un mod special de "recall" pe care îl puteți utiliza pentru a căuta comenzi pe care le-ați rulat anterior, mai degrabă decât să le deplasați unul câte unul.
Puteți imprima întregul istoric de bash pe ecran executând o singură comandă:
istorie
Veți vedea o listă cu toate comenzile din istoricul dvs. de bash, împreună cu un număr în partea stângă a fiecăruia. Comanda cu "1" de lângă ea este cea mai veche comandă din istoricul dvs. bash, în timp ce comanda cu cel mai mare număr este cea mai recentă.
Puteți face orice doriți cu ieșirea. De exemplu, ați putea să o conduceți la grep
comanda pentru a căuta istoricul comenzilor.
istorie | grep your_search
Ați putea, de asemenea, să o conduceți la coadă
comanda pentru a vizualiza doar un număr mic de comenzi recente pe care le-ați executat. De exemplu, următoarea comandă ar arăta ultimele 5 intrări din istoricul dvs.
istorie | coada -5
Bash poate să "extindă" rapid comenzile anterioare sau să le extindă și să le modifice. Această caracteristică este cunoscută sub numele de "expansiune de istorie" și folosește un semn de exclamare, cunoscut sub numele de "bang". Doar tastați-le la prompt și apăsați pe Enter pentru a le rula ca și cum ați rula orice altă comandă.
Pentru a rula o comandă specifică din istoricul dvs. cu numărul său, utilizați următoarea comandă:
!#
De exemplu, să presupunem că ați vrut să executați comanda a 12-a din istoria dvs. bash. Aceasta este comanda cu un "12" la stânga de ea atunci când rulați istorie
comanda. Ați tasta următoarea comandă.
!12
Pentru a relua ultima comandă pe care ați executat-o, tastați următoarele. Acest lucru are același efect ca apăsând o dată pe săgeata Sus pentru a vedea comanda anterioară și apoi apăsați Enter.
!!
De asemenea, puteți consulta o comandă un anumit număr de linii înapoi. De exemplu, !-2
ar executa cea de-a doua comanda pe care ai fugit-o. !!
înseamnă același lucru ca și !-1
.
Această extindere funcționează oriunde pe linie. Puteți adăuga orice doriți înainte sau după!!
sau oricare dintre celelalte expresii din această secțiune. De exemplu, puteți introduce următoarea comandă pentru a relua ultima comandă prin care ați trecut sudo
, oferindu-i privilegii de root. Acest lucru este util în special dacă uitați să adăugațisudo
înainte de a rula o comandă.
sudo !!
Sau, de exemplu, puteți relua comanda anterioară și țeavă ieșirea ei în grep pentru a căuta un text.
!! | text grep
Pentru a căuta o comandă în istoricul dvs. și ao executa, tastați următoarele. Aceasta va executa ultima comandă care se potrivește cu textul specificat de dvs.:
!text
Deci, dacă ai rulat recent o comandă care a început cu ping
, puteți rula următoarea comandă pentru ao căuta. Aceasta va căuta înapoi prin istoria dvs., găsiți cea mai recentă comandă care începe cu "pi
"Și executați imediat:
! pi
Puteți adăuga o : p
la oricare dintre expansiunile de mai sus și bash va imprima comanda la terminal fără să o execute. Acest lucru este util dacă doriți să confirmați că selectați comanda corectă înainte să o executați.
! 12: p
!!: p
! Text: p
Bash vă permite, de asemenea, să executați o comandă nouă, dar folosiți argumente din comenzile anterioare din istoric. Acest lucru vă poate ajuta să reutilizați rapid argumentele lungi sau complicate, fără a fi nevoie să le retipăriți.
comanda!
De exemplu, să presupunem că ați executat comanda atingeți / home / chris / some_long_file_name_you_dont_want_to_type_again
. Acum doriți să executați comanda nano / home / chris / some_long_file_name_you_dont_want_to_type_again
. În loc să tastați întregul lucru de la zero, puteți rula:
nano! $
!$
ar face ca bash să completeze automat ultimul argument din comanda anterioară.
Acest lucru completează numai ultimul argument. Deci, dacă fugi ping google.com -c 4
și apoi alerga ping! $
, acest lucru s-ar extinde la "ping 4
“.
Pentru a remedia această situație, puteți utiliza următorul truc pentru a extinde primul argument pe linie, și nu ultimul:
comanda! ^
Deci, dacă ai fugit ping google.com -c 4
și apoi a fugit ping! ^
, bash ar extinde acest lucru la "ping google.com "
.
Pentru a completa toate argumentele utilizate în comanda anterioară, în loc de un singur argument, ați folosi următoarele:
comandă! *
Deci, dacă ai fugit ping! *
în schimb, bash va completa automat toate argumentele pe care le-ați utilizat în comanda anterioară.
Puteți folosi același truc pe care îl utilizați pentru a rula comenzi din istoria dvs. pentru a obține argumente de la acestea. Trebuie doar să utilizați formularul următor.
comanda! abc: #
De exemplu, am executat comanda sudo hostname ubuntu
mai devreme. Dacă executăm următoarea comandă, bash va căuta înapoi prin istorie pentru a găsi ultima comandă care începe cu literele pe care le scriem și vom completa argumentul pe care îl specificăm. Deci, dacă alergăm echo! su: 2
, bash va căuta înapoi pentru a găsi ultima comandă care începe cu "su
"Și completați al doilea argument, care este"ubuntu
“.
Alte trucuri funcționează așa cum s-ar putea aștepta. De exemplu, înlocuirea numărului cu un asterisc, cunoscut sub numele de wildcard, face ca bash să completeze toate argumentele din comandă:
comanda! abc: *
Bash vă permite, de asemenea, să reluați comanda anterioară și să specificați ceva care ar trebui schimbat. Acest lucru poate fi util pentru corectarea unei greșeli într-o comandă. De exemplu, următoarea comandă va relua comanda anterioară, înlocuind textul "abc
"În ea cu textul"xyz
“.
^ Abc ^ xyz
De exemplu, dacă ați alergat accidental ping gogle.com
, atunci ai putea rula ^ ^ Gog goog
și bash ar executa comanda ping google.com
in schimb.
Cache-ul bash stochează istoricul comenzilor pe care le-ați executat în fișierul istoric al contului de utilizator la ~ / .bash_history în mod implicit. De exemplu, dacă numele dvs. de utilizator este bob, veți găsi acest fișier la /home/bob/.bash_history.
Deoarece istoricul dvs. este stocat într-un fișier, acesta persistă între sesiuni. Puteți rula niște comenzi, deconectați-vă, reveniți a doua zi și aceste comenzi vor fi încă în fișierul istoric gata pentru vizualizare și utilizare. Fiecare cont de utilizator are propriul fișier istoric cu un istoric de comandă separat.
Pentru a șterge istoricul bash, puteți executa următoarea comandă. Aceasta șterge conținutul fișierului .bash_history al contului dvs. de utilizator:
istoric -c
Bash își amintește doar un număr limitat de comenzi în mod prestabilit, împiedicând ca fișierul istoric să crească prea mult. Numărul de intrări de istoric pe care le memorează bash este controlat de HISTSIZE
variabil. Valoarea prestabilită este de obicei 500 sau 1000 de intrări. Puteți rula următoarea comandă pentru a vedea dimensiunea istoricului de bash din sistemul dvs.
echo $ HISTSIZE
Pentru a seta istoricul la zero, executați următoarea comandă.
HISTSIZE = 0
Pentru sesiunea curentă, bash nu va stoca nici o intrare în istoric, dacă nu executați o comandă HISTSIZE = 1000
pentru ao readuce la un anumit număr de intrări.
Bash vă permite să ignorați intrările de istoric care încep cu un spațiu dacă setați HISTCONTROL
variabil la ignorespace.
HISTCONTROL = ignorespace
Introduceți un spațiu înainte de o comandă înainte de ao executa în shell-ul bash și comanda va funcționa normal, dar nu va apărea în istoricul dvs. dacă aveți această variabilă activată. Acest lucru vă permite să păstrați istoricul dvs. puțin mai curat, alegeți să rulați comenzi fără ca acestea să apară în istoricul dvs.
Bash vă permite, de asemenea, să ignorați comenzile duplicate care vă pot dezordine istoria. Pentru a face acest lucru, setați HISTCONTROL
la ignoredups.
HISTCONTROL = ignoredups
Pentru a utiliza ambele ignorespace
și ignoredups
caracteristică, setați HISTCONTROL
variabil la ignoreboth.
HISTCONTROL = ignoreboth
Rețineți că variabilele bash pe care le-ați setat vor persista doar pentru sesiunea curentă. Va trebui să le adăugați în fișierul .bashrc al contului dvs. de utilizator pentru a seta automat aceste valori în fiecare sesiune bash pe care o porniți, dacă preferați acest lucru.
Cochilia bash este o unealtă complexă cu multe opțiuni mai mult decât acestea. Consultați secțiunile Istoricul Bash și Istoria expansiunii în manualul oficial de bash, informații mai detaliate și alte trucuri avansate pe care le puteți utiliza.