Τεύχος Εργαστηριακών Ασκήσεων UNIX



Σχετικά έγγραφα
Λειτουργικά Συστήματα

Μερικές άλλες χρήσιμες εντολές

3ο Εργαστήριο Βασικές εντολές διαχείρισης αρχείων σε LINUX

ΧΑΡΟΚΟΠΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ

ΠΕΡΙΕΧΟΜΕΝΑ ΜΕΡΟΣ I. 1. Εισαγωγή 3 ΠΡΟΛΟΓΟΣ

Shell Scripts: loops / if / test

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στο Λ.Σ. UNIX

Μερικές άλλες χρήσιμες εντολές

Αβδέλαρου Κωνσταντίνα

Εργαστήριο ΤΟ ΛΕΙΤΟΥΡΓΙΚΟ ΣΥΣΤΗΜΑ UNIX

Λειτουργικά. Συστήματα Ι. Φ ρ ο ν τ ι σ τ ή ρ ι ο. Αριστείδης Ηλίας. Εργαστήριο Ηλεκτρονικών Υπολογιστών

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι

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

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ I

ΕΠΛ 003: ΕΠΙΣΤΗΜΗ ΤΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΠΛΗΡΟΦΟΡΙΑΚΑ ΣΥΣΤΗΜΑΤΑ. Εισαγωγή στο Unix

Εισαγωγή στον Προγραμματισμό Εργαστήριο 3: Βοηθητικά προγράμματα του Linux CLI. Οκτώβριος 2014 Χ. Αλεξανδράκη Γ. Δημητρακάκης

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ II. Υφαντόπουλος Νικόλαος Υποψήφιος Διδάκτορας Contact:

2ο Εργαστήριο. Εισαγωγική στο Λ.Σ. LINUX Γενικές εντολές συστήματος και χρηστών

[11] Υπολογιστικά συστήματα: Στρώματα. Περιεχόμενα. Εισαγωγή. επικοινωνία εφαρμογές λειτουργικό σύστημα προγράμματα υλικό

Εισαγωγή στην Επιστήμη της Πληροφορικής Εργαστήριο. UNIX Μέρος 1

Βασικές εντολές του Unix-Linux

ΜΑΘΗΜΑ: ΕΙΑΓΩΓΗ ΣΑ ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ (UNIX) ΕΡΓΑΣΤΗΡΙΟ. 9o ΕΡΓΑΣΤΗΡΙΟ

Εισαγωγή στον Προγραμματισμό Εργαστήριο 3: Βοηθητικά προγράμματα του Linux CLI. Οκτώβριος 2014 Χ. Αλεξανδράκη Γ. Δημητρακάκης

Εργαστήριο 6 Ασκήσεις: To Εργαλείo Ωφελιμότητας Awk Προγραμματισμός Κελύφους Bash

Πως δημιουργούμε ένα νέο αρχείο κειμένου; Με τρεις τρόπους:

*? [xyz] [^xy] [!0-9] [:alpha:] [:digit:]

Λειτουργικά Συστήματα. Shell Programming

ΕΡΓΑΣΤΗΡΙΟ #1. Το Λειτουργικό Σύστηµα Unix

Επαναληπτικές Ασκήσεις

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

Εργαστήριο Λειτουργικών Συστημάτων. Shell Programming

Μεταφραστής (Compiler)

Λειτουργικά Συστήματα. Άσκηση Πράξη. Shell Programming

ΤΕΙΘ ΣΤΕΦ - ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΜΑΘΗΜΑ: ΕΙΣΑΓΩΓΗ ΣΤΑ ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ (UNIX) ΕΡΓΑΣΤΗΡΙΟ

wc -l <file1 10 ή να μετρήσω πόσες γραμμές δίνει μια οποιαδήποτε άλλη εντολή π.χ. η finger : finger wc -l 8

ΤΕΙΘ ΣΤΕΦ - ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΜΑΘΗΜΑ: ΕΙΣΑΓΩΓΗ ΣΤΑ ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ (UNIX) ΕΡΓΑΣΤΗΡΙΟ. 3o ΕΡΓΑΣΤΗΡΙΟ

Linux με τη χρήση κονσόλας

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

2.1. Οι λογαριασµοί χρηστών Σύνδεση (login) και αποσύνδεση (logout)

Unix: Εντολές, οργάνωση και χειρισµός αρχείων, διεργασίες

Λειτουργικό σύστημα Unix

ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ Σύντομη εισαγωγή στο εργαστήριο

Εισαγωγή στον Προγραμματισμό

Δίκτυα Η/Υ στην Επιχείρηση

ΤΕΙΘ ΣΤΕΦ - ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΜΑΘΗΜΑ: ΕΙΣΑΓΩΓΗ ΣΤΑ ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ (UNIX) ΕΡΓΑΣΤΗΡΙΟ. 6o ΕΡΓΑΣΤΗΡΙΟ

ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Τμήμα Μηχανικών Πληροφορικής ΤΕ Λειτουργικά Συστήματα (Εργαστήριο) Διδάσκων: I. Τσακνάκης. 8ο Εργαστήριο

ΑΣΚΗΣΗ 2 -ΑΚΥΡΩΣΗ ΣΗΜΑΣΙΑΣ ΕΙΔΙΚΩΝ ΧΑΡΑΚΤΗΡΩΝ

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

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι

ιαχείριση Πληροφοριών στο ιαδίκτυο

Πλατφόρµα Ασύγχρονης Τηλεκπαίδευσης eclass 2.0. Οδηγίες Αναβάθµισης (Upgrade) Αθήνα, 1 Ιουνίου Εισαγωγή

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ II. Υφαντόπουλος Νικόλαος Υποψήφιος Διδάκτορας Contact:

Προγραμματισμός Διαχείρισης Συστημάτων ΙΙ

Λειτουργικά Συστήµατα

Προγραμματισμός Διαχείρισης Συστημάτων Ι

ΟΛΑ ΤΑ SCRIPT files πρέπει να είναι ΕΚΤΕΛΕΣΙΜΑ: $*, : ΟΛΑ - Η λίστα (ο πίνακας) με τα ορίσματα $# πλήθος παραμέτρων. one two third parameter

Σύντομη εισαγωγή στο λειτουργικό σύστημα Linux

Εισαγωγή στο UNIX. Κωνσταντίνος Καραφασούλης ιδάσκων (Π 407) Τµήµα Μηχανικών Πληροφοριακών και Επικοινωνιακών Συστηµάτων

Εισαγωγή στους Ηλεκτρονικούς Υπολογιστές Σχολή Θετικών Επιστημών Τμ. Πληροφορικής. Διδάσκων: Ι. Η. Λαγαρής. Εισαγωγή

Εισαγωγή στην Αριθμητική Ανάλυση

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

Ενότητα 1 Διάλεξη 1β

Λύβας Χρήστος Αρχική επιµέλεια Πιτροπάκης Νικόλαος και Υφαντόπουλος Νικόλαος

ΕισαγωγήστουςΗ/Υ. PHP Hypertext Preprocessor

Το Shell. Προγραμματισμός II 1

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

Εργαστήριο 4 Ασκήσεις: Διαχείριση Δικτύου (nmap, iptables) και Προχωρημένες Εντολές Unix (grep, ps, cut, find)

Εργαστήριο 4: Εργαλεία Συστήματος UNIX. Διδάσκων: Γιώργος Χατζηπολλάς. Στο εργαστήριο θα μελετηθούν: Εργαστηριακή Άσκηση 2 Παραδείγματα χρήσης awk

11/23/2014. Στόχοι. Λογισμικό Υπολογιστή

ΚΕΦΑΛΑΙΟ Web Services

ΜΑΘΗΜΑ: ΕΙΑΓΩΓΗ ΣΑ ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ (UNIX) ΕΡΓΑΣΤΗΡΙΟ. 10o ΕΡΓΑΣΤΗΡΙΟ

Μετατροπή χαρακτήρων ASCII σε ακέραιο αριθµό (atoi) & Άνοιγµα αρχείου µέσα από τo QtSPIM, διάβασµα, και αποθήκευση του περιεχοµένου του στη µνήµη

ΦΥΣ 145 Μαθηµατικές Μέθοδοι στη Φυσική. Πρόοδος 28 Μαρτίου 2009 Οµάδα 1 η

Β. Εισαγωγή στον Προγραμματισμό Η/Υ με την JavaScript

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ (TP-105)

Στο εργαστήριο θα μελετηθούν: Διδάσκων: Γιώργος Χατζηπολλάς. Εργαστήριο 2: Εργαλεία Συστήματος UNIX. Ομάδες για παρουσίαση

ΣΕΤ ΑΣΚΗΣΕΩΝ 4. Προθεσµία: 13/1/13, 22:00

Προγραμματισμός Ι. Εγγραφές. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Εισαγωγή στο λειτουργικό σύστηµα Unix

Κεφάλαιο 10 Διαχείριση Αρχείων και Καταλόγων

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στο Λ.Σ. UNIX

ιαφάνειες παρουσίασης #12

lab13grades Άσκηση 2 -Σωστά απελευθερώνετε ολόκληρη τη λίστα και την κεφαλή

Αρχεία Ένα αρχείο αποτελείται από μία σειρά ομοειδών δεδομένων που ονομάζονται λογικές εγγραφές (logical record)

ΗY335: Δίκτυα Υπολογιστών Χειμερινό Εξάμηνο Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης Διδάσκουσα: Μαρία Παπαδοπούλη

Λειτουργικά Συστήματα (ΗΥ-345) Χειμερινό Εξάμηνο

Σκοπός. Εργαστήριο 6 Εντολές Επανάληψης

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2)

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ I

Πως θα αποθηκεύσει τη λίστα με τα ψώνια του και θα την ανακτήσει στο Σ/Μ; και πως θα προσθέσει στη λίστα του επιπλέον προϊόντα;

Προγραμματισμός Διαχείρισης Συστημάτων Ι

ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Τµήµα Μηχανικών Πληροφορικής ΤΕ Λειτουργικά Συστήµατα (Εργαστήριο) Διδάσκων: I. Τσακνάκης. 7ο Εργαστήριο

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

Open eclass Πλατφόρμα Ασύγχρονης Τηλεκπαίδευσης

Πλατφόρμα Ασύγχρονης Τηλεκπαίδευσης eclass 1.7. Οδηγίες Αναβάθμισης (Upgrade) Αθήνα, 16 Μαρτίου Εισαγωγή

Διάλεξη 7 Εργαλεία Ωφελιμότητας Unix: Αwk

Εντολές Διαχείρισης Αρχείων στο Λειτουργικό Σύστημα UNIX. Δημιουργία Αρχείων. Η Εντολή cat. Παράδειγμα Δένδρου Συστήματος Αρχείων

ΣΕΤ ΑΣΚΗΣΕΩΝ 4. Προθεσµία: 22/12/2016, 21:00

Προγραµµατισµός 2 The shell

