Cum să utilizați comanda istoric pe Linux

Shell-ul Linux salvează un istoric al comenzilor pe care le executați și îl puteți căuta pentru a repeta comenzile pe care le-ați executat în trecut. Odată ce înțelegeți comanda istoricului Linux și cum să o utilizați, vă poate crește semnificativ productivitatea.

Manipularea istoriei

La fel de George Santayana a spus celebrul, „Cei care nu-și pot aminti trecutul sunt condamnați să-l repete.” Din păcate, pe Linux, dacă nu vă amintiți trecutul, nu îl puteți repeta, chiar dacă doriți.

Atunci este utilă comanda Linux history. Vă permite să revizuiți și să repetați comenzile anterioare. Acest lucru nu este destinat doar să încurajeze lenea sau să economisească timp – există și un factor de eficiență (și acuratețe). Cu cât o comandă este mai lungă și mai complicată, cu atât este mai greu de reținut și de tastat fără a face o eroare. Există două tipuri de erori: una care împiedică comanda să funcționeze și una care îi permite să funcționeze, dar o face să facă ceva neașteptat.

Comanda history elimină aceste probleme. Ca majoritatea comenzilor Linux, este mai mult decât ai putea crede. Cu toate acestea, dacă învățați cum să utilizați comanda history, vă poate îmbunătăți utilizarea liniei de comandă Linux, în fiecare zi. Este o bună investiție a timpului tău. Există modalități mult mai bune de a utiliza comanda istoric decât să apeși în mod repetat săgeata sus.

Comanda de istorie

În forma sa cea mai simplă, puteți utiliza comanda history tastând doar numele acesteia:

history

The

Lista comenzilor utilizate anterior este apoi scrisă în fereastra terminalului.

Un exemplu de ieșire din

Comenzile sunt numerotate, cu cele mai recent utilizate (cele cu cele mai mari numere) la sfârșitul listei.

Pentru a vedea un anumit număr de comenzi, puteți trece un număr istoricului pe linia de comandă. De exemplu, pentru a vedea ultimele 10 comenzi pe care le-ați folosit, introduceți următoarele:

history 10

The

Puteți obține același rezultat dacă treceți istoricul prin intermediul comanda coadă. Pentru a face acest lucru, tastați următoarele:

history | tail -n 10

The

Repetarea comenzilor

Dacă doriți să reutilizați o comandă din lista istorică, introduceți un semn de exclamare (!) și numărul comenzii fără spații între ele.

De exemplu, pentru a repeta comanda numărul 37, ar trebui să tastați această comandă:

!37

Un

Pentru a repeta ultima comandă, tastați două semne de exclamare, din nou, fără spații:

!!

Un

Acest lucru poate fi util atunci când lansați o comandă și uitați să utilizați sudo. Tastați sudo, un spațiu, semnele duble de exclamare, apoi apăsați Enter.

Pentru exemplul următor, am tastat o comandă care necesită sudo. În loc să tastăm din nou întreaga linie, putem salva o grămadă de apăsări de taste și trebuie doar să tastați sudo !!, așa cum se arată mai jos:

mv ./my_script.sh /usr/local/bin/
sudo !!

Un

Deci, puteți introduce numărul corespunzător din listă pentru a repeta o comandă sau puteți utiliza semnele duble de exclamare pentru a repeta ultima comandă pe care ați folosit-o. Totuși, ce se întâmplă dacă doriți să repetați a cincea sau a opta comandă?

  Cele mai bune 6 instrumente de extragere a criptomonedelor pentru Linux

Puteți folosi un semn de exclamare, o cratimă (-) și numărul oricărei comenzi anterioare (din nou, fără spații) pentru a o repeta.

Pentru a repeta a 13-a comandă anterioară, ar trebui să tastați următoarele:

!-13

Un

Căutarea comenzilor după șir

Pentru a repeta ultima comandă care începe cu un anumit șir, puteți tasta un semn de exclamare, apoi șirul fără spații, apoi apăsați Enter.

De exemplu, pentru a repeta ultima comandă care a început cu sudo, ar trebui să tastați această comandă:

!sudo

Un

Există totuși un element de pericol în asta. Dacă ultima comandă care a început cu sudo nu este cea pe care o crezi, vei lansa comanda greșită.

Pentru a oferi o plasă de siguranță, totuși, puteți utiliza modificatorul :p (print), așa cum se arată mai jos:

!sudo:p

Un

Acest lucru indică istoricului să imprime comanda în fereastra terminalului, mai degrabă decât să o execute. Acest lucru vă permite să vedeți comanda înainte de a o folosi. Dacă este comanda dorită, apăsați săgeata în sus, apoi apăsați Enter pentru a o folosi.

Dacă doriți să găsiți o comandă care conține un anumit șir, puteți utiliza un semn de exclamare și un semn de întrebare.

De exemplu, pentru a găsi și a executa prima comandă de potrivire care conține cuvântul „aliases”, ar trebui să tastați această comandă:

!?aliases

Un

Aceasta va găsi orice comandă care conține șirul „aliasuri”, indiferent de locul în care apare în șir.

Căutare interactivă

