Σωλήνες: τι πρέπει να γνωρίζετε για να ξεκινήσετε να τα χρησιμοποιείτε στο GNU / Linux

σωλήνες

ένα σωλήνα ή κουκούτσιΤο e είναι στην πραγματικότητα ένας αγωγός διαθέσιμος για UNIX/Linux και είναι πολύ βολικός. Αλλά για να κατανοήσετε πλήρως τι είναι ένας σωλήνας, θα πρέπει να γνωρίζετε ότι σε περιβάλλον *nix έχει 3 ενσωματωμένες ροές δεδομένων. Αυτό, για όσους δεν το γνωρίζουν, σημαίνει ότι τα δεδομένα μπορούν να ταξιδέψουν προς ή από τρία σημεία.

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

Αυτά τα σημεία για τα οποία λέγατε ή ροές δεδομένων, είναι:

  • stdin: αντιστοιχεί στο 0 και είναι η τυπική είσοδος. Συνήθως, η τυπική εισαγωγή δεδομένων σε ένα σύστημα *nix είναι το πληκτρολόγιο. Δηλαδή, αυτό που πληκτρολογείτε θα είναι οι πληροφορίες που θα χρησιμοποιηθούν. Έχει μια ειδική συσκευή που σχετίζεται με αυτό που είναι /dev/stdin.
  • stdout: προσδιορίζεται με το 1, είναι η τυπική έξοδος. Σε γενικές γραμμές, αντιστοιχεί στην οθόνη ή την οθόνη του υπολογιστή σας, όπου μπορείτε να δείτε τις πληροφορίες. Για παράδειγμα, όταν εκτελείτε μια εντολή ls, η λίστα περιεχομένου θα εμφανίζεται στην οθόνη, σωστά; Η συσχετισμένη συσκευή είναι /dev/stdout.
  • stderr: Αναγνωρίζεται με το 2, είναι η τυπική έξοδος σφάλματος, για όταν εμφανίζεται σφάλμα σε ένα πρόγραμμα. Η συσχετισμένη συσκευή είναι /dev/stderr.

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

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

ls -l | grep doc

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

ps aux | grep firefox

Αντί να βγάζει όλη την έξοδο του προγράμματος ps στην οθόνη (stdout), αυτό που κάνει είναι να το διοχετεύει στην είσοδο του φίλτρου grep και να βγάζει μόνο αυτό που ταιριάζει με το μοτίβο του firefox σε αυτήν την περίπτωση…

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

cat libro | grep love | more

Όπως βλέπετε, οι δυνατότητες είναι πολλές, ό,τι μπορείς να φανταστείς και επιτρέπονται. Εμφάνιση ακόμη και μόνο των πρώτων, των τελευταίων γραμμών ενός αρχείου, μετρήστε τις γραμμές που εισάγετε το wc που προέρχονται από την καταχώριση και ακόμη και ταξινομήστε τις:

cat listado | head
cat listado | tail
cat listado | wc -l
cat listado | sort

Μπορείτε επίσης να εργαστείτε με σφάλματα με |& και για παράδειγμα αναζητήστε τη λέξη alert στην έξοδο ενός σεναρίου εάν αποτύχει:

./miscript |& grep alerta 

Και τέλος, υπάρχουν δύο εντολές στενά συνδεδεμένες με σωλήνες που είναι tee και xargs και αυτό μπορεί να επεκτείνει περαιτέρω τις δυνατότητες αυτών. Στην περίπτωση του tee, αυτό που θα επιτρέψει είναι να εμφανιστεί η έξοδος του bootstrapper στο stdout, ώστε να μπορείτε να το δείτε, και επιπλέον, μπορεί να το διοχετεύσει σε άλλο αρχείο. Ένα παράδειγμα θα ήταν αν παραθέσετε τα περιεχόμενα ενός καταλόγου και θέλετε να δείτε την έξοδο του ls -l αυτήν τη στιγμή και επίσης να το αποθηκεύσετε σε ένα αρχείο listing.txt:

ls -l | tee listado.txt

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

Y xargs είναι ακόμη πιο ενδιαφέρον σε ορισμένες περιπτώσεις. Σε αυτή την περίπτωση είναι σε θέση να δημιουργήσει μια εντολή από την τυπική είσοδο που λαμβάνει μέσω του σωλήνα. Με άλλα λόγια, είναι σε θέση να πιάσει ό,τι έχει ρίξει ένας bootstrapper μέσω της εξόδου του και που φτάνει στο xargs μέσω του pipeline για να το περάσει με τη σειρά του σε μια άλλη εντολή ως ορίσματα.

Ακόμα δεν το καταλαβαίνετε; Θα το δεις πολύ καλύτερα με ένα παράδειγμα. Φανταστείτε ότι θέλετε να αφαιρέσετε όλα τα καταραμένα αρχεία thumbs.db από έναν κατάλογο, έναν δίσκο ή ένα διαμέρισμα. Εάν υπάρχουν πολλά, μπορεί να είναι αδύνατο να πάτε ένα προς ένα με την εντολή rm για να τα διαγράψετε χειροκίνητα. Αλλά με το xargs μπορείτε να αυτοματοποιήσετε τα πάντα. Και μπορείτε να το κάνετε χρησιμοποιώντας το find για να τα εντοπίσετε, να στείλετε την έξοδο μέσω της εισόδου του xargs και αυτό με τη σειρά του θα δώσει στον rm τα ονόματα ως ορίσματα. Επομένως, όλα αυτά που βρίσκονται αυτόματα θα διαγραφούν:

find ./ -name "thumbs.db" | xargs rm

Για παράδειγμα, φανταστείτε ότι η εύρεση εντοπίζει τα /home/name/thumbs.db, /media/test/thumbs.db και /tmp/thumbs.db. Λοιπόν, το xargs θα τα περάσει στο rm σαν να ήταν επιχειρήματα. Δηλαδή, σαν να είχαμε εκτελέσει: rm /home/name/thumbs.db, μετά rm /media/test/thumbs.db και μετά rm /tmp/thumbs.db.


Αφήστε το σχόλιό σας

Η διεύθυνση email σας δεν θα δημοσιευθεί. Τα υποχρεωτικά πεδία σημειώνονται με *

*

*

  1. Υπεύθυνος για τα δεδομένα: AB Internet Networks 2008 SL
  2. Σκοπός των δεδομένων: Έλεγχος SPAM, διαχείριση σχολίων.
  3. Νομιμοποίηση: Η συγκατάθεσή σας
  4. Κοινοποίηση των δεδομένων: Τα δεδομένα δεν θα κοινοποιούνται σε τρίτους, εκτός από νομική υποχρέωση.
  5. Αποθήκευση δεδομένων: Βάση δεδομένων που φιλοξενείται από τα δίκτυα Occentus (ΕΕ)
  6. Δικαιώματα: Ανά πάσα στιγμή μπορείτε να περιορίσετε, να ανακτήσετε και να διαγράψετε τις πληροφορίες σας.

  1.   jose dijo

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

  2.   Daniel dijo

    Τι υπέροχο άρθρο, αυτή τη στιγμή μελετώ την ανακατεύθυνση I/O στο βιβλίο The Linux Command Line. Μου είναι πιο ξεκάθαρο για τους σωλήνες (Pipeline) και τις τρεις ροές δεδομένων. Η συνεισφορά εκτιμάται. Χαιρετίσματα.

  3.   01101001b dijo

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