Transcript:

ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΑΚΩΝ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Τεύχος Εργαστηριακών Ασκήσεων UNIX Στέφανος Γκρίτζαλης Αναπληρωτής Καθηγητής ρ. Γιώργος Καµπουράκης ιδάσκων (Π.. 407/80) ρ. Κωνσταντίνος Καραφασούλης ιδάσκων (Π.. 407/80) Φεβρουάριος 2005

1. ΒΑΣΙΚΕΣ ΠΛΗΡΟΦΟΡΙΕΣ ΓΙΑ ΤΟ ΣΥΣΤΗΜΑ ΚΑΙ ΤΑ ΑΡΧΕΙΑ Αξιοποιήστε τη διαταγή man ή info για να µελετήσετε τις κυριότερες επιλογές των εντολών που ακολουθούν. 1. «Κατεβάστε» από τη διεύθυνση http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html το πρόγραµµα putty.exe. Εκτελέστε το και στο πεδίο Host Name or IP address τοποθετήστε: lykourgos.samos.aegean.gr ή 195.251.160.10. Επιπλέον επιλέξτε SSH (secure shell) και συνδεθείτε. 2. Αποσυνδεθείτε από το σύστηµα (exit, logout, ^d) και συνδεθείτε πάλι. Για να µετακινηθείτε στο home directory σας οποιαδήποτε στιγµή πληκτρολογήστε cd $HOME. Ο Shell που εργάζεστε είναι ο Korn shell. 3. Χρησιµοποιήστε τις εντολές date, logname, uname, clear, cal, cal 2003, tty, who, who am I, passwd username, w, pwd, write, last username. Περιγράψτε τι κάνουν και τι µορφή έχουν τα αποτελέσµατα ή το format των απαντήσεων που πρέπει να δώσετε. 4. ώστε τις εντολές ls, ls -a, ls., ls.., ls -l.., ls /, ls /bin, ls /b*. Nα περιγράψετε το αποτέλεσµα της εντολής ls και την µορφή των αποτελεσµάτων που δίνει. 5. ώστε τις διαταγές ls -l /bin/date, ls -li /bin/date. Περιγράψετε το αποτέλεσµα της εντολής ls -l, ls -li και την µορφή των αποτελεσµάτων που δίνει. 6. Χρησιµοποιήστε τις εντολές: ls -t /usr ls -i /usr ls -l -s /bin/pwd ls -ls /usr/bin/logname ls -m /usr ls -m /dev και να περιγράψετε την µορφή των αποτελεσµάτων της κάθε περίπτωσης. 7. ώστε τις διαταγές α) ls -F /usr β) ls -x /usr γ) ls -R /usr και περιγράψτε την µορφή των αποτελεσµάτων τους. 8. Τι αποτελέσµατα έχουν οι διαταγές: α) ls /*/who β) ls /*/*/logname γ)ls /l* δ) ls /b[ou]ot 9. ηµιουργείστε ένα αρχείο µε όνοµα arxeio (cat > arxeio στο τέλος ^d) και περιεχόµενα το όνοµά σας. Χρησιµοποιείστε την εντολή ls για να δείτε τα χαρακτηριστικά του αρχείου αυτού µε switches -l, -t, -i, -s και περιγράψτε τα αποτελέσµατα. 10. Βρείτε τα αποτελέσµατα των εντολών: ls -l /dev/ttyp[01234] ls -x /dev/tty[pqr]* 11. ώστε τις εντολές που θα εµφανίσουν όλα τα αρχεία των καταλόγων /bin και /dev: σε στήλες ονοµαστικά µόνο. µε αναλυτικές πληροφορίες ταξινοµηµένα ανά ηµεροµηνία τροποποίησης µε πληροφορίες για το µέγεθος τους και την ηµεροµηνία δηµιουργίας τους, ποια από αυτά είναι κατάλογοι. ποια είναι κατάλογοι, εκτελέσιµα ή µε link δίπλα, δίπλα µε κόµµα ανάµεσα το µέγεθος των αρχείων. σε στήλες µε πληροφορίες για το είδος του αρχείου (directory κλπ) που ξεκινάνε από t που τελειώνουν σε y 12. Χρησιµοποιήστε την find για να βρείτε τους καταλόγους που περιέχουν τα αρχεία who, passwd και arxeio. 13. Με τη διαταγή cat παρουσιάστε και σχολιάστε το περιεχόµενο των αρχείων /etc/passwd και /etc/group. 14. Να βρείτε και να εµφανίσετε στην οθόνη όλα τα αρχεία µε όνοµα που αρχίζει από tty και βρίσκονται στον κατάλογο /dev. 15. Αλλάξτε το prompt του συστήµατος µε το όνοµα σας µε την εντολή PS1= myname. Σελίδα 2 από 38

16. Βρείτε το τερµατικό που εργάζεται ένας φίλος σας και στείλτε του µήνυµα (σηµειώστε ότι µε την εντολή tty µπορώ να βρω σε ποιο τερµατικό εργάζοµαι θυµηθείτε να πατήσετε ^d στο τέλος του µηνύµατος). Εναλλακτικά µπορείτε να χρησιµοποιήσετε τη write µε το όνοµα του χρήστη στον οποίο θέλετε να στείλετε µήνυµα (write username). Σελίδα 3 από 38

