Εργαστήριο 4

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 10

ΤΕΙ Μεσολογγίου

Σχολή Διοίκησης και Οικονομίας


Τμήμα Εφαρμογών Πληροφορικής στη Διοίκηση και Οικονομία .

Λειτουργικά Συστήματα (Εργαστήριο)

Διδάσκων: I. Μουμτζίδης

3ο Εργαστήριο.

Θεωρία

Standard streams – πρότυπα αρχεία εισόδου/εξόδου


Στο Unix, καθώς και σε ορισμένες γλώσσες προγραμματισμού, τα standard streams είναι
προσυνδεδεμένα κανάλια (αρχεία) εισόδου και εξόδου ανάμεσα σε μία εφαρμογή, που ξεκινά την
εκτέλεσή της, και στο περιβάλλον της. Αυτά τα τρία κανάλια εισόδου/εξόδου ονομάζονται standard
input (stdin), standard output (stdout) και standard error (stderr).
Στα περισσότερα, προγενέστερα του UNIX, λειτουργικά συστήματα, τα προγράμματα έπρεπε να
συνδεθούν ρητώς με την κατάλληλη είσοδο και έξοδο δεδομένων. Σε πολλά από αυτά τα συστήματα,
αυτό θα μπορούσε να είναι μία σκληρή πρόκληση προγραμματισμού, λόγω εξειδικευμένων ανά
λειτουργικό περιπλοκών, όπως η ανάκτηση των ρυθμίσεων του περιβάλλοντος ελέγχου, η πρόσβαση
στον τοπικό πίνακα αρχείων, ο καθορισμός του κατάλληλου data set και ο ορθός χειρισμός μίας
συσκευής ανάγνωσης καρτών, μαγνητικής ταινίας, δίσκου, εκτύπωσης γραμμής, διάτρησης καρτών ή
διαδραστικού τερματικού.
Το UNIX εισήγαγε ορισμένα πρωτοποριακά πλεονεκτήματα, ένα εκ των οποίων ήταν να παρέχει
αφηρημένες (γενικές) συσκευές, πράγμα που καταργεί την ανάγκη του κάθε προγράμματος
(εφαρμογής) να γνωρίζει ή να ενδιαφέρεται για το είδος των συσκευών με τις οποίες επικοινωνεί. Τα
παλαιότερα λειτουργικά συστήματα επέβαλλαν στον προγραμματιστή μία δομή για κάθε εγγραφή, τον
έλεγχο της συσκευής και πολύ συχνά data semantics. Το UNIX εξάλειψε αυτή την πολυπλοκότητα
εισάγοντας την έννοια της ροής δεδομένων, δηλαδή μια διατεταγμένη σειρά από bytes δεδομένων που
μπορούν να διαβαστούν μέχρι το τέλος του αρχείου. Ένα πρόγραμμα μπορεί επίσης να γράψει bytes
δεδομένων όποτε θελήσει και δεν χρειάζεται να δηλώσει πόσα bytes δεδομένων θα εγγραφούν
(πράγμα που είναι δύσκολο να υπολογιστεί), ή πώς θα ομαδοποιηθούν.
Μια άλλη σημαντική εξέλιξη που εισήγαγε το UNIX ήταν να συνδέσει αυτόματα την είσοδο και την
έξοδο από προεπιλογή. Το πρόγραμμα (και ο προγραμματιστής) δεν χρειάζεται να κάνει οτιδήποτε για
να καθορίσει την είσοδο και την έξοδο όταν ακολουθείται η τυπική αρχιτεκτονική είσοδος δεδομένων
– επεξεργασία – έξοδος δεδομένων. Για να επιτευχθεί αυτή η σύνδεση, με την είσοδο και την έξοδο
των δεδομένων, στα προηγούμενα λειτουργικά συστήματα απαιτούνταν συνήθως η χρήση μίας
γλώσσας ελέγχου εργασίας (job control), η οποία συχνά ήταν ιδιαίτερα σύνθετη.
Από τη στιγμή που το UNIX αποφάσισε να παρέχει πρότυπα αρχεία εισόδο/εξόδου, το runtime
περιβάλλον της UNIX C ήταν υποχρεωμένο να υποστηρίξει κι αυτό τη δυνατότητα αυτή. Ως
αποτέλεσμα, τα περισσότερα runtime περιβάλλοντα της C (και οι απόγονοι της C), ανεξάρτητα από το
λειτουργικό σύστημα, παρέχουν ισοδύναμες λειτουργίες.

