Ανακατεύθυνση εισόδου εξόδου σε Παραδείγματα Linux/Unix

⚡ Έξυπνη Σύνοψη

Η ανακατεύθυνση σε Linux και Unix αλλάζει πού μια εντολή διαβάζει την είσοδο ή στέλνει την έξοδο, swapping το πληκτρολόγιο και την οθόνη για αρχεία ή συσκευές που χρησιμοποιούν τελεστές όπως το σύμβολο "μεγαλύτερο από", το σύμβολο "μικρότερο από" και τον τελεστή προσθήκης.

  • 🔀 Ανακατεύθυνση: Η ανακατεύθυνση αλλάζει την τυπική είσοδο ή έξοδο μιας εντολής από το πληκτρολόγιο και την οθόνη σε ένα αρχείο ή συσκευή.
  • ➡️ Παραγωγή: Ο τελεστής > γράφει την έξοδο σε ένα αρχείο, ενώ ο τελεστής >> την προσθέτει σε ένα υπάρχον αρχείο χωρίς να το διαγράψει.
  • ⬅️ εισόδου: Ο τελεστής < τροφοδοτεί ένα αρχείο σε μια εντολή ως τυπική είσοδο αντί για το πληκτρολόγιο.
  • 🔢 Περιγραφές αρχείων: Κάθε ανοιχτό αρχείο λαμβάνει έναν αριθμό: 0 για το stdin, 1 για το stdout και 2 για το stderr.
  • ⚠️ Ανακατεύθυνση σφάλματος: Η χρήση του 2> στέλνει μηνύματα σφάλματος σε ξεχωριστό αρχείο, ώστε να μην υπερφορτώνουν την κανονική έξοδο.
  • 🔗 Συνδυασμένες ροές: Η σύνταξη 2>&1 δρομολογεί το τυπικό σφάλμα στον ίδιο προορισμό με την τυπική έξοδο.
  • 🤖 Βοήθεια με την Τεχνητή Νοημοσύνη: Οι βοηθοί τεχνητής νοημοσύνης και ο συγκυβερνήτης του GitHub μπορούν να δημιουργήσουν και να εξηγήσουν εντολές ανακατεύθυνσης και σενάρια κελύφους.

Ανακατεύθυνση εισόδου-εξόδου σε Linux και Unix με παραδείγματα

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

Τι είναι η ανακατεύθυνση;

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

  • Η τυπική συσκευή εισόδου (stdin) είναι το πληκτρολόγιο.
  • Η τυπική συσκευή εξόδου (stdout) είναι η οθόνη.

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

Ανακατεύθυνση εξόδου

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

Γραφικό επικεφαλίδας ενότητας ανακατεύθυνσης εξόδου

Το σύμβολο '>' χρησιμοποιείται για την ανακατεύθυνση εξόδου (STDOUT).

Παράδειγμα:

ls -al > listings

Εδώ, η έξοδος της εντολής ls -al ανακατευθύνεται στο αρχείο "listings" αντί για την οθόνη σας. Το παρακάτω στιγμιότυπο οθόνης δείχνει το αποτέλεσμα.

Τερματικό που εμφανίζει την καταχώριση ls -al ανακατευθυνόμενη στο αρχείο καταχώρισης

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

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

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

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

$ cat music.mp3 > /dev/audio

Η εντολή cat διαβάζει το αρχείο music.mp3 και στέλνει την έξοδο στο /dev/audio, που είναι η συσκευή ήχου. Εάν η διαμόρφωση ήχου στον υπολογιστή σας είναι σωστή, αυτή η εντολή αναπαράγει το αρχείο μουσικής.mp3.

Ανακατεύθυνση εισόδου

Το παρακάτω γράφημα παρουσιάζει την ανακατεύθυνση εισόδου.

Γραφικό επικεφαλίδας ενότητας ανακατεύθυνσης εισόδου

Το σύμβολο '<' χρησιμοποιείται για την ανακατεύθυνση εισόδου (STDIN).

Παράδειγμα: Το πρόγραμμα αλληλογραφίας στο Linux μπορεί να σας βοηθήσει να στέλνετε email από το τερματικό.

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

mail -s "Subject" to-address < Filename

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

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

Αυτό επισυνάπτει το αρχείο στο email και αποστέλλεται στον παραλήπτη.

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

Αρχεία Descriptors (FD)

Στο Linux και το Unix, όλα είναι αρχεία. Τα κανονικά αρχεία, οι κατάλογοι, ακόμη και οι συσκευές είναι αρχεία. Κάθε αρχείο έχει έναν συσχετισμένο αριθμό που ονομάζεται περιγραφέας αρχείου (FD).

Το παρακάτω διάγραμμα δείχνει τις τυπικές ροές και τους περιγραφείς αρχείων τους.

Διάγραμμα των τυπικών ροών εισόδου, εξόδου και σφάλματος και των περιγραφέων αρχείων τους

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

