30 Παραδείγματα Grep για διαχειριστές συστήματος

30 Grep Examples System Admins



Μπορείτε να βρείτε grep που βρίσκεται βαθιά μέσα στον ζωικό εγκέφαλο των λειτουργικών συστημάτων Unix και Unix. Είναι ένα βασικό πρόγραμμα που χρησιμοποιείται για την αντιστοίχιση προτύπων και γράφτηκε τη δεκαετία του '70 μαζί με το υπόλοιπο εργαλείο UNIX που γνωρίζουμε και αγαπάμε (ή μισούμε).

Ενώ η εκμάθηση για τις επίσημες γλώσσες και τις κανονικές εκφράσεις είναι ένα συναρπαστικό θέμα. Η εκμάθηση grep έχει πολλά περισσότερα από τα regexes. Για να ξεκινήσετε με αυτό και για να δείτε την ομορφιά και την κομψότητα του grep πρέπει πρώτα να δείτε μερικά παραδείγματα από τον πραγματικό κόσμο.







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



1. ps aux | grep

Το ps aux απαριθμεί όλες τις διεργασίες και τα σχετικά pids τους. Συχνά όμως αυτός ο κατάλογος είναι πολύ μεγάλος για να τον ελέγξει ένας άνθρωπος. Με τη σωλήνωση της εξόδου σε μια εντολή grep μπορείτε να παραθέσετε διαδικασίες που εκτελούνται έχοντας κατά νου μια πολύ συγκεκριμένη εφαρμογή. Για παράδειγμα, θα μπορούσε να είναι sshd ή nginx ή httpd.



# ps έως | grep sshd
ρίζα400 0,0 0,2 69944 5624; Ss17:47 0: 00/usr/sbin/sshd-ΡΕ
ρίζα1076 0,2 0,3 95204 6816; Ss18:29 0: 00 sshd: root@πόντους/0
ρίζα1093 0,0 0,0 12784 932πόντους/0S+18:29 0: 00λαβήsshd

2. Καλύψτε τις διευθύνσεις IP σας

Στα περισσότερα λειτουργικά συστήματα μπορείτε να καταχωρίσετε όλες τις διεπαφές δικτύου και την IP που έχει εκχωρηθεί σε αυτήν τη διεπαφή χρησιμοποιώντας είτε την εντολή ifconfig είτε το ip addr. Και οι δύο αυτές εντολές θα παράγουν πολλές πρόσθετες πληροφορίες. Αλλά αν θέλετε να εκτυπώσετε μόνο τη διεύθυνση IP (πείτε για σενάρια κελύφους), τότε μπορείτε να χρησιμοποιήσετε την παρακάτω εντολή:





$ip addr | λαβήinet| awk '{print $ 2; } '
$ip addr | λαβή -σεinet| awk '{print $ 2; } ' #Για γραμμές με μόνο inet όχι inet6 (IPv6)

Η εντολή ip addr λαμβάνει όλες τις λεπτομέρειες (συμπεριλαμβανομένων των διευθύνσεων IP), στη συνέχεια μεταφέρεται στη δεύτερη εντολή grep inet η οποία εξάγει μόνο τις γραμμές με inet σε αυτές. Στη συνέχεια, μεταφέρεται σε awk print η δήλωση που εκτυπώνει τη δεύτερη λέξη σε κάθε γραμμή (για να το πούμε απλά).

P.S: Μπορείτε επίσης να το κάνετε αυτό χωρίς το grep εάν γνωρίζετε το awk καλά.



3. Κοιτάζοντας τις αποτυχημένες προσπάθειες SSH

Εάν έχετε διακομιστή με πρόσβαση στο Διαδίκτυο, με δημόσια IP, θα βομβαρδίζεται συνεχώς με απόπειρες SSH και εάν επιτρέπετε στους χρήστες να έχουν πρόσβαση SSH βασισμένη σε κωδικό πρόσβασης (πολιτική που δεν θα συνιστούσα), μπορείτε να δείτε όλες αυτές τις αποτυχημένες προσπάθειες χρησιμοποιώντας η ακόλουθη εντολή grep:

# cat /var/log/auth.log | grep Fail
Δείγμα έξω τεθεί
Δεκ5 16:είκοσι: 03 debian sshd[509]: Αποτυχημένος κωδικός πρόσβασηςΓιαroot από τη θύρα 192.168.0.10052374ssh2
Δεκ5 16:είκοσι: 07 debian sshd[509]: Αποτυχημένος κωδικός πρόσβασηςΓιαroot από τη θύρα 192.168.0.10052374ssh2
Δεκ5 16:είκοσι:έντεκαdebian sshd[509]: Αποτυχημένος κωδικός πρόσβασηςΓιαroot από τη θύρα 192.168.0.10052374ssh2

