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

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

Τερματικό Linux σε φορητό υπολογιστή

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

Οι σωλήνες είναι παντού

Οι σωληνώσεις είναι μία από τις πιο χρήσιμες εντολέςχαρακτηριστικά που διαθέτουν τα λειτουργικά συστήματα Linux και Unix. Οι σωληνώσεις χρησιμοποιούνται με αμέτρητους τρόπους. Κοιτάξτε οποιοδήποτε άρθρο γραμμής εντολών Linux-σε οποιαδήποτε τοποθεσία Web, όχι μόνο τη δική μας - και θα δείτε ότι οι σωλήνες εμφανίζονται πιο συχνά από ό, τι δεν είναι. Αναθεώρησα ορισμένα από τα άρθρα του Linux για το How-To Geek και οι σωλήνες χρησιμοποιούνται σε όλα αυτά, με τον ένα ή τον άλλο τρόπο.

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

Ένα απλό παράδειγμα

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

Μπορούμε να πάρετε μια λίστα των αρχείων εύκολα χρησιμοποιώντας ls:

ls

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

Για να διαχωρίσετε τον τύπο του φακέλου ενδιαφέροντος, θα χρησιμοποιήσουμε grep. Θέλουμε να βρούμε αρχεία που έχουν τη λέξη "σελίδα" στο όνομα αρχείου ή την επέκταση αρχείου.

Θα χρησιμοποιήσουμε τον ειδικό χαρακτήρα του κελύφους "|"Για να διοχετεύσει την έξοδο από ls σε grep.

ls | grep "page"

ls -l | grep "σελίδα" σε ένα παράθυρο τερματικού

grep εκτυπώνει γραμμές που ταιριάζουν με το πρότυπο αναζήτησης. Έτσι, αυτό μας δίνει μια λίστα που περιέχει μόνο ".page" αρχεία.

λίστα των αρχείων σελίδας σε ένα παράθυρο τερματικού

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

Επέκταση της αλυσίδας μας

Ας αρχίσουμε να επεκτείνουμε την αλυσίδα των σωληνωτών εντολών. Μπορούμε να μετρήσουμε τα αρχεία ".page" προσθέτοντας το wc εντολή. Θα χρησιμοποιήσουμε το -l (σειρά μετρήσεων) με wc. Σημειώστε ότι προσθέσαμε επίσης το -l (μεγάλη μορφή) επιλογή ls . Θα το χρησιμοποιήσουμε σύντομα.

ls - | grep "page" | wc -l

ls - | grep "σελίδα" | wc -l σε ένα παράθυρο τερματικού

grep δεν είναι πλέον η τελευταία εντολή στην αλυσίδα, οπότε δεν βλέπουμε την παραγωγή της. Η έξοδος από grep τροφοδοτείται στο wc εντολή. Η έξοδος που βλέπουμε στο παράθυρο του τερματικού είναι από wc. wc αναφέρει ότι υπάρχουν 69 αρχεία ".page" στον κατάλογο.

Ας επεκταθούμε πάλι τα πράγματα. Θα το πάρουμε wc εντολή από τη γραμμή εντολών και να την αντικαταστήσετε awk. Υπάρχουν έξι στήλες στην έξοδο από το ls με το -l (επιλογή μεγάλου μεγέθους). Θα χρησιμοποιήσουμε awk για να εκτυπώσετε στήλες πέντε, τρία και εννέα. Αυτά είναι το μέγεθος, ο ιδιοκτήτης και το όνομα του αρχείου.

ls -l | grep "page" | awk '{print $5 " " $3 " " $9}'

ls -l | grep "σελίδα" | awk '{print $ 5 "" $ 3 "" $ 9}' σε ένα τερματικό παράθυρο

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

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

Θα περάσουμε τώρα αυτή την έξοδο μέσω του sort εντολή. Θα χρησιμοποιήσουμε το -n (αριθμητική) επιλογή sort γνωρίζετε ότι η πρώτη στήλη πρέπει να αντιμετωπίζεται ως αριθμοί.

ls -l | grep "page" | awk '{print $5 " " $3 " " $9}' | sort -n

ls -l | grep "σελίδα" | awk '{print $ 5 "" $ 3 "" $ 9}' sort -n σε ένα παράθυρο τερματικού

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

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

Προσθήκη άλλης εντολής

Θα τελειώσουμε προσθέτοντας το tail εντολή. Θα την ενημερώσουμε να αναγράφει τις τελευταίες πέντε γραμμές παραγωγής μόνο.

ls -l | grep "page" | awk '{print $5 " " $3 " " $9}' | sort -n | tail -5

ls -l | grep "σελίδα" | awk '{print $ 5 "" $ 3 "" $ 9}' sort -n | ουρά -5 σε ένα παράθυρο τερματικού

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

Εδώ είναι η έξοδος:

Πέντε μεγαλύτερα αρχεία .page που παρατίθενται κατά παραγγελία μεγέθους σε ένα παράθυρο τερματικού

