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

Το προεπιλεγμένο σύστημα ανοίγει πάντα τρία "αρχεία" - (πληκτρολόγιο), (οθόνη) και (μηνύματα σφάλματος εξόδου στην οθόνη). Αυτά και οποιαδήποτε άλλα ανοιχτά αρχεία μπορούν να συντριπτούν. Σε αυτή την περίπτωση, ο όρος "ανακατεύθυνση" σημαίνει να πάρετε την έξοδο από το αρχείο, τις εντολές, τα προγράμματα, σενάριο ή ακόμα και ένα ξεχωριστό μπλοκ στο σενάριο (βλέπε παράδειγμα 3-1 και παράδειγμα 3-2) και μεταφέρετε την στην είσοδο σε Ένα άλλο αρχείο, εντολή, πρόγραμμα ή σενάριο.

Μια λαβή αρχείου συνδέεται με κάθε ανοικτό αρχείο. Περιγραφείς αρχείων και - 0, 1 και 2, αντίστοιχα. Κατά το άνοιγμα πρόσθετων αρχείων, οι περιγραφικοί παράγοντες από 3 έως 9 παραμένουν άκαμπτοι. Μερικές φορές πρόσθετοι περιγραφείς μπορούν να εξυπηρετήσουν μια καλή υπηρεσία, διατηρώντας προσωρινά έναν σύνδεσμο στο, Or. Αυτό απλοποιεί την επιστροφή των περιγραφικών στοιχείων σε μια κανονική κατάσταση μετά από πολύπλοκους χειρισμούς με ανακατεύθυνση και μεταβολές (βλέπε παράδειγμα 16-1).

Command_Output\u003e Ανακατεύθυνση Stdout στο αρχείο. # Εάν δεν υπάρχει αρχείο, θα δημιουργήσει, αλλιώς αντικαθίσταται. Ls -lr\u003e dir-tree.List # δημιουργεί ένα αρχείο που περιέχει μια λίστα με δέντρο καταλόγου. :\u003e Όνομα αρχείου # λειτουργία\u003e Αρχείο Cine "όνομα αρχείου" σε μηδέν μήκος. # Εάν το αρχείο δεν υπάρχει πριν εκτελέσετε τη λειτουργία, δημιουργεί ένα νέο αρχείο με μηδενικό μήκος (το ίδιο αποτέλεσμα δίνει την εντολή "Touch"). # Σύμβολο: Πράξεις εδώ στο ρόλο της θέσης, χωρίς να επιβάλλει τίποτα. \u003e Όνομα αρχείου # Λειτουργία\u003e Αρχείο Curl "Filename" σε μηδέν μήκος. # Εάν το αρχείο δεν υπάρχει πριν εκτελέσετε τη λειτουργία, δημιουργεί ένα νέο αρχείο με μηδενικό μήκος (το ίδιο αποτέλεσμα δίνει την εντολή "Touch"). # (το ίδιο αποτέλεσμα με το παραπάνω - ":\u003e", αλλά αυτή η επιλογή είναι μη λειτουργική # σε ορισμένα κοχύλια εντολών.) Command_Output \u003e\u003e # Ανακατεύθυνση Stdout (έξοδος) στο αρχείο. # Δημιουργεί ένα νέο αρχείο εάν απουσιάζει, διαφορετικά - προσθέτει στο τέλος του αρχείου. # Εντολές ανακατεύθυνσης μονής γραμμής # (επηρεάζουν μόνο τη γραμμή στην οποία βρίσκονται): # ------------------------ 1\u003e Όνομα αρχείου # Ανακατεύθυνση (Stdout ) Για να καταθέσετε "όνομα αρχείου". 1 \u003e\u003e όνομα αρχείου # Ανακατεύθυνση εξόδου (Stdout) στο αρχείο "Filename", το αρχείο ανοίγει στη λειτουργία προσθήκης. 2\u003e Όνομα αρχείου # STUDERERR ΕΠΙΣΤΡΟΦΗ ΣΤΟ FILENAME αρχείο. 2 \u003e\u003e όνομα αρχείου # stderr ανακατεύθυνση στο αρχείο "filename", το αρχείο ανοίγει στη λειτουργία προσθήκης. &\u003e Όνομα αρχείου # Ανακατεύθυνση Stdout και Stderr στο αρχείο "Filename". # \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d # Ανακατεύθυνση Stdout, μόνο για μία γραμμή. LogFile \u003d script.log echo "Αυτή η γραμμή θα καταγραφεί στο αρχείο \\" $ logfile \\ "." 1\u003e $ logfile echo "Αυτή η γραμμή θα προστεθεί στο τέλος του αρχείου \\" $ logfile \\ "." 1 \u003e\u003e $ logfile echo "Αυτή η γραμμή θα προστεθεί επίσης στο τέλος του αρχείου \\" $ logfile \\ "." 1 \u003e\u003e $ logfile echo "Αυτή η γραμμή θα εμφανιστεί στην οθόνη και δεν θα πέσει στο αρχείο \\" $ logfile \\ "." # Μετά από κάθε σειρά, η ανακατεύθυνση έγινε αυτόματα "επαναφορά". # Ανακατεύθυνση Stderr, μόνο για μια γραμμή. ERRORFFILE \u003d SCRIPT.ERRORRORS BAD_COMMAND1 2\u003e $ ERROPFILE # Το μήνυμα σφάλματος θα γραφτεί σε $ Errorfile. BAD_COMMAND2 2 \u003e\u003e $ ERROPFILE # Το μήνυμα σφάλματος θα προστεθεί στο END $ Errorfile. Το μήνυμα σφάλματος Bad_Command3 # θα εμφανιστεί στο Stderr, # + και δεν θα πέσει στο refrfile $. # Μετά από κάθε σειρά, η ανακατεύθυνση που γίνεται είναι επίσης αυτόματα "επαναφορά". # \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d 2\u003e & 1 # Ανακατεύθυνση Stderr στο Stdout. Τα μηνύματα σφάλματος μεταφέρονται στην ίδια, όπου και η τυπική έξοδος. Εγώ\u003e ΕΓΩ. σε Ι.. # Εξόδου σε ένα αρχείο με περιγραφικό ΕΓΩ. περνάει σε ένα αρχείο με έναν περιγραφέα Ι.. \u003e & J # Ανακατεύθυνση αρχείου με περιγραφικό 1 (Stdout) σε ένα αρχείο με περιγραφικό Ι.. # Η έξοδος στο Stdout μεταβιβάζεται σε ένα αρχείο με έναν περιγραφέα Ι.. 0< FILENAME < FILENAME # Ввод из файла. # Парная команде ">", συχνά συναντά σε συνδυασμό μαζί της. # # grep-word-word Το αρχείο αρχείου # αρχείο "Filename" είναι ανοιχτό για την ανάγνωση και τη γραφή και δεσμεύεται με τον περιγραφέα "J". # Αν λείπει το "όνομα αρχείου", τότε δημιουργείται. # Εάν ο περιγραφέας "J" δεν έχει καθοριστεί, τότε, από προεπιλογή, ο περιγραφέας 0, Stdin πέρα \u200b\u200bαπό. # # Ως μία από τις εφαρμογές αυτού - γράψτε σε μια συγκεκριμένη θέση στο αρχείο. ECHO 1234567890\u003e Αρχείο # Γράψτε μια συμβολοσειρά στο αρχείο "Αρχείο". Exec 3.<> Προβολή αρχείου "Αρχείο" και γραβάτα με έναν περιγραφέα 3. Διαβάστε -n 4<&3 # Прочитать 4 символа. echo -n . >& 3 # Γράψτε ένα σύμβολο σημείου. Exec 3\u003e & - Close Περιγραφέας 3. Αρχείο Cat # \u003d\u003d\u003e 1234.67890 # Τυχαία πρόσβαση, και μόνο! | # Μεταφορέας (κανάλι). # Universal εργαλείο για τη συνδυασμό ομάδων σε μια αλυσίδα. # Μοιάζει με "\u003e", αλλά στην πραγματικότητα - πιο εκτεταμένη. # Χρησιμοποιείται για να συνδυάσει εντολές, δέσμες ενεργειών, αρχείων και προγραμμάτων σε μια αλυσίδα (μεταφορέας). Γάτα * .txt | Ταξινόμηση | Uniq\u003e Αποτελέσματα-Αρχείο # Περιεχόμενα όλων των αρχείων .txt διαγράφεται, οι επαναλαμβανόμενες χορδές διαγράφονται, # το αποτέλεσμα αποθηκεύεται στο αρχείο "Αποτέλεσμα".

