Πώς να χρησιμοποιήσετε τις εντολές cat και tac Linux

Οι εντολές cat και tac εμφανίζουν τα περιεχόμενα των αρχείων κειμένου, αλλά υπάρχουν περισσότερα από όσα φαίνονται στο μάτι. Βουτήξτε λίγο πιο βαθιά και μάθετε μερικά παραγωγικά κόλπα για τη γραμμή εντολών Linux.

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

Η εντολή της γάτας

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

Κάποτε — πίσω στην εποχή του dial-up μοντέμ—τα δυαδικά αρχεία συχνά σπάζονταν σε πολλά μικρότερα αρχεία για να διευκολύνουν τη λήψη. Αντί να κάνετε λήψη ενός μεγάλου αρχείου, τραβήξατε πίσω κάθε μικρότερο αρχείο. Εάν ένα μεμονωμένο αρχείο απέτυχε να ληφθεί σωστά, απλώς θα ανακτήσετε ξανά αυτό το αρχείο.

Φυσικά, στη συνέχεια χρειαζόσασταν έναν τρόπο για να ανασυνθέσετε τη συλλογή μικρότερων αρχείων πίσω στο ενιαίο δυαδικό αρχείο που λειτουργεί. Αυτή η διαδικασία ονομάστηκε συνένωση. Και από εκεί μπήκε η γάτα και από εκεί πήρε το όνομά της.

Οι ευρυζωνικές συνδέσεις και οι συνδέσεις οπτικών ινών έχουν προκαλέσει αυτή τη συγκεκριμένη ανάγκη να ξεθωριάζει—όπως οι ουρλιαχτοί ήχοι κλήσης—έτσι τι έχει να κάνει η γάτα σήμερα; Αρκετά στην πραγματικότητα.

Εμφάνιση αρχείου κειμένου

Για να βάλετε το cat να παραθέτει τα περιεχόμενα ενός αρχείου κειμένου σε ένα παράθυρο τερματικού, χρησιμοποιήστε την ακόλουθη εντολή.

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

cat poem1.txt

Τα περιεχόμενα του αρχείου poem1.txt εμφανίζονται στο παράθυρο του τερματικού.

Αυτό είναι μόνο το μισό από το διάσημο ποίημα. Πού είναι το υπόλοιπο; Υπάρχει ένα άλλο αρχείο εδώ που ονομάζεται poem2.txt. Μπορούμε να κάνουμε cat list τα περιεχόμενα πολλών αρχείων με μία εντολή. Το μόνο που χρειάζεται να κάνουμε είναι να απαριθμήσουμε τα αρχεία με τη σειρά στη γραμμή εντολών.

cat poem1.txt poem2.txt

Αυτό φαίνεται καλύτερα? έχουμε όλο το ποίημα τώρα.

Χρήση γάτας Με λιγότερα

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

cat poem1.txt poem2.txt | less

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

  Πώς να εγκαταστήσετε το PulseAudio Equalizer σε Linux και να βελτιώσετε τον ήχο

Αρίθμηση των γραμμών σε ένα αρχείο

Μπορούμε να έχουμε τον αριθμό cat στις γραμμές του αρχείου όπως εμφανίζεται. Για να το κάνουμε αυτό, χρησιμοποιούμε την επιλογή -n (αριθμός).

cat -n poem1.txt

Οι γραμμές αριθμούνται όπως εμφανίζονται στο παράθυρο τερματικού.

Μην αριθμείτε κενές γραμμές

Καταφέραμε να έχουμε τις γραμμές αριθμημένες με γάτα, αλλά μετρώνται και οι κενές γραμμές μεταξύ των στίχων. Για να έχετε αριθμημένες τις γραμμές κειμένου αλλά για να αγνοήσετε τις κενές γραμμές, χρησιμοποιήστε την επιλογή -b (αριθμός-μη κενή).

cat -b poem1.txt

Τώρα οι γραμμές κειμένου είναι αριθμημένες και οι κενές γραμμές παραλείπονται.

Να μην εμφανίζονται πολλές κενές γραμμές

Εάν υπάρχουν τμήματα διαδοχικών κενών γραμμών σε ένα αρχείο, μπορούμε να ζητήσουμε από τη γάτα να αγνοήσει όλες εκτός από μία κενή γραμμή. Κοιτάξτε αυτό το αρχείο.