2. ΑΡΧΕΙΑ ΚΑΙ ΚΑΤΑΛΟΓΟΙ Παρατηρήστε ότι µπορείτε εύκολα να εκτελέσετε την τελευταία εντολή πατώντας!!. 1. ηµιουργήστε την παρακάτω δενδροειδή δοµή στην περιοχή εργασίας σας: kosmos europi amerikh asia hellas uk france pelloponisos sterea arkadia korinthia ηµιουργείστε ένα αρχείο µε όνοµα prwtoarxeio στο directory sterea και περιεχόµενο το όνοµά σας. Μετονοµάστε το prwtoarxeio σε deyteroarxeio. Αντιγράψτε το deyteroarxeio στο arxeio1 Αντιγράψτε το arxeio1 στο directory pelloloponisos ηµιουργείστε σύνδεσµο του αρχείου arxeio1 στο arxeio2 και ελέγξτε το i-node των αρχείων (ln arxeio1 arxeio2 το i-node πρέπει να είναι το ίδιο). Όταν ένα αρχείο δηµιουργείται το όνοµα του συσχετίζεται µε τον αντίστοιχο i-node του. Η εντολή ln επιτρέπει το συσχετισµό επιπλέον ονοµάτων αρχείων στον ίδιο i-node. Σβήστε το arxeio2 Σβήστε το directory hellas Σβήστε το directory kosmos. 2. ώστε τις εντολές cat /etc/passwd, more /etc/passwd, head /etc/passwd, tail /etc/passwd και περιγράψτε το αποτέλεσµα των εντολών. 3. ηµιουργήστε ένα αρχείο µε όνοµα firstfile και περιεχόµενο "hello world" στην περιοχή σας 4. Εξετάστε τα χαρακτηριστικά του αρχείου που φτιάξατε µε την εντολή ls µε διαφορετικές παραµέτρους, και τα περιεχόµενά του µε την εντολή cat και περιγράψτε τα αποτελέσµατα. 5. ηµιουργήστε ένα ακριβές αντίγραφο του αρχείου αυτού µε το όνοµα secondfile (εντολή cp) και χρησιµοποιήστε την εντολή ls για να εξετάσετε τα χαρακτηριστικά του αρχείου. Η αντιγραφή του αρχείου µπορεί να γίνει και µε την εντολή cat. ηλαδή: cat firstfile > secondfile ή cat file1 file2 file3 > mail (σ αυτή τη περίπτωση η εντολή cat συνενώνει τα αρχεία file1, file2 & file3 στο αρχείο mail. Σηµειώστε ότι το σύµβολο > ονοµάζεται ανακατεύθυνση (redirection), και χρησιµοποιείται για να (ανα)κατευθύνει στην περίπτωσή µας την έξοδο της εντολής (που default είναι η οθόνη) σε ένα άλλο αρχείο. Αν το τελικό αρχείο υπάρχει (το mail στη περίπτωσή µας) µπορούµε να χρησιµοποιήσουµε την ανακατεύθυνση προσθήκης (append redirection) >>, ώστε τα περιεχόµενα των αρχείων file1, file2 & file3 να προστεθούν στο τέλος του mail. 6. Αλλάξτε το περιεχόµενο του secondfile σε "this is my second file". 7. Φτιάξτε έναν κατάλογο µε όνοµα foo (mkdir) και αντιγράψτε σε αυτόν τα δυο αρχεία. 8. Σβήστε τον κατάλογο foo και τα περιεχόµενά του (rm, rmdir). 9. Φτιάξτε έναν κατάλογο µε όνοµα exercises και έναν υποκατάλογο σε αυτόν µε όνοµα series2. 10. Αποθηκεύστε εκεί τα δυο αρχεία και αλλάξτε το όνοµα των αρχείων σε file1 και file2 (mv). 11. Συγκρίνετε τα δύο αρχεία µε τις διαταγές cmp και diff. Τι παρατηρείτε; 12. Συγκρίνετε τον κατάλογο exercises µε κάποιον άλλο κατάλογο, δικό σας ή του συστήµατος (dircmp). Τι παρατηρείτε; Σελίδα 4 από 38

13. Η εντολή ln Μπορεί να χρησιµοποιηθεί για να δηµιουργήσει συνδέσµους αρχείων σε άλλο directory. Για παράδειγµα: cd $HOME Μεταφορά στον κατάλογο περιοχής µας. mkdir lndir ηµιουργία καταλόγου µε το όνοµα lndir cd lndir Μεταφορά στον κατάλογο lndir ln $HOME/exercises/series2/f*. O κατάλογος series2 της περιοχής µας περιέχει δύο αρχεία: τα file1 & file2. Με την παραπάνω εντολή τα δύο αρχεία απέκτησαν σύνδεσµο µε το τρέχον directory ($ΗΟΜΕ/lndir). Για παράδειγµα το αρχείο που βρίσκεται στο /$HOME/lndir/file1 µπορεί να αναφέρεται και σαν $HOME/exercises/series2/file1. 14. Αξιοποιήστε τη διαταγή man για να µελετήσετε περαιτέρω τις εντολές που παρουσιάστηκαν σε αυτή τη σειρά. Σκεφτείτε και άλλες περιπτώσεις που µπορούν να χρησιµοποιηθούν και συντάξτε παραδείγµατα. 15. Θυµηθείτε ότι για να εκτελέσετε δύο ή περισσότερες εντολές, σε µια γραµµή, αρκεί να τις χωρίσετε µε το χαρακτήρα ; Π.χ. δοκιµάστε το εξής: $who; ls x 16. Απαγορεύστε ή επιτρέψτε στους άλλους χρήστες να σας στέλνουν µηνύµατα (write) µε τις εντολές mesg n ή mesg y αντίστοιχα. 17. είτε τις διεργασίες που υπάρχουν στη µνήµη µε την εντολή ps. Χρησιµοποιώντας τη man βρείτε άλλες χρήσιµες παραµέτρους της εντολής ps. 18. Εκτελέστε τα παρακάτω (σκοπός η δηµιουργία ενός απλού script): cat > new_script echo Your files are: ls echo Today is: date ^d Επιβεβαιώστε ότι όλα έγιναν σωστά: cat new_script Ελέγξτε τα δικαιώµατα του αρχείου: ls l new_script ώστε τα δικαιώµατα εκτέλεσης στο αρχείο:chmod +x new_script Ελέγξτε και πάλι τα δικαιώµατα: ls l Εκτελέστε το script: new_script ή./new_script 19. ηµιουργήστε ένα script µε το όνοµα arguments, ως εξής: cat > arguments echo hello echo $1 echo $2 echo $3 echo $* echo $# ^d Κάντε το αρχείο εκτελέσιµο και «τρέξτε το» ως./arguments ως./arguments giorgos maria dimitrhs Τι παρατηρείτε; 20. ηµιουργήστε ένα script που θα εµφανίζει το πραγµατικό όνοµα του χρήστη που προσδιορίζεται ως όρισµα.. Επίσης θα βρίσκει όλα τα αρχεία που ανήκουν στο συγκεκριµένο χρήστη ψάχνοντας όλο το δέντρο του συστήµατος αρχείων. cat > myscript finger $1 find / -user username print ^d Οµοίως τα υπόλοιπα, ώστε το αρχείο να είναι εκτελέσιµο Σελίδα 5 από 38

21. ηµιουργήστε δύο εκτελέσιµα αρχεία µε όνοµα dir1 και mycd από τα οποία το πρώτο: - Θα εµφανίζει τις βασικές πληροφορίες για το όρισµα (µέγεθος, ηµεροµηνία δηµιουργίας, δικαιώµατα, όνοµα, κατάλογος ή εκτελέσιµο) - Όλα τα περιεχόµενα αρχεία αν το όρισµα είναι κατάλογος, ενώ η δεύτερη θα αλλάζει κατάλογο σύµφωνα µε το όρισµά της και θα ενηµερώνει τον χρήστη για τη πλήρη διαδροµή του νέου καταλόγου και συνοπτικά για το περιεχόµενό του, παράδειγµα. pwd /usr/users/giorgos mycd exercises/exrc2 /usr/users/giorgos/exercises/exrc2 & file1 file2 22. Γράψτε script το οποίο όταν εκτελείται θα: εµφανίζει το όνοµα του χρήστη, την ηµεροµηνία και το τερµατικό (tty) που χρησιµοποιείται. 23. Γράψτε script το οποίο όταν εκτελείται : ηµιουργεί τη διπλανή δοµή δένδρου υποκαταλόγων στο home directory: Την dir1 εµφανίζει και τη διαγράφει. dir2 dir3 24. (α) ηµιουργήστε ένα σύνδεσµο του αρχείου mycd σε άλλον υποκατάλογο (π.χ. τον..). Εξετάστε τις ιδιότητες του συνδέσµου µε την ls. Ποιος είναι ο αριθµός κόµβου (i-node) του αρχείου; Ποιος είναι ο αριθµός των συνολικών συνδέσµων προς αυτό; Με τη διαταγή find αναζητήστε τα αρχεία µε τον συγκεκριµένο αριθµό κόµβου. Τι παρατηρείτε; (β) Κρατήστε αντίγραφο του mycd στο mycd.bak (cp) και σβήστε το link που φτιάξατε. Ξαναφτιάξτε το link και σβήστε το αρχικό αρχείο. Τι παρατηρείτε; Επαναφέρετε το εφεδρικό µε όνοµα mycd (mv). (γ) ηµιουργήστε script που αναζητά (και εµφανίζει) αρχεία µε συγκεκριµένο αριθµό κόµβου που προσδιορίζεται ως παράµετρος (όρισµα). Σελίδα 6 από 38

3. ΑΝΑΚΑΤΕΥΘΥΝΣΗ - ΦΙΛΤΡΑ - ΤΑΞΙΝΟΜΗΣΗ VI GREP CUT SORT ECHO SH READ 1. Σηµειώστε ότι οι παράµετροι c και u, δίνουν αντίστοιχα το χρόνο τελευταίας τροποποίησης του i-κόµβου (όπως αλλαγή δικαιωµάτων, δηµιουργία συνδέσµων) και το χρόνο που το αρχείο προσπελάστηκε τελευταία. Συνήθως χρησιµοποιούνται µε τις παραµέτρους t και l. (Η ls l δίνει το χρόνο τελευταίας τροποποίησης του αρχείου). 2. ηµιουργείστε ένα directory µε όνοµα redirect. Εκεί, δηµιουργείστε ένα αρχείο µε όνοµα test1 και περιεχόµενο grammi1.ελέγξτε πόσα και ποια αρχεία και µε τι περιεχόµενο υπάρχουν. ώστε τις παρακάτω εντολές, ελέγχοντας κάθε φορά τα περιεχόµενα του directory και τα περιεχόµενα των αρχείων που κάνετε ανακατεύθυνση. Α. $ who > who_file $ cat who_file $ cat test1 > who_file $ cat who_file $ > who_file $ cat who_file $ ls > test2 $ cat test2 $ cat test1 test2 > test1kai2 $ cat test1kai2 $ ls $ who >> test1kai2 $ cat test1kai2 β. $ cat anyparkto 2>error_file $ ls $ cat error_file γ. $ ls > /dev/pts/03 δ. $ who wc $ cat test1kai2 wc -l $ who sort $ ls wc -l $ who sort > users $ sort < users > sorted_users 3. ώστε τις παρακάτω εντολές και περιγράψτε τι κάνουν: $ echo My name is George $ echo 'My name is George' $ echo * $ echo '*' $ echo "*" $ echo \* $ echo \\ $ echo date $ echo 'date' $ echo "date" $ echo `date` $ echo $TERM $ echo '$TERM' $ echo "$TERM" $ echo \$TERM $ echo " " $ echo \" $ echo ' ' $ echo \" $ echo "ls -l" $echo ls -l $echo 'ls -l' $ echo `ls -l` $ echo `date` $ echo "My terminal is $TERM" $ echo n "My terminal is $TERM (y/n)?" οκιµάστε και τις εξής: $ echo Geia soy > dev/tty05 $echo * $echo `pwd` ή $(pwd) $ echo ' >Epiloges >1. Add $echo * * * $var=hello $echo $var $var $var $echo there are `who wc l` users logged in ή $(who wc l) >2. Remove $echo the date is `date` ή $(date) >Epilogh [1-2]: 4. ώστε την εντολή env. Τυπώστε µε την echo µεταβλητές περιβάλλοντος όπως $TERM, $PATH, $LOGNAME, $USER κλπ. 5. Τυπώστε σε ένα αρχείο sysinfo (ανακατεύθυνση και echo) πέντε µεταβλητές περιβάλλοντος. Προσέξτε να µην σβήσετε τα προηγούµενα περιεχόµενα του αρχείου την δεύτερη και τις επόµενες φορές που θα του προσθέσετε δεδοµένα. 6. Στη περιοχή σας, δηµιουργείστε ένα εκτελέσιµο αρχείο µε όνοµα synenosi και τρεις παραµέτρους θέσης, οι δύο πρώτες θα αφορούν αρχεία που θα συνενωθούν στο τρίτο (cat $1 $2 > $3). Τρέξτε το και περιγράψτε τι κάνατε. 7. Για να συνεχίσετε µια εντολή στην επόµενη γραµµή χρησιµοποιήστε το χαρακτήρα \. οκιµάστε τα εξής: $echo one \ > two \ > three (εφόσον δεν υπάρχει άλλος χαρακτήρας \ υπονοείται ότι η εντολή τελείωσε) 8. ώστε τις παρακάτω εντολές και περιγράψτε τα αποτελέσµατα: a. $ date $ set `date` $ echo $1 $echo $3 $ echo $4 $ echo $4 $1 $ echo $# $echo $* $ echo $0 b. $ id $ set `id` $ echo $1 $echo $3 $ echo $4 $ echo $4 $1 $ echo $# $echo $* $ echo $0. Σελίδα 7 από 38

9. ώστε τις εντολές: $ met1=george $ set $ echo met1 $ echo $met1 $ unset met1 $ echo $met1 $ met1=a $ met2=b $ met3=c $ echo $met1$met2$met3 $ echo $met1 $met2 $met3 $ set $ name=george $ Name=Mary $ echo my name is $name and your name is $Name 10. ηµιουργείστε ένα εκτελέσιµο αρχείο µε όνοµα var_test µε περιεχόµενα και εκτελέστε το: clear echo n "Please enter value for variable 1:" read var1 echo Variable 1 value is: $var1 ; echo n "Press enter to exit" ; read break1 11. Στη µεταβλητή myname αποδώστε το όνοµά σας και τυπώστε το στην οθόνη. ώστε την εντολή sh και προσπαθήστε να τυπώσετε την myname ξανά. Τι παρατηρείτε; ώστε exit και στη συνέχεια export myname. Ξαναδώστε sh και τυπώστε την myname. ικαιολογήστε τις παρατηρήσεις σας. 12. ηµιουργείστε µε τον vi το αρχείο mail µε περιεχόµενα: George Pappas 12136 Peristeri 5757675 Nick Nikolaou 12232 Aigaleo 5314555 George Georgiou 11132 Athens 3245678 Helen Georgiou 12136 Peristeri 5748456 Nick Pappas 11223 Aigaleo 5324123 John Ioannou 13222 Athens 3245890 Helen Thanou 11132 N.Smyrni 9718345 13. οκιµάστε την εντολή cut µε τη παράµετρο c στο αρχείο mail. Π.χ. $cut c1-4 mail. Τι παρατηρείτε; 14. Βρείτε τις γραµµές του αρχείου που περιέχουν George, George Pappas, G στην αρχή της γραµµής, το χαρακτήρα Α που δεν ακολουθείται από t, σε ποια γραµµή υπάρχει Nick, πόσες γραµµές περιέχουν Nick, ποια αρχεία (όνοµα) στο τρέχοντα κατάλογο περιέχουν Nick (grep και παράµετροι). 15. Χρησιµοποιώντας την εντολή grep, απαντήστε στα παρακάτω ερωτήµατα: wq Είναι ο χρήστης x στο σύστηµα; esc Ποια αρχεία είναι directories Shift+:/s1/s2 Ποια η γραµµή του xuser στο αρχείο etc/passwd Το τερµατικό pts/03 είναι ενεργό; Εµφανίστε τη γραµµή που αφορά το tty1 από τον κατάλογο /dev Vi Editor 4j 4 γραµµές κάτω. ^D Μισή οθόνη κάτω (^F ολόκληρη). ^U Μισή οθόνη πάνω (^B ολόκληρη). dw ιαγραφή λέξης. 5 Οδηγεί 5 γραµµές κάτω. Shift+:/string Αναζήτηση του string. o/o ηµιουργία γραµµής πάνω ή κάτω από τη τρέχουσα. u Αναίρεση της τελευταίας εντολής. dw ιαγραφή λέξης. 2dd ιαγραφή 2 γραµµών. 0 Μετακίνηση στην αρχή της γραµµής. $ Μετακίνηση στο τέλος της γραµµής. Y ιάσωση της γραµµής στο clipboard. P Επικόλληση. q! Εγκατάλειψη του vi χωρίς αποθήκευση. Εγκατάλειψη µε αποθήκευση. Περιβάλλον εντολών. i, a Εισαγωγή ή προσθήκη χαρακτήρων. Αντικατάσταση του string s1 µε το s2. Σελίδα 8 από 38

16. Ταξινοµείστε το παραπάνω αρχείο: Ως προς το Επώνυµο, ως προς επώνυµο και όνοµα, ως προς ταχ. Κώδικα σε φθίνουσα σειρά, ως προς την οδό, ως προς το επώνυµο και ταχ. Κώδικα, ως προς επώνυµο και όνοµα µε απαλοιφή διπλών εγγραφών. 17. Εµφανίστε τα αρχεία της περιοχή σας ταξινοµηµένα Ως προς τον owner, ως προς group, ως προς permissions, ως προς owner και µέγεθος, ως προς owner και το group, ως προς ηµεροµηνία και ώρα. 18. Γράψτε script µε το όνοµα myinfo που εµφανίζει τους χρήστες που είναι συνδεδεµένοι στο σύστηµα ταξινοµηµένους κατά την ώρα εισόδου τους στο σύστηµα, κατά user name σε φθίνουσα σειρά & κατά tty σε φθίνουσα σειρά. 19. Χρησιµοποιώντας τις εντολές grep και wc, γράψτε script µε το όνοµα myutil που: - Εµφανίζει πόσοι είναι συνδεδεµένοι στο σύστηµα και το όνοµά τους αρχίζει από osi. - Εµφανίζει πόσα αρχεία είναι εκτελέσιµα. - Εµφανίζει ποια αρχεία στην περιοχή σας αρχίζουν µε το χαρακτήρα Α. - Εµφανίζει πόσα αρχεία δηµιουργήθηκαν συγκεκριµένο µήνα στην περιοχή σας. - Βρίσκει και εµφανίζει το πλήθος των αρχείων σε κατάλογο (που δίνεται ως παράµετρος) που περιέχουν τη λέξη shell. 20. ηµιουργείστε ένα εκτελέσιµο αρχείο testmetablhtwn2 το οποίο όταν τρέχει θα σας ζητά να πληκτρολογήσετε τα στοιχεία ταυτότητάς σας, και κατόπιν θα τα εµφανίζει στοιχισµένα αφού καθαρίσει την οθόνη 21. ηµιουργείστε ένα εκτελέσιµο αρχείο testmetablhtwn3 το οποίο όταν τρέχει θα σας ζητά να πληκτρολογήσετε τo όνοµα και το επώνυµό σας και αφού καθαρίσει την οθόνη θα σας εµφανίζει τα εξής: Το όνοµά σου είναι Γιάννης Παππάς. Είσαι ο χρήστης xxxxxxxxxxxx. Το σύστηµα που χρησιµοποιείς είναι τύπου xxxxxxxxxxx. Πάτα enter για συνέχεια 22. ηµιουργείστε ένα εκτελέσιµο αρχείο eisagogh το οποίο όταν τρέχει θα σας ζητά να πληκτρολογήσετε τo όνοµα το επώνυµο και το τηλέφωνο κάποιου, και θα προσθέτει µια εγγραφή της µορφής: όνοµα, επώνυµο, τηλέφωνο στο τέλος του αρχείου datafile. 23. Γράψτε script που δέχεται παραµετρικά τα ονόµατα δύο αρχείων, τα συγκρίνει και εµφανίζει µόνο τις γραµµές που αυτά διαφέρουν (όχι τις όµοιες). Τα παρακάτω είναι ιδιαίτερα χρήσιµα. Εκτελέστε πρώτα sh Μεταφορά στην επόµενη γραµµή (\n): οκιµάστε: $echo one\ntwo\nthree $echo skip a\n\nline Παραµονή στην ίδια γραµµή (\c): οκιµάστε: $echo stay on this line\c. Μετακίνηση στην επόµενη θέση tab (\t): οκιµάστε: $echo 1\t2\t3\t4\t5. (µετακίνηση κατά 8 θέσεις κάθε φορά). Σελίδα 9 από 38

4. ΕΝΤΟΛΕΣ TEE, AWK 1. Υπάρχουν περιπτώσεις όπου η έξοδος µιας εντολής πρέπει να σταλεί ταυτόχρονα σε ένα αρχείο (για να εξεταστεί αργότερα) και σε µια άλλη εντολή. Αυτό µπορεί να γίνει µε την εντολή tee. οκιµάστε για παράδειγµα το εξής: $ ls tee my_files wc c Ποια εντολή πρέπει να δώσουµε ώστε η έξοδος της who να τοποθετηθεί σε ένα αρχείο µε το όνοµα f_who και µια ταξινοµηµένη της έξοδος να τοποθετηθεί στο αρχείο sorted_who; Τι ακριβώς κάνει η εντολή: $ who grep icsd00 tee icsd_users wc -l 2. Η εντολή awk ψάχνει αρχεία γραµµή προς γραµµή ελέγχοντας για συγκεκριµένα πρότυπα. Μπορεί να ενεργήσει πάνω στις γραµµές που ταιριάζουν µε τα πρότυπα µε διαφόρους τρόπους. Μπορεί επίσης να ψάξει και να κάνει ενέργειες επάνω σε συγκεκριµένα πεδία (fields) µιας γραµµής και είναι ικανή για αριθµητικές όσο και για αλφαριθµητικές λειτουργίες. Η awk επίσης παρέχει δοµές ελέγχου (if, while, for) όπως οι παραδοσιακές γλώσσες προγραµµατισµού. 3. οκιµάστε το εξής: $ who awk {print $1} Η εντολή awk επιλέγει και εµφανίζει το πρώτο πεδίο της εξόδου της who. οκιµάστε $ who awk {print $2} 4. ηµιουργήστε ένα αρχείο µε το όνοµα food και περιεχόµενα: Milk dairy 2.00 Το κενό είναι ο προκαθορισµένος χαρακτήρας διαχωρισµού για Hamburger meat 2.75 την awk. οκιµάστε τώρα τις εντολές: Cheese dairy 1.50 $ awk /dairy/ {print $3} food ^d $ awk /Milk/ {print $0} food *ολόκληρο το record* 5. ηµιουργήστε ένα αρχείο staff_db µε περιεχόµενο το εξής: Name Type Unit_Price Quantity Taxstatus ΧΡΗΣΙΜΑ ΣΥΜΒΟΛΑ ------------------------------------------------------------------ Carrots veg.3 1 n ^ Ταίριασµα στην αρχή του δεδοµένου string. Milk Dairy.89 2 n $ Ταίριασµα στο τέλος του δεδοµένου string. [ ] Ταίριασµα µε έναν από τους περιεχόµενους. Magazine Sundry 1.50 1 y r1 r2 Ταίριασµα της έκφρασης r1 ή της r2. Cheese Dairy 1.39 1 n <, <=, >, >=, ==,!= Σύµβολα για συγκρίσεις. Sandwich Deli 1.89 2 y ~,!~ Σύµβολα για συγκρίσεις 2. Onions Veg.29 6 n!, &&, NOT, AND, OR αντίστοιχα (Boolean operators). Chicken Meat 2.89 2 n +, -, *, /, % Αριθµητικοί τελεστές (%=Ακέραιο υπόλοιπο). Fish meat 1.79 3 n NR Record Number. Floorwax Hshld 2.65 1 y NF Number of Fields in current Record. Melon Fruit.98 3 n OFS Output field separator (by default, one space). -F ηλώνει διαφορετικό διαχωριστικό από τα κενό και tab. Celery Veg.79 1 n -f Οι εντολές awk βρίσκονται στο αρχείο που προσδιορίζεται. Napkins hshld.49 6 y 6. ώστε τις εντολές και περιγράψτε το αποτέλεσµα: $ awk /Fish/ staff_db $ awk {print} staff_db $awk '/Cheese/ { print }' staff_db $ awk /C/ {print $2} staff_db $ awk /C/ {print $0} staff_db $ awk /C/ {print $2, $1} staff_db $ awk /^Ch/ staff_db $ awk /[MN]/ staff_db $ awk /^[MN]/ staff_db $ awk /[A-F,-]/ staff_db $ awk /[A-F] y/ staff_db awk '{print $1 }' staff_db awk '{ print $3 $1 }' staff_db awk '{ print $2,$4 }' staff_db awk '{ print $0 }' staff_db awk '$1~/^Ch/' staff_db awk $3>1 ' staff_db awk ' $3>1 && $3<= 2 ' staff_db awk ' ΝR == 3, ΝR == 6 ' staff_db $ awk $5 ~/y/ staff_db $ awk $5!~/y/ staff_db $ awk {print} /etc/passwd $ awk {print $2} /etc/passwd $ awk F: {print $2} /etc/passwd $ awk $1!~/C/ && $5 ~/y/ staff_db $ awk $4 ~/1/ $5 ~/y/ staff_db $ awk $4==1 staff_db $ awk $3>=0 && $3<=1 staff_db $ awk $3!~ /9$/ staff_db $ awk $5~/n$/` staff-db $ awk $2~/t$/ staff_db Σελίδα 10 από 38

7. ώστε τις εντολές και περιγράψτε το αποτέλεσµα: $ awk >/dairy/ {print $1} > staff_db 1) Στο αρχείο dairy τοποθετείστε το awk-πρόγραµµα: /Dairy/ {name= $1 price = $3 print name,price, Record Number= NR, Field number= NF} Οι ενέργειες που θέλουµε να εκτελεστούν πρίν και µετά το κυρίως πρόγραµµα awk δηλώνονται αντίστοιχα µε τις προτάσεις BEGIN και END και δώστε τη διαταγή: awk -f dairy staff_db. Τι παρατηρείτε; 2) Στο αρχείο dairy1 τοποθετείστε το awk-πρόγραµµα: /Dairy/ {name= $1 price = $3 printf %-10s, name ; printf %10.1f\n,price} και δώστε τη διαταγή: awk -f dairy1 staff_db. Τι παρατηρείτε; BEGIN {print The name and price for each of your items are: } { name = $1 price = $3 quantity = $4 total = price * quantity sum = sum + total print name, total } END {print the total cost of all items is: sum} 3) Σχολιάστε το αποτέλεσµα της awk -f fill staff_db, όπου fill το πρόγραµµα awk BEGIN {OFS = "\t "} {if ($2~/[vV]eg/) $2 = "vegetables" else if ($2~/[dD]el/) $2 = "delicatessen" else $2="other" print $1, $2 } Αλλάξτε την τελευταία γραµµή και χρησιµοποιώντας την printf να τυπώνετε πλήρεις προτάσεις που να περιέχουν και το Τaxstatus (π.χ. "Το είδος Χ είναι της κατηγορίας Υ και (δεν) υπόκειται σε φορολόγηση"). 4) $5 == y {price = $3; Το αρχείο taxes περιέχει τις εντολές: taxedprice = price + price *.065; printf %s %s\n, $1, taxedprice} Εκτελέστε µε $awk f taxes staff_db Σελίδα 11 από 38

