Πώς να χρησιμοποιήσετε την εντολή συμβολοσειρών στο Linux

Θέλετε να δείτε το κείμενο μέσα σε ένα δυαδικό αρχείο ή ένα αρχείο δεδομένων; Η εντολή strings Linux βγάζει αυτά τα κομμάτια κειμένου – που ονομάζονται “strings” – για εσάς.

Το Linux είναι γεμάτο εντολές που μπορούν να μοιάζουν με λύσεις σε αναζήτηση προβλημάτων. Η εντολή των χορδών σίγουρα πέφτει σε αυτό το στρατόπεδο. Ποιος είναι ακριβώς ο σκοπός του; Υπάρχει κάποιο σημείο σε μια εντολή που παραθέτει τις εκτυπώσιμες συμβολοσειρές μέσα από ένα δυαδικό αρχείο;

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

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

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

Χρήση των συμβολοσειρών Εντολή

Δεν υπάρχει τίποτα περίπλοκο στην εντολή strings και η βασική της χρήση είναι πολύ απλή. Παρέχουμε το όνομα του αρχείου που θέλουμε να αναζητήσουν οι συμβολοσειρές στη γραμμή εντολών.

  Πώς να παίξετε παιχνίδια Playstation σε Linux

Εδώ, θα χρησιμοποιήσουμε συμβολοσειρές σε ένα δυαδικό αρχείο – ένα εκτελέσιμο αρχείο – που ονομάζεται “jibber”. Πληκτρολογούμε συμβολοσειρές, ένα κενό, “jibber” και μετά πατάμε Enter.

strings jibber

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

Ρύθμιση του ελάχιστου μήκους συμβολοσειράς

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

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

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

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

strings -n 2 jibber

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

Χορδές σωληνώσεων Through Less

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

strings jibber | less

Η καταχώριση παρουσιάζεται τώρα για εμάς σε λιγότερα, με την κορυφή της καταχώρισης να εμφανίζεται πρώτη.

Χρήση συμβολοσειρών με Αρχεία Αντικειμένων

Συνήθως, τα αρχεία πηγαίου κώδικα του προγράμματος μεταγλωττίζονται σε αρχεία αντικειμένων. Αυτά συνδέονται με αρχεία βιβλιοθήκης για τη δημιουργία ενός δυαδικού εκτελέσιμου αρχείου. Έχουμε το αρχείο αντικειμένου jibber στο χέρι, οπότε ας ρίξουμε μια ματιά μέσα σε αυτό το αρχείο. Σημειώστε την επέκταση αρχείου “.o”.

jibber.o | less

Το πρώτο σύνολο συμβολοσειρών είναι όλα τυλιγμένα στη στήλη οκτώ, εάν είναι μεγαλύτερες από οκτώ χαρακτήρες. Εάν έχουν τυλιχτεί, ο χαρακτήρας “H” βρίσκεται στη στήλη εννέα. Μπορείτε να αναγνωρίσετε αυτές τις συμβολοσειρές ως εντολές SQL.

  Πώς να εγκαταστήσετε το JetBrains RubyMine στο Linux

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

Είναι ενδιαφέρον να δούμε τις διαφορές στις συμβολοσειρές κειμένου μεταξύ του αρχείου αντικειμένου και του τελικού εκτελέσιμου αρχείου.

Αναζήτηση σε συγκεκριμένες περιοχές του αρχείου

Τα μεταγλωττισμένα προγράμματα έχουν διαφορετικές περιοχές μέσα τους που χρησιμοποιούνται για την αποθήκευση κειμένου. Από προεπιλογή, το strings αναζητά ολόκληρο το αρχείο αναζητώντας κείμενο. Αυτό είναι ακριβώς σαν να είχατε χρησιμοποιήσει την επιλογή -a (όλα). Για να υπάρχει αναζήτηση συμβολοσειρών μόνο σε αρχικοποιημένες, φορτωμένες ενότητες δεδομένων στο αρχείο, χρησιμοποιήστε την επιλογή -d (data).

strings -d jibber | less

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

Εκτύπωση της μετατόπισης συμβολοσειράς