O căutare interactivă vă permite să treceți printr-o listă de comenzi potrivite și să repetați pe cea dorită.

Doar apăsați Ctrl+r pentru a începe căutarea.

O fereastră de terminal după

Pe măsură ce introduceți indiciul de căutare, va apărea prima comandă potrivită. Literele pe care le introduceți apar între bifa (`) și apostrof (‘). Comenzile potrivite se actualizează pe măsură ce tastați fiecare literă.

A

De fiecare dată când apăsați Ctrl+r, căutați înapoi următoarea comandă potrivită, care apare în fereastra terminalului.

A

Când apăsați Enter, comanda afișată se va executa.

The

Pentru a edita o comandă înainte de a o executa, apăsați fie tasta săgeată la stânga, fie la dreapta.

A

Comanda apare pe linia de comandă și o puteți edita.

Puteți folosi alte instrumente Linux pentru a căuta în lista istorică. De exemplu, pentru a canaliza ieșirea din istoric în grep și caută comenzi care conțin șirul „aliasuri” puteți folosi această comandă:

history | grep aliases

The

Modificarea ultimei comenzi

Dacă trebuie să remediați o greșeală de tipar și apoi să repetați comanda, puteți folosi semnul de semnătură (^) pentru a o modifica. Acesta este un truc grozav pe care trebuie să-l aveți în mânecă ori de câte ori scrieți greșit o comandă sau doriți să executați din nou una cu o opțiune sau un parametru diferit de linie de comandă.

Pentru a-l utiliza, tastați (fără spații) o liniuță, textul pe care doriți să-l înlocuiți, o altă liniuță, textul cu care doriți să-l înlocuiți, o altă liniuță, apoi apăsați Enter.

De exemplu, să presupunem că tastați următoarea comandă, tastând accidental „shhd” în loc de „sshd”:

sudo systemctl start shhd

Puteți corecta acest lucru cu ușurință tastând următoarele:

^shhd^sshd^

A

Comanda este executată cu „shhd” corectat la „sshd”.

Ștergerea comenzilor din lista istorică

De asemenea, puteți șterge comenzi din lista istorică cu opțiunea -d (ștergere). Nu există niciun motiv să păstrați comanda greșită în lista istoricului.

  Cele mai bune 5 distribuții Linux pentru testarea securității

Puteți folosi grep pentru a-l găsi, trece numărul său în istoric cu opțiunea -d pentru a-l șterge, apoi căutați din nou pentru a vă asigura că a dispărut:

history | grep shhd
history -d 83
history | grep shhd

The

De asemenea, puteți transmite o serie de comenzi opțiunii -d. Pentru a șterge toate intrările din listă de la 22 la 32 (inclusiv), tastați această comandă:

history -d 22 32

Pentru a șterge doar ultimele cinci comenzi, puteți introduce un număr negativ, astfel:

history -d -5

Actualizarea manuală a fișierului istoric

Când vă conectați sau deschideți o sesiune de terminal, lista istorică este citită din fișierul istoric. În Bash, fișierul istoric implicit este .bash_history.

Orice modificări pe care le faceți în sesiunea curentă a ferestrei terminalului sunt scrise în fișierul istoric numai când închideți fereastra terminalului sau când vă deconectați.

Să presupunem că doriți să deschideți o altă fereastră de terminal pentru a accesa lista completă a istoricului, inclusiv comenzile pe care le-ați tastat în prima fereastră de terminal. Opțiunea -a (toate) vă permite să faceți acest lucru în prima fereastră de terminal înainte de a o deschide pe a doua.

Pentru a-l folosi, tastați următoarele:

history -a

The

Comenzile sunt scrise silențios în fișierul istoric.

Dacă doriți să scrieți toate modificările din lista istorică în fișierul istoric (dacă ați șters unele comenzi vechi, de exemplu), puteți utiliza opțiunea -w (scriere), astfel:

history -w

The

Ștergerea listei istorice

Pentru a șterge toate comenzile din lista istorică, puteți utiliza opțiunea -c (șterge), după cum urmează:

history -c

Dacă doriți în plus să forțați aceste modificări la fișierul istoric, utilizați opțiunea -w, astfel:

history -w

Securitatea și fișierul istoric

Dacă utilizați aplicații care vă solicită să introduceți informații sensibile (cum ar fi parole) pe linia de comandă, rețineți că acestea vor fi salvate și în fișierul istoric. Dacă nu doriți să fie salvate anumite informații, puteți utiliza următoarea structură de comandă pentru a le șterge imediat din lista istorică:

special-app my-secret-password;history -d $(history 1)
history 5

A

Această structură include două comenzi separate prin punct și virgulă (;). Să descompunem asta:

special-app: numele programului pe care îl folosim.
my-secret-password: parola secretă pe care trebuie să o furnizăm pentru aplicație pe linia de comandă. Acesta este sfârșitul comenzii.
history -d: În comanda doi, invocăm opțiunea -d (ștergere) a istoricului. Ceea ce vom șterge vine în următoarea porțiune a comenzii.
$(istorie 1): Aceasta folosește o înlocuire de comandă. Porțiunea comenzii conținută în $() este executată într-un subshell. Rezultatul acelei execuții se afișează ca text în comanda originală. Comanda history 1 returnează comanda anterioară. Deci, vă puteți gândi la a doua comandă ca history -d „ultima comandă aici”.

Puteți folosi comanda history 5 pentru a vă asigura că comanda care conține parola a fost eliminată din lista istoricului.

Există totuși o modalitate și mai simplă de a face acest lucru. Deoarece Bash ignoră liniile care încep cu un spațiu în mod implicit, includeți doar un spațiu la începutul liniei, după cum urmează:

 special-app another-password
history 5

A

Comanda cu parola nu este adăugată la lista istoricului. Motivul pentru care funcționează acest truc este conținut în fișierul .bashrc.

Fișierul .bashrc

Fișierul .bashrc se execută de fiecare dată când vă conectați sau deschideți o fereastră de terminal. Conține și câteva valori care controlează comportamentul comenzii history. Să edităm acest fișier cu gedit.

  Cum se instalează Netstat pe Linux

Introduceți următoarele:

gedit .bashrc

The

În partea de sus a fișierului, vedeți două intrări:

HISTSIZE: numărul maxim de intrări pe care le poate conține lista istorică.
HISTFILESIZE: limita pentru numărul de linii pe care un fișier istoric poate conține.

Aceste două valori interacționează în următoarele moduri:

Când vă conectați sau porniți o sesiune de fereastră de terminal, lista istorică este populată din fișierul .bash_history.
Când închideți o fereastră de terminal, numărul maxim de comenzi setat în HISTSIZE este salvat în fișierul .bash_history.
Dacă opțiunea histappend shell este activată, comenzile sunt atașate la .bash_history. Dacă histappend nu este setat, .bash_history este suprascris.
După salvarea comenzilor din lista istorică în .bash_history , fișierul istoric este trunchiat pentru a nu conține mai mult de linii HISTFILESIZE.

De asemenea, în partea de sus a fișierului, vedeți o intrare pentru valoarea HISTCONTROL.

The

Puteți seta această valoare pentru a face oricare dintre următoarele:

ignorespaces: liniile care încep cu un spațiu nu sunt adăugate la lista istoricului.
ignoredups:Comenzile duplicate nu sunt adăugate la fișierul istoric.
ignoreboth: Activează ambele variante de mai sus.

De asemenea, puteți enumera anumite comenzi pe care nu doriți să le adăugați la lista istorică. Separați-le cu două puncte (:) și puneți-le între ghilimele (“…”).

Veți urma această structură pentru a adăuga o linie la fișierul dvs. .bashrc și pentru a înlocui comenzile pe care doriți să le ignorați:

export HISTIGNORE="ls:history"

Un

Utilizarea marcajelor de timp

Dacă doriți să adăugați marcaje temporale la lista istoricului, puteți utiliza setarea HISTIMEFORMAT. Pentru a face acest lucru, trebuie doar să adăugați o linie ca următoarea în fișierul dvs. .bashrc:

export HISTTIMEFORMAT="%c "

Rețineți că există un spațiu înainte de ghilimele de închidere. Acest lucru împiedică marcajul de timp să ajungă la comenzile din lista de comenzi.

Un

Acum, când rulați comanda history, vedeți marcajele de dată și de timp. Rețineți că toate comenzile care au fost în lista istorică înainte de a adăuga marcajele de timp vor fi marcate cu data și ora primei comenzi care primește o marca temporală. În acest exemplu prezentat mai jos, aceasta a fost comanda 118.

Acesta este un marcaj de timp foarte lung. Cu toate acestea, puteți utiliza alte simboluri decât %c pentru a o rafina. Celelalte jetoane pe care le puteți folosi sunt:

%d: Ziua
%m: lună
%y: Anul
%H: Ora
%M: Minute
%S: secunde
%F: dată completă (format an-lună-dat)
%T: Ora (format oră:minute:secunde)
%c: ștampila completă a datei și orei (formate zi-data-lună-an și oră:minute:secunde)

Să experimentăm și să folosim câteva jetoane diferite:

export HISTTIMEFORMAT="%d n%m %T "

Exportul HISTTIMEFORMAT=

Ieșirea folosește ziua, luna și ora.

Dacă eliminăm ziua și luna, totuși, va arăta doar ora.

Orice modificări pe care le faceți la HISTIMEFORMAT se aplică întregii liste de istoric. Acest lucru este posibil deoarece timpul pentru fiecare comandă este stocat ca numărul de secunde din epoca Unix. Directiva HISTTIMEFORMAT specifică pur și simplu formatul folosit pentru a reda acel număr de secunde într-un stil care poate fi citit de om, cum ar fi:

export HISTTIMEFORMAT="%T "

The

Producția noastră este acum mai ușor de gestionat.

De asemenea, puteți utiliza comanda history pentru a audita. Uneori, examinarea comenzilor pe care le-ați folosit în trecut vă poate ajuta să identificați ce ar fi putut cauza o problemă.

Așa cum poți în viață, pe Linux, poți folosi comanda history pentru a retrăi vremurile bune și a învăța din cele rele.