8. ηµιουργήστε ένα αρχείο basi σε ένα directory awk_files της περιοχής σας µε περιεχόµενο τα εξής: (Epwnymo Onoma Ypsos Baros Ilikia Fylo όχι µέσα στο αρχείο) Pappas Nikos 1.75 77 27 M Pararas George 1.82 79 29 M Georgiou Iordanis 1.65 73 34 M Parara Irini 1.65 57 18 F Ioannou Eleni 1.72 62 33 F Alexiou Nikos 1.90 105 22 M Pappa Eleni 1.76 70 19 F Georgiou Irini 1.72 63 25 F Alexiou Niki 1.83 74 42 F Ioannou Nikos 1.87 88 37 M 9. ηµιουργείστε awk προγράµµατα στην ίδια περιοχή που να απαντούν στα παρακάτω ερωτήµατα και δώστε τους αντίστοιχα ονόµατα aw1, aw2, aw3, A. Σε κάθε πρόγραµµα θα τυπώνονται τίτλοι στην αρχή για τα αντίστοιχα πεδία που τυπώνονται και διακεκοµµένη γραµµή στο τέλος. 1. Ποιών το επώνυµο αρχίζει από P (τυπώνονται όλα τα στοιχεία). 2. Ποιών το επώνυµο αρχίζει από Α (τυπώνονται όλα τα στοιχεία). 3. Ποιών το επώνυµο αρχίζει από Α έως Ι (τυπώνονται όλα τα στοιχεία). 4. Ποιών το επώνυµο αρχίζει από Α ή P (τυπώνονται όλα τα στοιχεία). B. Σε κάθε πρόγραµµα θα τυπώνονται µόνο οι εγγραφές που ταιριάζουν στα ερωτήµατα. 5. Ποιών το ύψος είναι > 1.80 (τυπώνονται δίπλα-δίπλα επώνυµο, όνοµα, ύψος). 6. Ποιών το ύψος είναι >1.70 και <1.80 (τυπώνονται δίπλα-δίπλα επώνυµο, όνοµα, ύψος). 7. Ποιών το ύψος είναι <1.70 ή > 1.80 (τυπώνονται δίπλα-δίπλα επώνυµο, όνοµα, ύψος). 8. Ποιοι έχουν ηλικία 25 (τυπώνονται δίπλα-δίπλα επώνυµο, όνοµα, ηλικία). 9. Ποιοι έχουν ηλικία από 20 έως 30 (τυπώνονται δίπλα-δίπλα επώνυµο, όνοµα, ηλικία). 10. Ποιοι είναι άρρενες (τυπώνονται δίπλα-δίπλα επώνυµο, όνοµα, φύλο). 11. Ποιών το επώνυµο αρχίζει από P και είναι πάνω από 1.70 (τυπώνονται δίπλα-δίπλα επώνυµο, όνοµα, ύψος). 12. Ποιοι είναι άνδρες πάνω των 30 (τυπώνονται δίπλα-δίπλα επώνυµο, όνοµα, ηλικία). Γ. Εκτυπώστε µόνο τα ονόµατα των χρηστών και το τερµατικό που είναι συνδεδεµένοι (µε who).. Τυπώστε το αρχείο βάση αφήνοντας µια κενή γραµµή για κάθε εγγραφή. Ε. Τυπώστε τα στοιχεία της κάθε εγγραφής µε µορφή: Επώνυµο: xxxxxxx Όνοµα: xxxxxx Ύψος: ddd Βάρος: ddd Ηλικία: ddd Φύλο: x Z. Φτιάξτε αντίστοιχα προγράµµατα awk που να τυπώνουν: 1. Τον µέσο όρο του ύψους των ανδρών. 2. Το µέσο όρο βάρους και ηλικίας όλων των ατόµων της βάσης. 3. Το µέσο όρο βάρους των γυναικών. {i = NF while (i > 0) { printf %s, $i i -- } printf \n } Τι ακριβώς κάνουν αυτά τα δύο awk προγράµµατα στο αρχείο staff_db ή στο αρχείο basi { for (i = NF; i > 0 ; i-- ) printf %s, $i printf \n } Σελίδα 12 από 38