4. Σωλήνωση Grep στο Uniq

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

#Γάτα /όπου/κούτσουρο/author.log| λαβή 'Αποτυγχάνω' | uniq -φά 3

Η εντολή uniq υποτίθεται ότι εκτυπώνει μόνο τις μοναδικές γραμμές. Το uniq -f 3 παραλείπει τα τρία πρώτα πεδία (για να παραβλέψει τις χρονικές σημάνσεις που δεν επαναλαμβάνονται ποτέ) και στη συνέχεια αρχίζει να αναζητά μοναδικές γραμμές.

5. Grepping for Error Messages

Η χρήση του Grep για αρχεία καταγραφής πρόσβασης και σφαλμάτων δεν περιορίζεται μόνο στο SSH. Οι διακομιστές ιστού (όπως το Nginx) καταγράφουν σφάλματα και αρχεία καταγραφής πρόσβασης αρκετά σχολαστικά. Εάν ρυθμίσετε σενάρια παρακολούθησης που σας στέλνουν ειδοποιήσεις όταν το grep 404 επιστρέφει μια νέα τιμή. Αυτό μπορεί να είναι αρκετά χρήσιμο.

# grep -w '404' /var/www/nginx/access.log

192.168.0.100 - -[06/Δεκ/2018: 02:είκοσι:29+0530] 'GET /favicon.ico HTTP /1.1' 404 200
'http://192.168.0.102/' 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)
AppleWebKit/537.36 (KHTML, όπως το Gecko) Chrome/70.0.3538.110 Safari/537.36 '


192.168.0.101 - -[06/Δεκ/2018: 02:Τέσσερα πέντε:16+0530] 'GET /favicon.ico HTTP /1.1' 404 143
'http://192.168.0.102/' «Mozilla/5.0 (iPad; CPU OS 12_1 όπως το Mac OS X)
AppleWebKit/605.1.15 (KHTML, όπως το Gecko) Έκδοση/12.0 Mobile/15E148 Safari/604.1 '

Το regex μπορεί να μην είναι 404 αλλά κάποιο άλλο φιλτράρισμα regex μόνο για προγράμματα -πελάτες για κινητά ή μόνο για συσκευές Apple που προβάλλουν μια ιστοσελίδα. Αυτό σας επιτρέπει να έχετε μια βαθύτερη εικόνα για την απόδοση της εφαρμογής σας.

6. Λίστα πακέτων

Για συστήματα που βασίζονται στο Debian, το dpkg -l παραθέτει όλα τα πακέτα που είναι εγκατεστημένα στο σύστημά σας. Μπορείτε να το τοποθετήσετε σε μια εντολή grep για να αναζητήσετε πακέτα που ανήκουν σε μια συγκεκριμένη εφαρμογή. Για παράδειγμα:

#dpkg -ο | λαβή 'Ήρθα'

7. grep -v FileNames

Για να απαριθμήσετε όλες τις γραμμές που μη περιέχει ένα δεδομένο μοτίβο, χρησιμοποιήστε τη σημαία -v. Είναι βασικά το αντίθετο από μια κανονική εντολή grep.

8. grep -l

Παραθέτει όλα τα αρχεία που περιέχουν τουλάχιστον μία εμφάνιση του παρεχόμενου μοτίβου. Αυτό είναι χρήσιμο όταν αναζητάτε ένα μοτίβο μέσα σε έναν κατάλογο με πολλά αρχεία. Εκτυπώνει μόνο το όνομα του αρχείου και όχι τη συγκεκριμένη γραμμή με το μοτίβο.

9. Ενιαία επιλογή λέξης -w

$λαβή -σε <ΠΡΟΤΥΠΟ>>ονόματα αρχείων

Η σημαία -w λέει στο grep να αναζητήσει το δεδομένο μοτίβο ως μια ολόκληρη λέξη και όχι μόνο ως υποσύμβολο μιας γραμμής. Για παράδειγμα, νωρίτερα επιλέξαμε τη διεύθυνση IP και το μοτίβο inet εκτύπωσε τις γραμμές και με τα δύο inet και inet6 απαριθμώντας και τις διευθύνσεις IPv4 και IPv6. Αλλά αν χρησιμοποιήσαμε -w σημαία μόνο οι γραμμές με inet ως λέξη που προηγείται και ακολουθεί λευκά κενά είναι έγκυρο ταίριασμα.

