ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι Λύβας Χρήστος chrislibas@ssl-unipi.gr Μανουσόπουλος Χρήστος cman@unipi.gr Αρχική επιμέλεια Πιτροπάκης Νικόλαος και Υφαντόπουλος Νικόλαος
>_ ΔΕΣΜΕΥΜΕΝΑ ΟΝΟΜΑΤΑ +- Υπάρχουν ορισμένες μεταβλητές, οι οποίες έχουν πληροφορίες για τη λειτουργία ορισμένων προγραμμάτων με άμεση συνέπεια, να μην μπορούν να χρησιμοποιηθούν από εμάς. +- Κάποιες από αυτές είναι: +- USER Το όνομα του χρήστη +- HOME Το home directory του χρήστη +- SHELL Το κέλυφος που χρησιμοποιεί +- JAVA Η διαδρομή που έχει εγκατασταθεί η java +- RANDOM Γεννήτρια τυχαίων αριθμών +- Προκειμένου να πάρουμε την τιμή των μεταβλητών αυτών τις χρησιμοποιούμε όπως και τις υπόλοιπες
>_ ΔΗΜΙΟΥΡΓΙΑ SCRIPT +- Προκειμένου να εκτελέσουμε μία σειρά εντολών πρέπει να δημιουργήσουμε ένα αρχείο script το οποίο να τις περιέχει. +- Κάθε αρχείο script ξεκινάει με το όνομα του φλοιού που είναι γραμμένο, ώστε να διερμηνευτεί ανάλογα. Π.χ #!/bin/bash #!/bin/bourne Ποιο φλοιό χρησιμοποιεί το σύστημά μας? Hello world script (δημιουργούμε το αρχείο test.sh και γράφουμε τις παρακάτω γραμμές) #!/bin/bash echo hello world +- $chmod +x test.sh, Κάνουμε το αρχείο εκτελέσιμο +-./test.sh, εκτελούμε το αρχείο
>_ ΕΙΔΙΚΕΣ ΜΕΤΑΒΛΗΤΕΣ +- Υπάρχουν κάποιες μεταβλητές οι οποίες είναι ειδικού σκοπού καθώς εκτελούν συγκεκριμένες εργασίες. Αυτές είναι: +- $0 Το όνομα του script +- $n Ο αριθμός των ορισμάτων του script. π.χ $1 το πρώτο, $2 το δεύτερο κτλ +- $# Ο αριθμός των ορισμάτων του script +- $@ Όλα τα ορίσματα του script +- $? Η κατάσταση εξόδου που επέστρεψε η τελευταία εντολή
>_ ΕΙΣΟΔΟΣ ΤΙΜΩΝ +- Μάθαμε πώς να εμφανίζουμε τιμές μεταβλητών και μηνύματα. Πρέπει όμως να μπορούμε να εισάγουμε και δεδομένα. Για την εισαγωγή δεδομένων από το χρήστη χρησιμοποιούμε την εντολή read. +- Συντάσσεται read [επιλογές] όνομα μεταβλητής ή μεταβλητών +- Αν χρησιμοποιήσουμε την [-p] έχουμε τη δυνατότητα να εμφανίσουμε κείμενο, το οποίο θα προτρέψει για την καταχώρηση των τιμών. π.χ read -p doste to onoma sas name echo $name αλλιώς με την πεπατημένη echo doste to onoma sas read name echo $name
>_ ΑΝΑΚΑΤΕΥΘΥΝΣΗ ΕΙΣΟΔΟΥ ΕΞΟΔΟΥ (1/6) +- Προκαθορισμένη είσοδος είναι το stdin (πληκτρολόγιο) +- Προκαθορισμένη έξοδος είναι το stdout (οθόνη) +- Προκαθορισμένη έξοδος για διαγνωστικά μηνύματα είναι stderr (οθόνη) +- Για ορισμένες εντολές του Unix (π.χ cat, lpr, grep, wc, sort, head, tail κτλ) τα ορίσματα που είναι ονόματα αρχείων είναι προαιρετικά, υπό την έννοια ότι αν παραλείπονται, χρησιμοποιείται η προκαθορισμένη είσοδος (το τέλος του stdin δίνεται από το πληκτρολόγιο με το χαρακτήρα ^D) π.χ wc ^D
>_ ΑΝΑΚΑΤΕΥΘΥΝΣΗ ΕΙΣΟΔΟΥ ΕΞΟΔΟΥ (2/6) +- wc: μετράει λέξεις +- wc [επιλογές] +- wc I: μετράει γραμμές +- wc m: μετράει χαρακτήρες +- wc file: δίνουμε όνομα αρχείου που θέλουμε να μετρήσουμε λέξεις Π.χ wc myfile.txt 7=γραμμές 6=λέξεις 40=χαρακτήρες
>_ ΑΝΑΚΑΤΕΥΘΥΝΣΗ ΕΙΣΟΔΟΥ ΕΞΟΔΟΥ (3/6) +- Ανακατεύθυνση του stdin < Είσοδος από αρχείο και όχι από το πληκτρολόγιο +- Ανακατεύθυνση του stdout > Ανακατεύθυνση εξόδου σε αρχείο. Αν δεν υπάρχει το αρχείο δημιουργείται. Αν υπάρχει τότε αντικαθίσταται. +- Ανακατεύθυνση του stdout με προσάρτηση >> Ανακατεύθυνση εξόδου σε αρχείο. Το αρχείο αν δεν υπάρχει δημιουργείται. Αν υπάρχει, τα δεδομένα εισέρχονται μετά την τελευταία γραμμή.
>_ ΑΝΑΚΑΤΕΥΘΥΝΣΗ ΕΙΣΟΔΟΥ ΕΞΟΔΟΥ (4/6) +- π.χ ls- la > list.txt Το αποτέλεσμα (έξοδος) της ls-la αποθηκεύεται στο αρχείο list.txt +- π.χ cat list.txt > list_bak.txt Το αποτέλεσμα (έξοδος) της cat αποθηκεύεται στο αρχείο list_bak.txt
>_ ΑΝΑΚΑΤΕΥΘΥΝΣΗ ΕΙΣΟΔΟΥ ΕΞΟΔΟΥ (5/6) Αριθμός Όνομα Περιγραφή 0 stdin Standard input 1 stdout Standard output 2 stderr Standard error +- Το 1 μπορεί να παραλειφθεί, οπότε συνήθως δεν το γράφουμε. π.χ w > whoisonline.txt η εντολή αυτή είναι ίδια με w 1> whoisonline.txt +- Στην περίπτωση της ανακατεύθυνσης λάθους rm something.txt 2> error.log η εντολή αυτή είναι ίδια με rm /etc/something.txt &>error.log
>_ ΑΝΑΚΑΤΕΥΘΥΝΣΗ ΕΙΣΟΔΟΥ ΕΞΟΔΟΥ (6/6) +- Παραδείγματα cat /etc/passwd >> log wc l /etc/resolv.conf >> servers Ποιο είναι το περιεχόμενο του αρχείου τεστ? cat /etc/passwd >> test.txt cat /etc/papersize >> test.txt whoami > test.txt
>_ ΕΝΤΟΛΗ ΕΠΙΛΟΓΗΣ (1/7) +- Απλή επιλογή -Σύνταξη: if [συνθήκη] then <εντολές> else <εντολές> fi π.χ x=50 y=40 if [ $x==$y ] then echo x and y are equal else echo x and y are not equal fi
>_ ΕΝΤΟΛΗ ΕΠΙΛΟΓΗΣ (2/7) +- πολλαπλή επιλογή Σύνταξη: if [συνθήκη] then <εντολές> elif [συνθήκη] then <εντολές> else <εντολές> fi Το τελευταίο else μπορεί να παραληφθεί
>_ ΕΝΤΟΛΗ ΕΠΙΛΟΓΗΣ (3/7) Σχεσιακοί τελεστές: +- -eq (equal) = +- -ne (not equal)!= +- -gt (greater than) > +- -lt (less than) < +- -ge (greater or equal) >= +- -le (lower or equal) <=
>_ ΕΝΤΟΛΗ ΕΠΙΛΟΓΗΣ (4/7) Τελεστές ακολουθίας χαρακτήρων: +- == Ίσο, a==b +-!= Διάφορο, a!=b +- -z Έλεγχος αν είναι μηδενικού μήκους. Αν ναι επιστρέφει true +- -n Έλεγχος αν είναι μη μηδενικού μήκους. Αν ναι επιστρέφει true
Λογικοί τελεστές: >_ ΕΝΤΟΛΗ ΕΠΙΛΟΓΗΣ (5/7) +- Ισχύει η συνθήκη a ή η συνθήκη b π.χ if [συνθήκη a ] [συνθήκη b] +- && Ισχύει η συνθήκη a και η συνθήκη b π.χ if [συνθήκη a ] && [συνθήκη b] +- -o ισχύει το a ή το b π.χ [ $a gt $b -o $a ne $b ] +- -a ισχύει το a και το b π.χ [ $a gt $b -a $c -gt $b ]
>_ ΕΝΤΟΛΗ ΕΠΙΛΟΓΗΣ (6/7) Π.χ.: x=1 y=2 if [ $x eq $y ] [ $x lt $y ] then echo x <= y else echo x > y fi x=2 y=3 if [ $x ne $y ] && [ $x lt $y ] then echo x <= y else echo x > y fi
Π.χ. πρόσβασης >_ ΕΝΤΟΛΗ ΕΠΙΛΟΓΗΣ (7/7) valid_password=1234 echo Please enter your password read password if [ $password eq $valid_password ]; then echo You have Access!! else echo Access denied!! fi
If at first you don't succeed, call it version 1.0