Εργαστήριο ΤΟ ΛΕΙΤΟΥΡΓΙΚΟ ΣΥΣΤΗΜΑ UNIX Εισαγωγή Ξεκινάμε την εργαστηριακή μελέτη των Λειτουργικών Συστημάτων των Υπολογιστικών Συστημάτων εξετάζοντας αρχικά το λειτουργικό σύστημα Unix. Σκοπός του εργαστηρίου είναι να θυμηθούμε τη βασική δομή και βασικές εντολές διαχείρισης του συστήματος. Το λειτουργικό σύστημα UNIX Το UNIX (Uniplexed Information and Computing System) είναι ένα ισχυρό λειτουργικό σύστημα (με δυνατότητες multiuser, multitasking, και networking). Το UNIX δημιουργήθηκε στα εργαστήρια της Bell Labs της εταιρείας AT&T το 1970. Τα αρχεία του λειτουργικού συστήματος είναι κυρίως σε γλώσσα προγραμματισμού C, και ένας μικρός αριθμός σε συμβολική γλώσσα (assembly). Η ευρεία διάδοση του οφείλεται στο ότι είναι γραμμένο σε μια γλώσσα υψηλού επιπέδου με αποτέλεσμα να είναι εύκολα προσαρμόσιμο σε διαφορετικά συστήματα, και στο ότι είναι ένα αρκετά αξιόπιστο λειτουργικό σύστημα. Το UNIX λειτουργικό αποτελείται από τα παρακάτω επίπεδα: User Interface 1 1 Το Λειτουργικό Σύστημα Unix 2 Διαχείριση Αρχείων & Καταλόγων στο Unix 3 Προγραμματισμός στο Φλοιό C 4 Διεργασίες - Διαχείριση 5 Διεργασίες - Εκτέλεση Εντολών 6 Διεργασίες Επικοινωνία με Σωληνώσεις/Διοχέτευση 7 Διαχείριση Νημάτων 8 Συγχρονισμός Διεργασιών & Νημάτων (mutexes) 9 Συγχρονισμός Διεργασιών & Νημάτων (conditions) 10 Συγχρονισμός Διεργασιών & Νημάτων (semaphores) 11 Χρονοπρογραμματισμός και Διαχείριση Μνήμης 12 Διαδιεργασιακή Επικοινωνία - IPC Κυκλοφορούν διάφορες εκδόσεις του UNIX, όπως είναι η έκδοση System V που προέκυψε από την αρχική έκδοση της AT&T και η έκδοση BSD που αναπτύχθηκε από το Πανεπιστήμιο του Berkeley στην Καλιφόρνια. Υπάρχουν μια σειρά από παραλλαγές που βασίζονται στις δύο παραπάνω εκδόσεις, π.χ. οι εκδόσεις SunOS και Solaris της Sun, το SCO UNIX και το LINUX που είναι εκδόσεις του UNIX για PC και πολλές άλλες. Τα δύο βασικά χαρακτηριστικά του UNIX είναι: α) πολύ-επεξεργαστικό (multitasking), δηλαδή επιτρέπει την ταυτόχρονη εκτέλεση πολλών διεργασιών χωρίς η
εκτέλεση μιας διεργασίας να εμποδίζει την εκτέλεση των άλλων, και β) επιτρέπει την ταυτόχρονη σύνδεση στο σύστημα σε περισσότερους από έναν χρήστες (multi-user), οι οποίοι μπορούν να χρησιμοποιούν ακόμη και τα ίδια ακριβώς προγράμματα, χωρίς οι ενέργειες του ενός χρήστη να επηρεάζουν τις ενέργειες των άλλων. Παραδείγματα εντολών Ακολουθούν ορισμένα παραδείγματα βασικών εντολών. man <εντολή> εμφάνιση πληροφοριών σχετικά με την εντολή(π.χ. man ls) who εμφανίζει πληροφορίες για κάθε χρήστη που είναι συνδεδεμένος στο σύστημα date εμφάνιση της ημερομηνίας και ώρας. write <όνομα_χρήστη> αποστολή μηνύματος στο συνδεδεμένο χρήστη (τερματισμός:[ctrl]+d) pwd εμφανίζει τον τρέχοντα κατάλογο. cd <dir> μετάβαση στον κατάλογο <dir> ο οποίος γίνεται ο τρέχων κατάλογος (ένα επίπεδο πίσω: cd.. και με cd ή cd ~ επιστρέφει στον προσωπικό μας κατάλογο). mkdir <dir> δημιουργία καταλόγου (π.χ. mkdir OSLabs) rmdir <dir> διαγραφή του καταλόγου (θα πρέπει να είναι κενός). cp <file1> <file2> αντιγραφή αρχείων (για αντιγραφή αρχείων από άλλο κατάλογο στον τρέχοντα χρησιμοποιείται η τελεία (.). mv <file1> <file2> μετακίνηση/μετονομασία αρχείων rm <file1> <file2>... διαγραφή αρχείων ls <dir> εμφάνιση των περιεχομένων καταλόγου (π.χ. ls /user/tests) chmod [u/g/o] +/- r/w/x <file> μεταβολή των δικαιωμάτων πρόσβασης αρχείου (π.χ. chmod g+x file) cat <file> εμφάνιση των περιεχομένων αρχείου (εμφάνιση των περιεχομένων ανά οθόνες: cat <file> more) more <file> εμφάνιση των περιεχομένων αρχείου (π.χ. more test.c) passwd αλλαγή συνθηματικού finger <όνομα/email-address χρήστη> εμφάνιση πληροφοριών για το χρήστη exit / [CTRL]+D / logout έξοδος από το σύστημα. Path μεταβλητή καθορισμού της διαδρομής (των καταλόγων) αναζήτησης εκτελέσιμων αρχείων (π.χ. PATH=:./bin/:/usr/bin:/user/OSLabs/bin) Ο επεξεργαστής κειμένου (editor) vi Το πρόγραμμα vi είναι ένας επεξεργαστής κειμένου του UNIX, ο οποίος έχει δύο καταστάσεις λειτουργίας: την κατάσταση εντολών, όπου ότι πληκτρολογούμε θεωρείται εντολή και την κατάσταση εισαγωγής κειμένου, όπου ότι πληκτρολογούμε θεωρείται κείμενο και εμφανίζεται κανονικά στην οθόνη. Για να ξεκινήσουμε το περιβάλλον του vi, πληκτρολογούμε: vi <όνομα_αρχείου> Αν το αρχείο υπάρχει ήδη, θα ανοιχτεί για επεξεργασία, διαφορετικά, θα δημιουργηθεί ένα νέο κενό αρχείο. Ακολουθούν ορισμένες βασικές εντολές του vi. Σημειώσεις του μαθήματος Λειτουργικά Συστήματα 2
Εισαγωγή κειμένου: A εισαγωγή κειμένου στο τέλος της τρέχουσας γραμμής I "" στην αρχή της τρέχουσας γραμμής o "" σε νέα γραμμή κάτω από την τρέχουσα γραμμή O "" σε νέα γραμμή πάνω από την τρέχουσα γραμμή Μετακίνηση δρομέα: ή k μετακίνηση του δρομέα μια γραμμή επάνω ή j "" μια γραμμή κάτω ή h "" έναν χαρακτήρα αριστερά ή l "" έναν χαρακτήρα δεξιά b "" μια λέξη αριστερά w "" μια λέξη δεξιά 0 "" στην αρχή της γραμμής $ "" στο τέλος της γραμμής Κύλιση κειμένου: [CTRL] + B κύλιση του κειμένου μια οθόνη πίσω [CTRL] + F "" μια οθόνη εμπρός [CTRL] + U "" μισή οθόνη πίσω [CTRL] + D "" μισή οθόνη εμπρός Διαγραφή κειμένου: x διαγραφή του χαρακτήρα όπου βρίσκεται ο δρομέας X "" στα αριστερά του δρομέα dw διαγραφή χαρακτήρων έως το τέλος της λέξης db "" έως την αρχή της λέξης d$ "" έως την τέλος της γραμμής d0 "" έως την αρχή της γραμμής dg "" έως το τέλος του αρχείου dd διαγραφή της τρέχουσας γραμμής Αποθήκευση αρχείου και έξοδος:(esc SHIFT : και κάποια από τις ακόλουθες εντολές) w Αποθήκευση των αλλαγών χωρίς έξοδο από το vi (ή με άλλο όνομα w <file>) wq Αποθήκευση των αλλαγών και έξοδος από το vi. q Έξοδος από το vi q! Έξοδος από το vi χωρίς να αποθηκεύονται οι αλλαγές που έχουμε κάνει. Ανακατεύθυνση και διοχέτευση Πολλές φορές όταν μια εντολή από μόνη της δεν είναι αρκετή για την επίλυση ενός προβλήματος, μια άλλη λύση είναι ο συνδυασμός των εντολών. Αυτό μπορεί να γίνει είτε με ανακατεύθυνση (redirection) είτε με διοχέτευση/διασωλήνωση (piping). Όταν αρχίζει η εκτέλεση ενός προγράμματος/εντολής, ο φλοιός ανοίγει ταυτόχρονα τρία αρχεία που συνδέονται με το πρόγραμμα αυτό. Τα αρχεία αυτά είναι: Η προκαθορισμένη είσοδος (standard input, stdin) που είναι εξορισμού το πληκτρολόγιο του τερματικού με περιγραφέα αρχείου το 0 (file descriptor 0). Η προκαθορισμένη έξοδος (standard output, stdout) που είναι εξορισμού η οθόνη του τερματικού με περιγραφέα αρχείου το 1. Η προκαθορισμένη έξοδος λαθών (standard error output, stderr) που είναι πάλι η οθόνη του τερματικού με περιγραφέα αρχείου το 2. Σημειώσεις του μαθήματος Λειτουργικά Συστήματα 3
Ο χρήστης μπορεί οποιαδήποτε στιγμή να επαναπροσδιορίσει την είσοδο και την έξοδο ενός προγράμματος χρησιμοποιώντας κάποιον από τους μεταχαρακτήρες >/< ή >>/<< που παρέχει ο φλοιός. Ανακατεύθυνση της εισόδου/εξόδου Η ανακατεύθυνση αλλάζει την εξορισμού εκχωρήσεις για την τυπική είσοδο και έξοδο. Ο τελεστής > κάνει το όνομα του αρχείου που ακολουθεί τον τελεστή να γίνει η νέα τυπική έξοδος, και ο τελεστής < κάνει το όνομα του αρχείου που ακολουθεί τον τελεστή να γίνει η νέα τυπική είσοδος. Π.χ. με την εντολή cat θα μπορούσαμε να δημιουργήσουμε (create) αρχείο με δεδομένα που δίνονται από το πληκτρολόγιο ως εξής: π.χ. cat > filename. Δηλαδή με τον τελεστή προσαρμογής της κατεύθυνσης στέλνουμε τα περιεχόμενα σε ένα νέο αρχείο με το όνομα filename. Θα μπορούσαμε επίσης να προσθέσουμε (append) στα ήδη περιεχόμενα ενός αρχείου με τον τελεστή >>. Π.χ. date >>filename. Άλλο παράδειγμα είναι η ταξινόμηση των περιεχομένων ενός αρχείου που δίνονται με ανακατεύθυνση στην εντολή sort ως εξής: sort < filename. Διοχέτευση/διασωλήνωση Με τη διοχέτευση (pipe) δίνεται η δυνατότητα σε προγράμματα/εντολές να επικοινωνήσουν με άλλα προγράμματα/εντολές. Μια διοχέτευση χρησιμοποιεί το σύμβολο. Μια διοχέτευση κάνει την έξοδο ενός προγράμματος είσοδο για ένα άλλο. Π.χ. με την εντολή ls θα μπορούσαμε να κάνουμε διοχέτευση των περιεχομένων ενός καταλόγου στην εντολή εκτύπωσης lpr (τα οποία θα λάμβανε σαν είσοδο) για εκτύπωσή τους ως εξής: ls lpr. Το ίδιο θα μπορούσε να επιτευχθεί και ως εξής: π.χ. ls >/dev/lp1. Επίσης η παραπάνω διοχέτευση των περιεχομένων του τρέχοντος καταλόγου στον εκτυπωτή για εκτύπωση θα μπορούσε να γίνει, δημιουργώντας ενδιάμεσα και ένα αρχείο στο δίσκο (με την εντολή tee) με αυτά τα περιεχόμενα του καταλόγου. Αυτό μπορεί να γίνει ως εξής: ls tee ls.out lpr Μερικές άλλες χρήσιμες εντολές διαχείρισης του συστήματος είναι οι παρακάτω: man [command]: παρέχει βοήθεια για την σύνταξη των εντολών του Unix ps [options]: εμφάνιση των διεργασιών (processes) που 'τρέχουν' στο σύστημα kill [options] pid: τερματισμός κάποιας διεργασίας με κωδικό pid find [options] [filename]: εντοπισμός αρχείων whereis [options] [filename]: εντοπισμός αρχείων locate [options] [filename]: εντοπισμός αρχείων fgrep [searchstring] [filename]: εντοπισμός αλφαριθμητικών σε αρχείο tar [options]: συμπίεση και αποσυμπίεση αρχείων mount: εμφάνιση των τύπων συστημάτων αρχείων και τις αντιστοιχήσεις τους Σημειώσεις του μαθήματος Λειτουργικά Συστήματα 4
df: εμφανίζει στατιστικά στοιχεία για όλα τα αντιστοιχισμένα (mounted) συστήματα αρχείων groups: εμφάνιση της ομάδας/ομάδων στις οποίες ανήκετε bash: εκκίνηση της γραμμής εντολών του φλοιού bash (Bourne shell) csh: εκκίνηση της γραμμής εντολών του φλοιού csh (C shell) ksh: εκκίνηση της γραμμής εντολών του φλοιού K (Korn shell) cd home man mkdir man ls ps -eaf find /projects -name '*.s' -print locate *.ps whereis oldfile Εργαστήριο 1: Ασκήσεις Οι εργαστηριακές ασκήσεις που ακολουθούν αφορούν απλά προβλήματα διαχείρισης του λειτουργικού συστήματος Unix για εξοικείωση, τις οποίες ο σπουδαστής μπορεί να επιλύσει ακολουθώντας τα βήματα στα παραδείγματα που δόθηκαν σε αυτό το εργαστήριο. 1.1 Να μελετήσετε με την εντολή man τη σύνταξη και τα παραδείγματα ορισμένων εκ των βασικών εντολών που αναφέρθηκαν. 1.2 Να δημιουργήσετε στον προσωπικό σας κατάλογο ένα νέο κατάλογο με το όνομα OSLabs., και να καθορίσετε τα δικαιώματα πρόσβασης. 1.3 Στην προηγούμενη άσκηση (1.2), στον κατάλογο OSLabs να δημιουργήσετε το δικό σας υποκατάλογο bin και να ενημερώσετε τη μεταβλητή PATH. 1.4 :Να χρησιμοποιήσετε τον editor vi για να εισάγετε περιεχόμενα σε ένα αρχείο κειμένου με το όνομα test., το οποίο θα αποθηκεύσετε στον προσωπικό σας κατάλογο, στον υποκατάλογο OSLabs. 1.5 Εξετάστε τους παρακάτω συνδυασμούς εντολών: date > date.out ls wc -w cat test > test1 cat part1 part2 tee a total lpr cat $* pr lpr Σημειώσεις του μαθήματος Λειτουργικά Συστήματα 5