5. ΑΣΚΗΣΕΙΣ Εκτελέστε τις παρακάτω εντολές. Τι ακριβώς κάνουν; who awk '{ print $5 }' who awk '{ print "User " $1 " is connected on terminal " $2}' *** άλλες πληροφορίες πρέπει να περικλείονται σε διπλά εισαγωγικά *** grep gkamb /etc/passwd awk -F: '{print "Home Dir for:" $1 " is: " $6}' ls -l awk '{print NR ": " $0}' ls -lf awk '{print $5 "\t" $9}' sort -rn more ls -l awk '{total = total + $5} END {print total "used in " NR " files"}' who awk '{print $1 " is " length($1) " characters long"}' who awk '{if ($1 == "csxxxx") print}' grep -c cs02 /etc/passwd ls -F file <όνοµα αρχείου> **** Εντολή αναγνώρισης των τύπων αρχείων **** rm i *** ιαγραφή κατόπιν επιβεβαίωσης *** Βρείτε µε µια εντολή ποια αρχεία στην περιοχή σας είναι commands text {file * grep "commands text"}. Γράψτε εντολή που εµφανίζει τα 5 πιο µικρά σε µέγεθος αρχεία της περιοχής σας (κάθε γραµµή εξόδου να περιέχει το όνοµα του αρχείου και το µέγεθός του χωρισµένα µε tab). Γράψτε εντολή awk που εµφανίζει το πλήθος των χρηστών του αρχείου /etc/passwd που το login name τους είναι ακριβώς 4 χαρακτήρες. Γράψτε εντολή awk που εµφανίζει πόσα ονόµατα λογαριασµών έχουν µήκος κάθε δυνατό αριθµό χαρακτήρων. BEGIN { for (i=1;i<9;i++) count[i]=0 } { n=length($1) count[n]=count[n]+1 } END { for (i=1;i<9;i++) print "there are "count[i]" users with "i" characters login name" } Σελίδα 13 από 38

6. ΕΠΕΚΤΑΣΗ ΒΑΣΙΚΩΝ ΕΝΤΟΛΩΝ 1. Η παράµετρος m (mode) επιτρέπει τη δηµιουργία directory µε συγκεκριµένα permissions. Για παράδειγµα δοκιµάστε: $mkdir m 700 new_dir. 2. Περισσότερα για την εντολή find. Σύνταξη: find όνοµα διαδροµής κριτήριο ενέργειες -name Αναζήτηση µε το όνοµα του αρχείου. -user Αναζήτηση µε το όνοµα του χρήστη. -group Αναζήτηση µε το όνοµα της οµάδας. -type (d, b, c, p, f) Αναζήτηση µε τον τύπο του αρχείου. -links n Αναζήτηση µε βάση τον αριθµό των συνδέσµων. -size n Αναζήτηση µε βάση το µέγεθος του αρχείου σε blocks = 512 bytes. -perm Αναζήτηση µε βάση τον τύπο των αδειών του αρχείου. (Παράδειγµα: u=rwx, g=rx, o=rx) -atime n Αναζήτηση µε βάση τον αριθµό ηµερών πριν από τις οποίες προσπελάστηκε το αρχείο. -mtime n Αναζήτηση µε βάση τον αριθµό ηµερών πριν από τις οποίες τροποποιήθηκε το αρχείο. -ctime n Αναζήτηση µε βάση τον αριθµό ηµερών πριν από τις οποίες δηµιουργήθηκε το αρχείο Παραδείγµατα: $find. name file2 print (το print θα εµφανίσει το path των αρχείων που ταιριάζουν) $find / -atime +100 print exec rm {} \; (το exec επιτρέπει την εκτέλεση εντολής στα αρχεία που θα βρεθούν, ενώ τελειώνει µε κενό\; Τα {} αντιπροσωπεύουν τα αρχεία που βρέθηκαν). $find /usr -atime +100 ok rm {} \; (το ok σηµαίνει ότι και το exec αλλά µε επιβεβαίωση). $find. atime +30 atime 60 exec mv {}./old \; (η στο 2 ο atime αντιπροσωπεύει το λογικό AND). $find /usr/nikos user chris name art[1-5] print $find. name n* o name t* print (το o αντιπροσωπεύει το λογικό OR). $find /! -name t* print (το σύµβολο! αντιπροσωπεύει το λογικό NOT). Οι παρενθέσεις έχουν ειδική σηµασία για το shell και γι αυτό το λόγο πρέπει να προηγείται το σύµβολο \ (escape character). Γενικά θα παρατηρήσετε γενικά πως ο χαρακτήρας \ αφαιρεί την ειδική σηµασία από τον επόµενό του. Οι χαρακτήρες \; ηλώνουν που τελειώνει η εντολή exec. +n σηµαίνει > n, -n < n, n ακριβώς n. 3. Πώς βλέπω το χώρο σε blocks (1 block = 512 bytes) που καταλαµβάνουν τα αρχεία µου; Εντολή du (disk usage). Επίσης η εντολή df (disk free) εµφανίζει τον ελεύθερο χώρο στο δίσκο. 4. Περισσότερα για την εντολή ps. -e εµφανίζει πληροφορίες για όλες τις διεργασίες όχι µόνο για αυτές του τερµατικού µας. -d εµφανίζει πληροφορίες για διεργασίες που δεν είναι group leaders (sh). -f (full) πλήρη λίστα πληροφοριών. -l (long) εµφανίζει εκτεταµένη λίστα πληροφοριών. -t (terminal) εµφανίζει τις διεργασίες που σχετίζονται µε συγκεκριµένο τερµατικό. -u εµφανίζει τις διεργασίες συγκεκριµένου χρήστη. Γράψτε script που αναζητά διεργασίες µε βάση κάποιο λεκτικό που προσδιορίζεται ως παράµετρος. Π.χ. αν αναζητώ διεργασίες των φοιτητών του 2 ου έτους το λεκτικό µπορεί θα ήταν icsd02*. Το script πρέπει να αποθηκεύει µόνο τις πληροφορίες που αφορούν το UID και το PID (1 κενό ως διαχωριστικό µεταξύ των στηλών) σε ένα αρχείο µε το όνοµα junk1. Μπορείτε να αλλάξετε το διαχωριστικό σε 1 tab; 5. SED (Stream Editor). Γράψτε εντολή που διαγράφει τη δεύτερη γραµµή του αρχείου staff_db. $sed 2 d staff_db (για τις γραµµές από 1 έως 10 δοκιµάστε $sed 2,10 d staff_db). $sed s/dairy/dairy/ staff_db (αντικαθιστά (substitute) τη λέξη Dairy µε DAIRY). Παρατηρήστε ότι τα αρχικά αρχεία δεν µεταβάλλονται απλώς έχω έξοδο στην οθόνη. $sed s/1/2/ staff_db $sed s/1/2/g staff_db Ποια η διαφορά τους; $sed 2 q staff_db (Τύπωσε τις 2 πρώτες γραµµές και µετά quit). $sed /Fish/ q staff_db (Στο πρώτο «ταίριασµα» µε Fish quit). $sed /^$/ d staff_db ( ιέγραψε τις κενές γραµµές αν υπάρχουν σηµειώστε ότι το σύµβολό ^ σηµαίνει την αρχή της γραµµής και το $ σηµαίνει το τέλος της υπονοείται ενδιάµεσα τίποτα). Σελίδα 14 από 38