Η επόμενη εντολή θα κάνει τη γάτα να εμφανίσει μόνο μία κενή γραμμή από κάθε δέσμη κενών γραμμών. Η επιλογή που χρειαζόμαστε για να το πετύχουμε αυτό είναι η επιλογή -s (squeeze-blank).

cat -s poem1.txt

Αυτό δεν επηρεάζει τα περιεχόμενα του αρχείου με κανέναν τρόπο. αλλάζει απλώς τον τρόπο με τον οποίο η γάτα εμφανίζει το αρχείο.

Εμφάνιση καρτελών

Εάν θέλετε να μάθετε αν το κενό διάστημα προκαλείται από κενά ή καρτέλες, μπορείτε να μάθετε χρησιμοποιώντας την επιλογή -T (show-tabs).

cat -T poem1.txt

Οι καρτέλες αντιπροσωπεύονται από τους χαρακτήρες “^I”.

Εμφάνιση των άκρων των γραμμών

Μπορείτε να ελέγξετε για κενά στο τέλος χρησιμοποιώντας την επιλογή -E (show-ends).

cat -E poem1.txt

Τα άκρα των γραμμών αντιπροσωπεύονται από τον χαρακτήρα “$”.

Συνένωση αρχείων

Δεν έχει νόημα να υπάρχει ένα ποίημα αποθηκευμένο σε δύο αρχεία, με ένα μισό στο καθένα. Ας τα ενώσουμε μαζί και ας φτιάξουμε ένα νέο αρχείο με όλο το ποίημα μέσα.

cat poem1.txt poem2.txt > jabberwocky.txt

cat poem1.txt poem2.txt > jabberwocky.txt σε παράθυρο τερματικού” width=”646″ height=”57″ onload=”pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);”  onerror=”this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);”></p>
<p>ας χρησιμοποιήσουμε το cat για να ελέγξουμε το νέο μας αρχείο:</p>
<pre>cat jabberwocky.txt</pre > <p><img loading=

Το νέο μας αρχείο περιέχει τα περιεχόμενα των άλλων δύο αρχείων.

Προσθήκη κειμένου σε υπάρχον αρχείο

Αυτό είναι καλύτερο, αλλά στην πραγματικότητα, δεν είναι ολόκληρο το ποίημα. Ο τελευταίος στίχος λείπει. Ο τελευταίος στίχος στο Jabberwocky είναι ίδιος με τον πρώτο στίχο.

Εάν έχουμε τον πρώτο στίχο σε ένα αρχείο, μπορούμε να τον προσθέσουμε στο κάτω μέρος του αρχείου jabberwocky.txt και θα έχουμε ολόκληρο το ποίημα.

Σε αυτήν την επόμενη εντολή, πρέπει να χρησιμοποιήσουμε >>, όχι μόνο >. Εάν χρησιμοποιήσουμε ένα μόνο > θα αντικαταστήσουμε το jabberwocky.txt. Δεν θέλουμε να το κάνουμε αυτό. Θέλουμε να προσθέσουμε κείμενο στο κάτω μέρος του.

cat first_verse.txt >> jabberwocky.txt

cat first_verse.txt >> jabberwocky.txt σε παράθυρο τερματικού” width=”646″ ύψος=”57″ onload=”pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);”  onerror=”this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);”></p>
<p>Ας ελέγξουμε τα περιεχόμενα του αρχείου jabberwocky.txt:</p>
<pre>cat jabberwocky.txt< /pre> <p><img loading=

Και τέλος, όλα τα μέρη του ποιήματος είναι μαζί.

Ανακατεύθυνση stdin

Μπορείτε να ανακατευθύνετε την είσοδο από το πληκτρολόγιο σε ένα αρχείο χρησιμοποιώντας το cat. Ό,τι πληκτρολογείτε ανακατευθύνεται στο αρχείο μέχρι να πατήσετε Ctrl+D. Σημειώστε ότι χρησιμοποιούμε ένα μόνο > επειδή θέλουμε να δημιουργήσουμε το αρχείο (ή να το αντικαταστήσουμε, αν υπάρχει).

