history în Linux / Bash

Afișează și refolosește comenzile scrise anterior în Bash: repetare cu !!, căutare cu Ctrl+R și setări cu HISTSIZE.

Sintaxă comandă
history [N]
!!
!N
!text
Ctrl+R

Ce face history

Bash ține minte comenzile scrise în sesiunea curentă și, la ieșire, le salvează în ~/.bash_history. history le afișează numerotate; cu un număr, de exemplu history 20, afișează doar ultimele 20.

Comenzile se pot repeta fără să fie rescrise: !! este ultima comandă (des folosit ca sudo !!), !42 este comanda cu numărul 42, iar !ssh este ultima comandă care începe cu „ssh”. Cel mai practic este Ctrl+R: scrii o parte din comandă și Bash îți arată ultima potrivire; mai apeși Ctrl+R pentru potrivirile mai vechi.

Variabilele HISTSIZE (câte comenzi în memorie) și HISTFILESIZE (câte în fișier) controlează lungimea istoricului. HISTCONTROL=ignoreboth nu salvează dublurile și comenzile care încep cu spațiu, iar HISTTIMEFORMAT adaugă data și ora. Se pun în ~/.bashrc.

Opțiuni și argumente

Opțiune / Parametru Descriere
history N Ultimele N comenzi.
!!, !N, !text Repetă ultima comandă, comanda numărul N sau ultima care începe cu text.
!$ Ultimul argument al comenzii anterioare.
Ctrl+R Căutare inversă interactivă în istoric.
history -c Golește istoricul din memorie.
history -d N Șterge intrarea cu numărul N.
HISTSIZE, HISTFILESIZE, HISTCONTROL, HISTTIMEFORMAT Variabile pentru mărime, filtrare și afișarea datei.

Exemple

Exemplul 1: Citirea și afișarea unui istoric

Într-un terminal, istoricul se completează singur. Aici, într-un script, activăm istoricul cu set -o history, încărcăm comenzile dintr-un fișier cu history -r, apoi le filtrăm cu grep. Comenzile scrise după încărcare (inclusiv history) primesc și ele numere.

cat > istoric.txt <<'EOF'
cd /var/www/dexblog
git pull
sudo systemctl restart nginx
tail -n 50 /var/log/nginx/error.log
EOF
set -o history
history -c
history -r istoric.txt
history | grep nginx

Rezultat

    4  sudo systemctl restart nginx
    5  tail -n 50 /var/log/nginx/error.log
    6  history | grep nginx

Exemplul 2: Repetarea ultimei comenzi cu sudo

Ai uitat sudo. !! se înlocuiește cu ultima comandă, iar Bash afișează comanda completă înainte s-o ruleze.

apt update
sudo !!

Ieșire în terminal

E: Could not open lock file /var/lib/apt/lists/lock - open (13: Permission denied)
E: Unable to lock directory /var/lib/apt/lists/
sudo apt update
Hit:1 http://ro.archive.ubuntu.com/ubuntu noble InRelease

Exemplul 3: Istoric mai lung, fără dubluri, cu data și ora

Liniile se adaugă în ~/.bashrc. După source ~/.bashrc, history arată și momentul fiecărei comenzi.

HISTSIZE=10000
HISTFILESIZE=20000
HISTCONTROL=ignoreboth
HISTTIMEFORMAT="%F %T  "
history 2

Ieșire în terminal

  501  2026-10-25 09:14:02  git pull
  502  2026-10-25 09:14:30  history 2

Greșeli frecvente

  • Scrierea parolelor sau a cheilor API direct în comenzi: ajung în ~/.bash_history. Cu HISTCONTROL=ignorespace (sau ignoreboth), o comandă care începe cu spațiu nu se salvează.
  • Folosirea lui !text fără verificare: poate rula o comandă veche periculoasă. Cu !text:p doar o afișezi, fără s-o rulezi.
  • Mai multe terminale deschise își suprascriu istoricul la ieșire; shopt -s histappend face ca fiecare să adauge la fișier.

Comenzi înrudite

  • alias: Creează scurtături personalizate și memorabile pentru comenzi lungi sau frecvente.
  • source: Execută comenzile dintr-un fișier direct în contextul shell-ului curent, păstrând variabilele și funcțiile.
  • export: Transformă o variabilă de shell într-o variabilă de mediu (environment variable) accesibilă proceselor copil.
  • man: Deschide manualul oficial al unei comenzi, al unui fișier de configurare sau al unei funcții, direct în terminal.