Γράψτε script που βρίσκει αρχείο, που το όνοµά του προσδιορίζεται ως παράµετρος, ξεκινώντας από το ΗΟΜΕ directory και διαγράφει την πρώτη γραµµή του. Το αποτέλεσµα πρέπει να τοποθετηθεί στο αρχείο junk. Γράψτε script που: 1. Θα ζητάει από το χρήστη α. Το όνοµα ενός αρχείου β. ένα λεκτικό προς αντικατάσταση και γ. ένα λεκτικό που θα αντικαταστήσει το προηγούµενο. 2. Θα εντοπίζει το αρχείο και θα αντικαθιστά όλα τα λεκτικά που δόθηκαν στο β µε το λεκτικό που δόθηκε στο γ. 6. ηµιουργήστε το παρακάτω αρχείο: MICHAEL COLLINS 441-987-321 USA STEPHEN MICHAEL 55-789-456 ENGLAND MICHAEL HUGHES 888-352-731 USA MICHAEL MAN 556-345-786 AFRICA Α. Βρείτε πόσες φορές υπάρχει το όνοµα MICHAEL και σε ποιες γραµµές (να εµφανίζεται µόνο ο αριθµός της γραµµής). Β. Σε ποιες (αριθµός) γραµµές δεν υπάρχει η χώρα USA (παράµετρος v). Γ. Ταξινοµήστε το αρχείο κατά επώνυµο και χώρα. 7. Εµφανίστε σελίδα σελίδα όλα τα PID των διεργασιών του συστήµατος που περιέχουν στο PID τους τον αριθµό 2. 8. Εµφανίστε τις τελευταίες γραµµές των αρχείων του home directory που είτε ταιριάζουν µε το λεκτικό s*, είτε αρχίζουν από t ή Τ. 9. Να εµφανίσετε και να γράψετε σε αρχείο µε επέκταση sh, τους χρήστες που υπάρχουν στο αρχείο συνθηµατικών (/etc/passwd) και χρησιµοποιούν τον ίδιο φλοιό µε εσάς. 10. Γράψτε script που εντοπίζει όλα τα αρχεία ενός χρήστη (παράµετρος) που βρίσκονται στο δέντρο του directory (παράµετρος) και αλλάζει τα δικαιώµατα προσπέλασής τους σε 700. 11. Γράψτε script που θα δηµιουργεί ένα directory (παράµετρος) µε συγκεκριµένα δικαιώµατα που δίνονται επίσης σαν παράµετρος. 12. Γράψτε script που εµφανίζει µόνο τις ηµεροµηνίες του µήνα και του έτους (που προσδιορίζεται ως παράµετρος) που έχουµε Τετάρτη ή Παρασκευή. 13. Γράψτε script που θα τυπώνει τις πρώτες n γραµµές των αρχείων που ανήκουν σε συγκεκριµένο χρήστη που προσδιορίζεται ως παράµετρος (το n είναι επίσης παραµετρικό). 14. Γράψτε ένα script που διαγράφει όλα τα αρχεία και τους καταλόγους (οπουδήποτε στο σύστηµα και αν βρίσκονται αυτά) που ανήκουν σε κάποιο χρήστη. Το όνοµα του χρήστη δίνεται σαν παράµετρος. 15. Γράψτε script που κάνει το prompt του συστήµατος να είναι το path του εκάστοτε working directory. (π.χ. αν το working directory είναι το /users/kostas, το prompt πρέπει να είναι της µορφής /users/nikos>). 16. Γράψτε script που θα εµφανίζει ποιες διεργασίες τρέχουν σε ένα σύστηµα UNIX και θα επιτρέπει τον τερµατισµό κάποιας απ αυτές µε επιλογή του χρήστη. 17. Σηµειώστε επίσης για την tail ότι χωρίς παράµετρο εµφανίζει τις 10 τελευταίες γραµµές ενός αρχείου (όπως και η head τις 10 πρώτες). Αν χρησιµοποιηθεί µε παράµετρο θετικό ή αρνητικό αριθµό, π.χ. $tail 20 file1, τότε το + σηµαίνει διάβασε από την αρχή του αρχείου και το από το τέλος του. Π.χ. για να εµφανίσετε τις 20 τελευταίες γραµµές ενός αρχείου file1 εκτελέστε: $tail 20 file1, ενώ για να µετρήσετε από τη γραµµή 35 µέχρι το τέλος του file1 εκτελέστε: $tail +35 file1. 18. Περισσότερα για την grep. $grep George papas mail Αναζήτηση του string George papas στο αρχείο mail. $grep ^G mail Αναζήτηση των γραµµών του mail που ξεκινούν από G. $grep A[^t] mail Αναζήτηση των γραµµών του mail που ξεκινούν από Α και δεν ακολουθούνται από t. $grep n Nick mail Σε ποια γραµµή υπάρχει το string Nick. $grep c Nick mail Πόσες γραµµές περιέχουν το string Nick. $grep l Athens./* Εµφανίζει τα ονόµατα των αρχείων που περιέχουν Athens στο τρέχον dir. $grep v Nick mail Αναζήτηση των γραµµών που δεν περιέχουν το string Nick. $grep * files *** All files in the current directory *** $grep * files $grep [tt]hose file $grep i those file *** ignore case *** $grep [0..9] file $grep l test *.c wc l $grep n test *.c sort r $grep *z /etc/passwd *** ΠΡΟΣΟΧΗ: Σηµαίνει 0 ή περισσότερες εµφανίσεις του χαρακτήρα z *** Σελίδα 15 από 38

7. ΕΝΤΟΛΕΣ ΕΠΙΛΟΓΗΣ IF ΚΑΙ CASE ΕΠΑΝΑΛΗΠΤΙΚΕΣ ΑΣΚΗΣΕΙΣ ΕΝΤΟΛΗΣ AWK 1. Τα αναγνωριστικά των µεταβλητών (όπως και τα ονόµατα των αρχείων του UNIX) µπορούν αν αποτελούνται από οποιουσδήποτε χαρακτήρες εκτός από το χαρακτήρα / και τους µεταχαρακτήρες του UNIX (*, $, ^, [, ],.,?,,, `, &, ). 2. Οι µεταβλητές δηλώνονται και παίρνουν την αρχική τους τιµή µε το σύµβολο =. Παραδείγµατα: $mark = /usr/bin ή $term = <ENTER> (κενή ακολουθία) ή $name = John noname. $save_date = `date` Η τιµή µιας µεταβλητής δίνεται µε το να προηγηθεί ο χαρακτήρας $ του ονόµατός της. Παραδείγµατα: $ls l $mark τυπώνει τα ονόµατα όλων των αρχείων που βρίσκονται στον κατάλογο /usr/bin. Αν µια µεταβλητή ακολουθείται από άλλους χαρακτήρες, τότε ο γενικός συµβολισµός είναι: $(<όνοµα µεταβλητής>), για παράδειγµα: $cat $(mark)/extend Τυπώνει τα περιεχόµενα του καταλόγου /usr/bin/extend. Μερικές µεταβλητές, όπως είδαµε, έχουν ειδική σηµασία (είναι προκαθορισµένες) για το φλοιό (TERM, HOME, PS1 ). 3. Εντολή test (έλεγχος γεγονότων για χρήση σε scripts σε συνδυασµό µε την if) test r file Αλήθεια αν το αρχείο υπάρχει και είναι readable test w file Αλήθεια αν το αρχείο υπάρχει και είναι writable test x file Αλήθεια αν το αρχείο υπάρχει και είναι executable test f file Έλεγχος για απλά αρχεία (regular files) test d file Αλήθεια αν το αρχείο υπάρχει και είναι directory test z string Αλήθεια αν το string έχει µήκος 0 test n string Αλήθεια αν το string έχει µη µηδενικό µήκος if test r info # θα µπορούσε να γραφεί και [ -r info ] then cat info else echo You can t read that file fi if test $SSH_TTY = /dev/pts/4 then echo This is Anna s Terminal else echo Unknown Terminal fi Για συγκρίσεις χρησιµοποιούνται οι τελεστές που αναφέρονται στην εντολή if παρακάτω. 4. Εντολές επιλογής if εντολές if test f αρχείο #(αν υπάρχει το αρχείο εκτέλεσε την c1 διαφορετικά την c2) then εντολές then c1 # (θα µπορούσε να γραφεί και σαν [ -f αρχείο ] elif εντολές else c2 then εντολές fi if [ $1 ] (Αν δόθηκε τιµή για τη µεταβλητή $1) else εντολές fi then name=$1 else echo Please enter the login name you want to check Λογικοί Τελεστές read name fi -eq ή == (ίσο - equal) echo The number of times $name is logged on is: = (ίσο για strings) who grep $name wc l -gt (greater than) -lt -ge -le -ne -o (or) -a (and)! (not) (less than) (greater or equal) (less or equal) (not equal) hour = `date cut c12-13` if [ $hour ge 0 a $hour lt 12 ] then echo Good morning elif [ $hour lt 18 ] then echo Good afternoon else echo good Night fi Τι κάνουν τα παραπάνω script; Σελίδα 16 από 38

Debugging Scripts $sh x script_name $sh v script_name case µεταβλητή in string1) λίστα εντολών1;; string2) λίστα εντολών1;;. *) διαφορετικά # Τίποτα από τα παραπάνω λίστα εντολών* esac 5. Κωδικοί εξόδου εντολών (0 255) cat <<++ MAIN MENU 1) Print working directory 2) List all files in current directory 3) Print today s date and time Please enter your selection $LOGNAME: ++ #Το <<++ οδηγεί την cat να χρησιµοποιήσει τις γραµµές που read selection case $selection in 1) pwd;; 2) ls l;; 3) date;; *) echo Unknown command;; esac #ακολουθούν (και µέχρι την εµφάνιση του ++ στην αρχή µιας γραµµής) σαν την #είσοδο της. Το ++ µπορεί να αντικατασταθεί από οποιοδήποτε string π.χ. EOF # Experiment with command exit status (Γραµµή σχολίων) echo "The next command should fail and return a status greater than zero" ls /nosuchdirectory echo "Status is $? from command: ls /nosuchdirectory" (Με τη βοήθεια της µεταβλητής echo "The next command should succeed and return a status equal to zero" $? µπορώ να εξετάσω τον κωδικό ls /tmp εξόδου µιας εντολής. Μόνο το 0 echo "Status is $? from command: ls /tmp" σηµαίνει επιτυχία). # Use an if block to determine if a command succeeded echo "This mkdir command fails unless you are root:" mkdir /no_way if [ "$?" -ne 0 ] then # Complain and quit echo "Could not create directory /no_way...quitting" exit 1 # Set script's exit status to 1 fi echo "Created directory /no_way" 6. Εφαρµογές Επανάληψη Α. Να γραφεί εντολή που να χρησιµοποιεί την γλώσσα awk, η οποία να τυπώνει τα ονόµατα των χρηστών που είναι συνδεδεµένοι στο σύστηµα και την ώρα εισόδου τους, ταξινοµηµένους κατά φθίνουσα σειρά. # An example with the case statement # Reads a command from the user and processes it echo "Enter your command (who, list, or cal)" read command case "$command" in who) echo "Running who..." who;; list) echo "Running ls..." ls;; cal) echo "Running cal..." cal;; *) echo "Bad command, your choices are: who, list, or cal";; esac exit 0 Β. Να γραφεί πρόγραµµα ή εντολή awk που τυπώνει τα ονόµατα (login names & real names) των χρηστών του συστήµατος ταξινοµηµένα κατ αύξουσα σειρά σελίδα - σελίδα. Γ. Να γραφεί awk πρόγραµµα που µετρά το συνολικό µέγεθος (σε Μbytes) των αρχείων (δεν περιλαµβάνει directories) που περιέχονται σε ένα ευρετήριο, που δίνεται ως παράµετρος. Ελέγξτε πρώτα αν το ευρετήριο υπάρχει.. Χρησιµοποιώντας τις εντολές ls, grep και rm, γράψτε εντολή που διαγράφει όλα τα αρχεία ενός directory (µετά από επιβεβαίωση για κάθε ένα απ αυτά) εκτός από αυτά που καταλήγουν σε p (.p). Η παράµετρος για να γίνει «διαλογική» η rm είναι η i. 7. Ως γνωστό η cal δέχεται µόνο αριθµητικά το µήνα π.χ: $cal 2 2002. Γράψτε shell script που βελτιώνει την εντολή, έτσι ώστε να δουλεύει και µε τα λεκτικά αναγνωριστικά των µηνών (jan ή Jan, feb, apr, may, jun, jul, aug, sep, oct, nov, dec). Π.χ. αν ο χρήστης δώσει $mycal jun 2003 ουσιαστικά θα εκτελείται η cal 6 2003. Το script σας πρέπει να ελέγχει τον αριθµό των ορισµάτων που εισάγει κάθε φορά ο χρήστης και ανάλογα να αποφασίζει. 8. Γράψτε shell script που δέχεται το όνοµα ενός directory σαν όρισµα και: - Θα ελέγχει αν το directory υπάρχει. - Αν δεν υπάρχει θα το δηµιουργεί. - Θα αντιγράφει τα αρχεία που ξεκινούν από t ή Τ και δεν ακολουθούνται από e, του directory που βρίσκεστε στο directory όρισµα.. Σελίδα 17 από 38

9. Γράψτε shell script που δέχεται ως παράµετρο το όνοµα ενός χρήστη και ελέγχει αν αυτός έχει συνδεθεί στο σύστηµα και ποιες διεργασίες εκτελεί. Φροντίστε το script σας να κάνει έλεγχο αν δόθηκε µια παράµετρος. 10. Γράψτε ένα shell script που συγκρίνει τα πλήθη αρχείων που περιέχονται σε δύο ευρετήρια. Τα ονόµατα των ευρετηρίων δίνονται αρχικά σαν παράµετροι. Το script πρέπει να ελέγχει αν δόθηκαν 2 παράµετροι, διαφορετικά πρέπει να τερµατίζει µε κατάλληλο µήνυµα που αφορά τη σωστή σύνταξη του script. 11. Γράψτε ένα shell script που θα δέχεται το όνοµα ενός αρχείου σαν παράµετρο και θα το εκτυπώνει εφόσον αυτό έχει περισσότερες από 30 γραµµές. Το script ελέγχει αν κλήθηκε µε µια παράµετρο διαφορετικά πρέπει να τερµατίζει µε κατάλληλο µήνυµα που αφορά τη σωστή σύνταξη του. Η εντολή για εκτύπωση είναι η lp η οποία σε συνδυασµό µε τη παράµετρο d (destination), επιτρέπει την εκτύπωση σε συγκεκριµένο εκτυπωτή. Για να δοκιµάσετε το script χρησιµοποιήστε αντί για την lp, εντολή µε έξοδο στην οθόνη. 12. Γράψτε ένα shell script που διαγράφει τις 10 τελευταίες γραµµές ενός αρχείου που δίνεται ως παράµετρος. Το script θα πρέπει να ελέγχει αν δόθηκε παράµετρος, αν το αρχείο υπάρχει και αν έχει τουλάχιστον 10 γραµµές. Σελίδα 18 από 38

8. ΠΑΡΑ ΕΙΓΜΑΤΑ sort -u file_name *** Αφαιρεί επαναλαµβανόµενες ίδιες γραµµές στην έξοδο *** uniq file_name *** Συγκρίνει κάθε γραµµή µε την προηγούµενή της. Αν είναι ίδιες η uniq δεν παραθέτει την 2η γραµµή *** Χρήσιµες παράµετροι της uniq -u παραθέτει µόνο τις γραµµές που δεν επαναλαµβάνονται. -d παραθέτει τις γραµµές που επαναλαµβάνονται. -c πόσες φορές εµφανίζεται η κάθε γραµµή στο αρχείο. Παραδείγµατα: grep, tail, head, sed, read, if grep "^cs00040[^a-z]" /etc/passwd grep cs02 /etc/passwd sed -e 's/:/ /' *** Σύνταξη: s/old/new/flags *** grep cs02 /etc/passwd sed -e 's/:/ /g' who head -10 sed '1,3d' grep john /etc/passwd sed 's/john/jonny/g;s/:/ /g who sed 's/pts/on Terminal /;s/jun/logged in Jun/' awk -F: '{print $7}' /etc/passwd sort uniq -c *** Πόσοι διαφορετικοί φλοιοί χρησιµοποιούνται *** head -4 test *** Οι πρώτες 4 γραµµές του αρχείου *** who head -5 tail -3 test *** Οι τελευταίες 3 γραµµές του αρχείου *** head -12 test tail -3 *** Θα εµφανιστούν 10η, 11η & 12η γραµµή του αρχείου *** read animal name place Dog Tzak the killer Home *** Μόνο το Tzak εκχωρείται στη µεταβλητή name *** read animal name place Dog Tzak\ the\ killer Home *** Now everything is OK! το κενό θα διαβαστεί ως χαρακτήρας *** if [ -f $1 ] **Απαιτούνται κενά µεταξύ [ ] και των υπολοίπων then echo $1 is a regular file elif [-d $1 ] then echo $1 is a directory else echo $1 is not a regular file or a directory fi -w αληθές αν υπάρχει το αρχείο και είναι εγγράψιµο. -x αληθές αν υπάρχει και είναι εκτελέσιµο. -r αληθές αν υπάρχει και είναι αναγνώσιµο. #!/bin/ksh (Korn Shell) echo "Enter a Filename $LOGNAME: \c" read fname if [ "$fname" ] Σελίδα 19 από 38

then if [ -f $fname ] then more $fname elif echo "File: $fname does not exist" fi else echo "Next Time enter a valid file name - bye" fi Σελίδα 20 από 38

9. ΙΑΦΟΡΕΣ ΜΕΤΑΞΥ ΤΩΝ QUOTES, INTEGER ARITHMETIC ΚΑΙ ΠΑΡΑ ΕΙΓΜΑΤΑ Single quote grep Nick Pappas mail2 grep [NnGH]* Georgiou mail2 echo one two three four *** 4 arguments *** echo one two three four *** 1 argument *** dir = $HOME echo $dir echo $dir echo * echo * Double quote Λειτουργούν το ίδιο µε τα single quotes αλλά δεν είναι τόσο περιοριστικά δηλαδή τα: Dollar sign $ Back quotes ` Back slashes \ εν αγνοούνται όταν βρίσκονται µέσα σε double quotes. phrase = Good morning, he said echo $phrase x = * echo $x echo $x echo $x H µεταβλητή x υποκαθίσταται από το *. Όµως το * δεν υποκαθίσταται από όλα τα αρχεία. οκιµάστε και echo * και κατόπιν echo *. Backslash \ Το backslash είναι σαν να τοποθετώ single quotes γύρω από ένα χαρακτήρα. Εξαιρείται το backslash σαν τελευταίος χαρακτήρας µιας γραµµής (σηµαίνει ότι η γραµµή συνεχίζεται στην επόµενη). echo > *** Syntax error *** echo \> *** OK! *** x = * echo \$x echo \$x *** Το \ δεν αγνοείται µέσα σε double quotes *** command = one\ > two echo command *** Το \ σηµαίνει συνέχεια στην επόµενη γραµµή *** Back quote ` echo The time and date is: `date` ή echo The time and date is: $(date) echo Current working Dir is: `pwd` ή echo Current working Dir is: $(pwd) echo There are $(who wc l) users logged in now = $(date) ; echo $now ή now = `date` ; echo $now Integer Arithmetic $((expression)) *** Γενικός Τύπος *** b = 1 echo $((b=b+1)) j = 8 echo $((i=(i+10)*j)) i = $((i*5)) result = $((i>0 && i<=100)) *** Boolean *** Σελίδα 21 από 38

i = $((100 * 200 / 10)) j = $((i < 1000)) echo $i, $j Integer Arithmetic (Script) i = $1 j = $2 k = $((i+j)) echo $k echo $((k=2*k)) echo $((k<100)) Σελίδα 22 από 38

10. ΕΝΤΟΛΕΣ WHILE, FOR, UNTIL ΕΠΑΝΑΛΗΠΤΙΚΕΣ ΑΣΚΗΣΕΙΣ 1. Γενική σύνταξη εντολών επανάληψης: while [ έκφραση ] for var_name in word_list until [ έκφραση ] do do do λίστα εντολών λίστα εντολών λίστα εντολών done done done 2. Παραδείγµατα: leave=1 while [ $leave eq 1 ] do clear cat <<EOF MAIN MENU 1) Print working directory 2) List all files in current directory 3) Print today s date and time x) Exit Please enter your selection $LOGNAME: EOF read selection case $selection in 1) pwd;; 2) ls l;; 3) date;; x Χ) leave=2;; # = OR *) echo Unknown command;; esac sleep 2 # ώστε να προλάβω να δω την έξοδο done exit 0 for fn in file1 file2 do cp $fn $fn.bak done # η µεταβλητή fn θα πάρει # διαδοχικά τις τιµές file1, file2. echo Enter filenames to backup read fnames for fn in $fnames do cp $fn $fn.bak done count=1 while [ $count le 10 ] do echo $count count = `expr $count + 1` done until who grep icsdxxxxx do sleep 60 done Τι ακριβώς κάνει ; # Τι ακριβώς κάνει το παρακάτω script αν κληθεί µε παράµετρο το login ID σας; who awk {print $1} sort >./loglist$$ # τα $$ στο τέλος του αρχείου είναι το PID της εντολής # άρα κάθε φορά που εκτελώ το script θα δηµιουργούνται # µοναδικά αρχεία grpnum=`awk F: $1 == $1 {print $4} /etc/passwd` awk F: $4 == $grpnum {print $1} /etc/passwd \ sort >./grplist$$ comm. 12./grplist$$./loglist$$ rm./loglist$$./grplist$$ # εκτελέστε το script µε το δικό σας login ID σαν παράµετρο # Η εντολή comm ψάχνει δύο ταξινοµηµένα αρχεία για κοινές γραµµές και εµφανίζει 3 στήλες. Η πρώτη στήλη περιέχει γραµµές που βρέθηκαν µόνο στο 1 ο αρχείο. Η δεύτερη µόνο γραµµές που βρέθηκαν στο 2 ο αρχείο και η 3 η κοινές και στα 2 αρχεία γραµµές. Το 12 σηµαίνει «µην εµφανίζεις τις 1 & 2 στήλες». Σελίδα 23 από 38

3. Παραδείγµατα συνέχεια for filename in simple.sh variables.sh #εδώ βάλτε τα ονόµατα δύο αρχείων σας do echo "Variable filename is set to $filename..." ls -l $filename wc -l $filename done for filename in *.sh #αντικαταστήστε το pattern µε ότι εσείς θέλετε do echo "Variable filename is set to $filename..." ls -l $filename wc -l $filename done for text_file in sdsc.txt nlanr.txt #δοκιµάστε το µε δύο δικά σας αρχεία do echo "Editing file $text_file" sed -e 's/application/application/g' $text_file > temp mv -f temp $text_file done Ασκήσεις 1. (Επανάληψη) Τι συµβαίνει µε το παρακάτω shell script. ιορθώστε το. echo enter a file name: read $fname if [ -f fanme ] echo The content of fname: more fname else echo < no such file ; 2. Γράψτε shell script που «ξυπνάει» ανά 30 και διαγράφει όλα τα αρχεία.tmp που έχετε στην περιοχή σας, αφού πρώτα εµφανίσει επιβεβαίωση για καθένα απ αυτά. 3. Γράψτε shell script που «ξυπνάει» ανά 2 και ενηµερώνει συγκεκριµένο χρήστη (του οποίου το login ID δίνεται ως παράµετρος), πόσες φορές είναι συνδεδεµένος στο σύστηµα. 4. Γράψτε shell script που «ξυπνάει» ανά 5 και ενηµερώνει το διαχειριστή, ποιοι χρήστες (τα Login ID τους) συνδέθηκαν στο σύστηµα µια συγκεκριµένη ώρα (παράµετρος) που δίνεται στη µορφή π.χ 5:10 5. (Επαναληπτική). Σ ένα σύστηµα UNIX υπάρχουν 6 χρήστες, οι user1, user2 user6, µε home direcrories αντίστοιχα /users/user1. /users/user6. Οι user1 έως 3 ανήκουν στο group1, ενώ οι χρήστες user4 έως user6 ανήκουν στο group2. Ο system administrator θέλει να δώσει δικαίωµα µόνο στους χρήστες user1 user3 να εκτελούν το αρχείο /bin/xxx. Ποιες εντολές πρέπει να εκτελέσει ενώ βρίσκεται στο /. (η εντολή για αλλαγή του group που ανήκει ένα αρχείο ή directory είναι chgrp). 6. Γράψτε shell script που επιτρέπει σε κάποιο χρήστη να στείλει το ίδιο µήνυµα στους χρήστες user1, user2, user3 user6. Το script θα µπορούσε να αρχίζει κάπως έτσι: echo Write your message to be sent and press ctrl+d 7. Γράψτε ένα shell script που θα ενεργοποιείται κάθε 3 ώρες και θα διαγράφει τις 3 τελευταίες γραµµές όλων των αρχείων που τελειώνουν σε.c ή σε.p του χρήστη του οποίου το όνοµα θα δίνεται ως παράµετρος. (θα πρέπει να γίνεται έλεγχος αν τα αρχεία έχουν 3 ή περισσότερες γραµµές). Πώς θα εκτελέσουµε αυτό το script; 8. Γράψτε ένα shell script που ενεργοποιείται κάθε 10 λεπτά και αντιγράφει όλα τα αρχεία του τρέχοντος directory, στο directory που του έχει δοθεί ως παράµετρος. Θα πρέπει να ελεγχθεί αν τα directory υπάρχουν. 9. Γράψτε ένα shell script που εµφανίζει στην οθόνη τα login names και τα home directories των χρηστών που είναι logged in. Σελίδα 24 από 38

10. Γράψτε ένα shell script που θα στέλνει όποτε το καλούµε, µήνυµα σε όλους τους χρήστες που είναι logged in στο σύστηµα. Το µήνυµα θα είναι παράµετρος (κλήση: send_all good morning ). 11. Γράψτε ένα shell script που διακόπτει όλες τις processes εκτός του sh (του αρχικού), ενός χρήστη του οποίου το όνοµα δίνεται ως παράµετρος. Σελίδα 25 από 38

11. ΙΑΧΕΙΡΙΣΗ ΧΡΗΣΤΩΝ ΚΑΙ ΙΚΤΥΟΥ 1. Για να προστεθεί ένα χρήστης από το διαχειριστή του συστήµατος Linux θα πρέπει να δοθεί η εντολή useradd user_name και µετέπειτα να δοθεί στο νέο αυτό χρήστη ένα συνθηµατικό passwd user_name. Το συνθηµατικό αυτό θα πρέπει να αλλαχθεί από το νέο χρήστη µόλις συνδεθεί µε το σύστηµα (passwd). Εάν κάποιος χρήστης ξεχάσει το συνθηµατικό του τότε ο διαχειριστής µπορεί εύκολα να το αλλάξει µε την εντολή passwd user_name. ηµιουργήστε ένα χρήστη (για όνοµα βάλτε το µικρό σας και στο τέλος το πρώτο γράµµα του επιθέτου σας, για παράδειγµα JohnA) θέστε ως συνθηµατικό το όνοµα του (π.χ JohnA) και ύστερα αλλάξτε το σε 123@abs. ηµιουργία script το οποίο να δηµιουργεί ένα χρήστη να θέτει το συνθηµατικό του ίδιο µε το όνοµα του (Username) και να ορίζει ότι η διάρκεια ισχύος του συνθηµατικού είναι 2 βδοµάδες. 2. ηµιουργήστε ένα γκρουπ και θέστε σε αυτό τα ονόµατα ορισµένων φίλων σας. (groupadd group_name για τη δηµιουργία του γκρουπ). Για παράδειγµα µπορώ να δηµιουργήσω το γκρουπ friends και να επεξεργαστώ το αρχείο /etc/group προσθέτοντας το log in name µου και τα αντίστοιχα των φίλων µου έτσι ώστε η τελευταία γραµµή να είναι της µορφής friends:x:502:stan,pete,marie. Μπορείτε µε χρήση της οµάδας αυτής που δηµιουργήσατε να δώσετε δικαιώµατα σε ένα αρχείο που έχετε δηµιουργήσει. 3. Όταν ο διαχειριστής θέλει να απενεργοποιήσει ένα χρήστη µπορεί να το πράξει µε πολλούς τρόπους, µπορεί να κλειδώσει ένα χρήστη passwd peter -l, να τον διαγράψει userdel doomed_user_login_name, και να διαγράψει και επιπλέον να διαγράψει το προσωπικό του κατάλογο µαζί µε όλα τα αρχεία του rm -fr /home/doomed_user_login_name. Αρχικά κλειδώστε τον χρήστη που δηµιουργήσατε (µε u ο χρήστης ενεργοποιείται), ενεργοποιήστε τον ξανά και διαγράψτε τόσο το χρήστη µαζί µε τον κατάλογο του. Ποια η διαφορά ανάµεσα στις δύο εντολές ενεργοποίηση / διαγραφή γιατί χρειάζονται και οι δύο. 4. Η ρύθµιση ενός network interface στο Linux γίνεται µε την χρήση της εντολής ifconfig. Οι περισσότεροι υπολογιστές έχουν ένα µόνο ethernet interface το οποίο συµβολίζεται σαν eth0. Π.χ. Η εντολή ifconfig eth0 δείχνει τις ρυθµίσεις του δικτύου. Βλέποντας το εγχειρίδιο της εντολής να εκτελεστούν οι παρακάτω ενέργειες: 1) Ανάθεση IP σε 192.168.0.1 2) Αλλαγή της hardware διεύθυνσής της 3) Λειτουργία κάρτας σε promiscuous mode. Αν µία κάρτα δεν µπορεί να τεθεί σε promiscuous mode υπάρχει περίπτωση αυτή η έλλειψη να προκαλέσει µη σωστή εκτέλεση προγραµµάτων; Επιπλέον το σύστηµα µπορεί να δει σε µία ethernet πολλά network interfaces. Παράδειγµα eth0:0 Είναι αποδεκτή από σύστηµα συσκευή. οκιµάστε να δεσµεύσετε δύο ip διευθύνσεις σε µία κάρτα ethernet. Σηµείωση: Η ανάθεση διευθύνσεων θα πρέπει να γίνεται στο δίκτυο 192.168. διότι αλλιώς υπάρχει κίνδυνος δέσµευσης όλων των πόρων του δικτύου. 5. Για µπορέσουν τα πακέτα να δροµολογηθούν πρέπει να οριστεί και το routing table µέσω της εντολής route. Ο router για τις εγκαταστάσεις πολυµέσων είναι ο 195.251.160.254. Ενώ για το κτήριο Λυµπέρη 195.251.166.254. Να γραφεί η εντολή µε τα πλήρη στοιχεία που απαιτούνται, έτσι ώστε ο υπολογιστής να στέλνει τα πακέτα µέσω του router. Αλλάξτε την network address mask της κάρτας δικτύου σε 255.255.0.0 λειτουργεί το δίκτυο; Για ποιόν λόγο γίνεται αυτό; Για να είναι ευκολότερη η περιήγηση στο διαδίκτυο, γίνεται χρήση της υπηρεσίας DNS. Να γίνει καταχώρηση του nameserver (karvounis 195.251.160.5). Σηµείωση: Η καταχώρηση γίνεται σε αρχείο που περιέχεται στον κατάλογο /etc Σελίδα 26 από 38