Pracując z powłoką Basha, bardzo często korzystamy z polecenia history, aby przejrzeć ostatnie polecenia jakie były wykonywane na maszynie. Przydaje się to nam do przypomnienia sobie poleceń, pozwala sprawdzić jakie programy były uruchamiane w ostatnim czasie. Jeżeli na danym koncie pracuje kilu użytkowników, możemy zobaczyć jakie wydawali oni polecenia. Domyślne ustawienia historii Basha możemy łatwo zmienić. Dzięki temu wzbogacimy naszą historię o wiele użytecznych informacji.

Zmiana rozmiaru Bash History

Za wielkość pliku historii odpowiedzialna jest zmienna HISTFILESIZE. Domyślnie zmienna ta, przechowuje wartość 500. Polecenie history zatem 500 ostatnich poleceń wydanych w powłoce.

  490  fuser -a szafir.php
  491  fuser -a /home/kamil/
  492  vim szafir.php
  493  cat .htpasswd
  494  service httpd restart
  495  vim index.php
  496  vim .htpasswd
  497  vim .htpasswd
  498  vim wsinf.php
  499  echo $HISTFILESIZE
  500  history

Dodając do pliku ~/.bashrc, polecenie export HISTFILESIZE=2000, zwiększymy ilość linii do 2000.

Zmiana formatu pliku historii

Domyślny format historii pokazuje numer polecenia oraz polecenie. Niestety taki format nie informuje nas o dacie wykonania polecenia. Możemy to zmienić za pomocą zmiennej HISTTIMEFORMAT. Przechowuje ona format historii basha.

Możemy ustawić zmienną w taki sposób, aby przed każdym poleceniem zapisywała datę i czas wykonania polecenia: HISTTIMEFORMAT="[%d/%m/%y %T] ". Wtedy historia będzie wyglądała następująco:

  299  [15/01/11 13:41:21] wget http://ftp.cc.uoc.gr/mirrors/linux/moonos/moonos-2-kachana-desktop-i386.iso
  300  [15/01/11 13:41:21] uptime
  301  [15/01/11 13:41:21] w
  302  [15/01/11 13:41:21] date
  303  [15/01/11 13:41:21] cd svn/
  304  [15/01/11 13:41:21] ls
  305  [15/01/11 13:41:21] cd www/
  306  [15/01/11 13:41:21] svn update
  307  [15/01/11 13:41:21] cat /etc/hosts

Szybkie uruchamianie poprzednich poleceń

Bash udostępnia nam kilka skrótów, dzięki którym możemy wykonań ponownie polecenie jakie właśnie się zakończyło. Istnieje kilka metod na wykonanie tej czynności:

  1. Wciskając strzałkę do góry pojawi się nam poprzednie polecenie
  2. !! – uruchomione zostanie poprzednio wydane polecenie
  3. !-1 – uruchomione zostanie poprzednio wydane polecenie
  4. [Ctrl] + P – wyświetli się poprzednio wydane polecenie

Możemy również w prosty sposób odwołać się do polecenia o konkretnym numerze w historii za pomocą znaku ! poprzedzającego numer polecenia.

  518  [15/01/11 14:24:00] pwd
  519  [15/01/11 14:24:05] ping wp.pl
  520  [15/01/11 14:24:08] history
kamil@muszelka:~$ !518
pwd
/home/kamil

Znak ten pozwoli nam również na przywołanie z historii polecenia, które zaczyna się na konkretne słowo. Jeżeli wcześniej wykonaliśmy np. polecenie ps -efww | grep mysql, możemy je przywołać poleceniem !ps.

Kontrolowanie historii

Do kontrolowania wpisów w historii służy zmienna HISTCONTROL. Pozwala ona na eliminowanie duplikatów poleceń w historii. Wystarczy ustawić: export HISTCONTROL=ignoredups.

Aby usunąć duplikaty z historii należy wydać polecenie export HISTCONTROL=erasedups. Jeżeli z jakiegoś powodu nie chcemy aby dane polecenie zapisało się w historii możemy ustawić zmienną jako: export HISTCONTROL=ignorespace. Poprzedzając wtedy polecenie spacją, nie zostanie ono zapisane w historii.

Aby wyczyścić całkowicie historię należy wydać polecenie history -c. Aby specyficzne polecenia nie były zapisywane w historii możemy ustawić zmienną: export HISTIGNORE="pwd:ls:ls -ltr:". W parametrze podajemy polecenia jakie będą ignorowane.

PROMPT_COMMAND

Bash udostępnia nam jeszcze jedną bardzo ciekawą zmienną środowiskową. Jest nią PROMPT_COMMAND. Zawartość tej zmiennej jest wykonywana jako zwykłe polecenie Basha, przed wyświetleniem prompta.

Bash provides an environment variable called PROMPT_COMMAND. The contents of this variable are executed as a regular Bash command just before Bash displays a prompt. Dzięki temu możemy wykonywać różne polecenia automatycznie, podczas pracy w konsoli. Pozwoli to na wyświetlenie np. aktualnej godziny przez promptem PS1.

kamil@muszelka:~$ export PROMPT_COMMAND="echo -n [$(date +%k:%m:%S)]"
[18:01:29]kamil@muszelka:~$ uptime
 18:32:00 up 37 days, 17:27, 10 users,  load average: 0.55, 0.52, 0.47
[18:01:29]kamil@muszelka:~$

Inny przykład wykorzystania zmiennej. Pokazuje i koloruje aktualną ścieżkę w jakiej się znajdujemy.

export PROMPT_COMMAND='if (($? > 0)); then echo -ne "\033[1;31m"; fi'; export PS1='[\[\]\u\[\033[0m\] \[\033[1;34m\]\w\[\033[0m\]]\$ '

Aby wyłączyć tę właściwość wystarczy wpisać unset PROMPT_COMMAND.

Poprzedni artykułVirtualBox 4.0.4
Następny artykułScientific Linux 6 RC1

3 KOMENTARZE

  1. export PROMPT_COMMAND="echo -n [$(date +%k:%m:%S)]"

    pozwoli na wyświetlenie godziny o której wykonałeś powyższą deklarację. Jak widać w przykłądzie który podałeś to wciąż [18:01:29], a komenda uptime wykonywana była pół godziny później.

  2. Nice blog right here! Additionally your web site lots up fast! What web host are you using? Can I am getting your associate hyperlink on your host? I desire my site loaded up as fast as yours lol

  3. Ludzie w ~/.bashrc podstawowe rzeczy;
    EDITOR= ważne przykładowo dla visudo
    HISTSIZE= polecam dużo większy np. 5tys lub 10tys
    HISTCONTROL=ignoredups:erasedups
    HISTTIMEFORMAT="%H%M %d/%m " to już według upodobania
    PS1='uju masz: ' standardowy jest beznadziejny i zajmuje za dużo znaków

    i to tak. KAŻDY SZANUJĄCY SIĘ LINUXIARZ ZASTOSOWANIE "history | grep komenda/część komendy" POWINIEN ZNAĆ!!!!! TO PODSTAWA PRZY SPRAWNEJ EGZYSTENCJI NP. gdy nie pamiętamy paramterów KVM czy tam przy kompilacji czegoś

ZOSTAW ODPOWIEDŹ

Proszę wpisać swój komentarz!
Proszę podać swoje imię tutaj