Η λειτουργία ανακατεύθυνσης και / ή οι μεταφορείς μπορούν να συνδυαστούν σε μία γραμμή εντολών.

Εντολή.< input-file > Εντολή εξόδου-αρχείου1 | Command2 | Command3\u003e Αρχείο εξόδου Δείτε το παράδειγμα 12-23 και ένα παράδειγμα Α-17.

Επιτρέπεται η ανακατεύθυνση πολλαπλών ροών σε ένα αρχείο.

lS -YZ \u003e\u003e COMMAND.LOG 2\u003e & 1 # ΜΗΝΥΜΑ ΓΙΑ ΤΗΝ ΕΝΗΜΕΡΩΣΗ "YZ" Στην εντολή "LS" θα καταγραφεί στο αρχείο "Command.log". # Επειδή το stderr ανακατευθύνεται σε ένα αρχείο.

Κλείσιμο περιγραφέντων αρχείων

Κλείστε τον περιγραφέα αρχείου εισόδου.

0<&-, <&-

Κλείστε τον περιγραφέα αρχείου εξόδου.

1>&-, >&-

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

# Μόνο το Stderr μεταδίδεται στον μεταφορέα. Exec 3\u003e & 1 # Αποθηκεύστε το τρέχον "κατάσταση" Statout. LS -L 2\u003e & 1\u003e & 3 3\u003e & - | Grep Bad 3\u003e & - Κλείσιμο Γραφείο. 3 για "grep" (αλλά όχι για "ls"). # ^^^^^^^^^ EXEC 3\u003e & - # τώρα κλείστε το για το υπόλοιπο του σεναρίου. # Ευχαριστώ s.c.

Για περισσότερες πληροφορίες σχετικά με την ανακατεύθυνση I / O, θα βρείτε στο Παράρτημα Δ.

16.1. Με τη βοήθεια της ομάδας exec.

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

Παράδειγμα 16-1. Ανακατεύθυνση με exec

#! / bin / bash # ανακατεύθυνση stdin με "exec". Exec 6.<&0 # Связать дескр. #6 со стандартным вводом (stdin). # Сохраняя stdin. exec < data-file # stdin заменяется файлом "data-file" read a1 # Читается первая строка из "data-file". read a2 # Читается вторая строка из "data-file." echo echo "Следующие строки были прочитаны из файла." echo "——————————————" echo $a1 echo $a2 echo; echo; echo exec 0<&6 6<&- # Восстанавливается stdin из дескр. #6, где он был предварительно сохранен, #+ и дескр. #6 закрывается (6<&-) освобождая его для других процессов. # # <&6 6<&- дает тот же результат. echo -n "Введите строку " read b1 # Теперь функция "read", как и следовало ожидать, принимает данные с обычного stdin. echo "Строка, принятая со stdin." echo "—————————" echo "b1 = $b1" echo exit 0

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

Παράδειγμα 16-2. Ανακατεύθυνση με exec

#! / Bin / bash # recasign-stdout.sh logfile \u003d logfile.txt exec 6\u003e & 1 # συνδέστε το γραφείο. # 6 με το Stdout. # Αποθήκευση Stdout. Exec\u003e $ LogFile # Stdout αντικαθίσταται από το αρχείο "Logfile.txt". # ------------------- # # Η όλη έξοδος από τις εντολές, σε αυτό το μπλοκ, γράφεται στο αρχείο $ logfile. ECHO -N "Logfile:" Ημερομηνία Echo "--------------" ECHO ECHO "Έξοδος της εντολής \\" LS -al \\ "" ECHO LS -AL ECHO; Echo Echo "Έξοδος εντολών \\" DF \\ "" ECHO DF # -------------------- # EXEC 1\u003e & 6 6\u003e & - Επαναφορά Stdout και Κλείσιμο Γραφείο. # 6. ECHO ECHO "\u003d\u003d Stdout αποκατασταθεί στην προεπιλεγμένη τιμή \u003d\u003d" ECHO LS -AL ECHO EXIT 0

Παράδειγμα 16-3. Ταυτόχρονη ανακατεύθυνση συσκευών και χρησιμοποιώντας την εντολή EXEC

#! / Bin / bash # upperconv.sh # μετατροπή χαρακτήρων στο αρχείο εισόδου στον κορυφαίο μητρώο. E_file_access \u003d 70 e_wrong_args \u003d 71 εάν [!! -R "$ 1"] # αρχείο διατίθεται για ανάγνωση; Στη συνέχεια, η ECHO "δεν μπορεί να διαβάσει από το καθορισμένο αρχείο!" ECHO "Ανεβάστε τη σειρά: $ 0 Έξοδος εισόδου-αρχείο-αρχείο" Έξοδος $ e_file_access fi # Εάν το αρχείο εισόδου ($ 1) δεν έχει καθοριστεί # + κώδικας ολοκλήρωσης θα είναι το ίδιο. Εάν [-z "$ 2"] τότε ηχώ "πρέπει να ρυθμίσετε το αρχείο εξόδου". ECHO "Ανεβάστε τη σειρά: $ 0 Έξοδος εισόδου-αρχείο-αρχείο" Έξοδος $ e_wrong_args fi exec 4<&0 exec < $1 # Назначить ввод из входного файла. exec 7>& 1 EXEC\u003e $ 2 # Αντιστοιχίστε την έξοδο στο αρχείο εξόδου. # Υποτίθεται ότι το αρχείο εξόδου είναι διαθέσιμο για εγγραφή # (Προσθήκη ελέγχου;). # --------------- Γάτα - | Tr a-z a-z # μετάφραση στην κεφαλή # ^^^^^ # ανάγνωση με stdin. # ^^^^^^^^^^^ # Γράφοντας στο Stdout. # Ωστόσο, η Stdin και η Stdout ανακατεύτηκαν. # --------------- Exec 1\u003e & 7 7\u003e & - Επαναφορά Stdout. Exec 0.<&4 4<&- # Восстановить stdin. # После восстановления, следующая строка выводится на stdout, чего и следовало ожидать. echo "Символы из \"$1\" преобразованы в верхний регистр, результат записан в \"$2\"." exit 0

Επόμενο:Ανακατεύθυνση σφάλματος αρχείου Πάνω:Επαναφορά I / O Προηγούμενος:Είσοδος ανακατεύθυνσης από το αρχείο Περιεχόμενα. Δείκτης

Ανακατεύθυνση της παραγωγής στο αρχείο

Για να ανακατευθύνετε την τυπική έξοδο στο αρχείο, χρησιμοποιήστε τον χειριστή '\u003e'.

Μείωση του Linux I / O

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

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

Alex Otwagin 2002-12-16

