Zoeken op website

De kracht van Linux "History Command" in Bash Shell


We gebruiken de geschiedenis-opdracht regelmatig in onze dagelijkse routinetaken om de geschiedenis van de opdrachten te controleren of om informatie te krijgen over de opdrachten die door de gebruiker zijn uitgevoerd. In dit bericht zullen we zien hoe we de geschiedenisopdracht effectief kunnen gebruiken om de opdracht te extraheren die door gebruikers in de Bash-shell is uitgevoerd. Dit kan handig zijn voor auditdoeleinden of om erachter te komen welke opdracht op welke datum en tijd wordt uitgevoerd.

Standaard zijn datum en tijdstempel niet zichtbaar tijdens het uitvoeren van de opdracht geschiedenis. Bash shell biedt echter CLI tools voor het bewerken van de opdrachtgeschiedenis van de gebruiker. Laten we eens kijken naar enkele handige tips en trucs en de kracht van geschiedenis commando's.

1. Maak een lijst van de laatste/alle uitgevoerde opdrachten in Linux

Als u een eenvoudig geschiedenis-commando uitvoert vanaf de terminal, krijgt u een volledige lijst te zien van de laatst uitgevoerde commando's met regelnummers.

[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. Maak een lijst van alle opdrachten met datum en tijdstempel

Hoe vind je datum en tijdstempel bij een opdracht? Met 'export' zal het commando met variabele de geschiedenisopdracht weergeven met de bijbehorende tijdstempel toen de opdracht werd uitgevoerd.

[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
Betekenis van HISTTIMEFORMAT-variabelen
%F Equivalent to %Y - %m - %d
%T Replaced by the time ( %H : %M : %S )

3. Filteropdrachten in de geschiedenis

Zoals we kunnen zien, wordt hetzelfde commando een aantal keren herhaald in bovenstaande uitvoer. Hoe eenvoudige of niet-destructieve commando's in de geschiedenis te filteren? Gebruik het volgende ‘export’ commando door het commando op te geven in HISTIGNORE=’ls -l:pwd:date:’ wordt niet opgeslagen door het systeem en wordt niet getoond in het geschiedeniscommando.

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

4. Negeer dubbele opdrachten in de geschiedenis

Met het onderstaande commando kunnen we dubbele commando's die door de gebruiker zijn ingevoerd, negeren. Er wordt slechts één item in de geschiedenis weergegeven als een gebruiker dezelfde opdracht meerdere keren uitvoert in een Bash Prompt.

[narad@tecmint ~]$ export HISTCONTROL=ignoredups

5. Schakel de exportopdracht uit

Schakel de exportopdracht direct uit. Voer de opdracht unset export één voor één uit met de variabele, ongeacht welke opdrachten zijn geëxporteerd met de opdracht export.

[narad@tecmint ~]$ unset export HISTCONTROL

6. Bewaar de exportopdracht permanent

Voer als volgt iets in .bash_profile in om de opdracht export permanent op te slaan.

[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. Maak een lijst van door de gebruiker uitgevoerde opdrachten

Hoe u de opdrachtgeschiedenis kunt zien die door een specifieke gebruiker is uitgevoerd. Bash houdt de geschiedenis bij in een '~/.bash_history' bestand. We kunnen het bestand bekijken of openen om de opdrachtgeschiedenis te bekijken.

[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. Schakel het opslaan van de geschiedenis van opdrachten uit

Sommige organisaties houden de geschiedenis van opdrachten niet bij vanwege het beveiligingsbeleid van de organisatie. In dit geval kunnen we het .bash_profile-bestand (het is een verborgen bestand) van de gebruiker bewerken en een invoer maken zoals hieronder.

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

Sla het bestand op en laad de wijzigingen met het onderstaande commando.

[narad@tecmint ~]$ source .bash_profile

Opmerking: als u niet wilt dat het systeem de opdrachten onthoudt die u hebt getypt, voert u eenvoudigweg onderstaande opdracht uit, waardoor het opnemen van de geschiedenis direct wordt uitgeschakeld of gestopt.

[narad@tecmint ~]$ export HISTSIZE=0

Tips: Zoek ‘HISTSIZE’ en bewerk het bestand ‘/etc/profile’ met superuser. De wijziging in het bestand zal wereldwijd van kracht zijn.

9. Geschiedenis van opdrachten verwijderen of wissen

Met de pijlen omhoog en omlaag kunnen we eerder gebruikte opdrachten zien die nuttig kunnen zijn of u kunnen irriteren. Alle vermeldingen uit de bash-geschiedenislijst verwijderen of wissen met ‘-c’ opties.

[narad@tecmint ~]$ history -c

10. Zoekopdrachten in de geschiedenis met behulp van de Grep-opdracht

Zoek de opdracht via ‘.bash_history’ door uw geschiedenisbestand in ‘grep’ te plaatsen, zoals hieronder. Met het onderstaande commando wordt bijvoorbeeld het commando ‘pwd’ gezocht en gevonden in de geschiedenislijst.

[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. Zoek naar het laatst uitgevoerde commando

Zoek eerder uitgevoerde opdrachten met de opdracht ‘Ctrl+r’. Zodra je de opdracht hebt gevonden die je zoekt, druk je op ‘Enter’ om hetzelfde uit te voeren. Druk anders op ‘esc’ om het te annuleren.

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

12. Roep het laatst uitgevoerde commando op

Roep een eerder gebruikt specifiek commando op. De combinatie van Bang en 8 (!8) commando zal het nummer 8 commando oproepen dat je hebt uitgevoerd.

[narad@tecmint ~]$ !8

13. Roep het laatst uitgevoerde specifieke commando op

Roep het eerder gebruikte commando op (netstat -np | grep 22) met ‘!‘ en gevolgd door enkele letters van dat specifieke commando.

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

We hebben geprobeerd de macht van het geschiedeniscommando te benadrukken. Dit is echter nog niet het einde. Deel uw ervaring met het geschiedeniscommando met ons via ons opmerkingenveld hieronder.