cat > my_poem.txt

cat > my_poem.txt σε παράθυρο τερματικού” width=”646″ ύψος=”57″ onload=”pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);”  onerror=”this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);”></p>
<p>Μπορούμε να ξεκινήσουμε την πληκτρολόγηση μόλις εκδώσουμε την εντολή.  Πατάμε Ctrl+D όταν τελειώσουμε.  Στη συνέχεια, μπορούμε να ελέγξουμε τα περιεχόμενα του νέου αρχείου με:</p>
<pre>cat my-poem.txt</pre>
<p><img loading=

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

Η εντολή tac

Το tac είναι παρόμοιο με το cat, αλλά παραθέτει τα περιεχόμενα των αρχείων με αντίστροφη σειρά.

Ας δούμε ότι:

tac my_poem.txt

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

Χρήση tac Με το stdin

Η χρήση tac χωρίς όνομα αρχείου θα αναγκάσει να λειτουργήσει στην είσοδο από το πληκτρολόγιο. Πατώντας Ctrl+D θα σταματήσει η φάση εισαγωγής και το tac θα εμφανίσει με αντίστροφη σειρά ό,τι πληκτρολογούσατε.

tac

Όταν πατηθεί Ctrl+D, η είσοδος αντιστρέφεται και παρατίθεται στο παράθυρο του τερματικού.

Χρήση tac με αρχεία καταγραφής

Εκτός από τα χαμηλού βαθμού κόλπα στο σαλόνι, το tac μπορεί να κάνει κάτι χρήσιμο; Ναι μπορεί. Πολλά αρχεία καταγραφής προσαρτούν τις πιο πρόσφατες καταχωρίσεις τους στο κάτω μέρος του αρχείου. Χρησιμοποιώντας tac (και, αντίθετα, head) μπορούμε να ανοίξουμε την τελευταία καταχώρηση στο παράθυρο του τερματικού.

Χρησιμοποιούμε tac για να απαριθμήσουμε το αρχείο syslog αντίστροφα και να το διοχετεύσουμε στην κεφαλή. Λέγοντας στο head να εκτυπώνει μόνο την πρώτη γραμμή που λαμβάνει (η οποία χάρη στο tac είναι η τελευταία γραμμή στο αρχείο), βλέπουμε την πιο πρόσφατη καταχώρηση στο αρχείο syslog.

tac /var/log/syslog | head -1

Το head εκτυπώνει την πιο πρόσφατη καταχώρηση από το αρχείο syslog και, στη συνέχεια, εξέρχεται.

Σημειώστε ότι η κεφαλή εκτυπώνει μόνο μία γραμμή—όπως ζητήσαμε—αλλά η γραμμή είναι τόσο μεγάλη που τυλίγεται δύο φορές. Γι' αυτό μοιάζει με τρεις γραμμές εξόδου στο παράθυρο του τερματικού.

Χρήση tac με εγγραφές κειμένου

Το τελευταίο trick tac που έχει στο μανίκι του είναι ομορφιά.

Συνήθως, το tac λειτουργεί σε αρχεία κειμένου περνώντας το δρόμο του μέσα από αυτά γραμμή προς γραμμή, από κάτω προς τα πάνω. Μια γραμμή είναι μια ακολουθία χαρακτήρων που τερματίζεται από έναν χαρακτήρα νέας γραμμής. Αλλά μπορούμε να πούμε στον tac να συνεργαστεί με άλλους οριοθέτες. Αυτό μας επιτρέπει να αντιμετωπίζουμε «κομμάτια» δεδομένων μέσα στο αρχείο κειμένου ως εγγραφές δεδομένων.

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

less logfile.dat

Όπως μπορούμε να δούμε, υπάρχει μια επαναλαμβανόμενη μορφή στο αρχείο. Υπάρχουν ακολουθίες τριών γραμμών του δεκαεξαδικό αξίες. Κάθε σύνολο τριών γραμμών δεκαεξαδικού έχει μια γραμμή ετικέτας που ξεκινά "=SEQ", ακολουθούμενη από μια ακολουθία ψηφίων.

Αν κάνουμε κύλιση στο κάτω μέρος του αρχείου, μπορούμε να δούμε ότι υπάρχουν πολλές από αυτές τις εγγραφές. Η τελευταία είναι με αριθμό 865.

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

