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:
- Wciskając strzałkę do góry pojawi się nam poprzednie polecenie
!!– uruchomione zostanie poprzednio wydane polecenie!-1– uruchomione zostanie poprzednio wydane polecenie[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.























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
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ś