stdin
Standard input είναι δεδομένα (συχνά σε μορφή κειμένου) που δίνονται ως είσοδος σε ένα
πρόγραμμα. Το πρόγραμμα ζητάει τη μεταφορά των δεδομένων (από την είσοδο προς αυτό) με τη
χρήση της λειτουργίας read (ανάγνωση).
Να σημειωθεί πως δεν χρειάζονται όλα τα προγράμματα κάποια είσοδο. Για παράδειγμα η εντολή ls (η
κάθε εντολή είναι ένα πρόγραμμα) εκτελεί τη λειτουργία της χωρίς να δέχεται κανένα δεδομένο από
την είσοδο.
Εκτός κι αν ζητηθεί κάποια ανακατεύθυνση, η είσοδος των δεδομένων αναμένεται από το
πληκτρολόγιο το οποίο ξεκίνησε το πρόγραμμα.
Το file descriptor (αριθμός - ταυτότητα που αντιστοιχεί σε κάθε ανοικτό αρχείο) για το πρότυπο αρχείο
εισόδου είναι το 0 (μηδέν), στη C αντιστοιχεί στη μεταβλητή FILE* stdin της βιβλιοθήκης <stdio.h>
ενώ στη C++ αντιστοιχεί στο μεταβλητή std::cin της βιβλιοθήκης <iostream>

stdout
Standard output είναι ένα αρχείο – ροή (stream) όπου το πρόγραμμα γράφει τα δεδομένα εξόδου. Το
πρόγραμμα ζητάει τη μεταφορά των δεδομένων (από αυτό προς την έξοδο) με τη χρήση της
λειτουργίας write (εγγραφή).
Να σημειωθεί πως δεν παράγουν δεδομένα εξόδου όλα τα προγράμματα. Για παράδειγμα η εντολή mv
που μετονομάζει ή/και μετακινεί αρχεία δεν παράγει κανένα μήνυμα όταν εκτελείται επιτυχημένα.
Εκτός κι αν ζητηθεί κάποια ανακατεύθυνση, η πρότυπη έξοδος των δεδομένων είναι το τερματικό
κειμένου (κοινώς η οθόνη) το οποίο αρχικοποίησε το πρόγραμμα.
Το file descriptor για το πρότυπο αρχείο εξόδου είναι το 1 (ένα), στη C αντιστοιχεί στη μεταβλητή
FILE* stdout της βιβλιοθήκης <stdio.h> ενώ στη C++ αντιστοιχεί στο μεταβλητή std::cout της
βιβλιοθήκης <iostream>.

stderr
Standard error είναι ένα ακόμα αρχείο – ροή (stream) εξόδου που χρησιμοποιείται από τα
προγράμματα για να εξάγουν μηνύματα λάθους ή διαγνωστικά μηνύματα. Είναι ένα αρχείο – ροή
ανεξάρτητο από το standard output και μπορεί να ανακατευθυνθεί ανεξάρτητα από αυτό.
Εκτός κι αν ζητηθεί κάποια ανακατεύθυνση, η πρότυπη έξοδος των μηνυμάτων λάθους είναι συνήθως
το τερματικό κειμένου (κοινώς η οθόνη) το οποίο αρχικοποίησε το πρόγραμμα.
Το file descriptor για το πρότυπο αρχείο εξόδου είναι το 2 (δύο), στη C αντιστοιχεί στη μεταβλητή
FILE* stderr της βιβλιοθήκης <stdio.h> ενώ στη C++ αντιστοιχεί στις μεταβλητές std::cerr και
std::clog της βιβλιοθήκης <iostream>.

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

Ο τελεστής ανακατεύθυνσης >


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

ls -l > DirListing
Εκτροπή των μηνυμάτων της εντολής ls -l από το stdout στο αρχείο DirListing. Αν το αρχείο DirListing
υπάρχει τότε διαγράφονται όλα τα περιεχόμενά του και μετά αποθηκεύονται σε αυτό όλα τα μηνύματα
προς το stdout της εντολής ls -l. Αν το αρχείο DirListing δεν υπάρχει τότε δημιουργείται. Στο τέλος
της εκτέλεσης της εντολής το αρχείο DirListing, που υπάρχει (ή δημιουργείται) στον ίδιο κατάλογο
στον οποίο εκτελείται η εντολή, περιέχει σε μορφή κειμένου όλα τα μηνύματα που θα εμφάνιζε στην
οθόνη του συστήματος η εκτέλεση της εντολής ls -l.