Ανακατεύθυνση σφάλματος

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

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

Αρχεία Αρχεία Descriptor
Τυπική είσοδος STDIN 0
Τυπική έξοδος STDOUT 1
Τυπικό σφάλμα STDERR 2

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

Γιατί Ανακατεύθυνση Σφάλματος;

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

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

Η λύση είναι να ανακατευθύνετε τα μηνύματα σφάλματος σε ένα αρχείο.

Παράδειγμα 1

$ myprogram 2>errorsfile

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

Το τερματικό που εκτελεί το myprogram με τυπικό σφάλμα ανακατευθύνεται στο αρχείο errorsfile

Παραπάνω, εκτελούμε ένα πρόγραμμα με το όνομα myprogram. Ο περιγραφέας αρχείου για το τυπικό σφάλμα είναι 2. Χρησιμοποιώντας το "2>", ανακατευθύνουμε την έξοδο σφάλματος σε ένα αρχείο με το όνομα "errorsfile". Έτσι, η έξοδος του προγράμματος δεν είναι γεμάτη σφάλματα.

Παράδειγμα 2

Ακολουθεί ένα άλλο παράδειγμα που χρησιμοποιεί την εντολή find.

find . -name 'my*' 2>error.log

Χρησιμοποιώντας την εντολή find, αναζητούμε στον τρέχοντα κατάλογο "." ένα αρχείο του οποίου το όνομα ξεκινά με "my" και στέλνουμε τυχόν σφάλματα στο error.log.

Παράδειγμα 3: Ας δούμε ένα πιο σύνθετο παράδειγμα.

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

ls Documents ABC> dirlist 2>&1

Το παρακάτω διάγραμμα δείχνει και τις δύο ροές να καταγράφονται σε ένα αρχείο.

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

Εδώ:

  • Το 2>&1 σημαίνει ότι το STDERR ανακατευθύνεται στον ίδιο προορισμό με το STDOUT (που είναι η λίστα καταλόγου αρχείων).
  • Η έξοδος σφάλματος ανακατευθύνεται στην τυπική έξοδο, η οποία με τη σειρά της ανακατευθύνεται στη λίστα καταλόγου αρχείων. Επομένως, και οι δύο ροές εγγράφονται στη λίστα καταλόγου αρχείων.

Το παρακάτω διάγραμμα συνοψίζει τον τρόπο με τον οποίο η ανακατεύθυνση εισόδου, εξόδου και σφάλματος συνδυάζονται.

Διάγραμμα που συνοψίζει την ανακατεύθυνση εισόδου, εξόδου και σφαλμάτων σε Linux και Unix

Συχνές Ερωτήσεις

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

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

Το /dev/null είναι ένα ειδικό αρχείο που απορρίπτει όλα τα στοιχεία που είναι γραμμένα σε αυτό. Η προσθήκη της εντολής 2>/dev/null σε μια εντολή ανακατευθύνει τα μηνύματα σφάλματος σε αυτό το αρχείο, απορρίπτοντάς τα σιωπηλά, έτσι ώστε να εμφανίζεται μόνο η κανονική έξοδος στην οθόνη. Είναι ένας συνηθισμένος τρόπος για να αποκρύψετε την ανεπιθύμητη συσσώρευση σφαλμάτων.

Η εντολή tee διαβάζει από την τυπική είσοδο και γράφει τα δεδομένα τόσο στην οθόνη όσο και σε ένα ή περισσότερα αρχεία ταυτόχρονα, για παράδειγμα ls -al | tee listing.txt. Σας επιτρέπει να αποθηκεύσετε την έξοδο μιας εντολής σε ένα αρχείο ενώ εξακολουθείτε να την βλέπετε στην οθόνη.

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

Χρησιμοποιήστε τη σύνταξη 2>&1 μετά την ανακατεύθυνση της εξόδου, όπως στην εντολή command > file 2>&1, έτσι ώστε το τυπικό σφάλμα να ακολουθεί την τυπική έξοδο στο αρχείο. Στο σύγχρονο Bash, η συντομογραφία εντολή &> file κάνει το ίδιο πράγμα. Η σειρά έχει σημασία: τοποθετήστε το 2>&1 μετά την ανακατεύθυνση της εξόδου.

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

Ναί. GitHub Copilot μπορεί να δημιουργήσει εντολές και σενάρια που ανακατευθύνουν την είσοδο, την έξοδο και τα σφάλματα από ένα σύντομο σχόλιο που περιγράφει τον στόχο και να τα ολοκληρώνει καθώς πληκτρολογείτε. RevΔείτε οποιαδήποτε προτεινόμενη εντολή στα αρχεία σας, ειδικά σε αυτά που χρησιμοποιούν > και αντικαθιστούν υπάρχοντα δεδομένα.

Συνοψίστε αυτήν την ανάρτηση με: