Wyszukiwanie w witrynie

Potęga „Polecenia historii” systemu Linux w powłoce Bash


Często używamy polecenia historia w naszych codziennych, rutynowych zadaniach, aby sprawdzić historię poleceń lub uzyskać informacje o poleceniu wykonanym przez użytkownika. W tym poście zobaczymy, jak skutecznie wykorzystać polecenie historii do wyodrębnienia polecenia wykonanego przez użytkowników w powłoce Bash. Może to być przydatne do celów audytu lub sprawdzenia, jakie polecenie jest wykonywane, w jakiej dacie i godzinie.

Domyślnie data i znacznik czasu nie będą widoczne podczas wykonywania polecenia historia. Jednak powłoka bash udostępnia narzędzia CLI do edytowania historii poleceń użytkownika. Zobaczmy kilka przydatnych porad i wskazówek oraz siłę polecenia historia.

1. Wyświetl listę ostatnio/wszystkich wykonanych poleceń w systemie Linux

Wykonanie prostego polecenia historia z terminala wyświetli pełną listę ostatnio wykonanych poleceń wraz z numerami linii.

[narad@tecmint ~]$ history

    1  PS1='\e[1;35m[\u@\h \w]$ \e[m '
    2  PS1="\e[0;32m[\u@\h \W]$ \e[m "
    3  PS1="\u@\h:\w [\j]$ "
    4  ping google.com
    5  echo $PS1
    6   tail -f /var/log/messages
    7  tail -f /var/log/messages
    8  exit
    9  clear
   10  history
   11  clear
   12  history

2. Wypisz wszystkie polecenia z datą i znacznikiem czasu

Jak znaleźć datęiznacznik czasu względem polecenia? Polecenie „eksportuj” ze zmienną wyświetli historię polecenia z odpowiednim znacznikiem czasu, kiedy polecenie zostało wykonane.

[narad@tecmint ~]$ export HISTTIMEFORMAT='%F %T  '

      1  2013-06-09 10:40:12   cat /etc/issue
      2  2013-06-09 10:40:12   clear
      3  2013-06-09 10:40:12   find /etc -name *.conf
      4  2013-06-09 10:40:12   clear
      5  2013-06-09 10:40:12   history
      6  2013-06-09 10:40:12   PS1='\e[1;35m[\u@\h \w]$ \e[m '
      7  2013-06-09 10:40:12   PS1="\e[0;32m[\u@\h \W]$ \e[m "
      8  2013-06-09 10:40:12   PS1="\u@\h:\w [\j]$ "
      9  2013-06-09 10:40:12   ping google.com
     10  2013-06-09 10:40:12   echo $PS1
Znaczenie zmiennych HISTTIMEFORMAT
%F Equivalent to %Y - %m - %d
%T Replaced by the time ( %H : %M : %S )

3. Filtruj polecenia w historii

Jak widzimy, to samo polecenie jest powtarzane wiele razy w powyższym wyjściu. Jak filtrować proste lub nieniszczące polecenia w historii?. Użyj następującego polecenia „eksportuj”, podając polecenie w HISTIGNORE=’ls -l:pwd:date:’, które nie zostanie zapisane przez system i nie będzie wyświetlane w poleceniu historii.

[narad@tecmint ~]$ export HISTIGNORE='ls -l:pwd:date:'

4. Ignoruj zduplikowane polecenia w historii

Poniższe polecenie pomoże nam zignorować zduplikowane polecenia wprowadzone przez użytkownika. Jeśli użytkownik wykona to samo polecenie wiele razy w wierszu poleceń Bash, w historii zostanie wyświetlony tylko pojedynczy wpis.

[narad@tecmint ~]$ export HISTCONTROL=ignoredups

5. Cofnij ustawienie polecenia eksportu

Cofnij ustawienie polecenia eksportu w locie. Wykonaj polecenie unset eksport ze zmienną jeden po drugim, niezależnie od poleceń, które zostały wyeksportowane za pomocą polecenia export.

[narad@tecmint ~]$ unset export HISTCONTROL

6. Zapisz na stałe polecenie eksportu

Wprowadź następujący wpis w .bash_profile, aby trwale zapisać polecenie eksport.

[narad@tecmint ~]$ vi .bash_profile

.bash_profile

Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

User specific environment and startup programs

export HISTCONTROL=ignoredups

PATH=$PATH:$HOME/bin
export PATH

7. Wypisz polecenia wykonane przez konkretnego użytkownika

Jak zobaczyć historię poleceń wykonanych przez konkretnego użytkownika. Bash przechowuje zapisy historii w pliku „~/.bash_history”. Możemy wyświetlić lub otworzyć plik, aby zobaczyć historię poleceń.