Το πρόγραμμα είναι συνήθως πολύτιμο, δεδομένου ότι μπορεί να επεξεργαστεί τα δεδομένα: να πάρει ένα, να εξάγει ένα άλλο, και μπορεί πραγματικά να λειτουργήσει ως δεδομένα: κείμενο, αριθμούς, ήχου, βίντεο ... εισόδους και έξοδος ρεύματος για την εντολή εισαγωγή και παραγωγή. Ρυθμίσεις εισόδου και εξόδου Κάθε πρόγραμμα μπορεί να είναι κάπως. Σε κάθε διαδικασία, κατά τη δημιουργία υποχρεωτικών, λαμβάνει το λεγόμενο Τυπική είσοδος (Τυπική είσοδος, Stdin) και Τυπική έξοδος (Τυπική έξοδος, stdout) και Τυπική έξοδος σφάλματος Πρότυπο σφάλμα, Stderr).

Τα πρότυπα ροής I / O προορίζονται κυρίως για την κατανομή των κειμένων. Δεν έχει σημασία που επικοινωνεί με τη βοήθεια κειμένων: ένα άτομο με ένα πρόγραμμα ή ένα πρόγραμμα είναι διακοσμητικό - το κύριο πράγμα είναι ότι έχουν ένα κανάλι μεταφοράς δεδομένων και ότι μίλησαν "στην ίδια γλώσσα".

Η αρχή του κειμένου της εργασίας με το μηχάνημα σας επιτρέπει να αποσπάσετε την αποσπά την προσοχή από συγκεκριμένα μέρη του υπολογιστή, όπως ένα πληκτρολόγιο συστήματος και μια κάρτα γραφικών με οθόνη, λαμβάνοντας υπόψη ένα μόνο ΤερματικόΜε το οποίο ο χρήστης εισέρχεται στο κείμενο (εντολές) και το μεταδίδει στο σύστημα και το σύστημα εμφανίζει τα δεδομένα που χρειάζονται χρήστη και μηνύματα (διαγνωστικά και σφάλματα). Μια τέτοια συσκευή καλείται Τερματικό. Στη γενική περίπτωση, ο τερματικός σταθμός είναι ένα σημείο σύνδεσης χρήστη στο σύστημα που έχει τη δυνατότητα να μεταδίδει πληροφορίες κειμένου. Ο τερματικός σταθμός μπορεί να είναι μια ξεχωριστή εξωτερική συσκευή που είναι συνδεδεμένη σε έναν υπολογιστή μέσω της θύρας σειριακών δεδομένων (σε έναν προσωπικό υπολογιστή ονομάζεται "COM Port"). Ο ρόλος του τερματικού σταθμού μπορεί να λειτουργήσει (με κάποια υποστήριξη από το σύστημα) και ένα πρόγραμμα (για παράδειγμα, Xterm ή SSH). Τελικά, Εικονικές κονσόλες - επίσης τερματικά, μόνο οργανωμένο λογισμικό χρησιμοποιώντας κατάλληλες σύγχρονες συσκευές υπολογιστή.

Όταν εργάζεστε με τη γραμμή εντολών, η τυπική είσοδος κελύφους εντολών συσχετίζεται με το πληκτρολόγιο και την τυπική έξοδο και την έξοδο των σφαλμάτων - με την οθόνη οθόνης (ή το παράθυρο εξομοιωτή τερματικού). Ας δείξουμε στο παράδειγμα της απλούστερης ομάδας - γάτας. Συνήθως η ομάδα Γάτα. Διαβάζει δεδομένα από όλα τα αρχεία που αναφέρονται ως παράμετροι και στέλνουν ανάγνωση απευθείας στην τυπική έξοδο (Stdout). Κατά συνέπεια, η ομάδα

/ Αρχική / Larry / Papers # Ιστορικό γάτας-Final Masters-Διοίκηση

Το περιεχόμενο του αρχείου θα εμφανιστεί πρώτα στην οθόνη και στη συνέχεια το αρχείο.

Ωστόσο, εάν το όνομα του αρχείου δεν έχει καθοριστεί, το πρόγραμμα Γάτα. Διαβάζει την είσοδο από το Stdin και τους επιστρέφει αμέσως σε Stdout (χωρίς αλλαγή). Τα δεδομένα περνούν Γάτα.όπως μέσω του σωλήνα. Ας δώσουμε ένα παράδειγμα:

/ Αρχική / Larry / Χαρτί # Cat Γεια σας εκεί. Γειά σου. Αντίο. Αντίο. ΚονδύλιοΡΕ./ Αρχική / Larry / Papers #

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

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

/ Αρχική / Larry / Papers # Ταξινόμηση Μπανάνες Καρότα Μήλα Ctrl + D Μήλα Μπανάνες Καρότα / Σπίτι / Larry / Papers #

Όπως μπορείτε να δείτε, μετά το πάτημα ΚονδύλιοΡΕ., Είδος. έφερε τις διατάξεις που παραγγέλλονται με αλφαβητική σειρά.

Τυπική είσοδος και τυπική έξοδος

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

/ Αρχική / Larry / Papers # Ταξινόμηση\u003e Κατάλογος αγορών Μπανάνες Καρότα Μήλα ΚονδύλιοΡΕ./ Αρχική / Larry / Papers #

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

/ Larry / Χαρτί # Cat Ψώνια λίστα Μήλα μπανάνες Καρότα / Αρχική σελίδα / Larry / Papers #

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

/ Αρχική / Larry / Papers # Ταξινόμηση αντικειμένων Ψώνια κατάλογος / Αρχική σελίδα / Larry / Papers # Cat Ψώνια λίστα Μήλα μπανάνες Καρότα / Αρχική σελίδα / Larry / Papers #

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

/ Αρχική / Larry / Papers # Ταξινόμηση< items apples bananas carrots /home/larry/papers#

Ομάδα αποτελεσμάτων Είδος.< items Ισοδύναμη ομάδα Ταξινόμηση στοιχείων.Ωστόσο, ο πρώτος από αυτούς αποδεικνύει τα εξής: Κατά την έκδοση μιας ομάδας Είδος.< items Το σύστημα συμπεριφέρεται σαν να εισήχθησαν τα δεδομένα που περιέχονται στο αρχείο από την τυπική είσοδο. Η ανακατεύθυνση πραγματοποιείται από το κέλυφος εντολών. Ομάδα Είδος. Το όνομα του αρχείου δεν έχει αναφερθεί: Αυτή η εντολή ανάγνωση δεδομένων από την τυπική είσοδο, σαν να τους εισαγάγει από το πληκτρολόγιο.

Εισάγουμε την έννοια φίλτρο. Το φίλτρο είναι ένα πρόγραμμα που διαβάζει δεδομένα από τυποποιημένες εισροές, με κάποιες επεξεργασίες και το αποτέλεσμα στέλνει στην τυπική έξοδο. Όταν εφαρμόζεται η ανακατεύθυνση, τα αρχεία μπορούν να λειτουργήσουν ως τυπική είσοδο και έξοδο. Όπως αναφέρθηκε παραπάνω, από προεπιλογή, το Stdin και το Stdout είναι το πληκτρολόγιο και η οθόνη, αντίστοιχα. Το πρόγραμμα ταξινόμησης είναι ένα απλό φίλτρο - ταξινομεί τα δεδομένα εισόδου και στέλνει το αποτέλεσμα στην τυπική έξοδο. Ένα εντελώς απλό φίλτρο είναι το πρόγραμμα Γάτα. - Δεν κάνει τίποτα με τα δεδομένα εισόδου, αλλά απλά τα εμποδίζει στην έξοδο.

Πάνω από το παραπάνω αποδείχθηκε ήδη τον τρόπο χρήσης του προγράμματος ταξινόμησης ως φίλτρο. Σε αυτά τα παραδείγματα, υποτίθεται ότι τα αρχικά δεδομένα είναι σε ένα συγκεκριμένο αρχείο ή ότι αυτά τα δεδομένα προέλευσης θα εισαχθούν από το πληκτρολόγιο (τυπική είσοδος). Ωστόσο, πώς να κάνετε εάν θέλετε να ταξινομήσετε τα δεδομένα που είναι αποτέλεσμα οποιασδήποτε άλλης εντολής, για παράδειγμα, ls.?

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

