Μία πολύ χρήσιμη, μα και αδιάφορη από πολλούς, εντολή των Linux, είναι και history. Αν μάθετε να την χρησιμοποιείτε με όλες τις τις παραμέτρους τότε θα αυξήσετε σημαντικά την παραγωγικότητά σας.
(Η φωτογραφία δημιουργήθηκε από δωρεάν AI)
Το shell των linux αποθηκεύει ένα ιστορικό όλων των εντολών που του έχετε δώσει και εκτελέσει στο παρελθόν. Σας δίνει την δυνατότητα επανάκλησης γλυτώνοντάς σας από απίστευτη μεγάλη ποσότητα πληκτρολόγησης και κάνοντας την ζωή σας πολύ πιο εύκολη.
Μην αρκεστείτε μόνο στο να ζητήσετε την τελευταία σας εντολή με το πάνω βέλος. Η history, όπως σχεδόν όλες οι εντολές των Linux, έχει ένα σωρό παραμέτρους που αξίζουν τον κόπο να τους μάθετε και να τους χρησιμοποιήσετε.
Table of Contents
Χρησιμότητα της history στα Linux
Γενικότερα η εντολή history σάς επιτρέπει να ελέγξετε και να επαναλάβετε τις προηγούμενες εντολές σας. Όσο μεγαλύτερη και πιο περίπλοκη είναι μια εντολή, τόσο πιο δύσκολο είναι να θυμάστε και να την επανα-πληκτρολογήσετε χωρίς να κάνετε λάθος.
Όπως οι περισσότερες εντολές Linux, υπάρχουν περισσότερα από όσα φαντάζεστε. Αν μάθετε πώς να χρησιμοποιείτε την εντολή history, μπορεί να βελτιώσει τη χρήση του terminal των Linux. Είναι μια καλή επένδυση του χρόνου σας. Και πιστέψτε μας, υπάρχουν πολύ καλύτεροι τρόποι για να χρησιμοποιήσετε την εντολή history εκτός από το να πατάτε απλώς το επάνω βέλος επανειλημμένα.
Απλή χρήση της history
Η εντολή history στην απλούστερη μορφή της, συντάσσετε πληκτρολογώντας απλώς το όνομά της:
history
Αμέσως θα δείτε μία αριθμημένη και χρονολογική λίστα των εντολών που χρησιμοποιήθηκαν προηγουμένως να εμφανίζεται στο παράθυρο του τερματικού.
Οι εντολές είναι αριθμημένες, με τις πιο πρόσφατα χρησιμοποιημένες να είναι αυτές με τους μεγαλύτερους αριθμούς και στο τέλος της λίστας. Αν θέλετε να μην δείτε όλη την λίστα αλλά ας πούμε για παράδειγμα, μόνο τις 10 τελευταίες, τότε πληκτρολογήστε το εξής:
history 10
Μπορείτε να επιτύχετε το ίδιο αποτέλεσμα αν χρησιμοποιήσετε την εντολή tail μαζί με την εντολή history. Για να το κάνετε αυτό, πληκτρολογήστε το εξής:
history | tail -n 10
Επαναλαμβανόμενες εντολές
Εάν θέλετε να χρησιμοποιήσετε ξανά μια εντολή από τη λίστα της history πληκτρολογήστε ένα θαυμαστικό (!) και τον αριθμό της εντολής χωρίς κενά ενδιάμεσα.
Για παράδειγμα, για να επαναλάβετε την εντολή με αριθμό 18, θα πληκτρολογήσετε αυτήν την εντολή:
!18
Για να επαναλάβετε την τελευταία εντολή, πληκτρολογήστε δύο θαυμαστικά, ξανά, χωρίς κενά:
!!
Αν και την τελευταία εντολή μπορείτε να την βρείτε με ένα κλικ λιγότερο, πατώντας μόνο το πάνω βέλος, τα δύο θαυμαστικά είναι χρήσιμα όταν δίνετε μια εντολή και ξεχνάτε να χρησιμοποιήσετε το sudo.
Έτσι αν πληκτρολογήστε sudo, ένα κενό, και τα διπλά θαυμαστικά και μετά πατήστε Enter θα έχετε την τελευταία εντολή με sudo, πράγμα που δεν μπορεί να γίνει με το επάνω βέλος.
Αντίστοιχα, μπορείτε να πληκτρολογήσετε sudo και με θαυμαστικό τον αριθμό της εντολής από τη λίστα του history.
Μπορείτε επίσης να ζητήσετε την επανάληψη μίας εντολής από την λίστα με αρνητικό πρόσημο που σημαίνει ότι θα αρχίσει μα μετράει αντίθετα. Δηλαδή η 1 είναι η τελευταία, ή 2 η προτελευταία κλπ.
Απλά πληκτρολογήστε ένα θαυμαστικό ( ! ), μία μεσαία παύλα ( – ), και τον αριθμό της εντολής, όλα χωρίς κενά.
Αναζήτηση εντολών μέσω String
Για να επαναλάβετε την τελευταία εντολή που ξεκινά με μια συγκεκριμένη συμβολοσειρά, μπορείτε να πληκτρολογήσετε ένα θαυμαστικό και, στη συνέχεια, τη συμβολοσειρά χωρίς κενά και, στη συνέχεια, να πατήσετε Enter.
Για παράδειγμα, για να επαναλάβετε την τελευταία εντολή που ξεκίνησε με sudo, θα πληκτρολογήσετε αυτήν την εντολή:
!sudo
Ωστόσο, υπάρχει ένα στοιχείο κινδύνου σε αυτό. Εάν η τελευταία εντολή με την οποία ξεκίνησε sudo δεν είναι αυτή που νομίζετε ότι είναι, θα εκκινήσετε τη λάθος εντολή. Για να παράσχετε ένα δίχτυ ασφαλείας, μπορείτε να χρησιμοποιήσετε την παράμετρο :p (print = εκτύπωση), όπως φαίνεται παρακάτω:
!sudo:p
Αυτό δίνει στην εντολή history αντί να εκτελέσει την τελευταία εντολή sudo, απλά να την εκτυπώσει στο τερματικό. Αυτό σας επιτρέπει να δείτε την εντολή πριν τη χρησιμοποιήσετε. Εάν είναι η εντολή που θέλετε, πατήστε το επάνω βέλος και, στη συνέχεια, πατήστε Enter για να τη χρησιμοποιήσετε.
Με συγκεκριμένη συμβολοσειρά
Εάν θέλετε να βρείτε μια εντολή που περιέχει μια συγκεκριμένη συμβολοσειρά, μπορείτε να χρησιμοποιήσετε ένα θαυμαστικό και ένα ερωτηματικό.
Για παράδειγμα, για να βρείτε και να εκτελέσετε την πρώτη αντίστοιχη εντολή που περιέχει τη λέξη “iguru”, θα πρέπει να πληκτρολογήσετε αυτήν την εντολή:
!?iguru
Αυτό θα βρει οποιαδήποτε εντολή περιέχει τη συμβολοσειρά “iguru”, ανεξάρτητα από το πού εμφανίζεται στη συμβολοσειρά.
Διαδραστική αναζήτηση
Μια διαδραστική αναζήτηση σάς επιτρέπει να μεταβείτε σε μια λίστα με αντίστοιχες εντολές και να επαναλάβετε αυτήν που θέλετε.
Απλώς πατήστε Ctrl+r για να ξεκινήσει η αναζήτηση.
Τώρα πληκτρολογήστε το γράμμα ή σύμβολο αναζήτησης και θα εμφανιστεί η πρώτη αντίστοιχη εντολή που περιέχει το συγκεκριμένο σύμβολο. Τα γράμματα που πληκτρολογείτε εμφανίζονται μεταξύ του backtick (`) και της απόστροφης (‘). Οι αντίστοιχες εντολές ενημερώνονται καθώς πληκτρολογείτε κάθε γράμμα.
Κάθε φορά που πατάτε Ctrl+r, ψάχνετε προς τα πίσω για την επόμενη αντίστοιχη εντολή, η οποία εμφανίζεται στο παράθυρο του τερματικού.
Όταν πατήσετε Enter, η εντολή που εμφανίζεται θα εκτελεστεί. Για να επεξεργαστείτε μια εντολή πριν την εκτελέσετε, πατήστε είτε το αριστερό είτε το δεξί βελάκι. Η εντολή θα εμφανιστεί στη γραμμή εντολών και μπορείτε να την επεξεργαστείτε.
Φυσικά όπως σε κάθε εντολή μπορείτε να χρησιμοποιήσετε το grep για να περιορίσετε την αναζήτησή σας. Για παράδειγμα history | grep iguru
Τροποποίηση της τελευταίας εντολής
Εάν πρέπει να διορθώσετε ένα τυπογραφικό λάθος και, στη συνέχεια, να επαναλάβετε την εντολή, μπορείτε να χρησιμοποιήσετε το σύμβολο (^) για να το τροποποιήσετε. Αυτό είναι ένα εξαιρετικό κόλπο για γρήγορα αποτελέσματα για κάθε φορά που γράφετε λάθος μια εντολή ή θέλετε να την εκτελέσετε ξανά με διαφορετική επιλογή ή παράμετρο.
Για να το χρησιμοποιήσετε, πληκτρολογήστε (χωρίς κενά) το σύμβολο ^ , μετά το κείμενο που θέλετε να αντικαταστήσετε, μετά ένα δεύτερο σύμβολο ^ , και τέλος το κείμενο με το οποίο θέλετε να το αντικαταστήσετε, και στη συνέχεια πατήστε Enter.
Για παράδειγμα, ας υποθέσουμε ότι πληκτρολογείτε την ακόλουθη εντολή, πληκτρολογώντας κατά λάθος “shhd” αντί για “sshd”:
sudo apt updade
Θα μπορούσατε να το διορθώσετε εύκολα πληκτρολογώντας τα εξής: ^updade^update^
Η εντολή εκτελείται με το “updade” διορθωμένο σε “update”.
Διαγραφή εντολών από τη λίστα ιστορικού
Αν δεν θέλετε να διατηρείτε την ανορθόγραφη εντολή στην λίστα ιστορικού του χρήστη σας ή απλά δεν θέλετε να δει κάποιος άλλος τι εντολές δώσατε, τότε μπορείτε να διαγράψετε τις εντολές σας από τη λίστα ιστορικού με την επιλογή -d (delete = διαγραφή).
Εδώ μπορείτε να βάλετε στο παιχνίδι και το grep για να την βρείτε εύκολα, και αφού δείτε το αριθμό της στο history διαγράψετε την συντάσσοντας την εντολή history, μετά το -d και τέλος το νούμερο της εντολής. Παράδειγμα:
history | grep update
history -d 31
Μπορείτε επίσης να περάσετε μια σειρά από εντολές στην -d επιλογή. Για να διαγράψετε όλες τις καταχωρήσεις λίστας από το 22 έως και το 32 (συμπεριλαμβανομένου), πληκτρολογήστε αυτήν την εντολή:
history -d 22 32
Για να διαγράψετε μόνο τις τελευταίες πέντε εντολές, μπορείτε να πληκτρολογήσετε έναν αρνητικό αριθμό, όπως:
history -d -5
Μη αυτόματη ενημέρωση του αρχείου ιστορικού
Όταν συνδέεστε ή ανοίγετε μια περίοδο λειτουργίας τερματικού, η λίστα της history παίρνει τα δεδομένα από το αρχείο της history. Στο Bash, το προεπιλεγμένο αρχείο είναι to .bash_history.
Οποιεσδήποτε αλλαγές κάνετε στην τρέχουσα περίοδο λειτουργίας παραθύρου τερματικού εγγράφονται στο αρχείο .bash_history μόνο όταν κλείνετε το παράθυρο τερματικού ή όταν αποσυνδεθείτε.
Θα πρέπει να ξεχωρίσετε στο μυαλό σας την λίστα με το αρχείο. Η λίστα είναι στην προσωρινή μνήμη και αν ο υπολογιστή σας τερματίσει απότομα θα χαθούν χωρίς να περαστούν στο αρχείο. Άρα αλλά η λίστα και άλλο το αρχείο της history. Συνήθως συμπίπτουν αλλά κατά την χρήση του terminal δεν είναι τα ίδια.
Ας υποθέσουμε ότι θέλετε να ανοίξετε ένα άλλο παράθυρο τερματικού και χρειάζεστε πρόσβαση στην πλήρη λίστα της history, συμπεριλαμβανομένων των εντολών που πληκτρολογήσατε στο πρώτο παράθυρο τερματικού. Η επιλογή -a (all = όλα) σάς επιτρέπει να αποθηκεύσετε όλες τις εντολές σας από το πρώτο παράθυρο τερματικού πριν ανοίξετε το δεύτερο.
Για να το χρησιμοποιήσετε, πληκτρολογήστε τα εξής:
history -a
Οι εντολές απλά εγγράφονται αθόρυβα στο αρχείο ιστορικού.
Εάν θέλετε να γράψετε όλες τις αλλαγές από τη λίστα της history στο αρχείο .bash_history (αν διαγράψατε κάποιες παλιές εντολές, για παράδειγμα), μπορείτε να χρησιμοποιήσετε την επιλογή -w (write = εγγραφή), όπως:
history -w
Εκκαθάριση της λίστας ιστορικού
Για να διαγράψετε όλες τις εντολές από τη λίστα της history μπορείτε να χρησιμοποιήσετε την επιλογή -c (clear = διαγραφή), ως εξής:
history -c
Εάν θέλετε επιπλέον να επιβάλλετε αυτές τις αλλαγές στο αρχείο της history, χρησιμοποιήστε την επιλογή -w, όπως:
history -w
Το αρχείο .bashrc
Το αρχείο .bashrc εκτελείται κάθε φορά που συνδέεστε ή ανοίγετε ένα παράθυρο τερματικού. Περιέχει επίσης ορισμένες τιμές που ελέγχουν τη συμπεριφορά της εντολής history. Ας επεξεργαστούμε αυτό το αρχείο με nano ή gedit (ανάλογα τι έχετε).
Πληκτρολογήστε το εξής: nano .bashrc
Κοντά στην κορυφή του αρχείου, βλέπετε δύο εγγραφές:
HISTSIZE: Ο μέγιστος αριθμός καταχωρήσεων που μπορεί να περιέχει η λίστα της history.
HISTFILESIZE: Το όριο για τον αριθμό των γραμμών που μπορεί να περιέχει ένα αρχείο της history.
Αυτές οι δύο τιμές αλληλεπιδρούν με τους ακόλουθους τρόπους:
Όταν συνδέεστε ή ξεκινάτε μια περίοδο λειτουργίας ενός παραθύρου τερματικού, η λίστα της history συμπληρώνεται από το αρχείο bash_history.
Όταν κλείνετε ένα παράθυρο τερματικού, ο μέγιστος αριθμός εντολών που έχει οριστεί στο HISTSIZE αποθηκεύεται στο αρχείο .bash_history.
Εάν η επιλογή histappend είναι ενεργοποιημένη, οι εντολές προσαρτώνται στο .bash_history. Εάν δεν έχει οριστεί η histappend , τότε οι εντολές αντικαθιστώνται στο το.bash_history.
Μετά την αποθήκευση των εντολών από τη λίστα της history στο .bash_history, το αρχείο της history περικόπτεται ώστε να μην περιέχει περισσότερες από HISTFILESIZE γραμμές.
Επίσης κοντά στην κορυφή του αρχείου, βλέπετε μια καταχώρηση για την HISTCONTROL τιμή.
Μπορείτε να ορίσετε αυτήν την τιμή ώστε να κάνει οποιοδήποτε από τα παρακάτω:
- ignorespaces:Οι γραμμές που ξεκινούν με κενό δεν προστίθενται στη λίστα της history.
- ignoredups:Οι διπλές εντολές δεν προστίθενται στο αρχείο της history.
- ignoreboth:Ενεργοποιεί και τα δύο παραπάνω.
Αγνόηση εντολών
Μπορείτε επίσης να παραθέσετε συγκεκριμένες εντολές που δεν θέλετε να προστεθούν στη λίστα ιστορικού σας. Χωρίστε τις με άνω και κάτω τελεία (:) και βάλτε τις σε εισαγωγικά (“…”).
Για να το κάνατε αυτό προσθέστε τις ακόλουθες γραμμές κάτω από το HISTFILESIZE (αντικαθιστώντας τις εντολές που θέλετε να αγνοηθούν):
export HISTIGNORE="ls:history"
Χρήση χρονικών σφραγίδων
Εάν θέλετε να προσθέσετε χρονικές σημάνσεις στη λίστα ιστορικού, μπορείτε να χρησιμοποιήσετε τη ρύθμιση HISTIMEFORMAT. Για να το κάνετε αυτό, απλώς προσθέστε μια γραμμή όπως η παρακάτω παράδειγμα:
export HISTTIMEFORMAT="%c "
Σημειώστε ότι υπάρχει ένα κενό πριν από τα εισαγωγικά κλεισίματος. Αυτό αποτρέπει τη χρονική σήμανση από το να κολλήσει στις εντολές στη λίστα εντολών.
Τώρα, όταν εκτελείτε την εντολή history θα βλέπετε σήμανση της ημερομηνίας και ώρας.
Λάβετε υπόψη ότι τυχόν εντολές που βρίσκονταν στη λίστα της history, πριν προσθέσετε τις χρονικές σημάνσεις, θα έχουν την ημερομηνία και ώρα της πρώτης εντολής που λαμβάνει μια χρονική σήμανση.
Το %c θα σας δώσει μια πολύ μακροσκελής χρονική σήμανση. Μπορείτε να την μικρύνεται αν χρησιμοποιήσετε τα παρακάτω διακριτικά αντί για το %c :
- %d: Ημέρα
- %m: Μήνας
- %y: Έτος
- %H: Ώρα
- %M: Λεπτά
- %S: Δευτερόλεπτα
- %F: Πλήρης ημερομηνία (μορφή έτος-μήνας-ημερομηνία)
- %T: Πλήρης ώρα (μορφή ώρα : λεπτά : δευτερόλεπτα)
- %c: Πλήρης ημερομηνία και ώρα (μορφή ημέρα-μήνας-έτος και ώρα : λεπτά : δευτερόλεπτα)
Για παράδειγμα μπορείτε να πείτε : export HISTTIMEFORMAT="%d %m %T "
και θα αναφέρει μόνο ημέρα-μήνα και πλήρη ώρα
Μπορείτε επίσης να χρησιμοποιήσετε την εντολή history για έλεγχο. Μερικές φορές, ο έλεγχος των εντολών που χρησιμοποιήσατε στο παρελθόν μπορεί να σας βοηθήσει να προσδιορίσετε τι μπορεί να έχει προκαλέσει ένα πρόβλημα.
Και μόνο ότι αναφέρεται ο συντάκτης του άρθρου (ή μήπως να πω μεταφραστής καλύτερα) στο λειτουργικό σύστημα Linux στον πληθυντικό, φένεται πόσο άσχετος είναι. Το Linux, το Office, το DOS. Το ΕΝΑ λειτουργικό σύστημα. Το ΕΝΑ λογισμικό.
Ο ΕΝΑΣ πυρήνας.
ΟΙ ΠΟΛΛΕΣ “γεύσεις” (βλ. εκδόσεις, διανομές)