[narad@tecmint ~]$ vi .bash_history

cd /tmp/
cd logstalgia-1.0.3/
./configure
sudo passwd root
apt-get install libsdl1.2-dev libsdl-image1.2-dev libpcre3-dev libftgl-dev libpng12-dev libjpeg62-dev make gcc
./configure
make
apt-get install libsdl1.2-dev libsdl-image1.2-dev libpcre3-dev libftgl-dev libpng12-dev libjpeg62-dev make gcc++
apt-get install libsdl1.2-dev libsdl-image1.2-dev libpcre3-dev libftgl-dev libpng12-dev libjpeg62-dev make gcc
apt-get install make
mysql -u root -p
apt-get install grsync
apt-get install unison
unison

8. Wyłącz zapisywanie historii poleceń

Niektóre organizacje nie przechowują historii poleceń ze względu na politykę bezpieczeństwa organizacji. W tym przypadku możemy edytować plik .bash_profile (jest to plik ukryty) użytkownika i wprowadzić wpis jak poniżej.

[narad@tecmint ~]$ vi .bash_profile

.bash_profile

Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

User specific environment and startup programs

PATH=$PATH:$HOME/bin
HISTSIZE=0
export PATH
.bash_profile (END)

Zapisz plik i załaduj zmiany za pomocą poniższego polecenia.

[narad@tecmint ~]$ source .bash_profile

Uwaga: Jeśli nie chcesz, aby system zapamiętywał wpisane polecenia, po prostu wykonaj poniższe polecenie, które wyłączy lub zatrzyma zapisywanie historii na bieżąco.

[narad@tecmint ~]$ export HISTSIZE=0

Wskazówki: Wyszukaj „HISTSIZE” i edytuj w pliku „/etc/profile” za pomocą superużytkownika. Zmiana w pliku będzie miała wpływ globalnie.

9. Usuń lub wyczyść historię poleceń

Za pomocą strzałek w górę i w dół możemy zobaczyć wcześniej użyte polecenie, które może być pomocne lub może Cię zirytować. Usuwanie lub czyszczenie wszystkich wpisów z listy historii basha za pomocą opcji „-c”.

[narad@tecmint ~]$ history -c

10. Wyszukaj polecenia w historii za pomocą polecenia Grep

Wyszukaj polecenie w „.bash_history”, przesyłając plik historii do „grep”, jak poniżej. Na przykład poniższe polecenie przeszuka i znajdzie polecenie „pwd” na liście historii.

[narad@tecmint ~]$ history | grep pwd

  113  2013-06-09 10:40:12     pwd
  141  2013-06-09 10:40:12     pwd
  198  2013-06-09 15:46:23     history | grep pwd
  202  2013-06-09 15:47:39     history | grep pwd

11. Wyszukaj ostatnio wykonane polecenie

Wyszukaj poprzednio wykonane polecenie za pomocą polecenia „Ctrl+r”. Po znalezieniu szukanego polecenia naciśnij „Enter”, aby wykonać to samo, lub naciśnij „Esc”, aby je anulować.

(reverse-i-search)`source ': source .bash_profile

12. Przywołaj ostatnio wykonane polecenie

Przywołaj poprzednio użyte konkretne polecenie. Kombinacja polecenia Bang i 8 (!8) przywołuje polecenie numer 8, które wykonałeś.

[narad@tecmint ~]$ !8

13. Przywołaj ostatnio wykonane określone polecenie

Przywołaj poprzednio użyte polecenie (netstat -np | grep 22) za pomocą „!” i kilku liter tego konkretnego polecenia.

[narad@tecmint ~]$ !net
netstat -np | grep 22
(No info could be read for "-p": geteuid()=501 but you should be root.)
tcp        0     68 192.168.50.2:22             192.168.50.1:1857           ESTABLISHED -
tcp        0      0 192.168.50.2:22             192.168.50.1:2516           ESTABLISHED -
unix  2      [ ]         DGRAM                    12284  -                   @/org/freedesktop/hal/udev_event
unix  3      [ ]         STREAM     CONNECTED     14522  -
unix  2      [ ]         DGRAM                    13622  -
unix  3      [ ]         STREAM     CONNECTED     12250  -                   @/var/run/hald/dbus-ujAjOMNa0g
unix  3      [ ]         STREAM     CONNECTED     12249  -
unix  3      [ ]         STREAM     CONNECTED     12228  -                   /var/run/dbus/system_bus_socket
unix  3      [ ]         STREAM     CONNECTED     12227  -

Staraliśmy się podkreślić siłę nakazu historii. Jednak to nie koniec. Podziel się z nami swoimi doświadczeniami z polecenia historii za pomocą pola komentarza poniżej.