Επαναφορά I / O

Εφαρμόστε την πρώτη εντολή ls.:

/ Αρχική / Larry / Papers # LS Ελληνικά Λίστα Ιστορία-Τελική Δάσκαλες-Διοίκηση Σημειώσεις / Αρχική / Larry / Polser

Τώρα ανακατεύετε την έξοδο της εντολής ls. Για να καταθέσετε ονομαστική λίστα αρχείων

/ Larry / Papers # LS\u003e Αρχείο-Λίστα / Αρχική / Larry / Papers # Sort -R -R Αρχείο-Λίστα Σημειώσεις Masters-Διατριβή Ιστορικό-Τελική Αγγλική Λίστα / Αρχική / Larry / Paper #

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

Η λύση σε αυτή την κατάσταση μπορεί να είναι η δημιουργία Διοικητικές εντολές (Αγωγοί). Η αποβάθρα διεξάγεται από ένα κέλυφος εντολών, το οποίο στέλνει η πρώτη ομάδα στη δεύτερη εντολή προς το Stdin. Σε αυτή την περίπτωση, θέλουμε να στείλουμε εντολές Stdout ls. στην ομάδα stdin Είδος.. Το σύμβολο χρησιμοποιείται για την υποδοχή, όπως φαίνεται στο ακόλουθο παράδειγμα:

/ Αρχική / Larry / Papers # LS | Sort -R Σημειώσεις Masters-Διατριβή - Τελική Αγγλική-Λίστα / Αρχική / Larry / Papers #

Αυτή η ομάδα είναι μικρότερη από τον συνδυασμό ομάδων και είναι ευκολότερο να το κερδίσετε.

Εξετάστε ένα άλλο χρήσιμο παράδειγμα. Ομάδα

/ Αρχική / Larry / Papers # LS / USR / BIN

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

/ Αρχική / Larry / Papers # LS / USR / BIN | Περισσότερο

Τώρα μπορείτε να overclock αυτή τη λίστα.

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

/ Αρχική / Larry / Papers # LS | sort -r | HEAD -1 Σημειώσεις / Αρχική / Larry / Papers \\ #

όπου η ομάδα Κεφάλι. Εμφανίζει την πρώτη γραμμή της ροής εισόδου γραμμών σε αυτό (στην περίπτωσή μας, η ροή αποτελείται από δεδομένα από την εντολή ls.), ταξινομημένο με αντίστροφη αλφαβητική σειρά.

Χρήση εντολών σύνδεσης (μεταφορέας)

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

/ Αρχική / Larry / Papers # LS\u003e Λίστα αρχείων

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

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

/ Αρχική / Larry / Papers # ls \u003e\u003e Λίστα αρχείων

Αποδίδει την έξοδο της ομάδας ls. Στο τέλος του αρχείου.

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

Ασεξιωτική ανακατεύθυνση της παραγωγής

Κάτι τέτοιο θα πρέπει να κάνει ό, τι χρειάζεστε;

Ελέγξτε το: WINTEE

Δεν υπάρχει ανάγκη για cygwin.

Ωστόσο, αντιμετώπισα και ανέφερα κάποια προβλήματα.

Μπορείτε επίσης να ελέγξετε τη διεύθυνση http://unxutils.sourceforge.net/ επειδή περιέχει ένα tee (και δεν χρειάζεται cygwin), αλλά να είστε προσεκτικοί ώστε το Σαββατοκύριακο EOL να αρέσει το Unix.

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

Λειτουργεί, αν και είναι λίγο άσχημο:

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

Το χρησιμοποιώ αρκετά σε αρχεία παρτίδας για να εγγραφείτε και να εμφανίζετε μηνύματα:

Ναι, θα μπορούσατε απλά να επαναλάβετε τις οδηγίες της ECHO (μία φορά για την οθόνη και τη δεύτερη φορά που η παράταση στο αρχείο καταγραφής), αλλά φαίνεται τόσο άσχημα, και αυτό είναι ένα πρόβλημα υπηρεσίας.

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

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

Παρακαλείστε να σημειώσετε ότι _ είναι απλά ένα σύντομο όνομα αρχείου, οπότε θα χρειαστεί να το διαγράψετε στο τέλος του αρχείου παρτίδας (εάν χρησιμοποιείτε ένα αρχείο παρτίδας).

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

Εάν έχετε Cygwin στο δρόμο σας προς το περιβάλλον των Windows, μπορείτε να χρησιμοποιήσετε:

Μια απλή εφαρμογή C # κονσόλας θα έκανε ένα τέχνασμα:

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

Θα υπάρξουν αποτελέσματα αναζήτησης, καθώς και αποθηκεύστε τα αποτελέσματα σε αρχεία αρχείων1.txt και αρχεία2.txt.

Παρακαλείστε να σημειώσετε ότι δεν υπάρχουν πολλά (τίποτα!) Στις διαδρομές επεξεργασίας σφαλμάτων (τίποτα!), Και η υποστήριξη πολλαπλών αρχείων ενδέχεται να μην απαιτείται.

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

Αυτός συλλαμβάνει ακόμη και οποιαδήποτε ομάδα παύσης.

Μια εναλλακτική λύση είναι το Tee Stdout για το Stderr στο πρόγραμμά σας:

Στη συνέχεια, στο DOS BACKFILE:

Το Stdout θα μεταβεί στο αρχείο καταγραφής και το Stderr (τα ίδια δεδομένα) θα εμφανιστεί στην κονσόλα.

Πώς να εμφανίσετε και να ανακατευθύνετε την έξοδο στο αρχείο. Ας υποθέσουμε ότι αν χρησιμοποιώ την εντολή DOS, Dir\u003e test.txt, αυτή η εντολή ανακατεύει την έξοδο στο αρχείο test.txt χωρίς να εμφανίζεται αποτελέσματα. Πώς να γράψετε μια εντολή για την έξοδο και την ανακατεύθυνση εξόδου σε ένα αρχείο χρησιμοποιώντας DOS, δηλ. Windows Command Γραμμή και όχι στο Unix / Linux.

