Ανακατεύθυνση εισόδου εξόδου σε Παραδείγματα Linux/Unix
Τι είναι η ανακατεύθυνση;
Η ανακατεύθυνση είναι μια δυνατότητα στο Linux έτσι ώστε κατά την εκτέλεση μιας εντολής, μπορείτε να αλλάξετε τις τυπικές συσκευές εισόδου/εξόδου. Η βασική ροή εργασίας οποιουδήποτε Εντολή Linux είναι ότι παίρνει μια είσοδο και δίνει μια έξοδο.
- Η τυπική συσκευή εισόδου (stdin) είναι το πληκτρολόγιο.
- Η τυπική συσκευή εξόδου (stdout) είναι η οθόνη.
Με την ανακατεύθυνση, η παραπάνω τυπική είσοδος/έξοδος μπορεί να αλλάξει.
Πατήστε εδώ εάν το βίντεο δεν είναι προσβάσιμο
Ανακατεύθυνση εξόδου
The ">Το σύμβολο ' χρησιμοποιείται για την ανακατεύθυνση εξόδου (STDOUT).
Παράδειγμα:
ls -al > listings
Εδώ η έξοδος της εντολής ls -al κατευθύνεται εκ νέου στο αρχείο "λίστες" αντί στην οθόνη σας.
Σημείωση: Χρησιμοποιήστε το σωστό όνομα αρχείου κατά την ανακατεύθυνση της εξόδου εντολής σε ένα αρχείο. Εάν υπάρχει ένα υπάρχον αρχείο με το ίδιο όνομα, η εντολή ανακατεύθυνσης θα διαγράψει τα περιεχόμενα αυτού του αρχείου και στη συνέχεια μπορεί να αντικατασταθεί."
Εάν δεν θέλετε να αντικατασταθεί ένα αρχείο αλλά θέλετε να προσθέσετε περισσότερο περιεχόμενο σε ένα υπάρχον αρχείο, τότε θα πρέπει να χρησιμοποιήσετε '>>χειριστής.
Μπορείτε να ανακατευθύνετε την τυπική έξοδο, όχι μόνο σε αρχεία, αλλά και σε συσκευές!
$ cat music.mp3 > /dev/audio
Η εντολή cat διαβάζει το αρχείο music.mp3 και στέλνει την έξοδο στο /dev/audio που είναι η συσκευή ήχου. Εάν οι διαμορφώσεις ήχου στον υπολογιστή σας είναι σωστές, αυτή η εντολή θα αναπαράγει το αρχείο music.mp3
Ανακατεύθυνση εισόδου
The 'Το σύμβολο ' χρησιμοποιείται για την ανακατεύθυνση εισόδου (STDIN).
Παράδειγμα: Το πρόγραμμα αλληλογραφίας στο Linux μπορεί να σας βοηθήσει να στείλετε email από το Terminal.
Μπορείτε να πληκτρολογήσετε τα περιεχόμενα του email χρησιμοποιώντας το τυπικό πληκτρολόγιο συσκευής. Αλλά εάν θέλετε να επισυνάψετε ένα Αρχείο σε email, μπορείτε να χρησιμοποιήσετε τον τελεστή ανακατεύθυνσης εισόδου στην ακόλουθη μορφή.
Mail -s "Subject" to-address < Filename
Αυτό θα επισυνάψει το αρχείο με το email και θα σταλεί στον παραλήπτη.
Τα παραπάνω παραδείγματα ήταν απλά. Ας δούμε μερικές τεχνικές εκ των προτέρων ανακατεύθυνσης που χρησιμοποιούν το Αρχείο Descriptωρ
Αρχεία Descriptors (FD)
Στο Linux/Unix, όλα είναι ένα αρχείο. Το κανονικό αρχείο, οι κατάλογοι, ακόμη και οι συσκευές είναι αρχεία. Κάθε Αρχείο έχει έναν συσχετισμένο αριθμό που ονομάζεται Αρχείο Descriptή (FD).
Η οθόνη σας έχει επίσης ένα Αρχείο Descriptή. Όταν εκτελείται ένα πρόγραμμα, η έξοδος αποστέλλεται στο Αρχείο Descriptή της οθόνης, και βλέπετε την έξοδο προγράμματος στην οθόνη σας. Εάν η έξοδος αποσταλεί στο Αρχείο Descriptή του εκτυπωτή, η έξοδος του προγράμματος θα είχε εκτυπωθεί.
Ανακατεύθυνση σφάλματος
Κάθε φορά που εκτελείτε ένα πρόγραμμα/εντολή στο τερματικό, 3 αρχεία είναι πάντα ανοιχτά, δηλαδή, τυπική είσοδος, τυπική έξοδος, τυπικό σφάλμα.
Αυτά τα αρχεία είναι πάντα παρόντα κάθε φορά που εκτελείται ένα πρόγραμμα. Όπως εξηγήθηκε πριν, ένας περιγραφέας αρχείου, συσχετίζεται με καθένα από αυτά τα αρχεία.
Αρχεία | Αρχεία Descriptor |
---|---|
Τυπική είσοδος STDIN | 0 |
Τυπική έξοδος STDOUT | 1 |
Τυπικό σφάλμα STDERR | 2 |
Από προεπιλογή, η ροή σφαλμάτων εμφανίζεται στην οθόνη. Η ανακατεύθυνση σφάλματος είναι η δρομολόγηση των σφαλμάτων σε ένα αρχείο διαφορετικό από την οθόνη.
Γιατί Ανακατεύθυνση Σφάλματος;
Η ανακατεύθυνση σφαλμάτων είναι ένα από τα πολύ δημοφιλή χαρακτηριστικά του Unix/Linux.
Οι συχνοί χρήστες του UNIX θα υπολογίσουν ότι πολλές εντολές σας δίνουν τεράστια ποσά σφαλμάτων.
- Για παράδειγμα, κατά την αναζήτηση αρχείων, συνήθως λαμβάνετε σφάλματα άρνησης άδειας. Αυτά τα σφάλματα συνήθως δεν βοηθούν το άτομο που αναζητά ένα συγκεκριμένο αρχείο.
- Κατά την εκτέλεση σεναρίων κελύφους, συχνά ΔΕΝ θέλετε μηνύματα σφάλματος που γεμίζουν την κανονική έξοδο του προγράμματος.
Η λύση είναι να ανακατευθύνετε τα μηνύματα σφάλματος σε ένα αρχείο.
Παράδειγμα 1
$ myprogram 2>errorsfile
Παραπάνω εκτελούμε ένα πρόγραμμα με όνομα myprogram.
Ο περιγραφέας αρχείου για τυπικό σφάλμα είναι 2.
Χρησιμοποιώντας το "2>" κατευθύνουμε ξανά την έξοδο σφάλματος σε ένα αρχείο με το όνομα "errorfile"
Έτσι, η έξοδος του προγράμματος δεν είναι γεμάτη με σφάλματα.
Παράδειγμα 2
Εδώ είναι ένα άλλο παράδειγμα που χρησιμοποιεί την εντολή find –
find . -name 'my*' 2>error.log
Χρησιμοποιώντας την εντολή "εύρεση", αναζητούμε το "." τρέχων κατάλογος για ένα αρχείο με "όνομα" που ξεκινά με "my"
Παράδειγμα 3: Ας δούμε ένα πιο σύνθετο παράδειγμα,
Οι διαχειριστές διακομιστών συχνά παραθέτουν καταλόγους και αποθηκεύουν τόσο σφάλματα όσο και τυπικά αποτελέσματα σε ένα αρχείο, το οποίο μπορεί να υποβληθεί σε επεξεργασία αργότερα. Εδώ είναι η εντολή.
ls Documents ABC> dirlist 2>&1
Εδώ,
- που γράφει την έξοδο από ένα αρχείο στην είσοδο ενός άλλου αρχείου. 2>&1 σημαίνει ότι το STDERR ανακατευθύνει στον στόχο του STDOUT (που είναι η λίστα αρχείων)
- Ανακατευθύνουμε την έξοδο σφάλματος σε τυπική έξοδο, η οποία με τη σειρά της ανακατευθύνεται στη λίστα αρχείων. Ως εκ τούτου, τόσο η έξοδος γράφεται στη λίστα αρχείων
Σύνοψη
- Κάθε αρχείο στο Linux έχει ένα αντίστοιχο Αρχείο Descriptή συνδέονται με αυτό
- Το πληκτρολόγιο είναι η τυπική συσκευή εισόδου ενώ η οθόνη σας είναι η τυπική συσκευή εξόδου
- Το ">" είναι ο τελεστής ανακατεύθυνσης εξόδου. Το ">>" προσαρτά την έξοδο σε ένα υπάρχον αρχείο
- Το "<" είναι ο τελεστής ανακατεύθυνσης εισόδου
- Το ">&"κατευθύνει εκ νέου την έξοδο ενός αρχείου σε ένα άλλο.
- Μπορείτε να ανακατευθύνετε το σφάλμα χρησιμοποιώντας το αντίστοιχο Αρχείο Descriptή 2.