Recherche de site Web

La puissance de la « commande historique » de Linux dans Bash Shell


Nous utilisons fréquemment la commande history dans nos tâches de routine quotidiennes pour vérifier l'historique des commandes ou pour obtenir des informations sur les commandes exécutées par l'utilisateur. Dans cet article, nous verrons comment utiliser efficacement la commande history pour extraire la commande qui a été exécutée par les utilisateurs dans le shell Bash. Cela peut être utile à des fins d'audit ou pour savoir quelle commande est exécutée à quelle date et heure.

Par défaut, la date et l'horodatage ne seront pas visibles lors de l'exécution de la commande history. Cependant, le shell bash fournit des outils CLI pour modifier l'historique des commandes de l'utilisateur. Voyons quelques trucs et astuces pratiques et la puissance de la commande history.

1. Répertorier les dernières/toutes les commandes exécutées sous Linux

L'exécution d'une simple commande history à partir du terminal vous montrera une liste complète des dernières commandes exécutées avec les numéros de ligne.

[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. Répertoriez toutes les commandes avec la date et l'horodatage

Comment trouver la date etl'horodatage par rapport à la commande ? Avec 'export', la commande avec variable affichera l'historique de la commande avec l'horodatage correspondant lorsque la commande a été exécutée.

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

3. Filtrer les commandes dans l'historique

Comme nous pouvons le voir, la même commande est répétée plusieurs fois dans la sortie ci-dessus. Comment filtrer les commandes simples ou non destructives dans l'historique ?. Utilisez la commande 'export' suivante en spécifiant que la commande dans HISTIGNORE='ls -l:pwd:date:' ne sera pas enregistrée par le système et ne sera pas affichée dans la commande d'historique.

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

4. Ignorer les commandes en double dans l'historique

Avec la commande ci-dessous, cela nous aidera à ignorer les commandes en double saisies par l'utilisateur. Une seule entrée sera affichée dans l'historique si un utilisateur exécute plusieurs fois la même commande dans une invite Bash.

[narad@tecmint ~]$ export HISTCONTROL=ignoredups

5. Annuler la commande d'exportation

Désactivez la commande d'exportation à la volée. Exécutez la commande unset export avec les variables une par une, quelles que soient les commandes exportées par la commande export.

[narad@tecmint ~]$ unset export HISTCONTROL

6. Enregistrer la commande d'exportation de manière permanente

Créez une entrée comme suit dans .bash_profile pour enregistrer la commande export de manière permanente.

[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. Répertorier les commandes exécutées par un utilisateur spécifique

Comment voir l'historique des commandes exécutées par un utilisateur spécifique. Bash conserve des enregistrements de l'historique dans un fichier '~/.bash_history'. Nous pouvons afficher ou ouvrir le fichier pour voir l’historique des commandes.

[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. Désactiver le stockage de l'historique des commandes

Certaines organisations ne conservent pas l'historique des commandes en raison de leur politique de sécurité. Dans ce cas, nous pouvons modifier le fichier .bash_profile (c'est un fichier caché) de l'utilisateur et faire une entrée comme ci-dessous.

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

Enregistrez le fichier et chargez les modifications avec la commande ci-dessous.

[narad@tecmint ~]$ source .bash_profile

Remarque : Si vous ne souhaitez pas que le système se souvienne des commandes que vous avez saisies, exécutez simplement la commande ci-dessous qui désactivera ou arrêtera l'enregistrement de l'historique à la volée.

[narad@tecmint ~]$ export HISTSIZE=0

Conseils : Recherchez « HISTSIZE » et modifiez-le dans le fichier « /etc/profile » avec le superutilisateur. Le changement de fichier aura un effet global.

9. Supprimer ou effacer l'historique des commandes

Avec les flèches haut et bas, nous pouvons voir les commandes précédemment utilisées qui peuvent être utiles ou qui peuvent vous mettre en colère. Supprimer ou effacer toutes les entrées de la liste de l'historique bash avec les options « -c ».

[narad@tecmint ~]$ history -c

10. Rechercher des commandes dans l'historique à l'aide de la commande Grep

Recherchez la commande via « .bash_history » en redirigeant votre fichier historique vers « grep » comme ci-dessous. Par exemple, la commande ci-dessous recherchera et trouvera la commande « pwd » dans la liste de l'historique.

[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. Rechercher la commande dernièrement exécutée

Recherchez la commande précédemment exécutée avec la commande 'Ctrl+r'. Une fois que vous avez trouvé la commande que vous recherchez, appuyez sur « Entrée » pour exécuter la même chose, sinon appuyez sur « Esc » pour l'annuler.

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

12. Rappeler la dernière commande exécutée

Rappelez une commande spécifique précédemment utilisée. La combinaison des commandes Bang et 8 (!8) rappellera la commande numéro 8 que vous avez exécutée.

[narad@tecmint ~]$ !8

13. Rappeler la commande spécifique dernièrement exécutée

Rappelez-vous la commande précédemment utilisée (netstat -np | grep 22) avec '!' et suivi de quelques lettres de cette commande particulière.

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

Nous avons essayé de mettre en évidence le pouvoir du commandement historique. Cependant, cela ne s’arrête pas là. Veuillez partager votre expérience de commande d'historique avec nous via notre zone de commentaires ci-dessous.