history — istorija komandi
Bash pamti sve što otkucaš. To nije samo udobnost — istorija ti štedi kucanje dugih komandi, pomaže da rekonstruišeš šta si radio pre tri dana, i jedan je od prvih izvora u koji se gleda kad nešto krene naopako.
Oblik komande
history [broj] history [opcije]
- broj — prikaži samo poslednjih toliko komandi
- opcije — brisanje, upis i učitavanje istorije
Pregled
$ history 138 cd /var/log 139 ls -lt 140 tail -n 50 messages 141 systemctl status httpd 142 history
Svaka komanda ima svoj broj — on je bitan, jer se preko njega komanda poziva ponovo.
Ako te zanima samo skorašnje:
$ history 10
A kad tražiš nešto konkretno, provuci kroz grep:
$ history | grep systemctl $ history | grep -i docker
Ovo je jedan od najkorisnijih obrazaca u svakodnevnom radu — setiš se da si nešto radio, ali ne i kako tačno.
Ponavljanje komandi
Strelice
Taster ↑ vraća prethodnu komandu, ↓ ide
napred. Najjednostavniji način i onaj koji ćeš koristiti najviše.
Ctrl+R — pretraga
Ovo je prečica koja stvarno menja tempo rada. Pritisni
Ctrl+R i počni da kucaš — bash traži poslednju komandu koja
sadrži taj tekst:
(reverse-i-search)`httpd': systemctl restart httpd
| Taster | Radnja |
|---|---|
Ctrl+R ponovo | traži dalje unazad |
Enter | izvrši pronađenu komandu |
→ ili Ctrl+E | ubaci je u red za doradu |
Ctrl+G | odustani |
Ako komandu treba malo izmeniti — recimo drugo ime servisa — koristi strelicu umesto Entera.
Oznake sa uzvičnikom
$ !! ponovi poslednju komandu $ !142 ponovi komandu broj 142 $ !-3 ponovi treću odozgo $ !systemctl poslednju koja počinje sa "systemctl" $ !?httpd poslednju koja sadrži "httpd"
Najkorisnija je !!, i to u ovoj situaciji:
$ systemctl restart httpd Failed to restart httpd.service: Access denied $ sudo !!
Zaboravio si sudo — ne kucaš ponovo, nego dodaš ispred.
Delovi prethodne komande
$ !$ poslednji argument prethodne komande $ !^ prvi argument $ !* svi argumenti
Ovo se najviše isplati kad radiš sa dugim putanjama:
$ ls -l /etc/httpd/conf/httpd.conf $ vi !$
Druga komanda otvara isti fajl, bez ponovnog kucanja putanje. Istu stvar
radi i prečica Alt+., koja ubacuje poslednji argument
prethodne komande — a mnogima je udobnija jer odmah vidiš šta si dobio.
Provera pre izvršavanja
Ako nisi siguran šta će !142 pokrenuti, dodaj
:p:
$ !142:p rm -rf /home/alen/staro
Komanda se ispisuje ali se ne izvršava, i ulazi na kraj istorije
pa je posle možeš pozvati sa !!. Dobra navika kad u istoriji
ima komandi koje brišu.
Gde se istorija čuva
$ echo $HISTFILE /home/alen/.bash_history
Fajl je običan tekst i možeš ga čitati:
$ tail -20 ~/.bash_history
Bitan detalj: komande se upisuju u fajl tek pri odjavi, ne odmah. Zato u fajlu neće biti onoga što si kucao u tekućoj sesiji, a ono što kucaš u drugom terminalu nećeš videti u ovom.
Ako ti treba odmah:
$ history -a upiši tekuću sesiju u fajl $ history -r učitaj fajl u tekuću sesiju $ history -c očisti istoriju tekuće sesije
Podešavanje
Ponašanje istorije određuje nekoliko promenljivih. Postavljaju se u
~/.bashrc:
HISTSIZE=10000 HISTFILESIZE=20000 HISTCONTROL=ignoreboth HISTIGNORE="ls:ll:cd:pwd:clear:history" HISTTIMEFORMAT="%F %T "
| Promenljiva | Šta radi |
|---|---|
HISTSIZE | koliko komandi se pamti u sesiji |
HISTFILESIZE | koliko ih ostaje u fajlu |
HISTCONTROL | ignoredups preskače ponovljene, ignorespace preskače one koje počinju razmakom, ignoreboth oba |
HISTIGNORE | obrasci koji se uopšte ne pamte |
HISTTIMEFORMAT | dodaje vreme uz svaku komandu |
Vremenska oznaka je najkorisnija od svih:
$ history 5 138 2026-08-21 14:02:11 cd /var/log 139 2026-08-21 14:02:15 ls -lt 140 2026-08-21 14:03:40 tail -n 50 messages
Bez nje istorija ti kaže šta je urađeno, ali ne i kada — a to je često upravo ono što tražiš.
Kako da komanda ne uđe u istoriju
Ako je postavljeno HISTCONTROL=ignorespace, dovoljan je
razmak ispred:
$ mysql -u root -ptajnalozinka
Komanda se izvršava, ali se ne pamti. Korisno, mada nije pravo rešenje — lozinku i dalje vide drugi korisnici u spisku procesa. Ispravno je koristiti konfiguracioni fajl ili promenljive okruženja.
Brisanje istorije
$ history -d 142 obriši jednu komandu $ history -c očisti sesiju $ history -c && history -w očisti i sesiju i fajl
Ili grubo:
$ > ~/.bash_history
Vredi znati i drugu stranu ovoga. Na deljenom serveru prazna istorija je
sama po sebi sumnjiva — a ozbiljni sistemi ionako beleže komande kroz
auditd ili centralizovane logove, gde korisnik ne može da
briše. Istorija je alat za tvoju udobnost, ne mehanizam bezbednosti.
Zašto istorija ponekad nestane
Više terminala otvoreno istovremeno
Podrazumevano, poslednji koji se zatvori prepiše fajl svojom istorijom. Ono što si radio u drugom prozoru — nestaje.
Rešenje je u ~/.bashrc:
shopt -s histappend PROMPT_COMMAND="history -a; history -n"
Prva linija govori bash-u da dodaje umesto da prepisuje, druga da posle svake komande odmah upiše u fajl i pročita šta su drugi upisali. Time sve sesije dele zajedničku istoriju.
Sesija je prekinuta grubo
Ako zatvoriš prozor umesto da otkucaš exit, ili ti pukne
veza, istorija se ne upisuje. Gornje podešavanje rešava i to.
Skripte nemaju istoriju
Neinteraktivne sesije je ne vode. To je očekivano — istorija postoji za čoveka koji kuca.
Praktični primeri
Šta si radio danas:
$ history | grep "$(date +%F)"
Deset komandi koje najčešće koristiš:
$ history | awk '{print $2}' | sort | uniq -c | sort -rn | head
Sve komande sa docker, pretvorene u skriptu:
$ history | grep docker | cut -d' ' -f4- > docker-komande.sh
Ovo poslednje je zgodan način da posao koji si odradio ručno pretvoriš u skriptu — istorija je već zapisala sve korake.
Vežba
- Pogledaj poslednjih deset komandi
- Pronađi u istoriji sve u kojima se pojavljuje
ls - Pokreni neku komandu, pa je ponovi sa
!! - Otkucaj
ls /etc/hosts, pa zatimcat !$ - Uključi
HISTTIMEFORMATu~/.bashrc, otvori novi terminal i pogledaj razliku - Probaj
Ctrl+Ri pronađi komandu koju si kucao ranije - Vidi šta radi
!142:pna nekom broju iz svoje istorije
Sledeći korak → alias
Povezano: Rad iz komandne linije · grep · echo · Linux osnove
Comments
Post a Comment