10. Εκτεταμένη τακτική έκφραση

Συχνά θα διαπιστώσετε ότι οι κανονικές εκφράσεις που είναι εγγενείς στο Grep είναι λίγο περιοριστικές. Στα περισσότερα σενάρια και οδηγίες θα βρείτε τη χρήση της σημαίας -E και αυτό θα σας επιτρέψει να εισαγάγετε μοτίβο σε αυτό που ονομάζεται Εκτεταμένη λειτουργία.

Εδώ είναι οι εντολές grep και grep -E για να αναζητήσετε λέξεις Superman και Spiderman.

$λαβή ' (Super | Spider ) άνθρωπος 'κείμενο
$λαβή -ΚΑΙ '(Super | Spider) άνθρωπος'κείμενο

Όπως μπορείτε να δείτε, η εκτεταμένη έκδοση διαβάζεται πολύ πιο εύκολα.

11. Grep για τα δοχεία σας

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

$λιμενεργάτηςΥΣΤΕΡΟΓΡΑΦΟ | λαβή [imageName]

12. Γκρέπ για τους λοβούς σας

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

$kubectl πάρει λοβούς| λαβή <όνομα ανάπτυξης>>

13. Λαβή για μεγάλα δεδομένα

Συχνά, η λεγόμενη ανάλυση Big Data περιλαμβάνει απλή αναζήτηση, ταξινόμηση και καταμέτρηση προτύπων σε ένα δεδομένο σύνολο δεδομένων. Τα βοηθητικά προγράμματα UNIX χαμηλού επιπέδου όπως grep, uniq, wc είναι ιδιαίτερα καλά σε αυτό. Αυτή η ανάρτηση ιστολογίου δείχνει ένα ωραίο παράδειγμα μιας εργασίας που ολοκληρώθηκε σε μόλις δευτερόλεπτα χρησιμοποιώντας grep και άλλα βοηθητικά προγράμματα Unix, ενώ ο Hadoop πήρε σχεδόν μισή ώρα.

Για παράδειγμα, αυτό το σύνολο δεδομένων έχει μέγεθος πάνω από 1,7 GB. Περιέχει πληροφορίες για πληθώρα αγώνων σκακιού, συμπεριλαμβανομένων των κινήσεων που έγιναν, ποιος κέρδισε κ.λπ. Μας ενδιαφέρουν μόνο τα αποτελέσματα, οπότε εκτελούμε την ακόλουθη εντολή:

$λαβή 'Αποτέλεσμα'εκατομμυρίων βάσεων-2.22.pgn| είδος | uniq -ντο
221 [Αποτέλεσμα'*']
653728 [Αποτέλεσμα'0-1']
852305 [Αποτέλεσμα'1-0']
690934 [Αποτέλεσμα'1 / 2-1 / 2']

Αυτό χρειάστηκε περίπου 15 δευτερόλεπτα σε έναν τετραετή επεξεργαστή 2 πυρήνων/4 νημάτων. Έτσι την επόμενη φορά που θα λύσετε ένα μεγάλο πρόβλημα δεδομένων. Σκεφτείτε αν μπορείτε να χρησιμοποιήσετε grep αντ 'αυτού.

14. grep –color = auto

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

15. grep -i

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

16. grep -n

Η σημαία -n θα εμφανίζει τους αριθμούς γραμμών, ώστε να μην ανησυχείτε αν θα βρείτε την ίδια γραμμή αργότερα.

17. git grep

Το Git, το σύστημα ελέγχου έκδοσης, έχει το ίδιο μια ενσωματωμένη εντολή grep που λειτουργεί σχεδόν όπως το κανονικό σας grep. Αλλά μπορεί να χρησιμοποιηθεί για αναζήτηση μοτίβων σε οποιοδήποτε δεσμευμένο δέντρο χρησιμοποιώντας το εγγενές git CLI, αντί για κουραστικούς σωλήνες. Για παράδειγμα, εάν βρίσκεστε στον κύριο κλάδο του repo σας, μπορείτε να περάσετε το repo χρησιμοποιώντας:

(κύριος)$git grep <πρότυπο>>

18. grep -o

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

19. grep -x

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

20. grep -T

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