Θα σημειώσουμε ότι οι τρεις τελευταίες γραμμές στο αρχείο ξεκινούν με δεκαεξαδικές τιμές 93, E7 και B8, με αυτή τη σειρά.

Ας χρησιμοποιήσουμε το tac για να αντιστρέψουμε το αρχείο. Είναι ένα πολύ μεγάλο αρχείο, οπότε θα το τοποθετήσουμε σε λιγότερο.

tac logfile.dat | less

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

Καταγράψαμε νωρίτερα ότι οι τρεις τελευταίες γραμμές στο αρχείο ξεκινούν με δεκαεξαδικές τιμές 93, E7 και B8, με αυτή τη σειρά. Η σειρά αυτών των γραμμών έχει αντιστραφεί. Επίσης, οι γραμμές "=SEQ" βρίσκονται τώρα κάτω από κάθε σύνολο τριών δεκαεξαδικών γραμμών.

tac στη διάσωση.

tac -b -r -s ^=SEQ.+[0-9]+*$ logfile.dat | less

Ας το αναλύσουμε.

Η επιλογή -s (διαχωριστής) ενημερώνει το tac τι θέλουμε να χρησιμοποιήσουμε ως οριοθέτη μεταξύ των εγγραφών μας. Λέει στο tac να μην χρησιμοποιεί τον συνηθισμένο χαρακτήρα νέας γραμμής, αλλά να χρησιμοποιεί το διαχωριστικό μας.

Η επιλογή -r (regex) λέει στο tac να αντιμετωπίζει τη συμβολοσειρά διαχωρισμού ως α κοινή έκφραση.

Η επιλογή -b (πριν) κάνει το tac να εμφανίζει το διαχωριστικό πριν από κάθε εγγραφή αντί μετά από αυτό (που είναι η συνήθης θέση του προεπιλεγμένου διαχωριστικού του, του χαρακτήρα νέας γραμμής).

Η συμβολοσειρά -s (διαχωριστής) ^=SEQ.+[0-9]Το +*$ αποκρυπτογραφείται ως εξής:

Ο χαρακτήρας ^ αντιπροσωπεύει την αρχή της γραμμής. Αυτό ακολουθείται από =SEQ.+[0-9]+*$. Αυτό δίνει εντολή στην tac να αναζητήσει κάθε εμφάνιση του "=SEQ". στην αρχή μιας γραμμής, ακολουθούμενη από οποιαδήποτε ακολουθία ψηφίων (υποδεικνύεται με [0-9]), και ακολουθείται από οποιοδήποτε άλλο σύνολο χαρακτήρων (υποδεικνύεται με *$).

Σωληνώνουμε ολόκληρη την παρτίδα σε λιγότερα, ως συνήθως.

Το αρχείο μας παρουσιάζεται τώρα με αντίστροφη σειρά με κάθε γραμμή ετικέτας "=SEQ" να παρατίθεται πριν από τις τρεις γραμμές δεκαεξαδικών δεδομένων της. Οι τρεις γραμμές δεκαεξαδικών τιμών βρίσκονται στην αρχική τους σειρά σε κάθε εγγραφή δεδομένων.

Μπορούμε να το ελέγξουμε αυτό απλά. Η πρώτη τιμή των τριών πρώτων γραμμών του δεκαεξαδικού (που ήταν οι τρεις τελευταίες γραμμές πριν αντιστραφεί το αρχείο) ταιριάζει με τις τιμές που καταγράψαμε νωρίτερα: 93, E7 και B8, με αυτή τη σειρά.

Αυτό είναι ένα κόλπο για ένα τερματικό παράθυρο με μία γραμμή.

Όλα έχουν ένα σκοπό

Στον κόσμο του Linux, ακόμη και οι φαινομενικά απλούστερες εντολές και βοηθητικά προγράμματα μπορούν να έχουν εκπληκτικές και ισχυρές ιδιότητες.

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

Ή, όπως λέει μια άλλη φιλοσοφία, «Μην περιφρονείς το φίδι επειδή δεν έχει κέρατα, γιατί ποιος θα πει ότι δεν θα γίνει δράκος;»