UNIX: Τρίτο Μάθημα

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

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

Έχουμε ήδη δει τη χρήση της εντολής cat με την οποία μπορούμε να εμφανίσουμε τα περιεχόμενα ενός αρχείου στην οθόνη.

Γράψτε τώρα την εντολή cat χωρίς να προσδιορίσετε κάποιο αρχείο που να διαβάσει:

% cat

Γράψτε έπειτα κάποιες λέξεις στο πληκτρολόγιο και πιέστε το πλήκτρο [Return.

Τέλος, πιέστε το πλήκτρο [Ctrl] και καθώς το κρατάτε, πιέστε το [d] (αυτό εν' συντομία γράφεται ^D) για να τερματίσετε την είσοδο.

Τι συνέβη;

Αν εκτελέσετε την εντολή cat χωρίς να καθορίσετε κάποιο αρχείο για να διαβάσει, διαβάζει την τυποποιημένη είσοδο (το πληκτρολόγιο) και μόλις λάβει το χαρακτήρα τέλους αρχείου (το ^D), αντιγράφει την είσοδο στην τυποποιημένη έξοδο (την οθόνη).

Στο UNIX έχουμε τη δυνατότητα να ανακατευθύνουμε τόσο την είσοδο όσο και την έξοδο των εντολών.

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

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

% cat > list1

Γράψτε έπειτα τα ονόματα μερικών φρούτων. Πιέστε [Return] μετά από κάθε όνομα.

pear
banana
apple
^D {Αυτό σημαίνει [Ctrl] και [d] για τέλος}

Αυτό που συμβαίνει, είναι ότι η εντολή cat διαβάζει την τυποποιημένη είσοδο (το πληκτρολόγιο) και το > ανακατευθύνει την έξοδο - που φυσιολογικά είναι η οθόνη - σε ένα αρχείο με το όνομα list1

Για να διαβάσετε τα περιεχόμενα του αρχείου, πληκτρολογήστε:

% cat list1

Άσκηση 3a

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

 

3.2.1 Προσθήκη Περιεχομένων σε Ένα Αρχείο

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

% cat >> list1

Και έπειτα πληκτρολογήστε τα ονόματα περισσότερων φρούτων :)

peach
grape
orange
^D (Control D για τέλος εισόδου)

Για να διαβάσετε τα περιεχόμενα του αρχείου, πληκτρολογήστε:

% cat list1

Θα πρέπει να έχετε τώρα δύο αρχεία. Το ένα περιέχει έξι φρούτα, το άλλο περιέχει τέσσερα φρούτα.

Θα χρησιμοποιήσουμε τώρα την εντολή cat για να ενώσουμε (concatenate) τα δύο αρχεία, το list1 και το list2 σε ένα νέο αρχείο με το όνομα biglist. Πληκτρολογήστε:

% cat list1 list2 > biglist

Η εντολή αυτή διαβάζει τα περιεχόμενα των αρχείων list1 και list2 με τη σειρά που φαίνονται και γράφει την έξοδο στο αρχείο biglist

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

% cat biglist

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

Θα χρησιμοποιήσουμε το σύμβολο < για να ανακατευθύνουμε την είσοδο της εντολής.

Η εντολή sort ταξινομεί αλφαβητικά ή αριθμητικά μια λίστα. Πληκτρολογήστε:

% sort

Γράψτε έπειτα τα ονόματα μερικών ζώων. Πιέστε [Return] μετά από κάθε όνομα.

dog
cat
bird
ape
^D (control d για να σταματήσετε)

Η έξοδος θα μοιάζει με την παρακάτω:

ape
bird
cat
dog

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

% sort < biglist

και θα δείτε την ταξινομημένη λίστα στην οθόνη σας.

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

% sort < biglist > slist

Χρησιμοποιήστε την εντολή cat για να διαβάσετε τα περιεχόμενα του αρχείου slist

3.4 Σωληνώσεις

Για να δείτε ποιος άλλος είναι συνδεδεμένος στο σύστημα μαζί με εσάς, πληκτρολογήστε:

% who

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

% who > names.txt
% sort < names.txt

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

Για παράδειγμα, πληκτρολογήστε:

% who | sort

και θα πάρετε το ίδιο αποτέλεσμα με το παραπάνω, αλλά πιο γρήγορα και καθαρά.

Για να βρείτε πόσοι χρήστες βρίσκονται αυτή τη στιγμή στο σύστημα, πληκτρολογήστε:

% who | wc -l

Άσκηση 3b

Χρησιμοποιώντας σωληνώσεις, δείξτε όλες τις γραμμές των αρχείων list1 και list2 που περιέχουν το γράμμα 'p' και ταξινομήστε το αποτέλεσμα.

Περίληψη

Εντολή Σημασία
command > file Ανακατεύθυνση τυποποιημένης εξόδου σε αρχείο
command >> file Προσθήκη τυποποιημένης εξόδου στο τέλος υπάρχοντος αρχείου
command < file Ανακατεύθυνση τυποποιημένης εισόδου από αρχείου
command1 | command2 Σωλήνωση της εξόδου της command1 στην είσοδο της command2
cat file1 file2 > file0 Συνένωση των αρχείων file1 και file2 στο file0
sort Ταξινόμηση δεδομένων
who Λίστα χρηστών που είναι συνδεδεμένοι στο σύστημα τη δεδομένη στιγμή

M.Stonebank@surrey.ac.uk, © 9th October 2000