Μπορείτε να βρείτε αυτές τις εντολές στο Bitescrating (http://www.biterscripting.com) χρήσιμες.

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

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

Εδώ είναι η ακολουθία εντολών:

  1. Τα μηνύματα εξόδου και σφαλμάτων αποστέλλονται σε ένα προσωρινό αρχείο.
  2. Το περιεχόμενο του προσωρινού αρχείου είναι τότε:
    • Προστέθηκε στο αρχείο καταγραφής
    • Συμπέρασμα στο παράθυρο εντολών
  3. Το προσωρινό αρχείο με το μήνυμα διαγράφεται

Εδώ είναι ένα παράδειγμα:

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

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

Συμφωνώ με τον Brian Rasmussen, το λιμάνι Unxutils είναι ο ευκολότερος τρόπος να το κάνετε. Στην ενότητα "Αρχεία παρτίδας" των σελίδων Scripting Rob van der Woude παρέχει πολλές πληροφορίες σχετικά με τη χρήση εντολών MS-DOS και CMD. Νόμιζα ότι θα μπορούσε να έχει τη δική του λύση στο πρόβλημά σας, και μετά το tee.Bat σκάψιμο εκεί, βρήκα το tee.bat, το οποίο φαίνεται να είναι αυτό, είναι το γλωσσικό πακέτο MS-DOS. Αυτό είναι ένα αρκετά περίπλοκο αρχείο δέσμης και θα τείνω να χρησιμοποιήσω τη θύρα Unxutils.

Εγκαθιστώ perl στα περισσότερα αυτοκίνητα μου, έτσι η απάντηση χρησιμοποιεί perl: tee.pl

dir | Perl tee.pl ή κατάλογο | Perl tee.pl dir.bat.

Ακατέργαστο και μη δοκιμασμένο.

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

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

Πρότυποι περιγραφείς αρχείων

Όλα τα Linux είναι αρχεία, συμπεριλαμβανομένων εισροών και εξόδου. Το λειτουργικό σύστημα προσδιορίζει τα αρχεία χρησιμοποιώντας περιγραφείς.

Κάθε διαδικασία επιτρέπεται να έχει έως και εννέα περιγραφείς ανοικτών αρχείων. Το Bash Shell διατηρεί τους πρώτους τρεις περιγραφείς με αναγνωριστικά 0, 1 και 2. Αυτό εννοούν.

  • 0, Stdin - Τυπική ροή εισόδου.
  • 1, Stdout - Standard Stream Outpution.
  • 2, Standr - Standard ρέμα σφάλματος.
Αυτές οι τρεις ειδικές λαβές χειρίζονται την είσοδο και την έξοδο των δεδομένων στο σενάριο.
Πρέπει να υπολογίσετε τα τυποποιημένα ρέματα. Μπορούν να συγκριθούν με το ίδρυμα στο οποίο χτίζεται η αλληλεπίδραση των σεναρίων με τον εξωτερικό κόσμο. Εξετάστε τις λεπτομέρειες σχετικά με αυτά.

Στρώμα

Το Stdin είναι ένα τυποποιημένο ρεύμα εισόδου κελύφους. Για τερματικό, η τυπική είσοδος είναι ένα πληκτρολόγιο. Όταν σε σενάρια χρησιμοποιήστε το σύμβολο ανακατεύθυνσης εισόδου -< , Linux заменяет дескриптор файла стандартного ввода на тот, который указан в команде. Система читает файл и обрабатывает данные так, будто они введены с клавиатуры.

Πολλές εντολές Bash δέχονται εισροές από το Stdin εάν το αρχείο δεν καθορίζει το αρχείο από το οποίο πρέπει να ληφθούν τα δεδομένα. Για παράδειγμα, αυτό ισχύει για την εντολή Cat.

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

Αγρόκτημα

Stdout - Standard Shell Expute Stream. Από προεπιλογή, αυτή είναι μια οθόνη. Οι περισσότερες εντολές Bash εξέρχονται δεδομένα στο Stdout, το οποίο οδηγεί στην εμφάνισή τους στην κονσόλα. Τα δεδομένα μπορούν να ανακατευθυνθούν στο αρχείο, συνδέοντάς τα στο περιεχόμενό του, γιατί αυτό χρησιμεύει ως εντολή \u003e\u003e.

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

Pwd \u003e\u003e myfile.
Αυτό που θα αποσύρει το PWD θα προστεθεί στο αρχείο MyFile και τα δεδομένα που υπάρχουν σε αυτό δεν θα πάνε πουθενά.

Ανακατεύθυνση της εξόδου εντολών στο αρχείο

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

Ls -l xfile\u003e myfile
Μετά την εκτέλεση αυτής της εντολής, θα δούμε τα μηνύματα σφάλματος στην οθόνη.


Προσπαθήστε να προσελκύσετε ένα μη υπάρχον αρχείο

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

Stderr.

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

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

▍ Εκτέλεση ροής σφαλμάτων

Όπως γνωρίζετε ήδη, ο περιγραφέας αρχείων STERDR - 2. Μπορούμε να ανακατευθύνουμε σφάλματα τοποθετώντας αυτόν τον περιγραφέα μπροστά από την εντολή ανακατεύθυνσης:

LS -L XFILE 2\u003e MyFile Cat ./myfile
Ένα μήνυμα σφάλματος θα πέσει τώρα στο αρχείο MyFile.


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

▍ Εκτέλεση σφαλμάτων και ροές εξόδου

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

Ls -l myfile xfile awefile 2\u003e refercontent 1\u003e docirecontent

Ανακατεύθυνση σφαλμάτων και τυπικής παραγωγής

Το κέλυφος ανακατεύετε ότι η εντολή LS στέλνει συνήθως στο Stdout στο σωστό αρχείο που οφείλεται στο σχεδιασμό 1\u003e. Τα μηνύματα σφάλματος που θα βρίσκονται στο Stderr είναι στο αρχείο orfontcontent λόγω της εντολής ανακατεύθυνσης 2\u003e.

Εάν είναι απαραίτητο, το Stderr και το Stdout μπορούν να ανακατευθυνθούν στο ίδιο αρχείο χρησιμοποιώντας την εντολή &\u003e Command:


Το Stderr και το Stdout ανακατεύθυνση στο ίδιο αρχείο

Μετά την εκτέλεση της εντολής, αυτό που προορίζεται για το Stderr και το Stdout βρίσκεται στο αρχείο περιεχομένου.

Ανακατεύθυνση της παραγωγής σε σενάρια

Υπάρχουν δύο μέθοδοι ανακατεύθυνσης παραγωγής στα σενάρια γραμμής εντολών:
  • Προσωρινή ανακατεύθυνση ή ανακατεύθυνση της παραγωγής μιας γραμμής.
  • Μόνιμη ανακατεύθυνση ή ανακατεύθυνση ολόκληρης της παραγωγής σε ένα σενάριο ή σε κάποιο μέρος του.

Ανακατεύθυνση της παραγωγής

Στο σενάριο μπορείτε να ανακατευθύνετε την έξοδο της μεμονωμένης συμβολοσειράς στο Stderr. Για να το κάνετε αυτό, αρκεί να χρησιμοποιήσετε την εντολή ανακατεύθυνσης, καθορίζοντας τον περιγραφέα stderr, ενώ μπροστά από τον αριθμό περιγραφέα είναι απαραίτητο να τοποθετήσετε το σύμβολο ampersand (&):

#! / BIN / Bash Echo "Πρόκειται για ένα σφάλμα"\u003e & 2 ECHO "Αυτή είναι η κανονική έξοδος"
Εάν ξεκινήσετε το σενάριο, και οι δύο γραμμές θα πέσουν στην οθόνη, αφού, όπως γνωρίζετε ήδη, εμφανίζεται το προεπιλεγμένο σφάλμα εκεί, όπου και τα συνηθισμένα δεδομένα.


Προσωρινή ανακατεύθυνση

Ξεκινήστε το σενάριο έτσι ώστε η έξοδος stderr να πέσει στο αρχείο.

./Myscript 2\u003e myfile
Όπως μπορεί να δει, τώρα η συνήθης έξοδος γίνεται στην κονσόλα και τα μηνύματα σφάλματος εμπίπτουν στο αρχείο.


Τα μηνύματα σφάλματος γράφονται στο αρχείο

▍ Συνεχής ανακατεύθυνση της παραγωγής

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

#! / BIN / Bash Exec 1\u003e ECHO ECHO "Αυτή είναι μια δοκιμή ανακατεύοντας ολόκληρη την έξοδο" ηχώ "από ένα σενάριο κελύφους σε άλλο αρχείο." Echo "χωρίς να χρειάζεται να ανακατευθύνει κάθε γραμμή"
Ξεκινήστε το σενάριο.


Ανακατεύθυνση ολόκληρης της παραγωγής στο αρχείο

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

Η εντολή Exec μπορεί να χρησιμοποιηθεί όχι μόνο στην αρχή του σεναρίου, αλλά και σε άλλα μέρη:

#! MyError File "\u003e & 2
Αυτό συμβαίνει μετά την έναρξη του σεναρίου και να προβάλετε τα αρχεία στα οποία ανακατευθύνουμε την έξοδο.


Ανακατεύθυνση εξόδου σε διαφορετικά αρχεία

Πρώτον, η εντολή EXEC ρυθμίζει την ανακατεύθυνση εξόδου από το stderr στο αρχείο μυέρου. Στη συνέχεια, η έξοδος πολλαπλών εντολών ECHO αποστέλλεται στο Stdout και εμφανίζεται στην οθόνη. Μετά από αυτό, η εντολή EXEC ρυθμίζει την αποστολή του να πέσει στο Stdout στο αρχείο MyFile και, τέλος, χρησιμοποιούμε την εντολή ανακατεύθυνσης στο Stderr στην εντολή ECHO, η οποία οδηγεί στην εγγραφή της αντίστοιχης συμβολοσειράς στο αρχείο μυέρου.

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

Εισαγωγή εισόδου σε σενάρια

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

Exec 0.< myfile
Αυτή η εντολή υποδεικνύει το κέλυφος στο γεγονός ότι η πηγή των δεδομένων εισόδου πρέπει να είναι το αρχείο MyFile και όχι το συνηθισμένο stdin. Ας δούμε την ανακατεύθυνση εισόδου στη δράση:

#! / Bin / bash exec 0< testfile count=1 while read line do echo "Line #$count: $line" count=$(($count + 1)) done
Αυτό εμφανίζεται στην οθόνη μετά την εκκίνηση του σεναρίου.


Εισαγωγή ανακατεύθυνσης

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

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

Δημιουργία της δικής σας ανακατεύθυνσης

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

Ορίστε μια λαβή στα δεδομένα εξόδου χρησιμοποιώντας την εντολή EXEC:

#! / BIN / BASH EXEC 3\u003e MyFile Echo "Αυτό θα πρέπει να εμφανίζεται στην οθόνη" Echo "και αυτό θα πρέπει να αποθηκευτεί στο αρχείο"\u003e & 3 ηχώ "και αυτό το Spold επιστρέψτε στην οθόνη"
Μετά την εκκίνηση του σεναρίου, το τμήμα εξόδου της εξόδου θα βρίσκεται στην οθόνη, το τμήμα είναι σε ένα αρχείο με έναν περιγραφέα 3.


Ανακατεύθυνση εξόδου χρησιμοποιώντας δικό του περιγραφέα

Δημιουργία χειριστών αρχείων για την καταχώρηση δεδομένων

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

Μετά την ανάγνωση της ανάγνωσης του αρχείου, μπορείτε να επαναφέρετε το Stdin και να το χρησιμοποιήσετε ως συνήθως:

#! / Bin / bash exec 6<&0 exec 0< myfile count=1 while read line do echo "Line #$count: $line" count=$(($count + 1)) done exec 0<&6 read -p "Are you done now? " answer case $answer in y) echo "Goodbye";; n) echo "Sorry, this is the end.";; esac
Θα δοκιμάσουμε το σενάριο.


Εισαγωγή ανακατεύθυνσης

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

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

Κλείσιμο περιγραφέντων αρχείων

Το κέλυφος κλείνει αυτόματα τους περιγραφείς αρχείων μετά την ολοκλήρωση της δέσμης ενεργειών. Ωστόσο, σε ορισμένες περιπτώσεις είναι απαραίτητο να κλείσετε τους περιγραφείς με μη αυτόματο τρόπο πριν ολοκληρωθεί το σενάριο. Προκειμένου να κλείσει ο περιγραφέας, πρέπει να ανακατευθύνεται στην & -. Μοιάζει με αυτό:

#! / BIN / Bash Exec 3\u003e MyFile ECHO "Αυτή είναι μια γραμμή δοκιμής δεδομένων"\u003e & 3 EXEC 3\u003e & - ECHO "Αυτό δεν έχει γίνει" t work "\u003e & 3
Μετά την εκτέλεση του σεναρίου, θα λάβουμε ένα μήνυμα σφάλματος.


Προσπάθεια να καλέσετε έναν κλειστό περιγραφέα αρχείου

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

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

Λήψη πληροφοριών σχετικά με τους ανοικτούς περιγραφείς

Για να πάρετε μια λίστα με όλους τους περιγραφείς που ανοίγουν στο Linux, μπορείτε να χρησιμοποιήσετε την εντολή LSOF. Σε πολλές διανομές, όπως το Fedora, το βοηθητικό πρόγραμμα LSOF είναι στο / usr / sbin. Αυτή η εντολή είναι πολύ χρήσιμη, καθώς εμφανίζει πληροφορίες σχετικά με κάθε περιγραφικό, ανοιχτό στο σύστημα. Αυτό περιλαμβάνει ό, τι άνοιξε τις διαδικασίες που εκτελέστηκαν στο παρασκήνιο και τι είναι ανοιχτό από τους χρήστες που εισέρχονται στο σύστημα.

Αυτή η ομάδα έχει πολλά κλειδιά, σκεφτείτε το πιο σημαντικό.

  • -p σας επιτρέπει να καθορίσετε το αναγνωριστικό επεξεργασίας.
  • -D σας επιτρέπει να ορίσετε τον αριθμό του περιγραφέα, το οποίο πρέπει να λάβετε πληροφορίες.
Για να μάθετε το PID της τρέχουσας διαδικασίας, μπορείτε να χρησιμοποιήσετε μια ειδική μεταβλητή περιβάλλον $$, στην οποία το κέλυφος καταγράφει το τρέχον PID.

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

LSOF -A -P $$ -D 0,1,2

Συμπέρασμα πληροφοριών σχετικά με τους ανοικτούς περιγραφείς

Ο τύπος των αρχείων που σχετίζονται με Stdin, Stdout και Stderr - Chr (λειτουργία χαρακτήρων, λειτουργία χαρακτήρων). Δεδομένου ότι όλοι δείχνουν το τερματικό σταθμό, το όνομα του αρχείου αντιστοιχεί στο όνομα της συσκευής που έχει εκχωρηθεί στο τερματικό. Και τα τρία τυπικά αρχεία είναι επίσης διαθέσιμα για ανάγνωση και γραφή.

Ας δούμε την κλήση της εντολής LSOF από το σενάριο, στο οποίο είναι ανοιχτοί, εκτός από τους πρότυπους, άλλους περιγραφείς:

#! / BIN / Bash Exec 3\u003e MyFile1 Exec 6\u003e MyFile2 Exec 7< myfile3 lsof -a -p $$ -d 0,1,2,3,6,7
Αυτό συμβαίνει αν λειτουργεί αυτό το σενάριο.


Προβολή περιγραφέντων αρχείων που ανοίγουν από το σενάριο

Το σενάριο άνοιξε δύο χειριστές στην έξοδο (3 και 6) και μία - για είσοδο (7). Εμφανίζονται αμέσως και τρόποι για τα αρχεία που χρησιμοποιούνται για τη διαμόρφωση των περιγραφών.

Κατάπνιξη

Μερικές φορές είναι απαραίτητο να κάνετε εντολές σε ένα σενάριο, το οποίο, για παράδειγμα, μπορεί να εκτελεστεί ως διαδικασία υποβάθρου, δεν εμφανίστηκε τίποτα. Για να το κάνετε αυτό, μπορείτε να ανακατευθύνετε την έξοδο στο / dev / null. Αυτό είναι κάτι σαν μια "μαύρη τρύπα".

Εδώ, για παράδειγμα, πώς να καταστείλει μηνύματα σφάλματος:

Ls -al badfile awefile 2\u003e / dev / null
Η ίδια προσέγγιση χρησιμοποιείται εάν, για παράδειγμα, πρέπει να καθαρίσετε το αρχείο χωρίς να το διαγράψετε:

CAT / DEV / NULL\u003e MyFile

ΑΠΟΤΕΛΕΣΜΑΤΑ

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

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

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

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

Τυπική ροή εξόδου δεδομένων ( Αγρόκτημα) - Αυτή είναι όλες οι πληροφορίες που εμφανίζονται ως αποτέλεσμα της εκτέλεσης της εντολής, με εξαίρεση τα σφάλματα.
Πρότυπο ρεύμα εξόδου σφάλματος ( Stderr.) - Αυτή είναι μια πληροφορία σφάλματος εάν ήταν.


Ομάδα\u003e logfile.txt

Το πρότυπο ρεύμα εξόδου δεδομένων (stdout) θα ανακατευθύνεται στο αρχείο και θα εμφανιστεί στο τερματικό δεν θα. Εάν το αρχείο υπάρχει ήδη, θα το κάνει Αντικαθιστράς.

Ομάδα \u003e\u003e logfile.txt

Το πρότυπο ρεύμα εξόδου δεδομένων (stdout) θα ανακατευθύνεται στο αρχείο και θα εμφανιστεί στο τερματικό δεν θα. Εάν το αρχείο υπάρχει ήδη, τότε θα είναι νέα δεδομένα Προστέθηκε στο τέλος του αρχείου.

Ομάδα 2\u003e logfile.txt

Το τυπικό ρεύμα εξόδου σφάλματος (stderr) θα μεταφερθεί στο αρχείο και θα εμφανιστεί στο τερματικό δεν θα είναι. Εάν το αρχείο υπάρχει ήδη, θα το κάνει Αντικαθιστράς.

Ομάδα 2 \u003e\u003e logfile.txt

Το τυπικό ρεύμα εξόδου σφάλματος (stderr) θα μεταφερθεί στο αρχείο και θα εμφανιστεί στο τερματικό δεν θα είναι. Εάν το αρχείο υπάρχει ήδη, τότε θα είναι νέα δεδομένα Προστέθηκε στο τέλος του αρχείου.

Team &\u003e logfile.txt

Το πρότυπο ρεύμα εξόδου δεδομένων (stdout) και το πρότυπο ρεύμα εξόδου σφάλματος (stderr) θα ανακατευθυνθεί στο αρχείο και δεν θα εμφανίζεται στο τερματικό. Εάν το αρχείο υπάρχει ήδη, θα το κάνει Αντικαθιστράς.

Team & \u003e\u003e logfile.txt

Το πρότυπο ρεύμα εξόδου δεδομένων (stdout) και το πρότυπο ρεύμα εξόδου σφάλματος (stderr) θα ανακατευθυνθεί στο αρχείο και δεν θα εμφανίζεται στο τερματικό. Εάν το αρχείο υπάρχει ήδη, τότε θα είναι νέα δεδομένα Προστέθηκε στο τέλος του αρχείου.

Ομάδα | Tee logfile.txt

Το πρότυπο ρεύμα εξόδου δεδομένων (stdout) θα μεταφερθεί στο αρχείο και θα εμφανιστεί ταυτόχρονα στο τερματικό. Εάν το αρχείο υπάρχει ήδη, θα το κάνει Αντικαθιστράς.

Ομάδα | Tee -a logfile.txt

Το πρότυπο ρεύμα εξόδου δεδομένων (stdout) θα μεταφερθεί στο αρχείο και θα εμφανιστεί ταυτόχρονα στο τερματικό. Εάν το αρχείο υπάρχει ήδη, τότε θα είναι νέα δεδομένα Προστέθηκε στο τέλος του αρχείου.

Παραδείγματα

Uname-r\u003e logfile.txt

Η έξοδος θα αποθηκευτεί στο Logfile.txt στον τρέχοντα κατάλογο. Τίποτα δεν θα εμφανιστεί στην οθόνη.

Uname -R | Tee logfile.txt

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



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

  • Προβολή προγραμμάτων που δεν βρίσκονται στην οθόνη (Standard Stream Output), αλλά σε ένα αρχείο ή σε έναν εκτυπωτή (ανακατεύθυνση εξόδου).
  • Διαβάστε τα δεδομένα εισόδου δεν είναι από το πληκτρολόγιο (Standard Stream Input), αλλά από ένα προκαθορισμένο αρχείο (ανακατεύθυνση εισόδου).
  • Μεταφορά μηνυμάτων που εμφανίζονται από ένα πρόγραμμα ως είσοδο για ένα άλλο πρόγραμμα (μεταφοροποίηση ή σύνθεση ομάδας).

Από τη γραμμή εντολών, αυτές οι δυνατότητες εφαρμόζονται ως εξής. Για να ανακατευθύνετε μηνύματα κειμένου, που εμφανίζονται από οποιαδήποτε γραμμή εντολών από τη γραμμή εντολών, πρέπει να χρησιμοποιήσετε το σχεδιασμό Εντολή\u003e Όνομα αρχείου. Εάν το αρχείο που καθορίζεται για την έξοδο υπήρχε ήδη, αντικαθίσταται (το παλιό περιεχόμενο χάνεται), αν δεν υπάρχει. Μπορείτε επίσης να μην δημιουργήσετε ένα αρχείο και να προσθέσετε πληροφορίες στην εντολή που εμφανίζεται στο τέλος ενός υπάρχοντος αρχείου. Για να το κάνετε αυτό, η εντολή ανακατεύθυνσης πρέπει να ορίζεται ως εξής: Ομάδα \u003e\u003e Όνομα αρχείου. Με το σύμβολο< можно прочитать входные данные для заданной команды не с клавиатуры, а из определенного (заранее подготовленного) файла: команда < имя_файла

Παραδείγματα προτροπής ανακατεύθυνσης / εντολών I / O

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

1. Συμπέρασμα των αποτελεσμάτων ping ομάδες να αρχειοθετήσω. Ping ya.ru\u003e ping.txt

2. Προσθέστε κείμενο αναφοράς για Εντολές XCOPY STOPT.TXT Αρχείο: XCOPY /? \u003e\u003e copy.txt

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

Για παράδειγμα, στην παρακάτω εντολή, η τυπική ροή εξόδου και η τυπική ροή σφάλματος ανακατεύονται στο αρχείο copy.txt: XCOPY A: \\ 1.TXT C:\u003e COPY.TXT 2\u003e & 1

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

Ροές / o

Η είσοδος και η έξοδος που περιβάλλεται από το Linux κατανεμίζεται μεταξύ τριών σπειρωμάτων:

  • Τυπική είσοδος (τυπική είσοδος, Stdin, αριθμός ροής 0)
  • Τυπική έξοδος (τυπική έξοδος, Stdout, αριθμός 1)
  • Πρότυπο σφάλμα ή διάγνωση ρεύματος (τυπικό σφάλμα, Stderr, αριθμός 2)

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

Τυπική είσοδος

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

Για να δείτε πώς λειτουργεί τα τυπικά έργα εισόδου, εκτελέστε το πρόγραμμα CAT. Το όνομα αυτού του εργαλείου σημαίνει "concatenate" (σύνδεσμος ή συνδυάστε οτιδήποτε). Συνήθως αυτό το εργαλείο χρησιμοποιείται για να συνδυάσει τα περιεχόμενα δύο αρχείων. Όταν ξεκινάει χωρίς επιχειρήματα, η γάτα ανοίγει τη γραμμή εντολών και δέχεται το περιεχόμενο της τυπικής εισόδου.

Τώρα εισάγετε λίγους αριθμούς:

1
2
3
Ctrl-d.

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

Ο χρήστης μπορεί να καθορίσει το ΕΟΦ πατώντας το CTRL-D, μετά το οποίο η γάτα θα σταματήσει.

Τυπική έξοδος

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

Η ECHO αποστέλλεται στο τερματικό μέσω της τυπικής παραγωγής

Η εντολή ECHO χωρίς πρόσθετες επιλογές εμφανίζει όλα τα επιχειρήματα που μεταδίδονται στην οθόνη.

Τώρα τρέχει ηχώ χωρίς επιχειρήματα:

Η ομάδα θα επιστρέψει μια κενή συμβολοσειρά.

Τυπικό σφάλμα

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

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

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

Δεδομένου ότι ο κατάλογος% δεν υπάρχει, η ομάδα θα επιστρέψει ένα τυποποιημένο σφάλμα:

lS: Δεν είναι δυνατή η πρόσβαση στο%: Δεν υπάρχει τέτοιο αρχείο ή κατάλογος

Ανακατεύθυνση Streaming

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

Οι εντολές με ένα γωνιακό βραχίονα ξαναγράψουν το υπάρχον περιεχόμενο του αρχείου προορισμού:

  • \u003e - Πρότυπο συμπέρασμα
  • < — стандартный ввод
  • 2\u003e - Πρότυπο σφάλμα

Οι εντολές με διπλές γωνιακές αγκύλες δεν ξαναγράψουν τα περιεχόμενα του αρχείου προορισμού:

  • \u003e\u003e - Πρότυπο συμπέρασμα
  • << — стандартный ввод
  • 2 \u003e\u003e - Πρότυπο σφάλμα

Εξετάστε το ακόλουθο παράδειγμα:

cat\u003e write_to_me.txt
ΕΝΑ.
ΣΙ.
ΝΤΟ.
Ctrl-d.

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

Ελέγξτε τα περιεχόμενα του Write_to_me.txt:

γάτα write_to_me.txt

Η ομάδα πρέπει να επιστρέψει:

Ανακατευθύνετε τη γάτα στο αρχείο write_to_me.txt και εισάγετε τρία ψηφία.

cat\u003e write_to_me.txt
1
2
3
Ctrl-d.

Τώρα ελέγξτε τα περιεχόμενα του αρχείου.

γάτα write_to_me.txt

Η ομάδα πρέπει να επιστρέψει:

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

Τώρα δοκιμάστε να τρέξετε την ίδια εντολή με δύο γωνιακές αγκύλες:

Γάτα \u003e\u003e write_to_me.txt
ΕΝΑ.
ΣΙ.
ΝΤΟ.
Ctrl-d.

Open write_to_me.txt:

1
2
3
ΕΝΑ.
ΣΙ.
ΝΤΟ.

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

Μεταφορείς

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

Οι μεταφορείς στο Linux αντιπροσωπεύονται από ένα κατακόρυφο χαρακτηριστικό.

Για παράδειγμα:

Μια τέτοια εντολή θα μεταδίδει την έξοδο LS (κατάλογο περιεχομένου) Λιγότερο πρόγραμμα που εμφανίζει τα δεδομένα που μεταδίδονται στη γραμμή πληροφορικής. Κατά κανόνα, η LS εμφανίζει το περιεχόμενο των καταλόγων στη σειρά, χωρίς να σπάσει στη συμβολοσειρά. Εάν ανακατευθύνετε την έξοδο LS στο λιγότερο, η τελευταία εντολή θα διαχωρίσει την έξοδο στις χορδές.

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

Φίλτρα

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

Σημείωση: Τα φίλτρα είναι επίσης τυπικές εντολές Linux που μπορούν να χρησιμοποιηθούν χωρίς μεταφορέα.

  • Εύρεση - αρχεία αναζήτησης με το όνομα.
  • grep - αναζητά κείμενο σε ένα συγκεκριμένο πρότυπο.
  • tEE - ανακατευθύνει την τυπική είσοδο στην τυπική έξοδο και ένα ή περισσότερα αρχεία.
  • tr - αναζήτηση και αντικατάσταση συμβολοσειρών.
  • wC - μετρώντας χαρακτήρες, σειρές και λέξεις.

Παραδείγματα μειώσεων I / O

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

Ομάδα\u003e Αρχείο

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

ls ~\u003e root_dir_contents.txt

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

Ομάδα\u003e / DEV / NULL

/ Dev / null είναι ένα ειδικό αρχείο (η λεγόμενη "κενή συσκευή"), η οποία χρησιμοποιείται για την καταστολή της τυπικής ροής εξόδου ή διαγνωστικών για να αποφευχθεί η ανεπιθύμητη έξοδος στην κονσόλα. Όλα τα δεδομένα που πέφτουν στο / dev / null επαναφέρονται. Η ανακατεύθυνση στο / dev / null χρησιμοποιείται συνήθως στα σενάρια κελύφους.

ls\u003e / dev / null

Μια τέτοια εντολή επαναφέρει το τυπικό νήμα εξόδου που επιστρέφεται από την εντολή LS, περνώντας το / dev / null.

Ομάδα 2\u003e Αρχείο

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

mkdir "" 2\u003e mkdir_log.txt

Αυτή η εντολή θα ανακατευθύνει ένα σφάλμα που προκαλείται από το λάθος όνομα του καταλόγου και θα το καταγράψει στο log.txt. Σημείωση: Το σφάλμα εξακολουθεί να εμφανίζεται στο τερματικό.

Εντολή \u003e\u003e αρχείο

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

echo γραμμένο σε ένα νέο αρχείο\u003e data.txt
ECHO που επισυνάπτεται σε ένα υπάρχον περιεχόμενο του αρχείου \u003e\u003e data.txt

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

Ομάδα 2 \u003e\u003e αρχείο

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

Βρείτε "" 2\u003e stderr_log.txt
Wc "" 2 \u003e\u003e stderr_log.txt

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

Ομάδα | ομάδα

Αυτό το πρότυπο ανακατευθύνει την τυπική έξοδο εντολής στην τυπική είσοδο της δεύτερης εντολής.

Βρείτε / var lib | Grep deb.

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

Ομάδα | Αρχείο tee.

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

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

wc / etc / magic | Tee magic_count.txt

Μια τέτοια εντολή μεταδίδει τον αριθμό των χαρακτήρων, των γραμμών και των λέξεων στο μαγικό αρχείο (το Linux το χρησιμοποιεί για να καθορίσει τους τύπους αρχείων) tee εντολή, η οποία στέλνει αυτά τα δεδομένα στο τερματικό και στο αρχείο magic_count.txt.

Ομάδα | Ομάδα | Εντολή \u003e\u003e αρχείο

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

ls ~ | grep * πίσσα | Tr e\u003e ls_log.txt

Αυτή η εντολή στέλνει την έξοδο LS για την ομάδα ριζικής ομάδας Grep Grep. Με τη σειρά του, η GREP ψάχνει για αρχεία πίσσας στα ληφθέντα δεδομένα. Μετά από αυτό, το αποτέλεσμα του GREP μεταδίδεται στην εντολή TR, η οποία θα αντικαταστήσει όλους τους χαρακτήρες Ε με το Ε. Το αποτέλεσμα θα προστεθεί στο αρχείο LS_LOG.TXT (αν δεν υπάρχει ένα τέτοιο αρχείο, η εντολή θα δημιουργήσει αυτόματα).

συμπέρασμα

Οι λειτουργίες ανακατεύθυνσης Linux I / O εμφανίζονται πολύ περίπλοκες. Ωστόσο, η εργασία με την ανακατεύθυνση είναι μία από τις σημαντικότερες δεξιότητες του διαχειριστή του συστήματος.

Για να μάθετε περισσότερα για οποιαδήποτε ομάδα, χρησιμοποιήστε:

Ο άνθρωπος εντολή | πιο λιγο

Για παράδειγμα:

Μια τέτοια εντολή θα επιστρέψει μια πλήρη λίστα εντολών για το TEE.

Ετικέτες:
Συνεχίζοντας το θέμα:
Έξυπνος

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

Νέα άρθρα
/
Δημοφιλής