Weboldal keresés

A Linux „History Command” ereje a Bash Shellben


Napi rutinfeladataink során gyakran használjuk a history parancsot, hogy ellenőrizzük a parancsok előzményeit, vagy információt kapjunk a felhasználó által végrehajtott parancsokról. Ebben a bejegyzésben látni fogjuk, hogyan használhatjuk hatékonyan a történelem parancsot a felhasználók által a Bash shellben végrehajtott parancs kibontására. Ez hasznos lehet ellenőrzési célból, vagy annak kiderítéséhez, hogy melyik parancs milyen dátummal és időponttal fut le.

Alapértelmezés szerint a dátum és az időbélyeg nem látható a history parancs végrehajtása közben. A bash shell azonban CLI eszközöket biztosít a felhasználói parancselőzmények szerkesztéséhez. Lássunk néhány hasznos tippet és trükköt, valamint a history parancs erejét.

1. Sorolja fel az utolsó/összes végrehajtott parancsot Linuxban

Az egyszerű history parancs végrehajtása a terminálról megmutatja az utoljára végrehajtott parancsok teljes listáját sorszámokkal.

[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. Sorolja fel az összes parancsot dátummal és időbélyeggel

Hogyan találhat dátumot és időbélyeget a parancs ellenében? Az 'export' parancs változóval megjeleníti a történelem parancsot a megfelelő időbélyeggel, amikor a parancsot végrehajtották.

[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
A HISTTIMEFORMAT változók jelentése
%F Equivalent to %Y - %m - %d
%T Replaced by the time ( %H : %M : %S )

3. Parancsok szűrése az előzményekben

Amint látjuk, ugyanaz a parancs többször ismétlődik a fenti kimenetben. Hogyan lehet kiszűrni az egyszerű vagy nem destruktív parancsokat a történelemben? Használja a következő „export” parancsot a parancs megadásával a HISTIGNORE='ls -l:pwd:date:' mezőben, és a rendszer nem menti el, és nem jelenik meg az előzmények parancsban.

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

4. Hagyja figyelmen kívül a duplikált parancsokat a történelemben

Az alábbi paranccsal figyelmen kívül hagyhatjuk a felhasználó által írt ismétlődő parancsbeviteleket. Csak egyetlen bejegyzés jelenik meg az előzményekben, ha a felhasználó ugyanazt a parancsot többször is végrehajtja egy Bash Promptban.

[narad@tecmint ~]$ export HISTCONTROL=ignoredups

5. Az exportálási parancs kikapcsolása

Az export parancs kikapcsolása menet közben. Egyesével hajtsa végre az unset export parancsot a változókkal, függetlenül attól, hogy milyen parancsokat exportált az export parancs.

[narad@tecmint ~]$ unset export HISTCONTROL

6. Mentse az export parancsot véglegesen

Az export parancs végleges mentéséhez írja be a következőképpen: .bash_profile.

[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. Sorolja fel az adott felhasználó által végrehajtott parancsokat

Hogyan lehet megtekinteni egy adott felhasználó által végrehajtott parancselőzményeket. A Bash egy '~/.bash_history' fájlban tartja nyilván az előzményeket. Megtekinthetjük vagy megnyithatjuk a fájlt a parancselőzmények megtekintéséhez.

[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. Tiltsa le a parancsok előzményeinek tárolását

Egyes szervezetek nem vezetik a parancsok előzményeit a szervezet biztonsági politikája miatt. Ebben az esetben szerkeszthetjük a felhasználó .bash_profile fájlját (ez egy rejtett fájl), és beírhatjuk az alábbiak szerint.

[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)

Mentse el a fájlt és töltse be a változtatásokat az alábbi paranccsal.

[narad@tecmint ~]$ source .bash_profile

Megjegyzés: Ha nem szeretné, hogy a rendszer emlékezzen az Ön által beírt parancsokra, egyszerűen hajtsa végre az alábbi parancsot, amely menet közben letiltja vagy leállítja az előzmények rögzítését.

[narad@tecmint ~]$ export HISTSIZE=0

Tippek: Keressen rá a „HISTSIZE” kifejezésre, és szerkessze az „/etc/profile” fájlban superuser segítségével. A fájl módosítása globálisan érvényes.

9. Törölje vagy törölje a parancsok előzményeit

A fel és le nyíllal láthatjuk a korábban használt parancsokat, amelyek hasznosak lehetnek, vagy felháboríthatják. Az összes bejegyzés törlése vagy törlése a bash előzmények listájából a „-c” opciókkal.

[narad@tecmint ~]$ history -c

10. Parancsok keresése az előzményekben a Grep paranccsal

Keresés a parancsban a „.bash_history” fájlban úgy, hogy az előzményfájlt a „grep” fájlba az alábbiak szerint vezeti be. Például az alábbi parancs megkeresi és megtalálja a „pwd” parancsot az előzmények listájából.

[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. Keresse meg a Lastly Executed Command parancsot

A korábban végrehajtott parancs keresése a 'Ctrl+r' paranccsal. Ha megtalálta a keresett parancsot, nyomja meg az „Enter” billentyűt a végrehajtásához, vagy nyomja meg az „esc” billentyűt a visszavonáshoz.

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

12. Hívja vissza az utolsó végrehajtott parancsot

Hívjon elő egy korábban használt konkrét parancsot. A Bang és a 8 (!8) parancsok kombinációja visszahívja az Ön által végrehajtott 8 számú parancsot.

[narad@tecmint ~]$ !8

13. Hívja vissza az utolsóként végrehajtott konkrét parancsot

Hívja elő a korábban használt parancsot (netstat -np | grep 22) a „!” karakterlánccal, majd írja be az adott parancs néhány betűjét.

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

Megpróbáltuk kiemelni a történelemparancs erejét. Ezzel azonban még nincs vége. Kérjük, ossza meg velünk tapasztalatait az előzményekről az alábbi megjegyzésmezőn keresztül.