Για την εκτροπή των μηνυμάτων λάθους στο ίδιο αρχείο στο οποίο γίνεται η εκτροπή των μηνυμάτων
του stdout θα πρέπει στο τέλος της εντολής να συμπληρωθεί 2>&1
Παράδειγμα:
ls -l ~bob/Documents > BobDocumentsListing 2>&1
Τα μηνύματα με προορισμό το stdout της εντολής ls -l ~bob/Documents, που δείχνει τα περιεχόμενα
του φακέλου Documents κάτω από τον αρχικό φάκελο του χρήστη bob ανακατευθύνονται (κι άρα
αποθηκεύονται) στο αρχείο BobDocumentsListing. Στο ίδιο αρχείο θα αποθηκευθούν κι όλα τα
μηνύματα λάθους που θα πιθανώς θα παράγει η εκτέλεση της εντολής (πχ ότι ο χρήστης δεν έχει τα
κατάλληλα δικαιώματα να δει τα περιεχόμενα του φακέλου αυτού).

Ο τελεστής ανακατεύθυνσης >>


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

Παράδειγμα:

pwd >> MyCurrentLocation


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

Ο τελεστής ανακατεύθυνσης <


Ο τελεστής < υποχρεώνει την εντολή στην οποία εφαρμόζεται να διαβάσει ως είσοδο το περιεχόμενο
του αρχείου που τον ακολουθεί, αντί του αρχείου stdin (δηλαδή το πληκτρολόγιο).

Ο τελεστής ανακατεύθυνσης |
Ο τελεστής | χρησιμοποιείται για την εκτροπή των μηνυμάτων μίας εντολής από το stdout στo stdin
της εντολής που ακολουθεί. Κοινώς τα αποτελέσματα της εντολής στα αριστερά του τελεστή
χρησιμοποιούνται σαν το τελευταίο όρισμα της εντολής στα δεξιά του τελεστή

Παράδειγμα:

cat /tmp/myFile | sort


Γενικά η εντολή cat εμφανίζει το περιεχόμενο των αρχείων που δέχεται ως όρισμα. Στη συγκεκριμένη
περίπτωση, τα μηνύματα της εντολής cat /tmp/myFile με προορισμό το stdout, δηλαδή το
περιεχόμενο του αρχείου myFile κάτω από τον φάκελο tmp του root, δίνεται ως παράμετρος στην
εντολή sort, η οποία ταξινομεί το περιεχόμενο αρχείων που δέχεται ως ορίσματα. Αυτό έχει ως
αποτέλεσμα να εμφανιστεί το περιεχόμενο του αρχείου myFile στην οθόνη ταξινομημένο ανά γραμμή.

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

Παράδειγμα:

ls *ToDelete* | xargs rm -r
H xargs διαβάζει τα μηνύματα του stdin. Στο stdin έχουν αποθηκευθεί (λόγω του τελεστή
ανακατεύθυνσης | που προηγείται) τα μηνύματα προς το stdout της εντολής ls *ToDelete*, δηλαδή τα
ονόματα των αρχείων του τρέχων καταλόγου που στο όνομά τους περιέχουν το string ToDelete. H
xargs θα πάρει τη λίστα αυτή, θα την χωρίσει σε τμήματα με βάση τον χαρακτήρα κενό. Επομένως
κάθε τμήμα είναι ένα όνομα αρχείου (αυτό ισχύει μόνο στην περίπτωση που κανένα από τα αρχεία του
φακέλου δεν περιέχει κενό στο όνομά του). Για κάθε τμήμα εκτελεί την εντολή rm -r τμήμα_X, κι
αφού κάθε τμήμα είναι ένα όνομα αρχείου, τότε η εντολή αυτή θα σβήσει όλα τα αρχεία που το όνομά
του περιέχει το string ToDelete και είναι κάτω από τον τρέχων κατάλογο.

echo
Γράφει το μήνυμα που παίρνει ως όρισμα στο πρότυπο αρχείο εξόδου (stdout)
Παράδειγμα:

echo Hello World


Γράφει το μήνυμα Hello World στο stdout (εμφανίζεται στην οθόνη του τερματικού).

