Η δύναμη του Linux "History Command" στο Bash Shell


Χρησιμοποιούμε συχνά την εντολή history στις καθημερινές μας εργασίες ρουτίνας για να ελέγξουμε το ιστορικό εντολών ή για να λάβουμε πληροφορίες σχετικά με την εντολή που εκτελείται από τον χρήστη. Σε αυτήν την ανάρτηση, θα δούμε πώς μπορούμε να χρησιμοποιήσουμε αποτελεσματικά την εντολή ιστορικού για να εξαγάγουμε την εντολή που εκτελέστηκε από χρήστες στο κέλυφος Bash. Αυτό μπορεί να είναι χρήσιμο για σκοπούς ελέγχου ή για να μάθετε ποια εντολή εκτελείται σε ποια ημερομηνία και ώρα.

Από προεπιλογή η ημερομηνία και η χρονοσήμανση δεν θα εμφανίζονται κατά την εκτέλεση της εντολής ιστορικό. Ωστόσο, το bash shell παρέχει εργαλεία CLI για την επεξεργασία του ιστορικού εντολών του χρήστη. Ας δούμε μερικές χρήσιμες συμβουλές και κόλπα και τη δύναμη της εντολής ιστορίας.

1. Καταχωρίστε τις τελευταίες/όλες τις εντολές που εκτελέστηκαν στο Linux

Η εκτέλεση της απλής εντολής ιστορικού από το τερματικό θα σας δείξει μια πλήρη λίστα με τις τελευταίες εντολές που εκτελέστηκαν με αριθμούς γραμμής.

[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. Καταχωρίστε όλες τις εντολές με ημερομηνία και χρονική σήμανση

Πώς να βρείτε ημερομηνία και χρονική σήμανση έναντι εντολής; Με την εντολή «εξαγωγή» με μεταβλητή θα εμφανιστεί η εντολή ιστορικού με την αντίστοιχη χρονική σήμανση κατά την εκτέλεση της εντολής.

[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
Σημασία των μεταβλητών HISTTIMEFORMAT
%F Equivalent to %Y - %m - %d
%T Replaced by the time ( %H : %M : %S )

3. Φιλτράρισμα εντολών στο ιστορικό

Όπως μπορούμε να δούμε η ίδια εντολή επαναλαμβάνεται πολλές φορές στην παραπάνω έξοδο. Πώς να φιλτράρετε απλές ή μη καταστροφικές εντολές στο ιστορικό;. Χρησιμοποιήστε την ακόλουθη εντολή "εξαγωγή", καθορίζοντας την εντολή στην εντολή HISTIGNORE='ls -l:pwd:date:' δεν θα αποθηκευτεί από το σύστημα και δεν θα εμφανίζεται στην εντολή ιστορικού.

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

4. Αγνοήστε τις διπλότυπες εντολές στο ιστορικό

Με την παρακάτω εντολή θα μας βοηθήσει να αγνοήσουμε την εισαγωγή διπλότυπων εντολών που έγιναν από τον χρήστη. Μόνο μία καταχώρηση θα εμφανίζεται στο ιστορικό, εάν ένας χρήστης εκτελέσει την ίδια εντολή πολλές φορές σε μια γραμμή εντολών Bash.

[narad@tecmint ~]$ export HISTCONTROL=ignoredups

5. Καταργήστε τη ρύθμιση της εντολής εξαγωγής

Κατάργηση της εντολής εξαγωγής εν κινήσει. Εκτελέστε την εντολή unset export με μεταβλητή μία προς μία όποιες εντολές έχουν εξαχθεί με την εντολή export.

[narad@tecmint ~]$ unset export HISTCONTROL

6. Αποθήκευση εντολής εξαγωγής μόνιμα

Κάντε μια καταχώριση ως εξής στο .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. Καταχωρίστε τις εντολές του συγκεκριμένου χρήστη που εκτελούνται

Πώς να δείτε το ιστορικό εντολών που εκτελείται από έναν συγκεκριμένο χρήστη. Το Bash διατηρεί αρχεία του ιστορικού σε ένα αρχείο ‘~/.bash_history’. Μπορούμε να προβάλουμε ή να ανοίξουμε αρχείο για να δούμε το ιστορικό εντολών.

[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. Απενεργοποιήστε την αποθήκευση ιστορικού εντολών

Ορισμένοι οργανισμοί δεν διατηρούν ιστορικό εντολών λόγω της πολιτικής ασφαλείας του οργανισμού. Σε αυτήν την περίπτωση, μπορούμε να επεξεργαστούμε το αρχείο .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

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

Αποθηκεύστε το αρχείο και φορτώστε τις αλλαγές με την παρακάτω εντολή.

[narad@tecmint ~]$ source .bash_profile

Σημείωση: Εάν δεν θέλετε το σύστημα να θυμάται τις εντολές που έχετε πληκτρολογήσει, απλώς εκτελέστε την παρακάτω εντολή που θα απενεργοποιήσει ή θα σταματήσει την εγγραφή του ιστορικού αμέσως.

[narad@tecmint ~]$ export HISTSIZE=0

Συμβουλές: Αναζητήστε "HISTSIZE" και επεξεργαστείτε το σε αρχείο "/etc/profile" με υπερχρήστη. Η αλλαγή στο αρχείο θα εφαρμοστεί παγκοσμίως.

9. Διαγραφή ή Εκκαθάριση ιστορικού εντολών

Με τα βέλη επάνω και κάτω, μπορούμε να δούμε την εντολή που χρησιμοποιήθηκε στο παρελθόν, η οποία μπορεί να είναι χρήσιμη ή να σας εξοργίσει. Διαγραφή ή εκκαθάριση όλων των καταχωρήσεων από τη λίστα ιστορικού bash με επιλογές «-c».

[narad@tecmint ~]$ history -c

10. Αναζήτηση εντολών στο ιστορικό χρησιμοποιώντας την εντολή Grep

Εντολή αναζήτησης μέσω του «.bash_history», εισάγοντας το αρχείο ιστορικού στο «grep», όπως παρακάτω. Για παράδειγμα, η παρακάτω εντολή θα αναζητήσει και θα βρει την εντολή ‘pwd’ από τη λίστα ιστορικού.

[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. Αναζήτηση τελευταίας εντολής

Αναζήτηση εντολής που εκτελέστηκε προηγουμένως με την εντολή ‘Ctrl+r’. Μόλις βρείτε την εντολή που αναζητάτε, πατήστε το ‘Enter’ για να εκτελέσετε το ίδιο και πατήστε το πλήκτρο ‘esc’ για να την ακυρώσετε.

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

12. Ανάκληση της τελευταίας εκτελεσθείσας εντολής

Ανακαλέστε μια συγκεκριμένη εντολή που χρησιμοποιήθηκε στο παρελθόν. Ο συνδυασμός της εντολής Bang και 8 (!8) θα ανακαλέσει τον αριθμό 8 εντολής που έχετε εκτελέσει.

[narad@tecmint ~]$ !8

13. Ανάκληση συγκεκριμένης εντολής τελευταίας εκτέλεσης

Ανάκληση της εντολής που χρησιμοποιήθηκε στο παρελθόν (netstat -np | grep 22) με «!» και ακολουθούμενη από μερικά γράμματα της συγκεκριμένης εντολής.

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

Προσπαθήσαμε να αναδείξουμε τη δύναμη της εντολής της ιστορίας. Ωστόσο, αυτό δεν είναι το τέλος. Μοιραστείτε την εμπειρία σας από την εντολή ιστορικού μαζί μας μέσω του παρακάτω πλαισίου σχολίων.