Ανακατεύθυνση εισόδου εξόδου σε Παραδείγματα Linux/Unix
⚡ Έξυπνη Σύνοψη
Η ανακατεύθυνση σε Linux και Unix αλλάζει πού μια εντολή διαβάζει την είσοδο ή στέλνει την έξοδο, swapping το πληκτρολόγιο και την οθόνη για αρχεία ή συσκευές που χρησιμοποιούν τελεστές όπως το σύμβολο "μεγαλύτερο από", το σύμβολο "μικρότερο από" και τον τελεστή προσθήκης.
Η ανακατεύθυνση είναι ένα από τα πιο χρήσιμα χαρακτηριστικά του Linux και το κέλυφος Unix, επειδή σας επιτρέπει να αποφασίσετε πού μια εντολή διαβάζει την είσοδό της και στέλνει την έξοδό της. Αυτή η σελίδα εξηγεί την έξοδο, την είσοδο και την ανακατεύθυνση σφαλμάτων με λειτουργικά παραδείγματα.
Τι είναι η ανακατεύθυνση;
Η ανακατεύθυνση είναι μια λειτουργία στο Linux, έτσι ώστε, κατά την εκτέλεση μιας εντολής, να μπορείτε να αλλάξετε τις τυπικές συσκευές εισόδου και εξόδου. Η βασική ροή εργασίας οποιουδήποτε Εντολή Linux είναι ότι δέχεται μια είσοδο και δίνει μια έξοδο.
- Η τυπική συσκευή εισόδου (stdin) είναι το πληκτρολόγιο.
- Η τυπική συσκευή εξόδου (stdout) είναι η οθόνη.
Με την ανακατεύθυνση, η τυπική είσοδος και έξοδος που αναφέρονται παραπάνω μπορούν να αλλάξουν.
Ανακατεύθυνση εξόδου
Το παρακάτω γράφημα σηματοδοτεί την έναρξη των παραδειγμάτων ανακατεύθυνσης εξόδου.
Το σύμβολο '>' χρησιμοποιείται για την ανακατεύθυνση εξόδου (STDOUT).
Παράδειγμα:
ls -al > listings
Εδώ, η έξοδος της εντολής ls -al ανακατευθύνεται στο αρχείο "listings" αντί για την οθόνη σας. Το παρακάτω στιγμιότυπο οθόνης δείχνει το αποτέλεσμα.
Σημείωση: Χρησιμοποιήστε το σωστό όνομα αρχείου κατά την ανακατεύθυνση της εξόδου της εντολής σε ένα αρχείο. Εάν υπάρχει ήδη ένα αρχείο με το ίδιο όνομα, η ανακατευθυνόμενη εντολή διαγράφει τα περιεχόμενά του και στη συνέχεια το αντικαθιστά.
Αν δεν θέλετε να αντικατασταθεί ένα αρχείο αλλά θέλετε να προσθέσετε περισσότερο περιεχόμενο σε ένα υπάρχον αρχείο, τότε χρησιμοποιήστε τον τελεστή '>>'. Το παρακάτω στιγμιότυπο οθόνης δείχνει περιεχόμενο που έχει προστεθεί με '>>'.
Μπορείτε να ανακατευθύνετε την τυπική έξοδο όχι μόνο σε αρχεία, αλλά και σε συσκευές.
$ cat music.mp3 > /dev/audio
Η εντολή cat διαβάζει το αρχείο music.mp3 και στέλνει την έξοδο στο /dev/audio, που είναι η συσκευή ήχου. Εάν η διαμόρφωση ήχου στον υπολογιστή σας είναι σωστή, αυτή η εντολή αναπαράγει το αρχείο μουσικής.mp3.
Ανακατεύθυνση εισόδου
Το παρακάτω γράφημα παρουσιάζει την ανακατεύθυνση εισόδου.
Το σύμβολο '<' χρησιμοποιείται για την ανακατεύθυνση εισόδου (STDIN).
Παράδειγμα: Το πρόγραμμα αλληλογραφίας στο Linux μπορεί να σας βοηθήσει να στέλνετε email από το τερματικό.
Μπορείτε να πληκτρολογήσετε το περιεχόμενο του email χρησιμοποιώντας το πληκτρολόγιο, την τυπική συσκευή εισόδου. Αλλά αν θέλετε να επισυνάψετε ένα αρχείο στο email, μπορείτε να χρησιμοποιήσετε τον τελεστή ανακατεύθυνσης εισόδου στην ακόλουθη μορφή.
mail -s "Subject" to-address < Filename
Το παρακάτω στιγμιότυπο οθόνης δείχνει την εντολή mail να διαβάζει ένα αρχείο ως είσοδο.
Αυτό επισυνάπτει το αρχείο στο email και αποστέλλεται στον παραλήπτη.
Τα παραπάνω παραδείγματα ήταν απλά. Τώρα, ας δούμε μερικές προηγμένες τεχνικές ανακατεύθυνσης που χρησιμοποιούν περιγραφείς αρχείων.
Αρχεία Descriptors (FD)
Στο Linux και το Unix, όλα είναι αρχεία. Τα κανονικά αρχεία, οι κατάλογοι, ακόμη και οι συσκευές είναι αρχεία. Κάθε αρχείο έχει έναν συσχετισμένο αριθμό που ονομάζεται περιγραφέας αρχείου (FD).
Το παρακάτω διάγραμμα δείχνει τις τυπικές ροές και τους περιγραφείς αρχείων τους.
Η οθόνη σας διαθέτει επίσης έναν περιγραφέα αρχείου. Όταν εκτελείται ένα πρόγραμμα, η έξοδος αποστέλλεται στον περιγραφέα αρχείου της οθόνης και βλέπετε την έξοδο του προγράμματος στην οθόνη σας. Εάν η έξοδος αποστέλλεται στον περιγραφέα αρχείου του εκτυπωτή, η έξοδος του προγράμματος θα εκτυπώνεται.
Ανακατεύθυνση σφάλματος
Κάθε φορά που εκτελείτε ένα πρόγραμμα ή μια εντολή στο τερματικό, τρία αρχεία είναι πάντα ανοιχτά, συγκεκριμένα η τυπική είσοδος, η τυπική έξοδος και το τυπικό σφάλμα.
Αυτά τα αρχεία υπάρχουν πάντα κάθε φορά που εκτελείται ένα πρόγραμμα. Όπως εξηγήθηκε προηγουμένως, ένας περιγραφέας αρχείου σχετίζεται με κάθε ένα από αυτά τα αρχεία.
| Αρχεία | Αρχεία Descriptor |
|---|---|
| Τυπική είσοδος STDIN | 0 |
| Τυπική έξοδος STDOUT | 1 |
| Τυπικό σφάλμα STDERR | 2 |
Από προεπιλογή, η ροή σφαλμάτων εμφανίζεται στην οθόνη. Η ανακατεύθυνση σφαλμάτων δρομολογεί τα σφάλματα σε ένα αρχείο διαφορετικό από την οθόνη.
Γιατί Ανακατεύθυνση Σφάλματος;
Η ανακατεύθυνση σφαλμάτων είναι ένα από τα πολύ δημοφιλή χαρακτηριστικά του Unix και του Linux.
Οι συχνοί χρήστες του Unix θα γνωρίζουν ότι πολλές εντολές σας δίνουν τεράστιο αριθμό σφαλμάτων. Για παράδειγμα, κατά την αναζήτηση αρχείων, συνήθως εμφανίζεται ένα σφάλμα. άδεια απορριφθέντα σφάλματα, τα οποία συνήθως δεν βοηθούν το άτομο που αναζητά ένα συγκεκριμένο αρχείο. Κατά την εκτέλεση σεναρίων κελύφους, συχνά δεν θέλετε μηνύματα σφάλματος να γεμίζουν την κανονική έξοδο του προγράμματος.
Η λύση είναι να ανακατευθύνετε τα μηνύματα σφάλματος σε ένα αρχείο.
Παράδειγμα 1
$ myprogram 2>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 (που είναι η λίστα καταλόγου αρχείων).
- Η έξοδος σφάλματος ανακατευθύνεται στην τυπική έξοδο, η οποία με τη σειρά της ανακατευθύνεται στη λίστα καταλόγου αρχείων. Επομένως, και οι δύο ροές εγγράφονται στη λίστα καταλόγου αρχείων.
Το παρακάτω διάγραμμα συνοψίζει τον τρόπο με τον οποίο η ανακατεύθυνση εισόδου, εξόδου και σφάλματος συνδυάζονται.







.png)