cat
Στο Unix/Linux υπάρχουν πολλές εντολές με τις οποίες μπορούμε να δούμε τα περιεχόμενα ενός ή
περισσότερων αρχείων. Η εντολή cat εμφανίζει τα περιεχόμενα των αρχείων σειριακά, χωρίς κανένα
διαχωρισμό μεταξύ τους.
cat [options] filenames

filenames: Λίστα ονομάτων αρχείων χωρισμένα μεταξύ τους με κενό.

Παράδειγμα:

cat /etc/profile /etc/passwd


Εμφάνιση των περιεχομένων των αρχείων profile και passwd κάτω από τον κατάλογο etc του root.

more
H εντολή more εμφανίζει τα περιεχόμενα των αρχείων σειριακά, με διαχωρισμό μεταξύ τους και με
σελιδοποίηση (αν το περιεχόμενο των αρχείων ξεπερνάει σε μέγεθος το παράθυρο του τερματικού,
τότε γεμίζει μία οθόνη και σταματάει περιμένοντας από τον χρήστη να προχωρήσει μπροστά.
Μπορούμε να προχωρήσουμε μπροστά μόνο είτε με space (προχωράει μπροστά τόσες γραμμές όσες το
μέγεθος της οθόνης) είτε με cr (enter) (προχωράει μπροστά μία γραμμή) είτε με άλλες επιλογές (δείτε
man more για περισσότερες πληροφορίες).
more [options] filenames

filenames: Λίστα ονομάτων αρχείων χωρισμένα μεταξύ τους με κενό.

Παράδειγμα:

more /etc/profile /etc/passwd


εμφάνιση των αρχείων profile και passwd που βρίσκονται κάτω από τον φάκελο etc.

less
Η εντολή less εμφανίζει τα περιεχόμενα των αρχείων σειριακά, με διαχωρισμό μεταξύ τους και με
σελιδοποίηση. Για να εμφανίσουμε το περιεχόμενο του επόμενου αρχείου χρησιμοποιούμε τον
συνδυασμό :n ενώ για το περιεχόμενο του προηγούμενου αρχείου τον συνδυασμό :p. Μπορούμε να
προχωρήσουμε μπροστά και πίσω με επιλογές όπως space ή f (προχωράει μπροστά τόσες γραμμές
όσες το μέγεθος της οθόνης) και b (μετακινείται πίσω τόσες γραμμές όσες το μέγεθος της οθόνης).
Δείτε man more για περισσότερες πληροφορίες.
less [options] filenames

filenames: Λίστα ονομάτων αρχείων χωρισμένα μεταξύ τους με κενό.

Παράδειγμα:

less /etc/profile /etc/passwd


εμφάνιση των αρχείων profile και passwd που βρίσκονται κάτω από τον φάκελο etc.

head
Η εντολή head χρησιμοποιείται για να εμφανίσει τις πρώτες γραμμές ενός αρχείου. Η head εμφανίζει
10 πρώτες γραμμές, εκτός αν γίνει χρήση του διακόπτη n. Αν ο αριθμός που ακολουθεί τον διακόπτη
n είναι θετικός τότε εμφανίζει τόσες γραμμές του αρχείου όσες κι ο αριθμός. Αν όμως ο αριθμός είναι
αρνητικός τότε εμφανίζει όλες τις γραμμές του αρχείου εκτός από αυτόν τον αριθμό των τελευταίων
γραμμών του.
head [options] filename

Παράδειγμα 1:

head –n 30 /etc/passwd
Εμφάνιση των 30 πρώτων γραμμών του αρχείου passwd.

Παράδειγμα 2:

head –n -3 /etc/group
Εμφάνιση όλων γραμμών του αρχείου group εκτός από τις 3 τελευταίες

tail
Η εντολή tail χρησιμοποιείτε για να εμφανίσει τις τελευταίες γραμμές ενός αρχείου. Η tail εμφανίζει 10
τελευταίες γραμμές, εκτός αν χρησιμοποιήσετε τον διακόπτη n. Η εντολή tail συχνά χρησιμοποιείται
για να βλέπουμε τις τελευταίες εγγραφές ενός αρχείου καταγραφής (log file). Για να βλέπουμε
συνεχώς τις τελευταίες εγγραφές ενός αρχείου, χρησιμοποιούμε τον διακόπτη f.
tail [options] filename

Παράδειγμα 1:

tail –n 5 /etc/passwd
Eμφάνιση των τελευταίων 5 γραμμών του αρχείου passwd.

Παράδειγμα 2:

tail –n +4 /etc/passwd
Εμφάνιση όλων των γραμμών του αρχείου passwd από την τέταρτη γραμμή και μετά.

Παράδειγμα 3:

tail –f /var/log/messages.
Συνεχής εμφάνιση των τελευταίων εγγραφών στο αρχείο messages.

find
Η εντολή find χρησιμοποιείται για την ανεύρεση αρχείων και καταλόγων που ταιριάζουν με το
επιθυμητό όνομα αρχείου ή άλλα κριτήρια. Η απλούστερη δυνατή σύνταξη της εντολής find θα δώσει
μία λίστα των αρχείων που υπάρχουν σε ένα κατάλογο και στους υποκαταλόγους του.
find [path...] [expression]

path: Λίστα από φακέλους χωρισμένους με κενό μεταξύ τους μέσα στους οποίους γίνεται η αναζήτηση.

expression: Παραστάσεις από options (επιλογές), tests και actions (ενέργειες) που συνδέονται μεταξύ τους με
τελεστές. Αν δεν υπάρχει κάποιος τελεστής τότε εννοείται ο τελεστής –and.

Μερικοί χρήσιμοι διακόπτες της εντολής find είναι οι ακόλουθοι:


-name pattern

Bρίσκει αρχεία και φακέλους που το όνομά του ακολουθεί το pattern.

-iname pattern

Βρίσκει αρχεία και φακέλους που το όνομά τους ακολουθεί το pattern. Η αναζήτηση αγνοεί το case (case insensitive).

-amin [+n|-n|n]

Βρίσκει αρχεία στα οποία έγινε πρόσβαση πριν από περισσότερα από n λεπτά (λιγότερα από n λεπτά/ακριβώς πριν από
n λεπτά).
-atime [+n|-n|n]

Βρίσκει αρχεία στα οποία έγινε πρόσβαση πριν από περισσότερες από n ημέρες (λιγότερες από n ημέρες/ακριβώς πριν
από n ημέρες).

-mmin [+n|-n|n]

Βρίσκει αρχεία που τροποποιήθηκαν πριν από περισσότερα από n λεπτά (λιγότερα από n λεπτά/ακριβώς πριν από n
λεπτά).

-mtime [+n|-n|n]

Βρίσκει αρχεία που τροποποιήθηκαν πριν από περισσότερες από n ημέρες (λιγότερες από n ημέρες/ακριβώς πριν από n
ημέρες).

-uname [user|user ID]

Βρίσκει αρχεία που ανήκουν στο χρήστη user ή στο χρήστη με το συγκεκριμένο user ID.

-group [gname|group ID]

Βρίσκει αρχεία που ανήκουν στην ομάδα με το όνομα gname ή με το συγκεκριμένο group ID.

-type filetype

Αναζητά αρχεία του συγκεκριμένου τύπου. To filetype μπορεί να πάρει τις παρακάτω τιμές:

b block (buffered) special

c character (unbuffered) special

d directory

p named pipe (FIFO)

f regular file

l symbolic link

s socket

-size [+n|-n|n] [spaceunit]

Αναζητά αρχεία μεγέθους μεγαλύτερου (μικρότερου ή ίσου) με το μέγεθος που καθορίζει ο χρήστης. Το spaceunit
μπορεί να πάρει μία από της παρακάτω τιμές:

c για bytes

k για Kilobytes

M για Megabytes

G για Gigabytes

Αναλυτικότερες πληροφοριές για τους διακόπτες και τις χρήσεις της εντολής find στο manual της εντολής (man find).

Παράδειγμα 1:

find ~ -iname Passwd


Αναζήτηση αρχείων κάτω από το home directory που το όνομά τους είναι passwd ανεξάρτητα από το
case (Πχ PASSWD, passWD, PASSwd, PassWd)

Παράδειγμα 2:

find . –name "*file" | xargs cat >> myfile


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

Παράδειγμα 3:

find ~ –size +10k


Αναζήτηση αρχείων που το μέγεθός τους είναι μεγαλύτερο από 10Kbytes και που βρίσκονται κάτω
από το home directory.

Παράδειγμα 4:

find / -group Ubuntu


Αναζήτηση όλων των αρχείων κάτω από το root που ανήκουν στο group Ubuntu.

Παράδειγμα 5:

find ~ -type f -size -10c -ctime -5


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

grep
Aναζήτηση συγκεκριμένου pattern μέσα σε αρχεία κειμένου. Η προκαθορισμένη συμπεριφορά της
εντολής grep είναι να τυπώνει τις γραμμές του αρχείου που περιέχουν το pattern.
grep [options] [pattern] filename

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

Οι σημαντικότεροι διακόπτες της grep είναι οι παρακάτω:


-i --ignore-case

Η αναζήτηση γίνεται αγνοόντας το case

grep -i UBUNTU /etc/passwd


Αναζήτηση της λέξης UBUNTU αγνοώντας το case στο αρχείο passwd. Επιστρέφει όλες τις γραμμές
του αρχείου που περιέχουν τη λέξη είτε με κεφαλαίους χαρακτήρες, είτε με πεζούς, είτε με συνδυασμό
τους.

-v --invert-match

Εμφανίζει τις γραμμές που δεν περιέχουν το pattern

grep -v ubuntu /etc/passwd


Αναζήτηση της λέξης ubuntu στο αρχείο passwd. Επιστρέφει όλες τις γραμμές του αρχείου που ΔΕΝ
περιέχουν τη λέξη.

-w --word-regexp

Εμφανίζει της γραμμές που περιέχουν το pattern ως ξεχωριστή λέξη

grep -w buntu /etc/passwd


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

-c --count

Εμφανίζει τον αριθμό των γραμμών που περιέχουν το pattern

grep -c ubuntu /etc/passwd


Αναζήτηση της λέξης ubuntu στο αρχείο passwd. Επιστρέφει ΤΟΝ ΑΡΙΘΜΟ των γραμμών του αρχείου
που περιέχουν τη λέξη.

-l --files-with-matches

Αναζητά και εμφανίζει τα αρχεία που περιέχουν το pattern

grep -l ubuntu /etc/*


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

split
Η split χωρίζει ένα αρχείο σε μικρότερα ανάλογα με το μέγεθος που θα οριστεί. Αν δεν δοθεί μέγεθος
τότε χωρίζει το αρχείο ανά 1000 γραμμές. Τα νέα αρχεία που δημιουργούνται ονομάζονται με τη σειρά
xaa xab xac xad κ.ο.κ
split [options] [input [prefix]]

Παράδειγμα 1:

split /var/log/messages
Διάσπαση του αρχείου messages σε αρχεία μεγέθους 1000 γραμμών το κάθε ένα.

Παράδειγμα 2:

split -l 3 /etc/passwd
Διάσπαση του αρχείου passwd σε αρχεία μεγέθους 3 γραμμών το κάθε ένα

Παράδειγμα 3:

split /var/log/messages smessage


Διάσπαση του αρχείου messages σε αρχεία μεγέθους 1000 γραμμών το κάθε ένα. Τα αρχεία που
δημιουργούνται έχουν ονόματα smessageaa, smessageab, smessageac κ.ο.κ.

cut
Εμφανίζει συγκεκριμένο τμήμα κάθε γραμμής από το αρχείο
cut [options] [file]

Παράδειγμα 1:

cut -c 4-10 /etc/passwd


Εμφανίζει από τον 4ο έως τον 10ο χαρακτήρα κάθε γραμμής

Παράδειγμα 2:

cut -d: -f 5 /etc/passwd


Εμφανίζει το 5ο πεδίο κάθε γραμμής. Τα πεδία ορίζονται κάθε φορά που συναντάται ο χαρακτήρας :

sort
Ταξινομεί την είσοδο αλφαβητικά. Η προκαθορισμένη ταξινόμηση είναι αλφαριθμητική ενώ υπάρχει
δυνατότητα και για αριθμητική ταξινόμηση.
sort [options] [file]

Παράδειγμα 1:

sort /etc/passwd
Αλφαριθμητική ταξινόμηση του αρχείου passwd.

Παράδειγμα 2:

sort -o passwd2 /etc/passwd


Δημιουργεί το αρχείο passwd2 που περιέχει τα περιεχόμενα του αρχείου passwd ταξινομημένα
αλφαριθμητικά.

Παράδειγμα 3:

cut -d: -f3 /etc/passwd >passwd2

sort -n passwd2
Δημιουργία του αρχείου passwd2 που περιέχει το 3ο πεδίο (σπάζοντας κάθε γραμμή με βάση τον
χαρακτήρα :) κάθε γραμμής του αρχείου passwd (το 3ο πεδίου του συγκεκριμένου αρχείο είναι ένας
αριθμός). Κατόπιν αριθμητική ταξινόμηση του αρχείου passwd2.

Η εντολή uniq
Απόρριψη όλων εκτός από μίας των διαδοχικά ίδιων γραμμών της εισόδου και εμφάνισή τους στην
έξοδο
uniq [options] [input [output]]

Παράδειγμα:

cut -d: -f3 /etc/passwd >> passwd2

sort -n passwd2 > spasswd2

uniq spasswd2 uspasswd2


Το αρχείο passwd2 που δημιουργείται περίεχει μόνο αριθμητικές τιμές. Το spasswd2 δημιουργείται να
περιέχει τις αριθμητικές τιμές τους passwd2 ταξινομημένες αριθμητικά. Με την εντολή uniq
δημιουργείται το αρχείο uspasswd2 που περιέχει τις μοναδικές αριθμητικές τιμές του spasswd2.

Ερωτήσεις

Εκτελέστε την εξής σειρά εντολών:


cd ~
touch Script4
chmod +x Script4
gedit Script4 &
Στον επεξεργαστή κειμένου που θα ανοίξει αντιγράψτε τις παρακάτω εντολές:
#!/bin/bash
cd ~
if test -d LAB4
then
rm -R LAB4
fi
mkdir -p LAB4/FOL1 LAB4/FOL2/FOL3
ls -lR /usr/bin > LAB4/FOL1/long
echo line 1 of short file > LAB4/FOL1/short
echo line 2 of short file >> LAB4/FOL1/short
echo line 3 of short file >> LAB4/FOL1/short
echo 'Line;for;user;ubuntu;userid;10' > LAB4/FOL2/FOL3/Delim
echo 'Line;for;user;bob;userid;20' >> LAB4/FOL2/FOL3/Delim
echo 'Line;for;user;maria;userid;30' >> LAB4/FOL2/FOL3/Delim
echo 'Line;for;user;john;userid;15' >> LAB4/FOL2/FOL3/Delim
echo 'Line;for;user;lelos;userid;25' >> LAB4/FOL2/FOL3/Delim
Αποθηκεύστε τις αλλαγές που έχετε κάνει στο αρχείο και κλείστε την εφαρμογή gedit.
Εκτελέστε την εντολή:
./Script4
Αυτόματα δημιουργείται η παρακάτω δομή φακέλων και αρχείων. Μπορείτε να γυρίζετε στον αρχικό
φάκελο χρήστη και να εκτελείτε την εντολή ./Script4 κάθε φορά που θέλετε να δημιουργήσετε από
την αρχή την δομή αυτή. Από τον αρχικό φάκελο χρήστη και χωρίς να μετακινηθείτε σε άλλο φάκελο:

home

ubuntu

LAB4

FOL1 FOL2

long short FOL3 Delim

1. Δείτε τα περιεχόμενα των αρχείων short και Delim με διαχωρισμό και χωρίς διαχωρισμό
ανάμεσα στα περιεχόμενα των δύο αρχείων.
2. Δείτε τις 20 πρώτες γραμμές του αρχείου long. Δείτε τις 10 τελευταίες του ίδιου αρχείου.
3. Βρείτε τα αρχεία που είναι κάτω από τον φάκελο LAB4 που το όνομά τους περιέχει τον
χαρακτήρα 0 και που το μέγεθός τους δεν είναι πάνω από 500Kbytes.
4. Βρείτε πόσες γραμμές του αρχείου long δεν περιέχουν τη λέξη usr
5. Το αρχείο Delim περιέχει σε κάθε γραμμή του πληροφορίες για ένα χρήστη (username και
userid). Δημιουργήστε ένα αρχείο που θα περιέχει μόνο τα userids των χρηστών.
6. Μετρήστε σε πόσες διαφορετικές γραμμές εμφανίζεται η λέξη Line αδιαφορώντας για το case σε
όλα τα αρχεία του φακέλου FOL1.
7. Μετρήστε σε πόσες διαφορετικές γραμμές εμφανίζεται η λέξη Line αδιαφορώντας για το case σε
όλα τα αρχεία του φακέλου LAB4.
8. Δημιουργήστε ένα αρχείο κάτω από τον φάκελο LAB4 που θα περιέχει τις 2 πρώτες και τις δύο
τελευταίες γραμμές του αρχείου Delim
9. Δημιουργήστε ένα αρχείο κάτω από τον φάκελο LAB4 που θα περιέχει τη δεύτερη γραμμή του
αρχείου short.

You might also like