Μπορούμε να έχουμε συμβολοσειρές να εκτυπώνουν τη μετατόπιση από την αρχή του αρχείου στο οποίο βρίσκεται κάθε συμβολοσειρά. Για να το κάνετε αυτό, χρησιμοποιήστε την επιλογή -o (offset).

strings -o parse_phrases | less

Η μετατόπιση δίνεται Οκτάεδρος.

Για να εμφανίζεται η μετατόπιση σε διαφορετική αριθμητική βάση, όπως δεκαδική ή δεκαεξαδική, χρησιμοποιήστε την επιλογή -t (radix). Η επιλογή radix πρέπει να ακολουθείται από d (δεκαδικός), Χ (δεκαεξαδικό), ή o (οκταδικό). Η χρήση -to είναι ίδια με τη χρήση -o.

strings -t d parse_phrases | less

Οι μετατοπίσεις εκτυπώνονται πλέον σε δεκαδικό.

strings -t x parse_phrases | less

Οι μετατοπίσεις εκτυπώνονται τώρα σε δεκαεξαδικό.

Συμπεριλαμβανομένου του κενού χώρου

Το strings θεωρεί τους χαρακτήρες tab και space ως μέρος των συμβολοσειρών που βρίσκει. Άλλοι χαρακτήρες κενού διαστήματος, όπως οι νέες γραμμές και οι επιστροφές μεταφοράς, δεν αντιμετωπίζονται σαν να ήταν μέρος των συμβολοσειρών. Η επιλογή -w (κενός χώρος) αναγκάζει τις συμβολοσειρές να αντιμετωπίζουν όλους τους χαρακτήρες κενού διαστήματος σαν να είναι μέρη της συμβολοσειράς.

strings -w add_data | less

Μπορούμε να δούμε την κενή γραμμή στην έξοδο, η οποία είναι αποτέλεσμα των (αόρατων) χαρακτήρων μεταφοράς και νέας γραμμής στο τέλος της δεύτερης γραμμής.

  Πώς να εγκαταστήσετε την Java στο Linux

Δεν περιοριζόμαστε στα αρχεία

Μπορούμε να χρησιμοποιήσουμε συμβολοσειρές με οτιδήποτε είναι, ή μπορεί να παράγει, μια ροή byte.

Με αυτήν την εντολή, μπορούμε να κοιτάξουμε μέσα από το μνήμη τυχαίας προσπέλασης (RAM) του υπολογιστή μας.

Πρέπει να χρησιμοποιήσουμε sudo επειδή έχουμε πρόσβαση στο /dev/mem. Αυτό είναι ένα αρχείο συσκευής χαρακτήρων που περιέχει μια εικόνα της κύριας μνήμης του υπολογιστή σας.

sudo strings /dev/mem | less

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

Αναζήτηση πολλών αρχείων ταυτόχρονα

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

Θα χρησιμοποιήσουμε έναν χαρακτήρα μπαλαντέρ και θα κάνουμε αναζήτηση σε όλα τα εκτελέσιμα αρχεία στον κατάλογο /bin. Επειδή η λίστα θα περιέχει αποτελέσματα από πολλά αρχεία, θα χρησιμοποιήσουμε την επιλογή -f (όνομα αρχείου). Αυτό θα εκτυπώσει το όνομα του αρχείου στην αρχή κάθε γραμμής. Στη συνέχεια, μπορούμε να δούμε σε ποιο αρχείο βρέθηκε κάθε συμβολοσειρά.

Διαβιβάζουμε τα αποτελέσματα grep, και αναζητήστε συμβολοσειρές που περιέχουν τη λέξη “Πνευματικά δικαιώματα”.

strings -f /bin/* | grep Copyright

Λαμβάνουμε μια καθαρή λίστα των δηλώσεων πνευματικών δικαιωμάτων για κάθε αρχείο στον κατάλογο /bin, με το όνομα του αρχείου στην αρχή κάθε γραμμής.

χορδές ξετυλιγμένες

Δεν υπάρχει μυστήριο για τα έγχορδα. είναι μια τυπική εντολή Linux. Κάνει κάτι πολύ συγκεκριμένο και το κάνει πολύ καλά.

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