Θα μπορούσαμε να αντιστρέψουμε τη σειρά μεγέθους προσθέτοντας το -r (αντίστροφη) επιλογή στο sort εντολή και χρήση head αντί tail για να επιλέξετε τις γραμμές από την κορυφή της εξόδου.

ls -l | grep "σελίδα" | awk '{print $ 5 "" $ 3 "" $ 9}' sort -rn | κεφάλι -5 σε ένα παράθυρο τερματικού

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

Πέντε μεγαλύτερα αρχεία .page που παρατίθενται σε σειρά αντίστροφου μεγέθους σε ένα παράθυρο τερματικού

Ορισμένα πρόσφατα παραδείγματα

Ακολουθούν δύο ενδιαφέροντα παραδείγματα από τα πρόσφατα άρθρα για το How-To geek.

Ορισμένες εντολές, όπως το xargsεντολή, έχουν σχεδιαστεί για να έχουν εισροή piped σε αυτές. Εδώ είναι ένας τρόπος που μπορούμε να έχουμε wc μετρήστε τις λέξεις, τους χαρακτήρες και τις γραμμές σε πολλά αρχεία, με σωληνώσεις ls σε xargs το οποίο στη συνέχεια τροφοδοτεί τη λίστα με τα ονόματα αρχείων wc σαν να είχαν περάσει wc ως παραμέτρους γραμμής εντολών.

ls *.page | xargs wc

ls * .page | xargs wc σε ένα παράθυρο τερματικού

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

Πλήθος λέξεων, charcaters και γραμμών σε ένα παράθυρο τερματικού

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

ls | rev | cut -d'.' -f1 | rev | sort | uniq -c

ls | rev | cut -d '.' -f1 | rev | είδος | uniq -c σε ένα παράθυρο τερματικού

Πολλά συμβαίνουν εδώ.

  • ls: Εμφανίζει τα αρχεία στον κατάλογο
  • στροφή μηχανής: Αντιστρέφει το κείμενο στα ονόματα αρχείων.
  • Τομή: Κόβει τη συμβολοσειρά κατά την πρώτη εμφάνιση του καθορισμένου οριοθέτη ".". Το κείμενο μετά από αυτό απορρίπτεται.
  • στροφή μηχανής: Αντιστρέφει το υπόλοιπο κείμενο, το οποίο είναι η επέκταση του αρχείου.
  • είδος: Ταξινόμηση της λίστας αλφαβητικά.
  • uniq: Μετρώνει τον αριθμό κάθε μοναδικής καταχώρησης στη λίστα.

Η έξοδος εμφανίζει τη λίστα των επεκτάσεων αρχείων, ταξινομημένη αλφαβητικά με μια καταμέτρηση κάθε μοναδικού τύπου.

Λίστα μοναδικών επεκτάσεων αρχείων σε ένα παράθυρο τερματικού

Ονομασμένοι σωλήνες

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

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

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

Ονομασμένοι σωλήνες δημιουργούνται με το mkfifo εντολή. Αυτή η εντολή θα δημιουργήσει έναν ονομασμένο σωλήνα που ονομάζεται "geek-pipe" στον τρέχοντα κατάλογο.

mkfifo geek-pipe

mkfifo geek-pipe σε ένα τερματικό παράθυρο

Μπορούμε να δούμε τις λεπτομέρειες του ονομασμένου σωλήνα εάν χρησιμοποιήσουμε το ls εντολή με το -l (μεγάλη μορφή):

ls -l geek-pipe

ls -l geek-pipe σε ένα τερματικό παράθυρο

Ο πρώτος χαρακτήρας της λίστας είναι "p", που σημαίνει ότι είναι ένας σωλήνας. Αν ήταν "d", θα σήμαινε ότι το αντικείμενο του συστήματος αρχείων είναι ένας κατάλογος και μια παύλα "-" θα σήμαινε ότι είναι ένα κανονικό αρχείο.

Χρησιμοποιώντας το Named Pipe

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

Θα χρησιμοποιήσουμε δύο παράθυρα τερματικών για αυτό το παράδειγμα. Θα χρησιμοποιήσω την ετικέτα:

# Terminal-1

σε ένα παράθυρο τερματικού και

# Terminal-2

στο άλλο, ώστε να μπορείτε να διαφοροποιήσετε μεταξύ τους. Το hash "#" λέει στο κέλυφος ότι αυτό που ακολουθεί είναι ένα σχόλιο και να το αγνοήσουμε.

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

ls | rev | cut -d'.' -f1 | rev | sort | uniq -c > geek-pipe

ls | rev | cut -d '.' -f1 | rev | είδος | uniq -c> geek-pipe σε ένα τερματικό παράθυρο

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

Στο άλλο παράθυρο τερματικού, εκδώστε αυτήν την εντολή:

cat < geek-pipe

cat <geek-pipe σε ένα παράθυρο τερματικού

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

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

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

Ολοκληρώθηκε η εργασία και η γραμμή εντολών σε ένα παράθυρο τερματικού

Λοιπόν, αυτό που συνέβη.

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

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

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

Η Δύναμη των Σωλήνων

Σήμερα, οι ονομαζόμενες σωλήνες είναι κάτι νεωτεριστικής δράσης.

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

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