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.

  • D.

    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.

  • Киев СТО

    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

  • kamilnono2

    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ś