21. grep -q

Αυτό καταστέλλει την έξοδο και εκτελεί αθόρυβα την εντολή grep. Πολύ χρήσιμο όταν αντικαθιστάτε κείμενο ή εκτελείτε grep σε ένα σενάριο δαίμονα.

22. grep -Ρ

Τα άτομα που έχουν συνηθίσει να περνούν τυπική σύνταξη έκφρασης μπορούν να χρησιμοποιήσουν τη σημαία -P για να χρησιμοποιήσουν ακριβώς αυτό. Δεν χρειάζεται να μάθετε βασική κανονική έκφραση, την οποία η grep χρησιμοποιεί από προεπιλογή.

23. grep -D [ACTION]

Στο Unix, σχεδόν όλα μπορούν να αντιμετωπιστούν ως αρχείο. Κατά συνέπεια, οποιαδήποτε συσκευή, μια πρίζα ή μια ροή δεδομένων FIFO μπορεί να τροφοδοτηθεί σε grep. Μπορείτε να χρησιμοποιήσετε τη σημαία -D ακολουθούμενη από μια ΕΝΕΡΓΕΙΑ (η προεπιλεγμένη ενέργεια είναι ΔΙΑΒΑΣΤΕ). Μερικές άλλες επιλογές είναι η παράλειψη σιωπηλής παράλειψης συγκεκριμένων συσκευών και η επαναφορά για αναδρομική μετάβαση από καταλόγους και συνδέσμους symlinks.

24. Επανάληψη

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

$λαβή -ΚΑΙ [0-9]{10}

Αυτό εκτυπώνει γραμμές που περιέχουν συμβολοσειρές μήκους 10 ή περισσότερων ψηφίων.

25. Επαναλαμβανόμενες συντομογραφίες

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

; : Το μοτίβο που προηγείται του ερωτηματικού πρέπει να ταιριάζει με μηδέν ή μία φορά.

*: Το μοτίβο που προηγείται του αστεριού πρέπει να ταιριάζει με μηδέν ή περισσότερες φορές.

+: Το μοτίβο που προηγείται συν θα πρέπει να ταιριάζει μία ή περισσότερες φορές.

25. Byte Offsets

Εάν θέλετε να μάθετε να βλέπετε την αντιστάθμιση byte των γραμμών όπου βρίσκεται η παράσταση που ταιριάζει, μπορείτε να χρησιμοποιήσετε τη σημαία -b για να εκτυπώσετε επίσης τις αντισταθμίσεις. Για να εκτυπώσετε την αντιστάθμιση μόνο του τμήματος που ταιριάζει σε μια γραμμή, μπορείτε να χρησιμοποιήσετε τη σημαία -b με τη σημαία -o.

$λαβή -σι <ΠΡΟΤΥΠΟ>> [όνομα αρχείου]

Offset σημαίνει απλώς, μετά από πόσα byte από την αρχή του αρχείου ξεκινά η συμβολοσειρά που ταιριάζει.

26. egrep, fgrep και rgerp

Συχνά θα δείτε την επίκληση του egrep, για να χρησιμοποιήσετε την εκτεταμένη σύνταξη κανονικής έκφρασης που συζητήσαμε νωρίτερα. Ωστόσο, αυτή είναι μια σύνταξη που έχει καταργηθεί και συνιστάται να αποφύγετε τη χρήση αυτής. Χρησιμοποιήστε grep -E αντ 'αυτού. Ομοίως, χρησιμοποιήστε grep -F, αντί για fgrep και grep -r αντί για rgrep.

27. grep -z

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

28. grep -a [Όνομα αρχείου]

Η σημαία -a λέει grep να αντιμετωπίζει το παρεχόμενο αρχείο σαν να ήταν κανονικό κείμενο. Το αρχείο θα μπορούσε να είναι δυαδικό, αλλά το grep θα μεταχειριστεί το περιεχόμενο μέσα, σαν να είναι κείμενο.

29. grep -U [όνομα αρχείου]

Η σημαία -U λέει στο grep να αντιμετωπίζει τα παρεχόμενα αρχεία σαν να είναι δυαδικά αρχεία και όχι κείμενο. Από προεπιλογή, το grep μαντεύει τον τύπο αρχείου κοιτάζοντας τα πρώτα λίγα byte. Η χρήση αυτής της σημαίας παρακάμπτει ότι η εικασία λειτουργεί.

Grep -m NUM

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

συμπέρασμα

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

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