157
ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ & ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΣΕΜΙΝΑΡΙΟ UNIX Solaris

ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

  • Upload
    others

  • View
    11

  • Download
    0

Embed Size (px)

Citation preview

Page 1: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ

ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ

& ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ

ΣΕΜΙΝΑΡΙΟ

UNIX Solaris

Page 2: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

2

Η σειρά των σημειώσεων, που ακολουθεί, χωρίζεται σε δύο μέρη. Στο πρώτο μέρος οι

σημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου και είναι οι βασικές

οδηγίες χρήσης του UNIX γιά έναν end-user. Στο δεύτερο μέρος οι σημειώσεις καλύπτουν την

ύλη των υπολοίπων 12 ωρών του σεμιναρίου και είναι οι οδηγίες χρήσης γιά τον system

administrator ενός συστήματος UNIX καθώς επίσης και την ύλη δικτύων η οποία καλύφθηκε

στο σεμινάριο. Τις σημειώσεις αυτές έγραψαν οι Δήμητρα Κακλαμάνη, Τάσος Ντελόπουλος,

Μπάμπης Μαρκόπουλος Δημήτρης Καλογεράς και Λεβόν Σουκισιάν, διδάκτορες

Ηλεκτρολόγοι Μηχανικοί του Ε.Μ.Π. και ο Νάσος Παπακώστας μεταπτυχιακός σπουδαστής

του Τμήματος Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών του Ε.Μ.Π. Η

προσαρμογή από SunOS 4.x σε Solaris 2.x και οι προσθήκες για SVR4 έγιναν από τον Σπύρο

Ιωάννου.

Το σεμινάριο αυτό ήταν στo πλαίσιo της συνεχιζόμενης εκπαίδευσης και

πραγματοποιήθηκε τόσο στο θεωρητικό όσο και στο εργαστηριακό του μέρος στο

Υπολογιστικό Κέντρο του Τμήματος Ηλεκτρολόγων Μηχανικών και Μηχανικών

Υπολογιστών (πρώην Εργαστήριο Μ.Ο.Π. Πληροφορικής) του Ε.Μ.Π.. Την οργάνωση κι

ευθύνη του σεμιναρίου καθώς επίσης και τη γενική επιμέλεια των σημειώσεων είχε ο Δρ.

Λεβόν Σουκισιάν. Τέλος, επιστημονικός υπεύθυνος του σεμιναρίου ήταν ο Αν. Καθηγητής του

Τομέα Πληροφορικής του Τμήματος Ηλεκτρολόγων Μηχανικών και Μηχανικών

Υπολογιστών του Ε.Μ.Π κ. Τίμος Σελλής.

2

Page 3: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

3

Εισαγωγή

Το σύστημα UNIX γεννήθηκε και αναπτύχτηκε στα AT&T Bell Laboratories. Από τότε

που έκανε ουσιαστικά την εμφάνισή του (στο τέλος της δεκαετίας του '60), εξαιτίας των

ιδιαίτερων χαρακτηριστικών που διαθέτει έναντι άλλων λειτουργικών συστημάτων

(δυνατότητα multiuser και multitasking, σημαντική ανεξαρτησία από τη μηχανή στην οποία

"τρέχει", ευρύτατο φάσμα βοηθητικών προγραμμάτων (utilities), δυνατότητα τεχνικής

διοχέτευσης (pipe lining), ιεραρχική δομή του συστήματος αρχείων του), έχει "κερδίσει"

εντυπωσιακά τον ερευνητικό και εμπορικό κόσμο.

Οι σημειώσεις του μέρους αυτού απευθύνονται στον απλό χρήστη, προϋποθέτοντας,

βέβαια, ότι υπάρχει κάποιος άλλος System Administrator και είναι δομημένες ως εξής:

Στο Κεφάλαιο 1 παρουσιάζονται οι βασικές αρχές του UNIX και ο τρόπος λειτουργίας τους.

Επεξηγείται η δομή του συστήματος, καθώς και το σύστημα αρχείων του.

Στα επόμενα Κεφάλαια (2-10) δίνονται οι πιό βασικές εντολές του φλοιού γιά έναν χρήστη

του UNIX, ταξινομημένες σε κεφάλαια ανάλογα με το αποτέλεσμα της εκτέλεσής τους και

αλφαβητικά μέσα σε κάθε κεφάλαιο. Στο Κεφάλαιο 2 υπάρχουν ορισμένες γενικές εντολές

(σύνδεση - αποσύνδεση από το σύστημα κ.λ.π.). Το Κεφάλαιο 3 παρουσιάζει μια εντολή με την

οποία γίνονται συγκρίσεις και αριθμιτικές πράξεις. Στο Κεφάλαιο 4 δίνονται διάφοροι τρόποι

ηλεκτρονικής επικοινωνίας. Τα Κεφάλαια 5 και 6 ασχολούνται με εντολές επεξεργασίας και

διαχείρισης αρχείων αντίστοιχα. Το Κεφάλαιο 7 περιλαμβάνει τις βασικές εντολές

εισόδου/εξόδου. Το Κεφάλαιο 8 δίνει εντολές χρήσιμες για έναν προγραμματιστή. Το

Κεφάλαιο 9 αναλύει πώς αλλάζουν τα δικαιώματα προστασίας (permissions) ενός αρχείου. Το

Κεφάλαιο 10 αποτελεί μια σύντομη αναφορά στον visual editor (vi) και το Κεφάλαιο 11

αναφέρεται στο φλοιό C και στις ειδικές εντολές που αναγνωρίζει.

Βέβαια, οι σημειώσεις αυτές προϋποθέτουν ότι ο αναγνώστης τους αφενός έχει

παρακολουθήσει τις παραδόσεις των σχετικών σεμιναρίων και αφετέρου θα ανατρέχει συχνά

στο Reference Manual της μηχανής στην οποία θα δουλέψει, γιατί ο κάθε κατασκευαστής

προσφέρει τη δική του έκδοση του UNIX, συμβατή τουλάχιστον στο επίπεδο εντολών με το

AT&T system V, αλλά διευρυμένη πολλές φορές με επιπλέον επιλογές (options) γιά

μεγαλύτερη ευελιξία.

Για την κατανόηση του τρόπου γραφής των κεφαλαίων 2-9, είναι απαραίτητες οι

παρακάτω διευκρινήσεις:

Με παχειά γραφή είναι γραμμένοι οι χαρακτήρες που πρέπει να πληκτρολογηθούν από το

χρήστη ως έχουν και με πλάγια γραφή οι αποκρίσεις του συστήματος στην οθόνη. Με

υπογράμμιση είναι γραμμένοι οι χαρακτήρες που πρέπει να αντικατασταθούν από το χρήστη

3

Page 4: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

4

με άλλους κατάλληλους και μετά να πληκτρολογηθούν. Μέσα σε [ ] έχει τεθεί ό,τι είναι

προαιρετικό στη σύνταξη της εντολής. Τα ... υπονοούν την επανάληψη της λέξης που

προηγείται, ενώ τα - - - υπονοούν απλά τη συνέχιση της εντολής με κάποιο τρόπο. Τέλος, λέξη

γραμμένη με ΜΙΚΡΟΥ ΜΕΓΕΘΟΥΣ ΚΕΦΑΛΑΙΑ ΓΡΑΜΜΑΤΑ αντιστοιχεί σε πληκτρολόγηση

μόνον του αντίστοιχου πλήκτρου, ενώ μέσα σε < > έχουν τεθεί τα τμήματα των εντολών που

δέν εμφανίζονται στην οθόνη. Η πληκτρολόγηση του <RETURN> εννοείται πάντα μετά το

τέλος μιάς αίτησης του χρήστη προς το σύστημα.

4

Page 5: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

5

ΠΕΡΙΕΧΟΜΕΝΑ

Κεφάλαιο

1 Γενικά περί UNIX.

2 Γενικές εντολές.

3 Τρόποι επικοινωνίας και οργάνωσης γραφείου.

4 Συγκρίσεις και αριθμητικές πράξεις.

5 Επεξεργασία αρχείων.

6 Διαχείριση Αρχείων.

7 Εντολές Εισόδου/Εξόδου.

8 Εντολές για τον προγραμματιστή

9 Δικαιώματα προστασίας αρχείων.

10 Σύντομη αναφορά στο vi συντάκτη (visual editor).

11 Ο Φλοιός C (C Shell, csh)

12 ΤΟ ΣΥΣΤΗΜΑ NETWORK FILE SYSTEM (NFS)

13 SENDMAIL

14 UUCP

15 Firewalls

16 JumpStart

17 Optimisations - βελτιστοποίηση ταχύτητας

18 ΝETWORK INFORMATION SERVICE PLUS (NIS+)

5

Page 6: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

6

Κεφάλαιο 1. Γενικά περί UNIX.

Το σύστημα UNIX είναι ένα set προγραμμάτων (software) που

1 ελέγχει τον υπολογιστή πάνω στον οποίο "τρέχει", έτσι ώστε να καταστήσει όσο το

δυνατόν αποδοτικότερη τη λειτουργία του

1 δρα σαν ένας σύνδεσμος ανάμεσα στον χρήστη και τον υπολογιστή

1 παρέχει στον χρήστη ένα ευρύ φάσμα βοηθητικών προγραμμάτων έτσι ώστε αυτός να

δουλεύει σε φιλικό και αποδοτικό υπολογιστικό περιβάλλον.

Ο πυρήνας (Kernel) ελέγχει την πρόσβαση στον υπολογιστή, διαχειρίζεται τη μνήμη

του, κατανέμει τα περιφερειακά και υποστηρίζει το σύστημα αρχείων του.

Ο τρόπος με τον οποίο πραγματοποιούνται οι λειτουργίες αυτές δεν ενδιαφέρει τον

απλό χρήστη. Αντίθετα, είναι ουσιώδους σημασίας η κατανόηση της ιεραρχικής δενδροειδούς

δομής του συστήματος αρχείων (hierarchical file system). Από την εξοικείωση του χρήστη με

το σύστημα αρχείων εξαρτάται και η αποδοτική χρήση από μέρους του των δυνατοτήτων που

παρέχει το UNIX.

Ενα αρχείο (file), που είναι και η βασική μονάδα του συστήματος UNIX, μπορεί να

είναι

1 ένα "κανονικό" αρχείο (ordinary file), δηλαδή μια απλή συλλογή χαρακτήρων που

χρησιμεύει για την αποθήκευση της όποιας πληροφορίας (π.χ δεδομένα, κείμενο, πηγαία

προγράμματα, εκτελέσιμα προγράμματα, αποτελέσματα, υπορρουτίνες)

1 ένας κατάλογος (directory) που περιέχει αρχεία (συνήθως με κάποια ομοιότητα) ή και

άλλους καταλόγους, έτσι ώστε να "χτίζεται" με κάποια λογική το σύστημα αρχείων

1 ένα ειδικό αρχείο (special file) που αντιπροσωπεύει μια φυσική συσκευή όπως τερματικό,

δίσκο, εκτυπωτή,οθόνη κ.λ.π.

Όπως θα έχει ίσως γίνει αντιληπτό, στο σύστημα UNIX -σε αντίθεση με άλλα

λειτουργικά συστήματα- υπάρχει μια κοινή διαπροσωπία (interface) μεταξύ χρήστη και

συστήματος.

Η βάση του συστήματος αρχείων UNIX είναι η ριζα (root directory) που

αντιπροσωπεύεται με / (slash) και κάτω από την οποία βρίσκονται όλα τα αρχεία και όλοι οι

άλλοι κατάλογοι. Ο κατάλογος root περιέχει τον πυρήνα (kernel) και τις συνδέσεις με

ορισμένους σημαντικούς καταλόγους του συστήματος, όπως φαίνεται στο Σχήμα 1. Το τι

περιέχει καθένας απ' αυτούς τους καταλόγους αναφέρεται στις αντίστοιχες σημειώσεις για τον

System Administrator (ΜΕΡΟΣ ΙΙ - UNIX ΕΠΙΠΕΔΟ ΙΙ).

6

Page 7: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

7

/

bindev usretchome

mitsos takis maria

dir1 dir2 dir2

bin man src

X11 X11 localsrc

Σχήμα 1. Τμήμα μιας τυπικής δομής του συστήματος αρχείων.

Το λογισμικό (software) που καθιστά δυνατή τη διπλής κατεύθυνσης ροή

επικοινωνίας ανάμεσα στον χρήστη και τον υπολογιστή, λέγεται φλοιός (shell). Ο φλοιός

"μεταφράζει" τις αιτήσεις των χρηστών (command language interpreter) και αν αυτές έχουν

έννοια, ανασύρει προγράμματα από τη μνήμη του υπολογιστή και τα εκτελεί. Εκτός από τη

δράση του σαν command interpreter, ο φλοιός είναι και μια πλήρης προγραμματιστική

γλώσσα. Ο τρόπος γραφής εντολών, που δεν είναι παρά προγράμματα φλοιού (shell scripts),

αναλύεται σε επόμενο κεφάλαιο.

Τέλος, το software επιτρέπει στον χρήστη να δουλέψει και περιλαμβάνει προγράμματα και

πακέτα προγραμμάτων (tools) για ηλεκτρονική επικοινωνία, δημιουργία και μεταβολή

κειμένου, γραφή άλλων προγραμμάτων και ανάπτυξη των ίδιων των software tools.

Όταν το σύστημα UNIX εκτελεί μια εντολή η οποία δίνεται σε μορφή (format)

κατανοητή από το φλοιό (shell). Όταν ο φλοιός είναι έτοιμος να δεχτεί την αίτηση του

χρήστη, αυτός πληκτρολογεί την προς εκτέλεση εντολή. Η εντολή θεωρείται είσοδος (input)

και ο φλοιός ψάχνει έναν ή περισσότερους καταλόγους για να εντοπίσει το πρόγραμμα που

επέλεξε να εκτελέσει ορίζει ο χρήστης. Όταν αυτό βρεθεί, ο φλοιός επισείει την προσοχή του

πυρήνα στην αίτηση του χρήστη. Ο πυρήνας, ακολουθώντας τις οδηγίες του προγράμματος,

7

Page 8: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

8

εκτελεί την αίτηση και αφού το πρόγραμμα τρέξει, ο φλοιός είναι έτοιμος για την επόμενη

εντολή.

8

Page 9: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

9

Kεφάλαιο 2. Γενικές εντολές.

cd [/full / path / name /]

Αλλάζει ο κατάλογος στον οποίο εργάζεται ο χρήστης, είτε χρησιμοποιώντας το πλήρες

όνομα του μονοπατιού ξεκινώντας από το root directory (/), είτε χρησιμοποιώντας το

όνομα του μονοπατιού σε σχέση με τον τρέχοντα κατάλογο στον οποίο βρίσκεται ο

χρήστης (relative path). Π.χ. με την εντολή cd directory πραγματοποιείται μεταφορά

στον υποκατάλογο directory του τρέχοντος καταλόγου του χρήστη. Αν δεν δοθεί

καθόλου όρισμα, τότε το home γίνεται ο τρέχων κατάλογος (current directory), δηλαδή

ο κατάλογος στον οποίο εισάγει το σύστημα το χρήστη όταν κάνει login (π.χ. ο χρήστης

με κωδικό χρήσης dimitra, έχει σαν home directory το /users/dimitra).Το home

directory είναι ορισμένο στο αρχείο /etc/passwd.

id

Επιστρέφει τον αριθμό ταυτότητας του χρήστη (UID=user id), και τον αριθμό

ταυτότητας της ομάδας στην οποία ανήκει (GID=group id) .

kill [-signo] PID

Στέλνει το σήμα #signo στην διαδικασία με αριθμό ταυτότητας PID ( =process id)

εφόσον βέβαια αυτή ανήκει στο χρήστη, εκτός και αν ο χρήστης είναι ο υπερ-χρήστης

(super-user,root). Η kill στέλνει by default (όταν απουσιάζει το όρισμα -signo) το σήμα

15 (=SIGTERM) στην διαδικασία. Ειδικά kill -9, (SIGKILL) είναι ένας "σίγουρος"

τερματισμός της διαδικασίας, και δεν μπορεί να αγνοηθεί από αυτήν. Μπορεί να

σταλθεί σήμα σε περισσότερες διαδικασίες με kill PID 1 PID 2 . Τους αριθμούς

ταυτότητας διαδικασιών (PID) τους πληροφορείται ο χρήστης με την εντολή ps που

αναλύεται στη συνέχεια αυτού του κεφαλαίου.

login [username]

Η login ως εντολή επιτρέπει στο χρήστη να συνδεθεί εκ νέου με το τρέχον σύστημα με

τον κωδικό χρήσης username, Αν δεν προσδιοριστεί το username, το σύστημα απαντά

με

login:

oπότε ο χρήστης βρίσκεται μπροστά στην κατάσταση που αντιμετωπίζει όταν

προσπαθεί να συνδεθεί για πρώτη φορά με το σύστημα. Αν δεν κατορθώσει να

ολοκληρώσει επιτυχώς την login διαδικασία μέσα σε ένα ορισμένο χρονικό διάστημα,

τότε το σύστημα από μόνο του τον αποσυνδέει από την συγκεκριμένη διαδικασία.

Εννοείται πως αν ο username έχει και password αυτό σε κάθε περίπτωση θα ζητηθεί.

man command

man -k string

9

Page 10: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

10

Εντοπίζει και επιστρέφει τις πληροφορίες που υπάρχουν στο Reference Manual σχετικά

με την εντολή command. Το φιλτράρισμα της εξόδου γίνεται με το φίλτρο που

προσδιορίζεται από την μεταβλητή περιβάλλοντος PAGER (συνήθως η more). Γενικά

είναι χρήσιμο να καλείται η man, κυρίως για πληροφορίες σχετικά με τις διάφορες

επιλογές (options) της κάθε εντολής, που διαφέρουν από σύστημα σε σύστημα. Με το

όρισμα -k αναζητά από τα manuals όλες τις περιγραφές εντολών που εμπεριέχουν το

string.

passwd [username]

Αλλάζει το password του κωδικού χρήσης username. Συνήθως η εντολή

χρησιμοποιείται χωρίς όρισμα (οπότε πρόκειται για τον κωδικό χρήσης του ίδιου του

χρήστη), μιάς και μόνον ο super-user μπορεί να αλλάζει τα passwords άλλων χρηστών.

Κατά την διαδικασία αλλαγής του password, ζητείται από το χρήστη να

πληκτρολογήσει το παλιό password (εκτός αν είναι ο super-user) και εάν αυτό είναι

σωστό, του ζητείται στη συνέχεια το νέο password δύο φορές για επιβεβαίωση.

Ανάλογα με το σύστημα, τα passwords - εκτός αν πρόκειται για τον super-user - πρέπει

να πληρούν κάποιους κανόνες (π.χ να έχουν πάνω από 6 χαρακτήρες εκ των οποίων 2

τουλάχιστον να είναι γράμματα και 1 αριθμός ή ειδικός χαρακτήρας).

ps [-edafl] [-ccorefile] [-sswapdev] [-nnamelst] [-ttermlst] [-pproclst] [-uuidlst] [-ggrplst]

Ενημερώνει για το ποιές διαδικασίες "τρέχουν" κάθε στιγμή στο σύστημα και, ανάλογα

με τις επιλογές, παραθέτει και διάφορες πληροφορίες για τις διαδικασίες αυτές.

Πάντως, χωρίς επιλογές, η ps δίνει τις διαδικασίες που τρέχουν στο τερματικό του

χρήστη και για καθεμιά το PID, το χρόνο που έχει απασχολήσει αυτή το σύστημα και το

όνομα της εντολής. Περισσότερα για την ps αναφέρονται στο ΜΕΡΟΣ ΙΙ.

pwd

Δίνει το πλήρες μονοπάτι (full-path-name) του τρέχοντος καταλόγου.

tty

Δίνει το πλήρες μονοπάτι (full-path-name) του τρέχοντος τερματικού (π.χ. /dev/tty1p2).

who

Μας ενημερώνει για το ποιός είναι συνδεδεμένος στο σύστημα.

whoami

who am I

Η whoami ή whoamI (με ή χωρίς κενά) δίνει τον κωδικό χρήσης στον οποίο δουλεύει ο

χρήστης, τη γραμμή του τερματικού στο οποίο δουλεύει (όπως αυτή δηλώνεται στον

κατάλογο /dev), την ώρα που "μπήκε" στο σύστημα, το χρόνο που έχει περάσει από τη

στιγμή που ενεργοποιήθηκε για τελευταία φορά η γραμμή και το PID του shell του. Η

who δίνει τις ίδιες πληροφορίες για όλους τους χρήστες που είναι πάνω στο σύστημα

εκείνη τη στιγμή και για να το επιτύχει αυτό εξετάζει by default το αρχείο /etc/utmp.

10

Page 11: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

11

Κεφάλαιο 3. Τρόποι επικοινωνίας και οργάνωσης

γραφείου.

calendar [-]

Χρησιμεύει για να υπενθυμίζει το πρόγραμμα του χρήστη για την ίδια και την επόμενη

μέρα. Συμβουλεύεται το αρχείο calendar του τρέχοντος καταλόγου (αν φυσικά

υπάρχει) και δίνει όλες τις γραμμές που περιέχουν την "σημερινή" και την "αυριανή"

ημερομηνία (για τα Σαββατοκύριακα, σαν "αυριανές" θεωρούνται όλες οι μέρες ώς τη

Δευτέρα), αρκεί οι ημερομηνίες να είναι δηλωμένες με το μήνα να προηγείται της μέρας

(π.χ. Dec 7 ή 12/7). Με την επιλογή -, η calendar ελέγχει τα ημερολόγια όλων των

χρηστών που έχουν αρχείο calendar στο login directory τους και τους στέλνει τα όποια

θετικά αποτελέσματα με mail.

date [mmddhhmm[yy]]

Xωρίς όρισμα, η date δίνει την ημερομηνία και την ώρα. Αλλιώς, όπως αναλύεται και

στο ΜΕΡΟΣ ΙΙ, με κατάλληλα ορίσματα μπορεί ο super-user και μόνον αυτός να

αλλάξει την ημερομηνία και την ώρα.

mail [-epqr] [-ffile]

mail [-t] persons

Γενικά δίνει στο χρήστη την δυνατότητα να στείλει μήνυμα σε άλλους χρήστες ή να

διαβάσει κάποιο μήνυμα που αυτοί του έχουν στείλει. Χωρίς ορίσματα παραθέτει τα

μηνύματα που του έχουν σταλεί ένα-ένα με σειρά last-in, first-out. Για κάθε μήνυμα το

σύστημα ρωτά με ένα ? οπότε οι επιλογές του χρήστη είναι

<RETURN> ή + ή n (προχωρά στο επόμενο μήνυμα ή βγένει από το mail αν πρόκειται

για το τελευταίο μήνυμα)

d (σβήνει το μήνυμα και προχωρά στο επόμενο)

p (δίνει το μήνυμα πάλι)

- (πηγαίνει στο προηγούμενο μήνυμα)

s [file] ή y[files] (σώζει το μήνυμα στο αρχείο file (mbox είναι το default) και

προχωρά στο επόμενο)

w [file] (σώζει το μήνυμα στο αρχείο file χωρίς την επικεφαλίδα του,

δηλαδή χωρίς το From ... (mbox είναι το default) και προχωρά στο

επόμενο)

m [persons] (στέλνει το μήνυμα στα persons (by default στο χρήστη) και

προχωρά στο επόμενο)

q ή <CTRL-d> (βάζει το μήνυμα στο mailfile και σταματά)

x (βάζει όλα τα μηνύματα πίσω στο mailfile αναλλοίωτα και σταματά)

! command (πηγαίνει στο shell (command interpreter) για να εκτελέσει την

command)

11

Page 12: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

12

* ή ? (δίνει περίληψη των εντολών)

Οι παρακάτω επιλογές αλλάζουν την έξοδο του mail:

+ ή -r δίνει τα μηνύματα με σειρά first-in, first-out

-e δεν τυπώνει το κείμενο των μηνυμάτων αλλά δίνει

0 αν έχει σταλεί μήνυμα

1 αν δέν έχει σταλεί μήνυμα

2 αν υπάρχει κάποιο λάθος

-p δίνει τα μηνύματα χωρίς να ρωτά με ?

-q σταματά το mail μετά από σήμα διακοπής (ενώ κανονικά θα

σταμάταγε μόνο το τρέχον μήνυμα)

-f file χρησιμοποιεί το αρχείο file αντί του default mailfile

-tθέτει στην αρχή του μηνύματος τα ονόματα όλων των χρηστών στους οποίους

στέλνεται το ίδιο γράμμα

Με το όρισμα persons προστίθεται στο mailfile καθενός από τους persons η standard

είσοδος μέχρι ένα end-of-file (δηλαδή <CTRL-d>). Αν συμβεί κάποιο λάθος, σώζεται το

μήνυμα στο αρχείο dead.letter που είναι προσωρινό αρχείο και ξαναδημιουργείται

κάθε φορά που χρειάζεται. Με την επιλογή -d το μήνυμα στέλνεται άμεσα. Όταν ο

χρήστης συνδέεται στο σύστημα, ειδοποιείται αν έχει μήνυμα. Το ίδιο συμβαίνει αν του

σταλεί μήνυμα ενώ χρησιμοποιεί το mail.

write user [tty]

Η write αντιγράφει γραμμές από το τερματικό του χρήστη σε αυτό ενός άλλου χρήστη

(του user) που είναι συνδεδεμένος στο σύστημα και έτσι οι δύο χρήστες επικοινωνούν

interactively. Όταν πρωτοκαλείται, η write στέλνει ένα μήνυμα

Message from yourlogin (tty??) [date]...

στον user ο οποίος θα πρέπει να απαντήσει με αντίστοιχη write αν θέλει να μιλήσει

(εκτός αν αρνείται μηνύματα με την εντολή mesg n). Με <CTRL-d> σταματά η

σύνδεση. Αν ο user είναι συνδεδεμένος σε περισσότερα του ενός τερματικά, πρέπει με

το όρισμα tty να προσδιοριστεί και η γραμμή του τερματικού. Aν υπάρχει ! στην αρχή

κάποιας γραμμής, η write θα καλέσει το shell να εκτελέσει το υπόλοιπο της γραμμής

σαν εντολή.

Κεφάλαιο 4. Συγκρίσεις και αριθμητικές πράξεις.

expr arguments

Με αυτή την εντολή τα arguments θεωρούνται σαν μια έκφραση και μετά τον

υπολογισμό, το αποτέλεσμα δίνεται στην standard έξοδο. Οι όροι της έκφρασης πρέπει

να χωρίζονται με κενό, ενώ δεν πρέπει να χρησιμοποιούνται χαρακτήρες ειδικοί για το

shell. Οι τελεστές που μπορούν να χρησιμοποιηθούν είναι:

12

Page 13: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

13

expr1 \/ expr2

επιστρέφει την expr 1 αν δεν είναι 0, αλλιώς επιστρέφει την expr 2 .

expr 1 \& expr2

επιστρέφει την expr 1 αν καμιά από τις δύο δεν είναι 0, αλλιώς επιστρέφει 0.

expr 1 {=,\>,\>=,\<,\<=,!=} expr 2

επιστρέφει το αποτέλεσμα της σύγκρισης (integer ή lexical)

expr 1 {+,-} expr 2

προσθέτει ή αφαιρεί τα ορίσματα (integer valued)

expr 1 {\*,/,%} expr 2

δίνει το γινόμενο, το πηλίκο ή το υπόλοιπο των ορισμάτων (integer valued)

expr 1 : expr 2

συγκρίνει τις δυο εκφράσεις (matching operator)

length expr

δίνει το μήκος της expr

substr expr 1 expr 2 expr 3

δίνει το substring της expr 1 ξεκινώντας από τον χαρακτήρα που ορίζεται από την

expr 2 και γιά μήκος που ορίζεται από την expr 3

index expr 1 expr 2

δίνει τη θέση στην expr 1 που περιέχει ένα χαρακτήρα που βρίσκεται στην expr 2 .

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

a='expr $a +1'

προσθέτει 1 στην shell μεταβλητή a.

Κεφάλαιο 5. Επεξεργασία αρχείων.

bdiff file 1 file 2 [n] [-s]

Xρησιμοποιείται όπως η diff γιά να βρεθούν ποιές γραμμές πρέπει να αλλάξουν σε δύο

αρχεία ώστε αυτά να είναι ίδια. Απλώς διαχειρίζεται αρχεία που είναι πολύ μεγάλα για

να τα διαχειριστεί η diff. Η bdiff αγνοεί τις κοινές γραμμές που υπάρχουν και στα δύο

αρχεία και αφού εντοπίσει την πρώτη διαφορά διαιρεί το υπόλοιπο κάθε αρχείου σε

τομείς των n-γραμμών και καλεί την diff για τους αντίστοιχους τομείς στα δύο αρχεία.

Αν αντί του file 1 ή του file 2 δοθεί -, θα διαβάσει από την standard είσοδο. Η

αριθμητική επιλογή n δηλώνει το μέγιστο αριθμό γραμμών σε κάθε τομέα. Με -s (silent)

δεν τυπώνονται τα διαγνωστικά της bdiff (αλλά τυπώνονται αυτά της diff).

cmp [-l] [-s] file 1 file 2

Συγκρίνονται δύο αρχεία (αν το file 1 είναι -, η cmp διαβάζει τη standard είσοδο). By

default, αν τα αρχεία δεν διαφέρουν, δεν επιστρέφεται κανένα σχόλιο. Αλλιώς, δίνεται

το byte και ο αριθμός της γραμμής όπου υπάρχει η διαφορά. Αν ολόκληρο το ένα

αρχείο είναι μέρος του άλλου, στέλνεται μήνυμα. Με -l δίνει τον αριθμό byte (decimal)

13

Page 14: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

14

και τα bytes που διαφέρουν (oktal) κάθε φορά που παρουσιάζεται διαφορά. Με -s δεν

τυπώνει τίποτε άλλο παρά κώδικες (0 γιά όμοια αρχεία, 1 γιά αρχεία που διαφέρουν, 2

γιά το όποιο λάθος).

comm [-[123]] file 1 file 2

Η comm επιλέγει ή απορρίπτει τις κοινές γραμμές σε δύο σορταρισμένα αρχεία (αν το

file 1 είναι -, διαβάζει τη standard είσοδο) διαβάζοντάς τα και απαντώντας με τρεις

στήλες: τις γραμμές που υπάρχουν μόνο στο file 1 , τις γραμμές που υπάρχουν μόνο στο

file 2 και τις κοινές γραμμές. Με τις επιλογές 1, 2 ή 3 δεν τυπώνει τις αντίστοιχες στήλες.

cp [-r] file 1 [file 2 ...] target

ln [-f] [-s] file1 [file2...] target

mv [-f] file1 [file2...] target

Είναι εντολές αντιγραφής (copy), σύνδεσης (link) ή μετακίνησης (move) του file1 στο

target. Αν το target είναι κατάλογος τότε ένα ή περισσότερα αρχεία μπορούν να

αντιγραφούν, συνδεθούν ή μεταφερθούν σ' αυτόν, ενώ αν είναι αρχείο τότε τα

προηγούμενά του περιεχόμενα καταστρέφονται εκτός αν έχει write permissions (όπως

περιγράφονται στην ls -l και στην chmod), οπότε οι mv και ln θα ζητήσουν άδεια γιά

να κάνουν overwrite (εκτός αν δίνεται η επιλογή -f). Η cp επιτρέπει στο file 1 να είναι

κατάλογος μόνον στην περίπτωση της επιλογής -r, οπότε ό,τι υπάρχει "κάτω" από το

file 1 το αντιγράφει σε ένα νέο κατάλογο "κάτω" από τον target, τον target/file 1 (αν ήδη

υπάρχει ο target) ή τον target (αν αυτός δεν υπάρχει και τον δημιουργεί εκείνη τη

στιγμή).

cut -clist [file1 file2...]

cut -flist [-dseparator_char] [-s] [file1 file2...]

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

πεδία, όπως ορίζονται από το list, μπορεί να είναι σταθερού μήκους (-c επιλογή) ή να

διαφέρει το μήκος τους από γραμμή σε γραμμή (-f επιλογή). Αν δεν δοθούν αρχεία,

χρησιμοποιεί την standard είσοδο. Είναι χρήσιμο να χρησιμοποιείται η grep γιά

απόσπαση "οριζόντιων" κομματιών ενός αρχείου ή η paste γιά ένωση αρχείων κατά

στήλες (δηλαδή οριζοντίως). Γιά ανακατατάξη των στηλών ενός πίνακα, μπορεί να

χρησιμοποιηθεί η cut και η paste. H -d ορίζει τον χαρακτήρα που χωρίζει τα πεδία, και

η -f προσδιορίζει τα πεδία που θα εκτυπωθούν. Π.χ:

>echo “one:two:three:4:five”|cut -d: -f1,4

one4

diff [-befh] file 1 file 2

Βρίσκει ποιές γραμμές πρέπει να αλλάξουν στα δύο αρχεία γιά να γίνουν ίδια. Αν αντί

του file 1 ή του file 2 δοθεί -, διαβάζει τη standard είσοδο. Αν το file 1 (file 2 ) είναι

κατάλογος, τότε η diff χρησιμοποιεί ένα αρχείο σ' αυτόν τον κατάλογο που να

ονομάζεται file 1 (file 2 ). Η έξοδος μοιάζει με εντολές του ed:

14

Page 15: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

15

n 1 an 3 ,n 4

n 1 ,n 2 dn 3

n 1 ,n 2 cn 3 ,n 3

Οι δυνατές επιλογές είναι:

-b αγνοεί τα κενά (tabs και spaces)

-e παράγει ένα script των εντολών a,c και d ώστε ο συντάκτης ed να

αναδημιουργήσει το file 2 από το file 1

-fπαράγει ένα script παρόμοιο με αυτό της -e αλλά με αντίθετη σειρά

-h παράγει τις διαφορές πιό γρήγορα, αλλά μόνον όταν αυτές είναι

μικρές και καλά διαχωρισμένες (οι επιλογές -e και -f δεν έχουν

τότε νόημα).

diff3 [-ex3] file 1 file 2 file 3

Συγκρίνει τρεις εκδοχές ενός αρχείου και τυπώνει τα διαφορετικά κομμάτια τους με

βάση τους κώδικες:

==== (και τα τρία αρχεία διαφέρουν)

====1 (το file 1 διαφέρει)

====2 (το file2 διαφέρει)

====3 (το file 3 διαφέρει)

Το τι αλλαγές χρειάζεται να γίνουν δηλώνεται με δύο τρόπους:

f:n 1 a Κείμενο πρέπει να προστεθεί μετά τη γραμμή με νούμερο n 1 στο

αρχείο f, όπου f=1,2 ή 3.

f:n 1 ,n 2 c Κείμενο πρέπει να αλλάξει στο κομμάτι μεταξύ των γραμμών n 1 και

n 2 . Μετά ακολουθεί το περιεχόμενο του κομματιού αυτού. Οι

επιλογές αφορούν τη δημιουργία script γιά τον ed.

dircmp [-d] [-s] [-wn] dir1 dir2

Πρόκειται γιά σύγκριση καταλόγων. Με όποια από τις επιλογές, δίνονται τα ονόματα

των αρχείων που περιέχονται μόνο στο dir 1 ή μόνο στο dir 2 , ενώ χωρίς επιλογές, η

έξοδος της dircmp πληροφορεί αν τα αρχεία που έχουν το ίδιο όνομα στους δύο

καταλόγους έχουν και το ίδιο περιεχόμενο. Με -d γίνεται σύγκριση του περιεχομένου

των αρχείων που έχουν το ίδιο όνομα και στους δύο καταλόγους και δίνεται μιά λίστα

με το τι πρέπει να αλλάξει γιά να γίνουν τα δύο αρχεία ίδια (όπως στην diff). Με -s δεν

δίνονται οι πληροφορίες γιά τα ίδια αρχεία, ενώ με -wn αλλάζει το default πλάτος της

γραμμής εξόδου από 72 σε n χαρακτήρες.

find path - name - list expression

Ακολουθώντας καθένα από τα pathnames που συμπεριλαμβάνονται στη path - name -

list, ψάχνει γιά αρχεία που κάνουν αληθή τη δυαδική expression, η οποία παίρνει τιμές

ως εξής:

15

Page 16: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

16

-name file αληθής αν το file ταιριάζει στο όνομα του

τρέχοντος αρχείου

-perm onum αληθής αν τα permissions του αρχείου ταιριάζουν ακριβώς με τον

οκταδικό αριθμό onum (όπως περιγράφεται από την chmod)

-type c αληθής αν το αρχείο είναι τύπου c, όπου το c είναι b, c, d, p ή f γιά

ειδικά αρχεία block, ειδικά αρχεία χαρακτήρων, καταλόγους, fifo

(pipe) και απλά αρχεία αντίστοιχα

-links n αληθής αν το αρχείο έχει n συνδέσεις (links)

-user uname αληθής αν το αρχείο ανήκει στον χρήστη uname (το uname μπορεί

να είναι και αριθμός οπότε θεωρείται ως UID)

-group gname αληθής αν το αρχείο ανήκει στην ομάδα gname (το gname μπορεί

να είναι και αριθμός, οπότε θεωρείται ως GID)

-size n[c] αληθής αν το αρχείο έχει μέγεθος n blocks, δηλαδή n*512 bytes (αν

το n ακολουθείται από c αντιπροσωπεύει χαρακτήρες)

-atime n αληθής αν το αρχείο έχει προσπελαστεί σε n μέρες

-mtime n αληθής αν τα χαρακτηριστικά του αρχείου έχουν υποστεί κάποια

μετατροπή σε n μέρες

-ctime n αληθής αν το αρχείο έχει αλλάξει σε n μέρες

-exec cmd αληθής αν η εκτέλεση της εντολής cmd επιστρέφει μηδενική τιμή

σαν κατάσταση εξόδου (αν σαν όρισμα της cmd τεθεί { }, είναι σαν

να έχει όρισμα το pathname του τρέχοντος αρχείου)

-print πάντα αληθής (τυπώνει το pathname του τρέχοντος αρχείου)

-cpio device αληθής αν μπορεί κανείς να ανοίξει και να γράψει στη

συσκευή που ορίζεται σαν device (οπότε το τρέχον αρχείο γράφεται

στη device με cpio format)

-newer file αληθής αν το τρέχον αρχείο έχει υποστεί μετατροπές πιό πρόσφατα

απ' ό,τι το όρισμα file

-depth πάντα αληθής, αλλά κάνει το ψάξιμο ενεργοποιώντας πρώτα όλες

τις εισόδους ενός καταλόγου και μετά τον ίδιο τον κατάλογο

\( expr \) αληθής αν η έκφραση expr είναι αληθής (τα \ μπαίνουν γιατί οι

παρενθέσεις είναι ειδικοί χαρακτήρες γιά τον φλοιό. ΠΡΟΣΟΧΗ: τα

κενά μετα το \( και πριν από το \) είναι απαραίτητα στη σύνταξη

της εντολής).

Τα παραπάνω μπορούν να συνδιαστούν με τους τελεστές:

1. Αρνηση (! είναι ο NOT τελεστής)

2. Σύζευξη (ο AND τελεστής εννοείται με την παράθεση δύο από τα παραπάνω)

3. Διάζευξη (-o είναι ο OR τελεστής)

16

Page 17: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

17

Γιά παράδειγμα, γιά να σβηστούν όλα τα αρχεία που λέγονται a.out ή *.o και δεν

έχουν προσπελαστεί εδώ και μιά εβδομάδα, αρκεί να δοθεί

find / \( -name a.out -o -name '*.o' \) -atime +7 -exec rm {} \;

grep [options] expression [files]

egrep [options] [expression] [files]

fgrep [options] [strings] [files]

Οι εντολές της οικογένειας grep ψάχνουν στην είσοδο files (by default στη standard

είσοδο) γιά να βρουν γραμμές που να ταιριάζουν στην expression, οπότε και τυπώνουν

τις γραμμές αυτές by default στη standard έξοδο. Αν η είσοδος είναι πάνω από ένα files

τότε σαν έξοδος λαμβάνεται το όνομα του αρχείου που περιέχει τις ζητούμενες

γραμμές. Στην περίπτωση που η expression περιέχει χαρακτήρες $, *, [, ^, |, ( και \,

απαιτείται ιδιαίτερη προσοχή γιατί αποτελούν και χαρακτήρες του φλοιού, οπότε είναι

ασφαλέστερο να κλειστεί η expression σε απλά εισαγωγικά.

Για την grep οι παραπάνω ειδικοί χαρακτήρες εχουν την ακόλουθη σημασία:

^ αρχή γραμμής.

$ τέλος γραμμής (χαρακτήρας NEWLINE).

* 0 έως άπειρες επαναλήψεις του προηγούμενου χαρακτήρα ή εκφρασης αν αυτή

περικλείεται από παρενθέσεις.

. ο οποιοσδήποτε χαρακτήρας εκτός του NEWLINE.

[x-y] όπου x και y δύο χαρακτήρες ASCII συμβολίζουν οποιονδήποτε χαρακτήρα

περιέχεται στο σύνολο των ASCII μεταξύ των x και y. Αντί για διάστημα χαρακτήρων

μεταξύ των [ και ] μπορεί να τεθούν και μεμονωμένοι χαρακτήρες (π.χ. [admc]) οπότε

οι αγκύλες συμβολίζουν οποιονδήποτε έναν από αυτούς.

Ετσι για παράδειγμα η έκφραση ‘^FROM.*\.$’ συμβολίζει όλες τις γραμμές που

αρχιζουν με το string FROM ακολουθούμενο από 0 ως άπειρες εμφανίσεις

οποιουδήποτε χαρακτήρα και τελειώνουν με τελεία.

Η fgrep ψάχνει γιά γραμμές που να περιέχουν ένα από τα strings.

Η egrep (που θεωρείται και η πιό γρήγορη) δέχεται κανονικές εκφράσεις εκτός των \)

και \( και επιπλέον:

· μιά έκφραση που ακολουθείται από + κάνει την egrep να ψάξει μία ή περισσότερες

εμφανίσεις της έκφρασης

· μιά έκφραση που ακολουθείται από ? κάνει την egrep να ψάξει καμία ή μία εμφάνιση

της έκφρασης

· δύο εκφράσεις που χωρίζονται με | κάνουν την egrep να ψάξει γιά strings που

ταιριάζουν με όποια από τις δύο

· μιά έκφραση μπορεί να κλειστεί με παρενθέσεις γιά να ομαδοποιηθεί.

Περισσότερες “κανονικές εκφράσεις” και αναλυτική περιγραφή τους μπορεί να

αναζητηθεί στα manual pages του grep με την χρήση της εντολής man grep .

17

Page 18: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

18

Η σειρά εκτέλεσης των τελεστών είναι [], *, ?, +, αλληλουχία και |.

Οι σημαντικότερες επιλογές είναι:

-v (τυπώνονται όλες οι άλλες γραμμές εκτός αυτών που ταιριάζουν

στην expression ή το string)

-c (τυπώνεται μόνον ο αριθμός των γραμμών που ταιριάζουν)

-l (τυπώνονται μόνο τα ονόματα των αρχείων που περιέχουν τις

γραμμές που ταιριάζουν)

-n (πριν κάθε γραμμή τυπώνεται και ο αύξων αριθμός της μέσα στο

αρχείο)

-s (δεν δίνονται τα μηνύματα λάθους και ισχύει μόνο γιά την grep)

-e expression (είναι χρήσιμη όταν η expression ξεκινά με - και δεν δουλεύει με την

grep)

-f file (παίρνει την expression ή το string από το file).

sdiff [options] file 1 file 2

Χρησιμοποιεί την diff γιά να δώσει δίπλα-δίπλα τις αντίστοιχες γραμμές των δύο

αρχείων εντοπίζοντας αυτές που διαφέρουν. Έτσι, αριστερά εμφανίζονται οι γραμμές

του file 1 και δεξιά οι αντίστοιχες του file 2 και ανάμεσά τους:

κενό αν είναι πανομοιότυπες

< αν η γραμμή υπάρχει μόνο στο file 1

> αν η γραμμή υπάρχει μόνο στο file 2

| αν οι γραμμές διαφέρουν.

Οι επιλογές είναι:

-wn Χρησιμοποιεί το όρισμα n σαν πλάτος της γραμμής εξόδου (by

default είναι 130 χαρακτήρες).

-l Τυπώνει μόνο το αριστερό μέρος των όμοιων γραμμών.

-s Δεν τυπώνει τις όμοιες γραμμές.

-ooutput Χρησιμοποιεί το output σαν τρίτο αρχείο όπου αντιγράφει τις

όμοιες γραμμές των file 1 και file 2 . Μετά από κάθε σετ διαφορών που

παρουσιάζει, η sdiff ρωτά με ένα % και περιμένει απάντηση με

κάποιο από τα:

l (οπότε προσθέτει την αριστερή στήλη στο output)

r (οπότε προσθέτει τη δεξιά στήλη στο output)

s (οπότε δεν τυπώνει τις ίδιες γραμμές)

q (οπότε βγένει από το πρόγραμμα).

sort [-cmu] [-ooutput] [-ykmem] [-zrescz] [-Tdir] [-tx] [-bdfilnrM] [+pos1 [-pos2]]

[files]

18

Page 19: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

19

Ταξινομεί και/ή συγχωνεύει τις γραμμές όλων των files μαζί και γράφει το αποτέλεσμα

by default στη standard έξοδο. Αν δοθεί - ή τίποτα αντί γιά τα files, τότε διαβάζει από

τη standard είσοδο. Η ταξινόμηση γίνεται by default με βάση την παράσταση των

χαρακτήρων στον κώδικα ASCII. Επίσης by default το κλειδί ταξινόμησης είναι όλη η

γραμμή εισόδου.

Οι βασικές επιλογές είναι:

-c Στέλνει μήνυμα μόνο αν το αρχείο δεν είναι σορταρισμένο σωστά.

-m Κάνει συγχώνευση σε αρχεία που είναι ήδη ταξινομημένα.

-ooutput Χρησιμοποιεί το αρχείο output αντί γιά τη standard έξοδο. Το

output μπορεί να είναι και ένα από τα files.

-ykmem Ξεκινά να λειτουργεί χρησιμοποιώντας kmem kilobytes μνήμης, αν

το kmem είναι μέσα στα επιτρεπτά όρια (π.χ. με -y0 η sort ξεκινά να

λειτουργεί χρησιμοποιώντας την ελάχιστη μνήμη). Με σκέτο -y

ξεκινά με τη μέγιστη μνήμη.

-zrescz Έτσι δηλώνεται ο αριθμό των bytes της μεγαλύτερης γραμμής ώστε,

σε περίπτωση που αυτός είναι μεγαλύτερος από το default μέγεθος

του απομονωτή (buffer), να μην διακοπεί "βίαια" η sort. Αυτό

βέβαια θα συνέβαινε μόνο στις περιπτώσεις -c ή -m που δεν

προβλέπουν φάση σορταρίσματος.

-Tdir Χρησιμοποιεί τον κατάλογο dir γιά το προσωρινό σορτάρισμα, αντί

του default /usr/tmp.

-d Η ταξινόμηση γίνεται αλφαριθμητικά (μόνο γράμματα, ψηφία και

κενά λαμβάνονται υπόψη).

-I Αγνοεί όσους χαρακτήρες ASCII είναι εκτός της περιοχής 040-0176.

-r Αντιστρέφει την έννοια των συγκρίσεων.

Τα ορίσματα +pos 1 και -pos 1 δείχνουν από πού ξεκινά και πού τελειώνει το κλειδί

ταξινόμησης (sort key), συμπεριλαμβανομένων και των χαρακτήρων που βρίσκονται

στις θέσεις pos 1 και pos 2 . Αν δεν υπάρχει -pos 2 εννοείται το τέλος της γραμμής. Εδώ θα

πρέπει να εισαχθεί η έννοια του πεδίου (field) μέσα σε ένα αρχείο που δεν είναι τίποτε

άλλο παρά μιά ακολουθία χαρακτήρων που τελειώνει με έναν διαχωριστή πεδίου (field

separator). Έτσι, τα pos 1 και pos 2 έχουν τη μορφή m.n που σημαίνει γιά το pos 1 τον

(n+1) χαρακτήρα του (m+1) πεδίου, ενώ γιά το pos 2 τον n χαρακτήρα του m πεδίου. Η

επιλογή -tx ορίζει τον x σαν field separator χαρακτήρα (ο x δεν θεωρείται μέρος του

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

απαιτείται στη σειρά με την οποία δίνονται τα διάφορα ορίσματα και επιλογές, γιατί

αλλάζει τελείως το τελικό αποτέλεσμα.

tr [-cds] [string 1 [string 2 ]]

19

Page 20: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

20

Αντιγράφει τη standard είσοδο στη standard έξοδο με αντικατάσταση ή διαγραφή

επιλεγμένων χαρακτήρων. Για τα strings μπορούν να χρησιμοποιηθούν για

παράδειγμα οι συντμήσεις [a-z] ή [a*n] (δηλ. n επαναλήψεις του a). Με -d

διαγράφονται όλοι οι χαρακτήρες εισόδου του string 1 , ενώ με -s γίνεται σύντμηση σε

απλούς χαρακτήρες όλων των επαναλαμβανόμενων χαρακτήρων εξόδου που

βρίσκονται στο string 2 .

uniq [-udc] [+n] [-n] [input [output]]

Διαβάζει το αρχείο input συγκρίνοντας συνεχόμενες γραμμές, σβήνει τις

επαναλαμβανόμενες γραμμές (από τη δεύτερη και κάτω) και γράφει το αποτέλεσμα στο

αρχείο output που βέβαια πρέπει να είναι διαφορετικό από το input. Με -u δίνει μόνο

τις γραμμές που δεν επαναλαμβάνονται στο αρχικό αρχείο. Με -d δίνει μόνο ένα

αντίγραφο των γραμμών που επαναλαμβάνονται στο αρχικό αρχείο. Με -c δίνει

κανονική έξοδο, αλλά πριν από κάθε γραμμή γράφει πόσες φορές αυτή είχε εμφανιστεί

στο αρχικό αρχείο. Με -n δεν λαμβάνει υπόψη στη σύγκριση τα πρώτα n πεδία (μαζί με

τα κενά), ενώ με +n αγνοεί τους πρώτους n χαρακτήρες.

wc [-lwc] [file...]

Μετρά γραμμές, λέξεις και χαρακτήρες καθενός file (ή της standard εισόδου αν δεν

υπάρχει όρισμα) και κρατά ένα γενικό λογαριασμό. Με -l ενημερώνει μόνο γιά τον

αριθμό των γραμμών, με -w μόνο γιά τον αριθμό των λέξεων και με -c μόνο γιά τον

αριθμό των χαρακτήρων.

Κεφάλαιο 6. Διαχείριση Αρχείων.

du [-s] [names]

Δίνει τον αριθμό των blocks που καταλαμβάνουν όλοι οι κατάλογοι και τα αρχεία που

περιέχονται σε καθένα κατάλογο και αρχείο που δηλώνεται με το όρισμα names

(default είναι το .).

df [-t] [-f] [file-systems]

Δίνει τον αριθμό των ελεύθερων blocks και των ελεύθερων κόμβων (inodes) που είναι

διαθέσιμοι στο on-line σύστημα αρχείων που δίνεται σαν όρισμα και το οποίο μπορεί

να είναι είτε το όνομα μιας συσκευής (π.χ. /dev/dsk/0s1) είτε το όνομα ενός καταλόγου

που έχει φορτωθεί στο σύστημα (π.χ. /usr). Χωρίς όρισμα, η df δίνει τον ελεύθερο χώρο

που υπάρχει σε όλα τα συστήματα αρχείων που είναι φορτωμένα.

ln [-f] [-s] file1 [file2...] target

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

κεφάλαιο

ls [-abcdfgilmnopqrstuxACFLR1] [names]

Για όσα από τα ορίσματα names είναι κατάλογοι, η ls δίνει τα περιεχόμενά τους, ενώ

για όσα είναι αρχεία, επαναλαμβάνει το όνομά τους μαζί με όσες άλλες πληροφορίες

20

Page 21: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

21

ζητούνται. Αν δεν δοθούν names εννοείται ο τρέχων κατάλογος. Όταν στα names

περιλαμβάνονται και κατάλογοι και αρχεία, τα ορίσματα αυτά ταξινομούνται πρώτα

καταλήλλως και πάντως τα αρχεία εμφανίζονται πριν τους καταλόγους και τα

περιεχόμενά τους. By default η έξοδος σορτάρεται αλφαβητικά, αλλά το format της

εξαρτάται αφενός από τις επιλογές που θα χρησιμοποιηθούν και αφετέρου από το αν η

έξοδος κατευθύνεται σε μια login συσκευή. Αν η standard έξοδος είναι ένα teletype, τα

περιεχόμενα των καταλόγων δίνονται by default κατά στήλες (και φυσικά κατά μήκος

της σελίδας), αλλιώς δίνονται ένα σε κάθε γραμμή. Αν όμως στα names

περιλαμβάνονται αρχεία, αυτά ταξινομούνται πάντα κατά πλάτος της σελίδας.

Υπάρχουν συστήματα στα οποία το default format είναι να δίνονται τα περιεχόμενα

κατά πλάτος της σελίδας χωρισμένα με κόμματα (-m επιλογή).

Οι βασικές επιλογές είναι:

-a Δίνει όλες τις εισόδους (περιεχόμενα), δηλαδή και τα ονόματα

αρχείων με “.” (δε δίνονται by default).

-c Χρησιμοποιεί το χρόνο που έγινε η τελευταία μεταβολή στον εν

λόγω κόμβο για ταξινόμηση (μαζί με την -t επιλογή) ή τύπωμα

(μαζί με την -l επιλογή).

-d Αν το όρισμα είναι κατάλογος δίνει μόνο το όνομά του.

-fΘεωρεί κάθε όρισμα σαν κατάλογο. Αυτή η επιλογή απενεργοποιεί τις -l, -t, -s και -r

και ενεργοποιεί την -a.

-g Κάνει ό,τι και η -l αλλά δε δίνει τον ιδιοκτήτη (owner), παρά μόνο

την ομάδα (group) στην οποία αυτός ανήκει.

-lΔίνει μια λίστα με σχεδόν όλες τις δυνατές πληροφορίες για κάθε αρχείο ή κατάλογο

(αριθμό συνδέσμων, ιδιοκτήτη, ομάδα, μέγεθος σε bytes και χρόνο

τελευταίας μετατροπής) όπως αναλύεται παρακάτω.

-m Τα περιεχόμενα δίνονται στην έξοδο συνεχόμενα και χωρισμένα

με κόμματα.

-n Όπως η -l, μόνο που δίνει τα PID και GID αντί για τα ίδια τα

ονόματα του ιδιοκτήτη και της ομάδας του.

-o Όπως η -l, μόνο που δε δίνει την ομάδα του ιδιοκτήτη.

-p Βάζει ένα / μετά από κάθε όνομα που είναι κατάλογος.

-rΤαξινομεί με αντίστροφο τρόπο.

-s Δίνει για κάθε είσοδο το μέγεθός της σε blocks.

-tΤαξινομεί με κριτήριο όχι το όνομα αλλά το χρόνο που συνέβηκε η τελευταία

τροποποίηση.

-u Χρησιμοποιεί το χρόνο της τελευταίας προσπέλασης αντί της

τελευταίας τροποποίησης, είτε για ταξινόμηση (μαζί με τη -t

επιλογή) είτε για τύπωμα (μαζί με τη -l επιλογή).

21

Page 22: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

22

-x Δίνει έξοδο σε στήλες αλλά το σορτάρισμα γίνεται κατά πλάτος

και όχι κατά μήκος της σελίδας.

-A Όπως η -a, μόνο που δε δίνει τους καταλόγους “.” και “..”. Για το

super-user αυτή η επιλογή είναι η default και απενεργοποιείται με

-A.

-C Δίνει έξοδο σε στήλες με σορτάρισμα κατά μήκος της σελίδας (έχει

νόημα όταν η standard έξοδος δεν είναι teletype).

-F Βάζει / μετά από ονόματα καταλόγων, * μετά από ονόματα

εκτελέσιμων αρχείων και @ μετά από ονόματα συμβολικών

συνδέσμων (symbolic links).

-L Αν το όρισμα είναι συμβολικός σύνδεσμος, δίνει το αρχείο ή τον

κατάλογο στον οποίο αναφέρεται αυτός ο σύνδεσμος και όχι τον

ίδιο το σύνδεσμο.

-R Δίνει με αντίστροφη σειρά τους υποκατάλογους που συναντά.

-1 Η έξοδος δίνεται σε μια στήλη άσχετα με τη συσκευή.

Η ls είναι γνωστή και με άλλα ονόματα σε ορισμένες εκδόσεις UNIX:

l ισοδυναμεί με ls -m

ll ισοδυναμεί με ls -l

lsf ισοδυναμεί με ls -F

lsr ισοδυναμεί με ls -R

lsx ισοδυναμεί με ls -x

Τώρα θα περιγραφεί ο τρόπος με τον οποίο δίνονται οι διάφορες πληροφορίες με την -l

επιλογή. Ο πρώτος χαρακτήρας είναι

d αν πρόκειται για κατάλογο

b αν πρόκειται για ειδικό αρχείο block

c αν πρόκειται για ειδικό αρχείο χαρακτήρων

l αν πρόκειται για συμβολικό σύνδεσμο

p αν πρόκειται για ειδικό αρχείο fifo (first-in, first-out)

n αν πρόκειται για ειδικό αρχείο δικτύου

- αν πρόκειται για συνηθισμένο αρχείο

Οι επόμενοι 9 χαρακτήρες αφορούν την προστασία του αρχείου και μεταφράζονται

σαν τρεις ομάδες των τριών bits η καθεμία. Η πρώτη ομάδα αναφέρεται στα

δικαιώματα του ιδιοκτήτη (owner's permissions), η δεύτερη στα δικαιώματα των

υπόλοιπων της ομάδας του και η τρίτη στα δικαιώματα όλων των υπόλοιπων χρηστών.

Κάθε τέτοια ομάδα αποτελείται από τρεις χαρακτήρες: ο πρώτος αναφέρεται στη

δυνατότητα να διαβαστεί το αρχείο (r), ο δεύτερος στη δυνατότητα να τροποποιηθεί

(w) και ο τρίτος στη δυνατότητα να εκτελεστεί (x). Αν η αντίστοιχη δυνατότητα δεν

παρέχεται, υπάρχει μια -. Αν πρόκειται για κατάλογο, το δικαίωμα εκτέλεσης

22

Page 23: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

23

μεταφράζεται σα δικαίωμα να ψάξει κανείς σ' αυτόν τον κατάλογο για να βρεί ένα

συγκεκριμένο αρχείο. Όταν δίνονται τα μεγέθη των αρχείων ενός καταλόγου, δίνεται

και ο συνολικός αριθμός των blocks.

mkdir dirname ...

Δημιουργείται κατάλογος (ή καταλόγοι) με το όνομα dirname κάτω από τον τρέχοντα

κατάλογο, αρκεί να έχει ο χρήστης δικαίωμα γραψίματος (write permission) για τον

κατάλογο αυτό.

mv [-f] file 1 [file 2 ...] target

Με αυτή την εντολή αλλάζει το όνομα ενός αρχείου ή μεταφέρεται σε άλλον κατάλογο,

όπως περιγράφηκε στο προηγούμενο κεφάλαιο.

more [-n][-cdflsu][+lnumber][+/pattern][name ...]

page [more options ]

Η more παρέχει τον πιό απλό τρόπο να εξέτασης των περιεχομένων ενός αρχείου

κειμένου (text file) με όνομα name. Χωρίς προσδιορισμό του name, διαβάζει από τη

standard είσοδο. Δίνει το κείμενο οθόνη-οθόνη σταματώντας κάθε φορά. Με <SPACE>

προχωρά στην επόμενη οθόνη, με <RETURΝ> προχωρά στην επόμενη σειρά. Γενικά

δουλεύει παρόμοια με τη pg και οι βασικές επιλογές της είναι

-n Χρησιμοποιεί ένα παράθυρο n γραμμών για να δείχνει κάθε φορά

στην οθόνη αντί για το default. (Το default είναι k-2 γραμμές, όπου

k οι γραμμές που χωράνε σε μιά οθόνη).

-f Μετρά τις "λογικές" γραμμές και όχι τις γραμμές της οθόνης.

+lnumber Ξεκινά από τη γραμμή με αύξοντα αριθμό lnumber.

+pattern Ξεκινά δύο γραμμές πριν από τη γραμμή που περιέχει την έκφραση

pattern.

Με την page, η οθόνη "καθαρίζεται" πριν προχωρήσει στην επόμενη οθόνη και το

default παράθυρο που χρησιμοποιεί είναι k-1 γραμμές. Αν η more διαβαζει από αρχείο

και όχι από διοχέτευση (pipe), τότε στο κάτω μέρος της οθόνης εμφανίζεται και το

ποσοστό του αρχείου (σε χαρακτήρες) που έχει ήδη διαβαστεί. Όντας τώρα μπροστά σε

μιά οθόνη της more, εκτός από το <SPACE> και το <RETURΝ> ο χρήστης μπορεί να

δώσει:

i <SPACE> Δίνει τις επόμενες i γραμμές.

d Δίνει τις επόμενες 11 γραμμές.

iz Προχωρά στην επόμενη σελίδα και το i γίνεται νέο μέγεθος

παραθύρου.

is Παραβλέπει τις επόμενες i γραμμές.

if Παραβλέπει τις επόμενες i οθόνες.

q Σταματά η more.

= Δίνει τον αριθμό της τρέχουσας γραμμής.

23

Page 24: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

24

v Ξεκινά τον συντάκτη vi στην τρέχουσα γραμμή.

h Παρέχει βοήθεια.

i/expr Ψάχνει για την i-στή εμφάνιση της έκφρασης expr και θέτει το

δρομέα δύο γραμμές πριν.

in Ψάχνει για την i-στή εμφάνιση της πιο πρόσφατα δοσμένης

έκφρασης.

' Πάει στο σημείο όπου άρχισε το πιο πρόσφατο ψάξιμο. Αν δεν

υπάρχει τέτοιο, πάει στην αρχή του αρχείου.

!cmd Καλεί το φλοιό με την εντολή cmd.

:f Δίνει το όνομα του τρέχοντος αρχείου και τον αριθμό της τρέχουσας

γραμμής.

. Επαναλαμβάνει την προηγούμενη εντολή.

i:n Πηγαίνει στο i-στό επόμενο αρχείο που έχει δοθεί σαν όρισμα στην

more.

i:p Πηγαίνει στο i-στό προηγούμενο αρχείο.

<ΕRASE> Δίνει το ποσοστό του αρχείου που έχει ήδη διαβαστεί.

rm [-fri] file ...

rmdir dir ...

Η rm σβήνει τις εισόδους για ένα ή περισσότερα αρχεία ενός καταλόγου, αν δε η

είσοδος είναι και ο τελευταίος σύνδεσμος για το αρχείο, τότε αυτό καταστρέφεται. Για

να χρησιμοποιηθεί πρέπει να έχει ο χρήστης δικαίωμα γραψίματος για τον κατάλογο

αλλά όχι απαραίτητα και για το αρχείο. Με την επιλιγή -i και αν η standard είσοδος

είναι ένα τερματικό, ρωτά γιά επιβεβαίωσ, οπότε όποια απάντηση αρχίζει με y

θεωρείται ως κατάφαση (με κάθε άλλη απάντηση το αρχείο δεν σβήνεται). Με την

επιλογή -f όμως, σβήνει το αρχείο χωρίς να ρωτά για επιβεβαίωση. Με -r dir σβήνει τα

περιεχόμενα του καταλόγου dir και όχι τον ίδιο τον κατάλογο. Η rmdir dir σβήνει τις

εισόδους των καταλόγων dir, αρκεί αυτοί να είναι άδειοι. Γενικά πάντως, πρόκειται για

εντολές που πρέπει να χρησιμοποιούνται με πολλή προσοχή για ευνόητους λόγους.

touch [-amc][mmddhhmm[yy]] files

Ενημερώνει (δηλαδή αλλάζει) τους χρόνους (τελευταίας) προσπέλασης και (τελευταίας)

τροποποίησης των files. Ο χρόνος προσδιορίζεται όπως στην date και αν δεν δίνεται,

εννοείται η τρέχουσα ώρα. Αν ένα από τα files δεν υπάρχει, τότε δημιουργείται, εκτός

αν χρησιμοποιηθεί η επιλογή -c. Με -a και -m ενημερώνει μόνο τους χρόνους

προσπέλασης και τροποποίησης αντίστοιχα.

Kεφάλαιο 7. Εντολές Εισόδου/Εξόδου.

banner strings

24

Page 25: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

25

Τυπώνει τα ορίσματά της (μέχρι 10 χαρακτήρες το καθένα) στην standard έξοδο με

μεγάλα γράμματα και καθενα σε ξεχωριστή γραμμή, εκτός αν κάτι περιέχεται σε

εισαγωγικά οπότε τυπώνεται σε μιά γραμμή.

cancel [ids] [printers] [-a] [-e] [-i] [-uuser]

Ματαιώνει τις αιτήσεις για εκτύπωση που έχουν γίνει με την εντολή lp. Πρέπει να έχει

σαν όρισμα τουλάχιστον ένα από τα ids των προς ματαίωση αιτήσεων (όπως αυτά

επιστρέφονται από την εντολή lp) ή έναν από τους printers, οπότε ματαιώνει την

αίτηση που τυπώνεται εκείνη τη στιγμή στον εκτυπωτή. Φυσικά, αν πρόκειται για

remote εκτυπωτή, μόνον ο ιδιοκτήτης της αίτησης μπορεί να την ακυρώσει. Με -a

ακυρώνονται όλες οι αιτήσεις που έχουν γίνει στον συγκεκριμένο εκτυπωτή. Με -e

ακυρώνονται μόνο τοπικές αιτήσεις. Οι επιλογές -i και -uuser μπορούν να

χρησιμοποιηθούν μόνον από τον super-user. Σε κάθε περίπτωση, η ακύρωση μιάς

αίτησης που τυπώνεται εκείνη τη στιγμή, ελευθερώνει τον εκτυπωτή να προχωρήσει

στην επόμενη αίτηση.

cat [-u] [-s] [-v] [-t] [-e] file ...

Δίνει τη δυνατότητα να συγχώνευσης, αντιγραφής και εκτύπωσης αρχείων ως εξής:

Διαβάζει τα file το ένα μετά το άλλο με τη σειρά που δίνονται και γράφει το

αποτέλεσμα στην standard έξοδο. ΄Ετσι, με redirection μπορεί να οδηγηθεί το

αποτέλεσμα αυτό είτε σε έναν εκτυπωτή (π.χ. cat file1 >/dev/lp00) είτε σε κάποιο άλλο

αρχείο. Βέβαια, το προηγούμενο περιεχόμενο αυτού του αρχείου θα χαθεί αν δεν γίνει

redirection με >>). Χωρίς file ή με το όρισμα -, η cat διαβάζει από την standard είσοδο.

Με -v εκτυπώνονται και οι μη-εκτυπώσιμοι χαρακτήρες (control, μη ASCII και DEL

χαρακτήρες) εκτός των tabs, newlines και form-feeds. Με -vt τυπώνονται και τα tabs

σαν ^I, ενώ με -ve τυπώνετε ένα $ στο τέλος κάθε γραμμής.

cpio -o [aBcxvCh]

cpio -i [BdcrtuxvmfPsSb6R] [patterns]

Είναι μιά από τις εντολές του UNIX γιά γράψιμο σε (copy out) ή διάβασμα από (copy

in) streaming tape και οι επιλογές της μπορεί να διαφέρουν από σύστημα σε σύστημα.

Πάντως, η cpio -o (copy out) διαβάζει αρχεία από την standard είσοδο και τα

αντιγράφει στην standard έξοδο μαζί με το path-name τους και τις πληροφορίες για

την κατάστασή τους, ενώ η cpio -i (copy in) διαβάζει από την standard είσοδο τα

αρχεία των οποίων τα ονόματα ταιριάζουν με τα patterns, με την προυπόθεση αυτά να

έχουν προηγουμένως γραφεί με cpio -o.

dd [option=value] ...

Αντιγράφει το αρχείο εισόδου στην έξοδο κάνοντάς του (προαιρετικά) και κάποιες

μετατροπές. Την είσοδο και την έξοδο τις προσδιορίζει ο χρήστης με if και of

αντίστοιχα και τις μετατροπές με conv. Δηλαδή, γιά παράδειγμα, με

25

Page 26: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

26

if=file προσδιορίζεται το input file σαν είσοδος (και η standard έξοδος

σαν έξοδος)

of=file προσδιορίζεται το output file σαν έξοδος

conv=swab σαρώνεται κάθε ζεύγος από bytes

count=n αντιγράφονται μόνον n blocks από την είσοδο.

echo [arguments...]

Γράφει στην standard έξοδο τα ορίσματά της χωρισμένα μεταξύ τους με κενά ή

κόμματα. Αν τα ορίσματα υπονοούν κάποια εντολή πρέπει να μπούν σε ανάποδα

εισαγωγικά, ενώ αν δεν δοθούν ορίσματα η echo επιστρέφει μια κενή γραμμή. Είναι

χρήσιμη εντολή για παραγωγή διαγνωστικών σε αρχεία εντολών και για να στέλνονται

γνωστά δεδομένα σε διοχέτευση (pipe).

enable [printers]

disable [-c] [-r [reason]] printers

Η enable ενεργοποιεί τους εκτυπωτές με ονόματα printers ώστε αυτοί να αρχίσουν να

δέχονται αιτήσεις με την lp. Η disable τους απενεργοποιεί, όμως by default όποιες

αιτήσεις τυπώνονται εκείνη τη στιγμή ολοκληρώνονται, εκτός αν δοθεί η -c επιλογή. Με

την επιλογή -r [reason] η απενεργοποίηση των printers συνδέεται με τη reason και αυτή

η σύνδεση παραμένει μέχρι την επόμενη -r επιλογή. Αν η -r δίνεται χωρίς όρισμα ή δεν

δίνεται καθόλου, εννοείται κάποια default αιτία, η οποία περιγράφεται από την lpstat.

line

Αντιγράφει μιά γραμμή (μέχρι να βρει new-line) από την standard είσοδο στην

standard έξοδο. Συνήθως χρησιμοποιείται μέσα σε αρχεία φλοιού (shell files) για να

γίνεται δυνατή η ανάγνωση από το τερματικό του χρήστη.

lp [-c] [-ddest] [-m] [-nnumber] [-ooption] [-s] [-ttittle] [-w] [files]

Με την lp μπορεί να σταλεί μιά αίτηση (request) στον LP εκτυπωτή. Τα αρχεία files

τυπώνονται με τη σειρά που δίνονται, ενώ αν δεν δοθούν files ή δοθεί -, εννοείται η

standard είσοδος (μπορεί βέβαια να δοθεί και - και ονόματα αρχείων). Η lp συνδέει

κάθε αίτηση με ένα ID που σας επιστρέφει στη standard έξοδο. Αυτό το ID μπορεί να

χρησιμοποιηθεί γιά την ακύρωση της αίτησης (με cancel) ή γιά την παρουσίαση της

κατάστασης στην οποία βρίσκεται (με lpstat). Οι διάφορες επιλογές μπορούν να τεθούν

με οποιαδήποτε σειρά και να παρεμβάλλονται μεταξύ των ονομάτων αρχείων προς

εκτύπωση:

-c Φτιάχνει αντίγραφα των αρχείων που έχει ζητηθεί να εκτυπωθούν

και έτσι μπορεί ο χρήστης αφού έχει στείλει την lp να μεταβάλλει ή

και να σβήσει τα αρχεία αυτά. Η default συμπεριφορά είναι να

φτιάχνει τέτοια αντίγραφα μόνον όταν δεν μπορεί να κάνει

εκτύπωση με απλή σύνδεση των αρχείων αυτών.

26

Page 27: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

27

-ddest Ορίζεται από ποιόν εκτυπωτή ή ομάδα εκτυπωτών θα γίνει η

εκτύπωση. Αν το dest είναι ομάδα εκτυπωτών, η εκτύπωση θα γίνει

από τον πρώτο διαθέσιμο εκτυπωτή αυτής της ομάδας. Αν, βέβαια,

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

(εντολές accept και και lpstat). Πάντως, σε κάθε σύστημα υπάρχει

default dest που πληροφορείται ο χρήστης με την lpstat μαζί με όλα

τα άλλα ονόματα dest.

-m Στέλνει mail όταν τελειώσει η εκτύπωση των αρχείων (by default δεν

στέλνει τίποτα).

-nnumber Τυπώνει number αντίγραφα.

-ooptions Προσδιορίζονται κάποια options που εξαρτώνται από τον εκτυπωτή

και γιά τα οποία μπορεί ο χρήστης να πληροφορηθεί από το ειδικό

model script που συνδέεται με το συγκεκριμένο εκτυπωτή (π.χ. /

usr/spool/lp/model).

-s Ο εκτυπωτής δε στέλνει μηνύματα του τύπου: request ID is ....

-ttittle Τυπώνει το tittle στην banner (πρώτη) σελίδα.

-w Στέλνει μήνυμα στο τερματικό όταν τελειώσει η εκτύπωση των files,

αλλά αν δεν είναι ο χρήστης συνδεδεμένος στο σύστημα, του στέλνει

mail.

lpstat [options]

Περιγράφει την τρέχουσα κατάσταση (status) του συστήματος εκτυπώσεων. Χωρίς

options εννοούνται μόνο οι αιτήσεις που έχει κάνει ο χρήστης με lp. ΄Ο,τι ορίσματα δεν

είναι options θεωρούνται ids αιτήσεων οπότε η lpstat επιστρέφει την κατάσταση μόνον

αυτών των αιτήσεων. Κάποιες από τις παρακάτω εντολές ακολουθούνται από μιά

προαιρετική list της οποίας τα στοιχεία μπορούν να γραφούν με δύο τρόπους: είτε

χωρισμένα με κόμματα, είτε μέσα σε διπλά εισαγωγικά και χωρισμένα με κόμματα

και/ή ένα ή περισσότερα κενά. Παράλειψη της list μετά από μιά επιλογή, σημαίνει πως

ζητούνται όλες οι πληροφορίες που σχετίζονται μ' αυτή την επιλογή:

-a[list] Δείχνει αν δέχονται ή όχι αιτήσεις οι εκτυπωτές ή οι ομάδες

εκτυπωτών των οποίων τα ονόματα περιλαμβάνονται στη list.

-c[list] Δίνει τα ονόματα και τα μέλη των ομάδων εκτυπωτών που

περιλαμβάνονται στη list.

-d Δίνει τον default προορισμό του συστήματος γιά την lp.

-o[list] Δίνει την κατάσταση των αιτήσεων εξόδου. Η list μπορεί να

περιλαμβάνει ονόματα εκτυπωτών, ομάδων εκτυπωτών ή ids

αιτήσεων.

-p[list] Δίνει την κατάσταση των εκτυπωτών της list.

27

Page 28: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

28

-s Δίνει μιά περίληψη που περιλαμβάνει την κατάσταση του LP

scheduler, τον default προορισμό του συστήματος, μιά λίστα των

ονομάτων και των μελών των ομάδων εκτυπωτών και μιά λίστα των

εκτυπωτών και των συσκευών που είναι συνδεδεμένες με αυτούς.

-t Δίνει όλες τις δυνατές πληροφορίες (ισοδυναμεί με -rsapo).

-u[list] Δίνει την κατάσταση των αιτήσεων εξόδου γιά τους χρήστες που

περιλαμβάνονται στη list.

-v[list] Δίνει τα ονόματα των εκτυπωτών που υπάρχουν στη list, καθώς και

τα path-names των συσκευών που συνδέονται μ' αυτούς τους

εκτυπωτές.

pr [options] [files]

Δίνει τα files στη standard έξοδο. Αν δεν δίνονται files ή αντί files δίνεται -, τότε

εννοείται η standard είσοδος. Τα files δίνονται by default σελιδοποιημένα. Στην αρχή

κάθε σελίδας υπάρχει η ημερομηνία, η ώρα, το όνομα του αρχείου και ο αύξων αριθμός

της σελίδας. Αλλα default χαρακτηριστικά είναι:

· Οι στήλες είναι ίσου πλάτους και χωρίζονται με τουλάχιστον ένα κενό (γραμμές που

δεν ταιριάζουν κολοβώνονται).

· Το πλάτος μιάς γραμμής εξόδου είναι 72 θέσεις χαρακτήρων γιά έξοδο κατά στήλες

ίσου πλάτους.

· Το μήκος μιάς σελίδας εξόδου είναι 66 γραμμές.

· Η pr προχωρά από μόνη της στην επόμενη σελίδα.

Οι βασικές επιλογές είναι:

+k αρχίζει από την k σελίδα

-k δίνει σαν έξοδο την k στήλη

-a δίνει την έξοδο σε στήλες κατά πλάτος της σελίδας

-m συγχωνεύει και δίνει όλα τα files συγχρόνως, ένα ανά στήλη

-wk θέτει σαν πλάτος γραμμής k θέσεις χαρακτήρων

-lk θέτει σαν μήκος σελίδας k γραμμές

-h τυπώνει το επόμενο όρισμα σαν επικεφαλίδα αντί γιά το όνομα του

αρχείου

-p σταματάει ανάμεσα στις σελίδες αν η standard έξοδος είναι η οθόνη

του τερματικού σας και περιμένει <RETURN> γιά να προχωρήσει

-sc χωρίζει τις στήλες με το χαρακτήρα c, χωρίς να κολοβώνει τις

γραμμές.

tail [+-[number] [lbc[f]]] [file]

Αντιγράφει το file στην standard έξοδο ξεκινώντας από ένα συγκεκριμένο σημείο του

αρχείου. Χωρις το file, εννοείται η standard είσοδος. Η αντιγραφή ξεκινά είτε +number

από την αρχή είτε -number από το τέλος της εισόδου (-10 είναι το default). Ο αριθμός

28

Page 29: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

29

number μπορεί να μετρά γραμμές, blocks ή χαρακτήρες ανάλογα με τις επιλογές l, b ή

c (το default είναι γραμμές).

tar [key] [[file | -Cdirectory]...]

Διαβάζει ή γράφει αρχεία ή καταλόγους από και προς μαγνητική ταινία ή δίσκο. Γιά

να διαβαστεί κάτι με tar πρέπει να έχει γραφεί με tar. Περισσότερα γι' αυτή την εντολή

αναφέρονται στο ΜΕΡΟΣ ΙΙ.

tee [-i] [-a] [file] ...

Μ' αυτή την εντολή ουσιαστικά διαχωρίζεται η έξοδος. Η tee αντιγράφει την standard

είσοδο τόσο στην standard έξοδο όσο και στα files (οπότε σβήνει τα προηγούμενα

περιεχόμενα των files). Με την επιλογή -a δεν σβήνει τα προηγούμενα περιεχόμενα των

files, αλλά προσθέτει στο τέλος. Γιά παράδειγμα η εντολή

who | tee -a dimitra

δίνει στην οθόνη μιά λίστα όλων των χρηστών και συγχρόνως προσθέτει αυτή τη λίστα

και στο τέλος του αρχείου dimitra.

Κεφάλαιο 8. Εντολές για τον προγραμματιστή

env [-] [name=value] ... [command args]

Μ'αυτή την εντολή ορίζεται ένα συγκεκριμένο περιβάλλον για την εκτέλεση εντολών,

μεταβάλλοντας το ήδη υπάρχον. Ορίσματα της μορφής name=value συγχωνεύονται με

το ήδη υπάρχον περιβάλλον πριν εκτελεστεί η εντολή, ενώ αν δοθεί -, τότε το ήδη

υπάρχον περιβάλλον αγνοείται τελείως. Αν δεν ορίζεται εντολή προς εκτέλεση, τότε

απλά τυπώνεται το προκύπτον περιβάλλον με ένα ζεύγος name=value ανά γραμμή.

nice [-n] command [arguments]

Εκτελεί την εντολή command με χαμηλότερη προτεραιότητα. Ο αριθμός n είναι όρισμα

πρασαύξησης (increment argument) που παίρνει τιμές στην περιοχή 1-19 και όταν

δίνεται, χρησιμοποιείται (10 είναι η default τιμή του). Μόνον ο superuser μπορεί να

τρέχει εντολές με προτεραιότητα ψηλότερη της συνηθισμένης χρησιμοποιώντας

αρνητικό n π.χ. --10.

nohup command [arguments]

Εκτελεί την εντολή command αγνοώντας τις καθυστερήσεις (hangups) και τις διακοπές

(quits). Αν η έξοδος δεν έχει υποστεί ανακατεύθυνση (redirection) από το χρήστη, τότε

και η standard έξοδος και τα standard λάθη στέλνονται στο αρχείο nohup.out. Αν αυτό

δεν έχει δικαίωμα γραψίματος (write permission) στον τρέχοντα κατάλογο, τότε η

έξοδος ανακατευθύνεται στο $HOME/nohup.out. Η nohup μπορεί να εφαρμοστεί και

σε pipelines ή λίστες εντολών, τοποθετώντας τις pipelines και τις λίστες εντολών στο

αρχείο file (shell procedure). Τότε, δίνοντας

nohup sh file

29

Page 30: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

30

η nohup εφαρμόζεται σε όλα τα περιεχόμενα του file. Αυτά θα μπορούσε για

παράδειγμα να είναι

tbl ofile | eqn | nroff > nfile

renice priority [[-p]PID...][[-g]GID...][[-u]UID...]

Η renice αλλάζει την προτεραιότητα μιάς ή περισσότερων διαδικασιών που "τρέχουν".

Οι διαδικασίες αυτές μπορεί να δίνονται μεμονωμένα με το PID τους (-p επιλογή), είτε

με το UID ή το login name του χρήστη στον οποίο ανήκουν (-u επιλογή) οπότε η renice

εφαρμόζεται σ' όλες τις διαδικασίες αυτού του χρήστη, είτε με το GID ή το group name

της ομάδας στην οποία ανήκουν (-g επιλογή) οπότε αλλάζει η προτεραιότητα όλων των

διαδικασιών που ανήκουν σ' αυτή την ομάδα. Ο καθε χρήστης (εκτός του super-user)

μπορεί να αλλάξει την προτεραιότητα μόνο των δικών του διαδικασιών και μάλιστα

μπορεί μόνο να αυξήσει την priority (όσο πιό χαμηλή είναι η προτεραιότητα, τόσο πιό

γρήγορα τρέχει η διαδικασία).

size [-o] [-x] [-V] files

Η size παράγει πληροφορίες σχετικά με το μέγεθος καθενός από τα κομμάτια (sections)

ενός object αρχείου. Δίνει με δεκαδικούς αριθμούς το μέγεθος των sections κειμένου,

δεδομένων και αρχικοποιημένων δεδομένων (bss), όπως και το συνολικό μέγεθος του

object αρχείου. Με -o οι αριθμοί δίνονται οκταδικά, ενώ με -x δίνονται δεκαεξαδικά.

sleep time

Αναβάλλει την εκτέλεση γιά time δευτερόλεπτα και εκτελεί την εντολή είτε μετά από

ένα χρονικό διάστημα:

(sleep 105 ; command)&

είτε κάθε τόσο:

while true

do

command

sleep 37

done

test expr

Η test δίνει ως κατάσταση εξόδου μηδέν αν η τιμή της έκφρασης expr είναι αληθής, ενώ

αν είναι ψευδής ή αν δεν υπάρχουν ορίσματα δίνει μη μηδενική κατάσταση εξόδου. Τα

παρακάτω είναι τα σημαντικότερα που χρησιμοποιούνται για να φτιαχτεί η expr:

-r file αληθής αν το file υπάρχει και μπορεί να διαβαστεί

-w file αληθής αν το file υπάρχει και μπορεί να μετατραπεί

-x file αληθής αν το file υπάρχει και είναι εκτελέσιμο

-f file αληθής αν το file υπάρχει και είναι συνηθισμένο αρχείο

-d file αληθής αν το file υπάρχει και είναι κατάλογος

-c file αληθής αν το file υπάρχει και είναι ειδικό αρχείο χαρακτήρων

30

Page 31: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

31

-b file αληθής αν το file υπάρχει και είναι ειδικό αρχείο block

-p file αληθής αν το file υπάρχει και είναι named pipe (fifo)

-z s1 αληθής αν το μήκος του string s1 είναι μηδέν

-n s1 αληθής αν το μήκος του string s1 δεν είναι μηδέν

s1=s2 αληθής αν τα strings s1 και s2 είναι ίδια

s1!=s2 αληθής αν τα strings s1 και s2 δεν είναι ίδια

s1 αληθής αν το string s1 δεν είναι το null string

n1 -eq n2 αληθής αν οι ακέραιοι n1 και n2 είναι αλγεβρικά ίσοι (αντί για -eq

μπορεί να τεθεί όποια από τις συγκρίσεις -ne, -gt, -ge, -lt και -le)

και μπορούν να συνδιαστούν μεταξύ τους με τους τελεστές

! τελεστής άρνησης

-a δυαδικός τελεστής "και" που προηγείται του -o

-o δυαδικός τελεστής "ή"

(expr) παρενθέσεις για ομαδοποιήσεις.

time command

Εκτελεί την εντολή command και δίνει το χρόνο που πέρασε, το χρόνο που

καταναλώθηκε στο σύστημα και το χρόνο που καταναλώθηκε για την εκτέλεση της

command σε δευτερόλεπτα.

timex [options] command

Λειτουργεί όπως και η time μόνο που με τη βοήθεια των διαφόρων επιλογών

επεξεργάζεται υπολογιστικά δεδομένα για την command και δίνει και τη συνολική

δραστηριότητα του συστήματος κατά την εκτέλεση της command.

wait

Αυτή η εντολή περιμένει μέχρι να ολοκληρωθούν όλες οι διαδικασίες που αρχίζουν με

& και αναφέρει τους τυχόν ανώμαλους τερματισμούς διαδικασιών.

Κεφάλαιο 9. Δικαιώματα προστασίας αρχείων.

Ο ιδιοκτήτης ενός αρχείου (ή καταλόγου) έχει τη δυνατότητα να καθορίζει σε ποιόν

επιτρέπει να διαβάζει, να μεταβάλλει, να χρησιμοποιεί και να εκτελεί το αρχείο αυτό. Ο

super-user έχει τη δυνατότητα αυτή γιά όλα τα αρχεία. Η άδεια (permission) που έχει θέσει ο

ιδιοκτήτης γιά κάθε αρχείο του, φαίνεται με την εντολή ls -l με τη μορφή που έχει ήδη

περιγραφεί εκεί. Η άδεια αυτή αλλάζει με την εντολή chmod ή την umask.

chmod mode files

Παραχωρείται ή αφαιρείται η άδεια γιά ανάγνωση, μετατροπή ή εκτέλεση (r,w,x) των

files γιά τρεις τύπους χρηστών (u δηλαδή τον ιδιοκτήτη των files, g δηλαδή τα άλλα

μέλη της ομάδας του ιδιοκτήτη και o δηλαδή όλους τους υπόλοιπους χρήστες) σύμφωνα

με το mode που μπορεί να είναι είτε απόλυτο είτε συμβολικό. ΄Ενα συμβολικό mode

έχει τη μορφή

31

Page 32: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

32

[who] op permission [op permission]

Το who μέρος είναι ένας συνδιασμός των γραμμάτων u (user), g (group) και o (others),

ενώ αν παραλείπεται εννοείται ugo by default. Το op μπορεί να

είναι + γιά παραχώρηση άδειας, - γιά αφαίρεση ή = γιά να τεθεί

συνολικά η άδεια απ' την αρχή. Το permission είναι ένας

συνδιασμός των γραμμάτων r (read), w (write) ή x (execute). Το

απόλυτο mode είναι ένας οκταδικός αριθμός φτιαγμένος ως εξής:mode = d1 d2 d3

όπου το κάθε ένα από τα ψηφία di αντιστοιχεί στα permissions των owner, group και

others αντίστοιχα. και η τιμή του είναι:

di = r * 22 + w* 2

1 + x*2

0 και τα r, w, x έχουν τιμή 1 αν θέλουμε να δωθεί το αντίστοιχο

permission και 0 στην αντίθετη περίπτωση.

Γιά παράδειγμα, με την εντολή chmod 644 file επιτρέπεται στον owner να διαβάζει και

να μεταβάλλει το file (όχι όμως και να το εκτελεί) και σε οποιονδήποτε άλλο χρήστη να

το διαβάζει μόνον (δηλαδή με το ls -l θα βλέπαμε rw-r--r-- ).

chown owner files

chgrp group files

Η chown θέτει τον owner ως ιδιοκτήτη των files. Ο owner μπορεί να είναι είτε PID είτε

login name. Η chgrp θέτει την group ως ομάδα των files. Η group μπορεί να είναι είτε

GID είτε group name.

Κεφάλαιο 10. Σύντομη αναφορά στο vi συντάκτη

(visual editor).

Γιά τη δημιουργία ενός αρχείου (file) είναι απαραίτητη η κλήση ενός από τους

συντάκτες (editors) του UNIX. O ed είναι ο standard editor του UNIX, όμως είναι κάπως

δύσχρηστος γιατί επεξεργάζεται το κείμενο γραμμή-γραμμή, σε αντίθεση με τον vi που είναι

fullscreen editor, δηλαδή παρουσιάζει το κείμενο σε όλη την οθόνη παρέχοντας έτσι

δυνατότητες καλύτερης επεξεργασίας.

ΚΑΤΑΣΤΑΣΕΙΣ

Κατάσταση Εντολών (Command Mode)

32

Page 33: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

33

Όταν δεν εισάγεται ή μεταβάλλεται κείμενο, ο δρομέας (cursor) μπορεί να κινείται

και να εκτελούνται εντολές (π.χ. αναζήτηση, διαγραφή, σώσιμο). Ιδιαίτερη προσοχή πρέπει να

δίνεται στην εκτέλεση τέτοιων εντολών. Αν, για παράδειγμα, ο vi συμπεριφέρεται περίεργα,

πρέπει να ελεγχθεί το πλήκτρο CAPS.

Κατάσταση Εισαγωγής Κειμένου (Insert Mode)

Όταν εισάγεται κείμενο ή μεταβάλλονται περισσότεροι από ένας χαρακτήρες του

κειμένου, δεν μπορούν να χρησιμοποιηθούν οι εντολές της Command Mode. Με

συγκεκριμένες εντολές πραγματοποιείται η "μεταφορά" σε Insert Mode, οπότε στο κάτω δεξιά

μέρος της οθόνης του τερματικού εμφανίζεται η ένδειξη INS MODE. Για να εγκαταληφθεί η

Insert Mode πρέπει να πατηθεί το ESC πλήκτρο, οπότε εξαφανίζεται και η σχετική ένδειξη.

Ιδιαίτερη προσοχή, λοιπόν, πρέπει να δίνεται στη διαφορετική χρήση που έχουν τα διάφορα

πλήκτρα, ανάλογα με την κατάσταση (mode) στην οποία εργάζεται ο χρήστης.

33

Page 34: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

34

ΓΕΝΙΚΕΣ ΠΑΡΑΤΗΡΗΣΕΙΣ

Για την κατανόηση του κειμένου που ακολουθεί, είναι απαραίτητες οι παρακάτω

διευκρινήσεις:

1 Εντολές που ξεκινούν με : (colon) εμφανίζονται πάντα στο κάτω μέρος της οθόνης και

πρέπει να τελειώνουν με το πλήκτρο RETURN. Αυτές οι εντολές αντιπροσωπεύουν escape

εντολές για τον ex editor. Επομένως, μπορεί κανείς να ανατρέχει στο σχετικό εγχειρίδιο

χρήσης (manual) του ex editor για περισσότερες λεπτομέρειες.

1 file συμβολίζει το όνομα ενός αρχείου.

1 cursor_cmd συμβολίζει μιά εντολή μετακίνησης του δρομέα (cursor movement

command) π.χ. G, j, w, b.

1 char συμβολίζει ένα μόνο χαρακτήρα.

1 str συμβολίζει μιά ακολουθία χαρακτήρων (character string).

1 CTRL-X σημαίνει πως, κρατώντας πατημένο το πλήκτρο CTRL πρέπει να πατηθεί

συγχρόνως και το πλήκτρο X.

1 n,m μπορεί να είναι δύο αριθμοί γραμμών αρχείου (π.χ. 4,50), δείκτες γραμμών αρχείου

(π.χ. .,$) ή ολόκληρες εκφράσεις, δηλαδή ακολουθίες χαρακτήρων (π.χ. /

string1/,/string2/).

1 (a-z) συμβολίζει επιλογή ενός γράμματος από το a ώς το z.

1 Με το πλήκτρο ESC σε Insert Mode εγκαταλείπεται η Κατάσταση Εισαγωγής Κειμένου με

ταυτόχρονη μεταφορά στην Κατάσταση Εντολών, ενώ σε Command Mode απλά

ακυρώνονται ημιτελείς εντολές.

1 Με το πλήκτρο RETURN σε Insert Mode δηλώνεται το τέλος γραμμής, ενώ σε Command

Mode δηλώνεται το τέλος εντολής που ξεκινά με :.

1 Ο όρος "τρέχουσα γραμμή" (current line) δηλώνει τη γραμμή στην οποία είναι

τοποθετημένος ο δρομέας.

1 Στο βοήθημα που ακολουθεί, παρουσιάζεται ό,τι ακριβώς πρέπει να πληκτρολογήσει ο

χρήστης για την εκτέλεση της εκάστοτε εντολής, ενώ στο δεξί μέρος περιγράφεται το

αποτέλεσμα αυτής της εντολής, καθώς και άλλες σχετικές παρατηρήσεις.

Ξεκίνημα μιάς vi διαδικασίας

Όλες οι εντολές αυτής της ομάδας δίνονται ενόσω ο χρήστης δουλεύει στο shell και

επομένως πρέπει στο τέλος να συνοδεύονται από το πλήκτρο RETURN. Για περισσότερες

πληροφορίες σχετικά με την εντολή vi, συνιστάται η παραπομπή τη διαθέσιμη είσοδο manual

(δηλαδή η πληκτρολόγηση τηε εντολής man vi).

34

Page 35: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

35

vi file Συντάσσεται το αρχείο με όνομα file. Αν πρόκειται για καινούργιο

αρχείο, με αυτή την εντολή δημιουργείται κιόλας, ενώ στο κάτω

μέρος της οθόνης εμφανίζεται η ένδειξη "file"[New file].

vi -r fileΣυντάσσεται (δηλαδή υφίσταται επεξεργασία) η τελευταία εκδοχή (version) του file η

οποία έχει σωθεί μετά από κάποια ανώμαλη διακοπή (crash) του

editor ή και όλου του συστήματος.

vi +n file Συντάσσεται (δηλαδή υφίσταται επεξεργασία) το file με το δρομέα να

είναι τοποθετημένος στη n-στή γραμμή. Παραλείποντας τον αύξοντα

αριθμό της εντολής (δηλαδή το n), ο δρομέας τοποθετείται στην

τελευταία γραμμή του αρχείου.

vi file1 file2 ... filen Συντάσσονται τα αρχεία από το file1 ώς το filen. Αφού σωθούν οι

όποιες αλλαγές στο file1, πληκτρολογώντας :n συνεχίζει η διαδικασία

για το επόμενο αρχείο.

vi +/str file Συντάσσεται (δηλαδή υφίσταται επεξεργασία) το file με το δρομέα να

είναι τοποθετημένος στην πρώτη κατ' αύξοντα αριθμό γραμμή που

περιέχει την ακολουθία χαρακτήρων str.

Μετά την εκτέλεση οποιασδήποτε από τις παραπάνω εντολές, ο χρήστης βρίσκεται σε

Command Mode (αν πατήσει ESC απλά θα ακούσει κάποιο χαρακτηριστικό ήχο ή θα δει

κάποιο διαγνωστικό λαμπάκι του τερματικού να ανάβει).

Σώσιμο κειμένου και έξοδος από τον vi

Όταν ο χρήστης πληκτρολογεί όντας σε Insert Mode ή κάνει οποιαδήποτε μεταβολή σε

αρχείο, ο vi "γράφει" το διορθωμένο κείμενο σε έναν απομονωτή (buffer) που είναι ένας

προσωρινός χώρος αποθήκευσης του συστήματος. Το χώρο αυτόν το σύστημα τον

"ξεσκατράρει" αν δεν λάβει τις κατάλληλες εντολές από το χρήστη, οι οποίες απλά

μεταφέρουν το περιεχόμενο του buffer στο ίδιο το αρχείο.

ZZ ή :wq ή :x Σώζεται το αρχείο που έχει υποστεί επεξεργασία και εγκαταλείπεται ο

vi. Πριν την επιστροφή στο shell, υπενθυμίζεται στο χρήστη το όνομα

του αρχείου που συνέταξε και ενημερώνεται σχετικά με το μέγεθός

του σε blocks και χαρακτήρες.

:w newfile Σώζεται η συγκεκριμένη εκδοχή (version) του αρχείου στο newfile

χωρίς να εγκαταληφθεί ο vi (ο δρομέας επανέρχεται στη θέση που

βρισκόταν πριν την πληκτρολόγηση της εντολής) και διατηρώντας

φυσικά την προηγούμενη εκδοχή στο τρέχον αρχείο (δηλαδή σ΄αυτό

που επεξεργάζεται ο χρήστης). Αν το newfile ήδη υπάρχει, χάνεται το

προηγούμενο περιεχόμενό του, εκτός αν έχει μεριμνήσει σχετικά ο

χρήστης ή ο System Administrator. Με :w οι αλλαγές σώζονται στο

τρέχον αρχείο.

35

Page 36: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

36

:w >> newfile Σώζεται η συγκεκριμένη εκδοχή (version) του αρχείου στο τέλος του

newfile.

:n,mw newfile Σώζονται στο newfile οι γραμμές με αύξοντα αριθμό από n ώς m. Με

:n,mw >> newfile σώζονται στο τέλος του newfile.

:q! Eγκαταλείπεται ο vi επιστρέφοντας στο shell χωρίς να σωθούν οι

αλλαγές που συνέβηκαν μετά το τελευταίο :w.

:q Eγκαταλείπεται ο vi στην περίπτωση που ο χρήστης δεν έχει επέμβει

καθόλου στο αρχείο πού κάλεσε προς επεξεργασία. Αν έχει κάνει την

οποιαδήποτε μεταβολή, θα ειδοποιηθεί πως δεν την έχει σώσει και

πως μόνον με :q! μπορεί να βγει από τον editor χωρίς να σώσει το

αλλαγμένο αρχείο.

Q Πραγματοποιείται μετάβαση από τον vi στον ex editor

παραμένοντας στο ίδιο αρχείο. Με :vi πραγματοποιείται η

αντίστροφη διαδικασία.

:e! Ξανασυντάσσεται το τρέχον αρχείο (δηλαδή ξαναδίνεται προς

επεξεργασία), παραβλέποντας όσες αλλαγές έγιναν μετά το τελευταίο

σώσιμο (δηλαδή μετά το τελευταίο :w).

Εισαγωγή κειμένου

a Προστίθενται (append) χαρακτήρες μετά τη θέση όπου βρίσκεται ο

δρομέας (Insert Mode).

A Προστίθενται χαρακτήρες μετά το τέλος της τρέχουσας γραμμής

(Insert Mode).

i Εισάγονται (insert) χαρακτήρες πριν τη θέση όπου βρίσκεται ο

δρομέας (Insert Mode).

I Εισάγονται χαρακτήρες πριν την αρχή της τρέχουσας γραμμής

(Insert Mode).

o Ανοίγει (open) καινούργια γραμμή κάτω από την τρέχουσα γραμμή

(Insert Mode).

O Ανοίγει (open) καινούργια γραμμή πάνω από την τρέχουσα γραμμή

(Insert Mode).

CTRL-v char Ενόσω γίνεται εισαγωγή κειμένου, ο editor αγνοεί την ιδιαίτερη

σημασία του char (π.χ. για την εισαγωγή χαρακτήρων όπως ο ESC

και οι control χαρακτήρες).

:r otherfile Γίνεται ανάγνωση (read) και εισαγωγή του αρχείου otherfile κάτω

από την τρέχουσα γραμμή.

36

Page 37: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

37

:nr otherfile Γίνεται ανάγνωση και εισαγωγή του αρχείου otherfile κάτω από την

n-στή γραμμή.

Διαγραφή κειμένου

CTRL-h ή Bcksp Σε Insert Mode, διαγράφεται ο προηγούμενος της θέσης όπου

βρίσκεται ο δρομέας χαρακτήρας.

CTRL-w Σε Insert Mode, διαγράφεται η προηγούμενη της θέσης όπου

βρίσκεται ο δρομέας λέξη.

CTRL-x Σε Insert Mode, διαγράφεται ό,τι υπάρχει μέχρι την αρχή του εισαχθέντος κειμένου.

nx Διαγράφονται n χαρακτήρες ξεκινώντας από τον τρέχοντα και

προχωρώντας προς τα δεξιά. Με σκέτο x διαγράφεται ο τρέχων

χαρακτήρας.

nX Διαγράφονται οι n χαρακτήρες που προηγούνται του τρέχοντος. Με

σκέτο Χ διαγράφεται ο προηγούμενος του τρέχοντος χαρακτήρας.

ndw Διαγράφονται οι επόμενες n λέξεις ξεκινώντας από την τρέχουσα. Με

σκέτο dw διαγράφεται η τρέχουσα λέξη.

ndb Διαγράφονται οι προηγούμενες n λέξεις. Με σκέτο db διαγράφεται

απλά η προηγούμενη λέξη.

ndd Διαγράφονται οι επόμενες n γραμμές ξεκινώντας από την τρέχουσα.

Με σκέτο dd διαγράφεται η τρέχουσα γραμμή.

:n,md Διαγράφονται οι γραμμές από την n ώς την m.

D ή d$ Διαγράφονται οι χαρακτήρες από τον τρέχοντα ώς το τέλος της

τρέχουσας γραμμής.

dcursor_cmd Διαγράφεται το κείμενο ώς την cursor_cmd (π.χ. με dG

διαγράφονται τα πάντα από την τρέχουσα γραμμή ώς το τέλος του

αρχείου).

Αναζήτηση

% Η αναζήτηση γίνεται ώς την αρχή των ( ), [ ] ή { }.

fchar Η αναζήτηση γίνεται προς τα εμπρός στην τρέχουσα γραμμή ώς τον

χαρακτήρα char.

Fchar Η αναζήτηση γίνεται προς τα πίσω στην τρέχουσα γραμμή ώς τον

χαρακτήρα char.

tchar Η αναζήτηση γίνεται προς τα εμπρός στην τρέχουσα γραμμή ώς τον

χαρακτήρα πριν τον char.

37

Page 38: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

38

Tchar Η αναζήτηση γίνεται προς τα πίσω στην τρέχουσα γραμμή ώς τον

χαρακτήρα πριν τον char.

/str RETURN Αναζητείται το str ξεκινώντας από την τρέχουσα γραμμή και κάτω.

?str RETURN Η αναζήτηση για το str γίνεται ανάποδα.

Ολική αναζήτηση και αντικατάσταση

:n,ms/str1/str2/opt Το str1 αναζητείται από τη γραμμή n ώς την m και στη συνέχεια

αντικαθίσταται το str1 με το str2, σύμφωνα με το opt. Το opt μπορεί

να είναι g για ολική αντικατάσταση, p για τύπωμα των αλλαγμένων

γραμμών ή c για να γίνεται επιβεβαίωση των μεταβολών, οπότε με y

η αλλαγή γίνεται αποδεκτή ενώ με RETURN απορρίπτεται

προχωρώντας στην επόμενη.

& Επαναλαμβάνεται η τελευταία :s εντολή.

:g/str/cmd Εκτελείται η εντολή cmd σε όλες τις γραμμές που περιέχουν το str.

:g/str1/s/str2/str3/ Αναζητείται γραμμή που να περιέχει το str1 και αντικαθίσταται το

str2 με το str3

:v/str/cmd Εκτελείται η cmd σε όλες τις γραμμές που δεν περιέχουν το str.

Αντιγραφή και τοποθέτηση κειμένου

nyy ή nY Tοποθετούνται στον buffer (yank) οι n γραμμές που έπονται της

τρέχουσας (συμπεριλαμβανομένης και αυτής). Παράλειψη του n

υπονοεί την τρέχουσα γραμμή.

ycursor_cmd Tοποθετούνται στον buffer οι γραμμές από την τρέχουσα ώς την

cursor_cmd (π.χ. με yG γίνονται yanked οι γραμμές από την

τρέχουσα ώς την τελευταία γραμμή του αρχείου).

"(a-z)nyy ή "(a-z)ndd Αντιγράφονται ή διαγράφονται n γραμμές στον ονομαζόμενο από a ώς

z buffer. Παράλειψη του n υπονοεί την τρέχουσα γραμμή.

p Τοποθετείται το yanked κείμενο μετά τη θέση του δρομέα, ενώ

τυπώνεται επίσης το κείμενο που τελευταία διαγράφηκε.

P Τοποθετείται το yanked κείμενο πριν τη θέση του δρομέα, ενώ

τυπώνεται επίσης το κείμενο που τελευταία διαγράφηκε.

"(a-z)p ή "(a-z)P Τoποθετούνται οι γραμμές του ονομαζόμενου a ώς z buffer μετά ή

πριν την τρέχουσα γραμμή.

Μεταβολές κειμένου

38

Page 39: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

39

rchar Αντικαθίσταται ο τρέχων χαρακτήρας με τον char.

Rtext ESC Αντικαθίσταται ο τρέχων χαρακτήρας με το text.

cwtext ESC Αλλάζει η τρέχουσα λέξη σε text.

Ctext ESC Αλλάζει το υπόλοιπο της τρέχουσας λέξης σε text.

ccursor_cmd text ESC Αλλάζει το κομμάτι του κειμένου από την τρέχουσα θέση ώς την

cursor_cmd σε text.

Aν τεθεί n (δηλαδή ένας αριθμός) πριν οποιαδήποτε από τις παραπάνω εντολές, η εντολή

επαναλαμβάνεται n φορές.

Μετακινήσεις του δρομέα

k ή CTRL-p Προς τα πάνω.

j ή CTRL-j ή CTRL-n Προς τα κάτω.

h ή CTRL-h ή Bcksp Προς τα αριστερά.

l ή SPACE Προς τα δεξιά.

w ή W Στην αρχή της επόμενης λέξης. Με W

αγνοούνται τα σημεία στίξης.

b ή B Στην αρχή της προηγούμενης λέξης.

Με B αγνοούνται τα σημεία στίξης.

e ή Ε Στο τέλος της επόμενης λέξης. Με Ε

αγνοούνται τα σημεία στίξης.

0 ή | Στην πρώτη στήλη της τρέχουσας

γραμμής.

n| Στη n-στή στήλη της τρέχουσας

γραμμής.

^ Στον πρώτο χαρακτήρα της τρέχουσας γραμμής (αγνοούνται τα

κενά).

$ Στον τελευταίο χαρακτήρα της τρέχουσας γραμμής (αγνοούνται τα

κενά).

+ ή RETURN Στον πρώτο χαρακτήρα της επόμενης γραμμής (αγνοούνται τα κενά).

- Στον πρώτο χαρακτήρα της προηγούμενης γραμμής (αγνοούνται τα

κενά).

1G Στην πρώτη γραμμή του αρχείου.

G Στην τελευταία γραμμή του αρχείου.

G$ Στον τελευταίο χαρακτήρα του αρχείου.

nG Στη n-στή γραμμή του αρχείου.

( Προς τα πίσω, στην αρχή της πρότασης.

) Προς τα εμπρός, στην αρχή της επόμενης πρότασης.

39

Page 40: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

40

{ Προς τα πίσω, στην αρχή της παραγράφου.

} Προς τα εμπρός, στην αρχή της επόμενης παραγράφου.

Τοποθέτηση σημαδιών στο κείμενο

m(a-z) Μαρκάρεται η τρέχουσα θέση με ένα γράμμα από το a ώς το z (π.χ.

ma).

'(a-z) O δρομέας μετακινείται στη θέση (a-z) (π.χ. 'a).

" O δρομέας μετακινείται στη θέση που είχε πριν την τελευταία /, ? ή G

εντολή.

Τοποθέτηση του δρομέα και ρύθμιση της οθόνης

H Ο δρομέας μετακινείται στην πρώτη γραμμή της οθόνης.

nH Ο δρομέας μετακινείται στην n-στή γραμμή από την κορυφή της

οθόνης.

M Ο δρομέας μετακινείται στη μέση της οθόνης.

L Ο δρομέας μετακινείται στo τέλος της οθόνης.

nL Ο δρομέας μετακινείται n γραμμές πριν από τo τέλος της οθόνης.

CTRL-e Ο δρομέας μετακινείται κατά μία γραμμή προς τα πάνω.

CTRL-yΟ δρομέας μετακινείται κατά μία γραμμή προς τα κάτω.

CTRL-uΟ δρομέας μετακινείται κατά μισή σελίδα προς τα πάνω.

CTRL-dΟ δρομέας μετακινείται κατά μισή σελίδα προς τα κάτω.

CTRL-b Ο δρομέας μετακινείται κατά μία σελίδα προς τα πάνω.

CTRL-f Ο δρομέας μετακινείται κατά μία σελίδα προς τα κάτω.

z RETURN Η τρέχουσα γραμμή γίνεται πρώτη γραμμή της οθόνης.

nz RETURN Η n-στή γραμμή γίνεται πρώτη γραμμή της οθόνης.

z. Η τρέχουσα γραμμή γίνεται μεσαία γραμμή της οθόνης.

nz. Η n-στή γραμμή γίνεται μεσαία γραμμή της οθόνης.

z- Η τρέχουσα γραμμή γίνεται τελευταία γραμμή της οθόνης.

nz- Η n-στή γραμμή γίνεται τελευταία γραμμή της οθόνης.

"Στατικές" εντολές

:.= Δίνεται ο αύξων αριθμός της τρέχουσας γραμμής.

:= Δίνεται ο αριθμός των γραμμών του αρχείου.

40

Page 41: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

41

CTRL-gΔίνεται το όνομα του αρχείου, ο αύξων αριθμός της τρέχουσας γραμμής, ο αριθμός

όλων των γραμμών του αρχείου και σε τι σημείο του αρχείου (με %)

βρίσκεται ο δρομέας.

Σύνδεση γραμμών

J Ενώνεται (join) η επόμενη γραμμή στο τέλος της τρέχουσας.

nJ Ενώνονται οι επόμενες n γραμμές.

Ακύρωση και επανάληψη εντολών

u Ακυρώνεται η τελευταία εντολή.

U Επαναφέρεται η τρέχουσα γραμμή στην αρχική της κατάσταση.

n Επαναλαμβάνεται η τελευταία / ή ? εντολή αναζήτησης.

N Επαναλαμβάνεται με αντίστροφη φορά η τελευταία / ή ? εντολή

αναζήτησης.

; Επαναλαμβάνεται η τελευταία f, F, t ή T εντολή αναζήτησης.

, Επαναλαμβάνεται με αντίστροφη φορά η τελευταία f, F, t ή T εντολή

αναζήτησης.

. Επαναλαμβάνεται η τελευταία εντολή αλλαγής κειμένου.

41

Page 42: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

42

Εντολές διαφυγής στο shell

:! cmd Εκτελείται η εντολή cmd του shell. Μπορούν να προστεθούν οι

ειδικοί χαρακτήρες % και # για να δηλωθεί το όνομα του τρέχοντος

αρχείου και το όνομα του αρχείου που συντάχτηκε πιό πρόσφατα

αντίστοιχα.

:!! Εκτελείται η τελευταία εντολή του shell.

:r! cmd Γίνεται ανάγνωση και εισάγεται η έξοδος της εντολής cmd.

:f newfile Mετονομάζεται το τρέχον αρχείο σε newfile.

:w !cmdΣτέλνεται το αρτι συνταχθέν αρχείο σαν standard είσοδος στην εντολή cmd και

εκτελείται η cmd.

:cd dir O dir γίνεται ο τρέχων κατάλογος (directory). Με σκέτο :cd εννοείται

ο home κατάλογος του χρήστη.

:so shfile Γίνεται ανάγνωση και εκτέλεση εντολών του shfile, που είναι ένα

shell script.

:sh Aρχικοποιείται ένα sub-shell. Η επιστροφή στον vi γίνεται με CTRL-

D.

Φίλτρα του shell

! cursor_cmd cmd Το κείμενο που βρίσκεται ανάμεσα στην τρέχουσα θέση του δρομέα

και στην cursor_cmd στέλνεται στην εντολή cmd του shell, ενώ το

αρχικό κείμενο στο αρχείο αντικαθιστάται από την έξοδο που

προκύπτει από την εκτέλεση του cmd.

!}sort RETURN Παράδειγμα: Γίνεται ταξινόμηση από την τρέχουσα θέση του δρομέα

ώς το τέλος της παραγράφου και αντικαθίσταται το κείμενο από το

ταξινομημένο κείμενο.

Αντιπαραβολή ακολουθίας χαρακτήρων ( Pattern Matching )

Οι pattern matching χαρακτήρες βοηθούν στην αναζήτηση χαρακτήρων (strings) με

παρόμοια χαρακτηριστικά.

:set magic Επιτρέπεται η αντιπαραβολή (matching) με ειδικούς χαρακτήρες.

:set nomagic Επιτρέπονται μόνον οι ^ και $ ως ειδικοί χαρακτήρες.

^ Αντιπαραβάλλεται η αρχή της γραμμής.

$ Αντιπαραβάλλεται το τέλος της γραμμής.

42

Page 43: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

43

. Αντιπαραβάλλεται οποιοσδήποτε απλός χαρακτήρας.

\< Αντιπαραβάλλεται η αρχή της λέξης.

\> Αντιπαραβάλλεται το τέλος της λέξης.

[str] Αντιπαραβάλλεται οποιοσδήποτε απλός χαρακτήρας υπάρχει στο str.

[^str] Αντιπαραβάλλεται οποιοσδήποτε απλός χαρακτήρας δεν υπάρχει

στο str.

[a-n] Αντιπαραβάλλεται οποιοσδήποτε χαρακτήρας μεταξύ a και n.

* Αντιπαραβάλλεται καμμία ή περισσότερες εμφανίσεις του

προηγούμενου χαρακτήρα στην έκφραση.

Κεφάλαιο 11. Ο Φλοιός C (C Shell, csh)

Για να εκτελεστεί μια εργασία στο UNIX χρησιμοποιείται μια εντολή. Κάθε εντολή

που εισάγεται εκτελείται από τον επεξεργαστή εντολών του UNIX (command language

interpreter), ο οποίος ονομάζεται φλοιός.. Σήμερα έχουν αναπτυχθεί πολλοί επεξεργαστές

εντολών UNIX. Ο αρχικός επεξεργαστής, ο οποίος αναπτύχθηκε στην AT&T, είναι ο φλοιός

του Bourne (Bourne Shell, sh) και είναι ο ταχύτερος διαθέσιμος επεξεργαστής. Ενας άλλος

επεξεργαστής εντολών, ο οποίος αναπτύχθηκε στο Πανεπιστήμιο της Καλιφόρνιας και

διατίθεται στα συστήματα UNIX σχεδόν πάντα σαν εναλλακτικός επεξεργαστής, είναι ο

φλοιός C (C-Shell, csh).

Οι σημαντικότερες διαφορές του csh από τον sh είναι:

· Παρέχει μεγαλύτερη προγραμματιστική δεινότητα, λόγω ακριβώς της σχέσης του με

τη γλώσσα C.

· Υποστηρίζει τον Καταχωρητή Ιστορίας (History Buffer), στον οποίο καταχωρούνται

οι γραμμές εντολών που εκτελέστηκαν, έτσι που να μπορούν να

ξαναχρησιμοποιηθούν αυτούσιες ή τμήματα αυτών.

· Υποστηρίζει ένα μηχανισμό ψευδωνύμων (εντολές aliases), ώστε να είναι δυνατή η

χρήση "προσαρμοσμένων" εντολών.

· Εμφανίζει το μειονέκτημα να είναι αργότερη η εκτέλεσή του (έναντι του χρονου

εκτέλεσης του sh).

Στις σημειώσεις αυτές παρουσιάζονται ορισμένα χαρακτηριστικά του φλοιού C τα οποία δε

συναντώνται στο φλοιό Bourne. Επίσης δίδονται συνοπτικά μερικά στοιχεία

προγραμματισμού του csh.

43

Page 44: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

44

Καθορισμός της χρησιμοποίησης του csh

Το τελευταίο πεδίο, που αφορά τη δήλωση ενός χρήστη στο /etc/passwd, καθορίζει ποιόν

επεξεργαστή εντολών θα χρησιμοποιεί (σαν βασικο) ο χρήστης. Για το φλοιό C, το πεδίο αυτό

πρέπει να είναι /bin/csh.Ενας χρήστης μπορεί να "ανοίξει" μια νέα επικοινωνία με το

σύστημα δια του επεξεργαστή C, δίνοντας απλά την εντολή csh.

Αρχεία εκκίνησης του csh

Τα βασικά αρχεία εκκίνησης του φλοιού csh είναι:

1) Το αρχείο εκτέλεσης εντολών .cshrc, το οποίο διαβάζεται και εκτελείται κάθε φορά που

ξεκινά μια νέα διαδικασία csh. Χρησιμοποιείται γενικά για τρία πράγματα:

α) Για τον καθορισμό του prompt. Για παράδειγμα η γραμμή:

set prompt="[\!] % " θέτει κάποιο prompt.

Αν και μπορεί να χρησιμοποιηθεί το τυποποιημένο για το csh prompt %, γενικά είναι πιο

αποτελεσματική η χρήση διαδοχικών αριθμών που μετρούν τις γραμμές εντολών. Ετσι γίνεται

δυνατή η αναφορά σε προηγούμενες γραμμές, με τον αριθμό τους. Η δυναμική αρίθμηση

επιτυγχάνεται με τους χαρακτήρες \! (σύμφωνα με το παράδειγμα).

β) Για τον καθορισμό του μεγέθους του καταχωρητή ιστορίας

Το μέγεθος του καταχωρητή ιστορίας καθορίζεται με εντολή της μορφής:

set history = 100

Στο παραπάνω παράδειγμα καθορίζεται ο μέγιστος αριθμός γραμμών, που θα περιέχει ο

καταχωρητής, σε εκατό. Οι αποθηκευμένες, στον καταχωρητή γραμμές, εμφανίζονται με την

εκτέλεση της εντολής:

history

γ) Για την δημιουργία μόνιμων "προσαρμοσμένων" εντολών

Οι εντολές αυτές, γνωστές σαν aliases (ψευδώνυμα), επιτρέπουν την χρήση ενός οποιουδήποτε

ονόματος για κάποια εντολή. Ετσι κάθε χρήστης μπορεί να φτιάξει το δικό του κατάλογο

εντολών ή να εξομοιώσει πολλές εντολές του UNIX με αυτές ενός άλλου λειτουργικού. Για

παράδειγμα η εντολή:

alias dir/p 'ls -al | more'

εξομoιώνει μια εντολή του UNIX με μια εντολή του DOS.

44

Page 45: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

45

Ο φλοιός C επιτρέπει και την δυναμική επιλογή στις εντολές aliases. Ουσιαστικά πρόκειται

για τον τροπο που μεταδίδεται η παράμετρος σε κάποια "προσαρμοσμένη" εντολή. Για

παράδειγμα, αν δοθεί η εντολή:

alias show cd '\!* ; ls -l | more'τότε με τη χρήση της έκφρασης:

show /users το σύστημα θα εκτελέσει την εντολή: cd /users ; ls -l | more

Γίνεται φανερό ότι η παράμετρος μεταδόθηκε στο σημείο που βρίσκονταν οι χαρακτήρές \!*Η

προβολή της λίστας ψευδωνύμων γίνεται με την εκτέλεση της εντολής alias.

2) Το αρχείο σύνδεσης .login, το οποίο διαβάζεται και εκτελείται μόνο όταν ο χρήστης

συνδέεται στο σύστημα. Σε αυτό περιέχονται, κυρίως, βασικές πληροφορίες οι οποίες

επιτρέπουν στο τερματικό να λειτουργεί σωστά. Για παράδειγμα, ένα απλό .login αρχείο θα

μπορούσε να περιλαμβάνει τις γραμμές:

stty kill "^U" erase "^H" eof "^D"

setenv TERM hp2622

set path = ( /bin /usr/bin /usr/local/bin $HOME/bin . )

Με την πρώτη γραμμή εκχωρούνται το Ctrl-U σαν το πλήκτρο "θανάτου" (διαγράφει μια

ολόκληρη γραμμή εντολής), το Ctrl-H σαν το πλήκτρο δια-γραφής του προηγούμενου

χαρακτήρα και το Ctrl-D σαν το πλήκτρο τερματισμού ενός block μιας σύνθετης εντολής.

Με την δεύτερη γραμμή καθορίζονται τίνος τερματικού τα χαρακτηριστικά θα θεωρεί το

σύστημα, όταν επικοινωνεί με το τερματικό του χρήστη. (Το αρχείο πληροφοριών για το

τερματικό του παραδείγματος θα είναι είτε το /etc/termcap, είτε το /

usr/lib/terminfo/h/hp2622).

Με την τρίτη γραμμή ορίζονται οι διαδρομές που θα αναζητά το σύστημα τα ονόματα των

εντολών.

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

Εστω ότι δίνοντας την εντολή history, ο υπολογιστής αποκρίνεται εμφανίζοντας στο

τερματικό τις γραμμές:

1 vi file1

2 cp file1 strip/file1

3 cd strip

4 pwd

5 mv file1 file1.c

6 vi file1.c

7 cc file1.c -o file1.out

8 file1.out

9 history

45

Page 46: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

46

Η επανεκτέλεση μιας εντολής μπορεί να γίνει αν ανασυρθεί απο τον Καταχωρητή Ιστορίας

(δια του συμβόλου !), η αντίστοιχη γραμμή. Υπάρχουν τρεις τροποι επανεκτέλεσης της ίδιας

εντολής.

i) Δια του αριθμού εντολής. π.χ. !6

ii) Δια της εισαγωγής της σχετικής απόστασης, από την εντολή, π.χ. !-4 (Η τρέχουσα εντολή

είναι η 10-)

iii) Δια μέσου των πρώτων χαρακτήρων της γραμμής εντολής, π.χ. !v

Επιλογή ορισμάτων από γραμμή εντολής

Μια γραμμή εντολής συντάσσεται από την εντολή και από ένα ή περισσότερα

ορίσματα (χωρίζονται μεταξύ τους με κενά). Συνήθως η εντολή αναφερεται με τον αριθμό 0,

το πρώτο όρισμα με τον αριθμό 1 ή το σύμβολο ^, το δεύτερο με τον αριθμό 2 κ.ο.κ.. Το

τελευταίο όρισμα μπορεί να αναφερθεί και σαν $. Η επιλογή ενός ορίσματος μιας γραμμής

εντολής γίνεται με την ανάσυρση από τον Καταχωρητή Ιστορίας της γραμμής και στη

συνέχεια με την αναφορά του αριθμού ορίσματος, ύστερα από το σύμβολο της άνω-κάτω

τελείας (:). Για παράδειγμα η έκφραση:

cat !6:^ (ή cat !v:1)έχει ως αποτέλεσμα την εκτέλεση της εντολής: cat file1.c

Η επιλογή συνόλου συνεχών ορισμάτων από μια γραμμή εντολής γίνεται με τους αριθμούς

-όρια- σε ζεύγος και με μια παύλα (-) αναμεσά τους, π.χ. με την !5:1-2 επιλέγονται τα

ορίσματα: file1 file1.c. Τέλος, επιλογή όλων των ορισμάτων, μιας γραμμής εντολής, γίνεται με

τη χρήση του χαρακτήρα υποκατάστασης (*), π.χ. με την !7:* επιλέγονται τα oρίσματα: file1.c

-o file1.out

Επιδιόρθωση προηγούμενης εντολής

Για την αποφυγή περιττής πληκτρολόγησης, το csh παρέχει στο χρήστη την

δυνατότητα να αλλάξει μια προηγούμενη γραμμή εντολής, αφού την ανασύρει απο τον

Καταχωρητή Ιστορίας και προσθέσει τον κατάλληλο τροποποιητή, ύστερα από άνω-κάτω

τελεία (:). Οι τροποποιητές που χρησιμοποιούνται κυρίως, είναι:

i) Ο τροποποιητής αντικατάστασης (substitute). Περιγράφεται ως: s/string 1 /string 2 και έχει

σαν αποτέλεσμα την αντικατάσταση του string1 με string2. Εφόσον υπάρχουν περισσότερα

του ενός string1, αντικαθίσταται μόνο το πρώτο. Για παράδειγμα, η έκφραση:

!7:s/file 1 /file 2 έχει ως αποτέλεσμα την εκτέλεση της εντολής: cc file2.c -o file1.out

ii) Ο τροποποιητής ολικής αντικατάστασης (global).Περιγράφεται ως : gs/string 1 /string 2 και

η επιδρασή του είναι όμοια με αυτόν της περίπτωσης i), μονο που αντικαθίστανται όλα τα

string1 που υπάρχουν στην εντολή. Ετσι αν στο προηγούμενο παράδειγμα δινοταν:

46

Page 47: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

47

!7:gs/file 1 /file 2 το σύστημα θα εκτελούσε την εντολή: cc file2.c -o file2.out

iii) Ο τροποποιητής επικεφαλίδας (head). Χρησιμοποιείται μόνο για γραμμές εντολών στις

οποίες υπάρχουν ορίσματα που περιγράφουν full path names, ώστε να αποσπασθεί το όνομα

του directory (δηλαδή το path name's head). Για παράδειγμα, αν στον Καταχωρητή Ιστορίας

υπήρχε η γραμμή εντολής:

25 cp progr1.c /users/babis/strip/strip3/file2.cτότε η έκφραση:

cd !25:2:hέχει αποτέλεσμα την εκτέλεση της εντολής: cd /users/babis/strip/strip3

iv) Ο τροποποιητής εκτύπωσης (print). Χρησιμοποιείται για να εξεταστεί μια γραμμή εντολής,

χωρίς να εκτελεστεί. Για παράδειγμα, η έκφραση:

!7:pέχει αποτέλεσμα να φανεί στην οθόνη η γραμμή: cc file1.c -o file1.out χωρίς να εκτελεστεί ηαντίστοιχη εντολή.

Ειδικοί Χαρακτήρες ( metacharacters ) στο C - Shell

i) Ειδικοί χαρακτήρες σύνταξης

; Διαχωρίζει εντολές που θα εκτελεστούν σειριακά.

| Διαχωρίζει εντολές που θα εκτελεστούν με διοχέτευση. Χονδρικά στη

διοχέτευση υπάρχει σειριακή εκτέλεση των εντολών, με την διαφορά οτι η επόμενη εντολή δεν

αρχίζει μόλις ολοκληρωθεί η προηγούμενη, αλλά αμέσως μόλις η προηγούμενη αρχίζει να

παράγει αποτελέσματα τα οποία είναι χρήσιμα δεδομένα της επόμενης.

() Απομονώνει σύνθετες εντολές που διαχωρίζονται με ; ή | και τις εκτελεί σαν

μία, ανοίγοντας ένα υπο-shell.

& Καθορίζει οτι η εντολή που προηγείται του συμβόλου θα εκτελεστεί σαν μια διεργασία παρασκηνίου (background process).

|| Διαχωρίζει εντολές στις οποίες η επόμενη θα εκτελεστεί μόνο εφόσον αποτύχει

η προηγούμενη.

&& Καθορίζει ότι η επόμενη εντολή θα εκτελεστεί μόνο εφόσον επιτύχει η

προηγούμενη.

ii) Ειδικοί χαρακτήρες ονόματος αρχείων

? Υποκαθιστά οποιονδήποτε χαρακτήρα στη θέση του συμβόλου. π.χ. η rm

old?.f έχει σαν αποτέλεσμα την καταστροφή αρχείων που έχουν ονόματα oldf.f, old1.f, old2.f

κ.τ.λ. (εφόσον υπάρχουν).

* Υποκαθιστά οποιονδήποτε αριθμό χαρακτήρων στη θέση του συμβόλου, π.χ.

η rm pr*.f έχει ως αποτέλεσμα την καταστροφή αρχείων με ονόματα progr.f, program1.f κ.τ.λ.

47

Page 48: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

48

[x-x] Υποκαθιστά στη θέση ενός χαρακτήρα, οποιονδήποτε χαρακτήρα βρί- σκεται

στην περιοχή χαρακτήρων που καθορίζεται στις αγκύλες. π.χ. η εντολή rm file.[a-z] θα

μπορούσε να σβήσει αρχεία σαν τα file.c, file.f, file.o και όχι το file.5

{xxx} Υποκαθιστά στη θέση ενος χαρακτήρα, οποιονδήποτε χαρακτήρα βρίσκεται

μέσα στα άγκιστρα, π.χ. η εντολή more l{aio}st.c θα μπορούσε να έχει σαν αποτέλεσμα την

εμφάνιση του περιεχομένου των αρχείων last.c, list.c, lost.c

/ Χρησιμοποιείται σαν ειδικός χαρακτήρας στην αναγραφή path names, π.χ.

cat /etc/passwd

iii) Ειδικοί χαρακτήρες επαναπροσδιορισμού Εισοδου/Εξοδου

< file Το file γίνεται η καινούργια είσοδος.

> file Η έξοδος γίνεται προς το file.

>> file Η έξοδος γίνεται στο τέλος του file (προσάρτηση).

>& file Η έξοδος γίνεται απ' ευθείας στο file (το σύστημα δεν περιμένει για να κάνει

έξοδο να γεμίσει ο buffer εξόδου).

>! file Η έξοδος γίνεται δυναμικά στο file (απαιτείται εφόσον υπάρχει το file και η

μεταβλητή noclobber είναι set).

<< word Η εισαγωγή στοιχείων από την είσοδο σταματά όταν το σύστημα

συναντήσει τη συμβολοσειρά word.

Μπορούν να υπάρξουν και οι συνδιασμοί ειδικών χαρακτήρων >>& και >>! με προφανή

μικτή συμπεριφορά.

iv) Αλλοι ειδικοί χαρακτήρες

$ Οταν ενεργεί σε μια μεταβλητή, αποτιμάται η μεταβλητή, π.χ. αν εκτελεστεί η εντολή

set dir = /usr/bin τότε η cd $dir είναι ισοδύναμη της cd /usr/bin

! Χρησιμοποιείται για να ανασυρθεί μια γραμμή εντολής από τον Καταχωρητή

Ιστορίας.

: Χρησιμοποιείται στην διαδικασία επιλογής ορίσματος γραμμής, αλλά και στη

διόρθωση ανασυρόμενης γραμμής.

# Για σχόλια σε αρχεία C-Shell script.

% Είναι το πρότυπο prompt για το csh. Επίσης χρησιμοποιείται σαν πρόθεμα

στην επιστοφή του PID μιας διεργασίας παρασκηνίου, π.χ. αν δοθεί

a.out > x & η απόκριση του συστήματος είναι της μορφής:

[1] % 1121

Τότε οι εντολές: kill 1121 και kill %1 είναι ισοδύναμες.

48

Page 49: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

49

Μεταβλητές του C - Shell

Το csh υποστηρίζει ένα σύνολο μεταβλητών των οποίων οι τιμές καθορίζονται με την

εντολή set. Αυτές συνοπτικά είναι οι:

argv

Περιέχει τα ορίσματα της γραμμής εντολής (πολύ χρήσιμη μεταβλητή για τις script εντολές).

autologout

Περιέχει το μέγιστο χρονικό διάστημα στο οποίο, αν δεν υπάρξει επικοινωνία του χρήστη με

το σύστημα, θα γίνει αυτόματα logout.

cwd

Περιέχει κάθε φορά το όνομα του directory στο οποίο εργάζεται ο χρήστης. Η τιμή της

αλλάζει με την εκτέλεση της εντολής cd.

home

Περιέχει το path name του προσωπικού καταλόγου του χρήστη. Η αρχική τιμή της

μεταβλητής καθορίζεται από το /etc/passwd.

ignoreeof

Είναι λογική μεταβλητή και επιτρέπει την επιλογή του συνδιασμού πλήκτρων Ctrl-D

(συνήθως) για logout. Εφόσον δοθεί unset ignoreeof, απενεργο- ποιείται ο συνδιασμός και θα

πρέπει να γραφεί η λέξη logout, για αποσύνδεση του χρήστη απο το σύστημα.

noclobber

Είναι λογική μεταβλητή και εφόσον είναι set εμποδίζει να γραφεί οτιδή- ποτε πάνω σε ένα

ήδη υπάρχων αρχείο.

path

Είναι μία απο τις σπουδαιότερες μεταβλητές στη λειτουργία του csh. Καθορίζει τα directories

και τη σειρά με την οποία ψάχνει το csh για τις εντολές.

Προσοχή: Η μεταβλητή PATH είναι γενική (global) στο σύστημα, ενώ η path είναι τοπική και

μόνο για το τρέχων shell. Υπάρχει διάκριση στις εντολές:

set path=(/bin /usr/bin /etc)

setenv PATH /bin:/usr/bin:/etc

prompt

Χρησιμοποιείται στο καθορισμό του prompt, π.χ.,

set prompt = "OK \!> "

status

Η μεταβλητή αυτή επιστρέφει 0 εάν η πιο πρόσφατη εντολή εκτελέστηκε χωρίς λάθος. Μια μη

μηδενική τιμή σημαίνει ότι έχει γίνει κάποιο λάθος.

shell

49

Page 50: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

50

Υπάρχει η δυνατότητα μέσα από ορισμένες εντολές να εκτελεστεί ένα καινούργιο shell (π.χ.

στις εντολές vi, mailx). Με τη μεταβλητή αυτη καθορίζεται τι είδους shell θα ανοίξουν τέτοιες

εντολές.

π.χ. όταν set shell = /bin/sh τότε αν κάποια εντολή ξεκινήσει καινούργιο shell αυτό θα είναι

Bourne.

Αριθμητικές μεταβλητές στο C - Shell

Για την καταχώρηση τιμής σε μια αριθμητική μεταβλητή χρησιμοποιείται η εντολή @

(at) που είναι αντίστοιχη της set (για μη αριθμητικές μεταβλητές). Για παράδειγμα αν δοθούν

οι εντολές :

@ aa = (2+5) ; echo $aa τότε το σύστημα θα απαντήσει: 7Για το csh οι εκφράσεις: a) @ i++ b) @ i = $i+1 c) @ i += 1 έχουν ακριβώς τα ίδια αποτελέσματα(όπως και στη γλώσσα C).

Η περιγραφή των αριθμητικών και λογικών τελεστών και εκφράσεων δεν θα αναπτυχθεί

παραπάνω, λόγω της ομοιότητας με την γλώσσα C.

Ελεγχος κατάστασης αρχείου

Η έκφραση -test name επιστρέφει μια τιμή, η οποία βασίζεται στην κατάσταση του

αρχείου name. Εάν η έκφραση είναι αληθινή τότε επιστρέφεται 1, ενώ αν δεν είναι

επιστρέφεται 0.

Η παράμετρος test λαμβάνεται από την παρακάτω λίστα:

test Κατάσταση του name για επιστροφή 1

d directory

e υπάρχον αρχείο ή directory

f απλό αρχείο

ο έχει ιδιοκτήτη τον ίδιο χρήστη

r επιτρέπεται να διαβαστεί από τον χρήστη

w επιτρέπεται στο χρήστη να γράψει σ' αυτο

x επιτρέπεται να εκτελεστεί από τον χρήστη

z άδειο αρχείο

π.χ. if (-d $dir) then ...κάνει έλεγχο αν το $dir είναι directory.

C Shell Scripts

Οι shell scripts εντολές είναι εκτελέσιμα αρχεία που περιέχουν μια σειρά εντολών τις

οποίες το shell εκτελεί ομαδικά.

Μια C-Shell script εντολή μπορεί να εκτελεστεί γράφοντας:

50

Page 51: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

51

csh script 1 arg 1 arg 2 ...

όπου script 1 είναι το όνομα του εκτελέσιμου αρχείου, το οποίο παριστάνει την εντολή και

arg 1 , arg 2 , ... είναι τα ορίσματα που συνοδεύουν την script εντολή. Το C-Shell τοποθετεί αυτά

τα ορίσματα στο διάνυσμα μεταβλητών argu σαν argu[1], argu[2], κ.τ.λ.. Δεν υπάρχει το argu

[0]. Το C-Shell χρησιμοποιεί το $0 αντί του arg[0] (εδώ το $0 ισούται με script 1 ).

Ενα script αρχείο μπορεί να εκτελεστεί και απ' ευθείας χωρίς την προσθήκη της λέξης csh,

εφοσον ο πρώτος χαρακτήρας του script αρχείου είναι ο # (η #! /bin/csh σαν πρώτη γραμμή).

Αλλιώς το σύστημα θα προσπαθήσει να εκτελέσει το αρχείο σε Bourne shell.

Η ομάδα εντολών που υπάρχει στο script αρχείο εκτελείται σε ένα υπο-shell. Μετά την

εκτέλεση το υπο-shell "κλείνει".

Εκτέλεση script εντολής

Το csh αναλύει την script γραμμή εντολής σε ορίσματα. Υστερα αναγνωρίζει ποιά από τα

ορίσματα πρέπει να περάσουν σαν τιμή στις μεταβλητές που περιγράφονται στην ομάδα

εντολών.

Για να αποτιμηθεί η τιμή μιας μεταβλητής πρέπει να "ενεργήσει" στη μεταβλητή το σύμβολο $.

Ετσι π.χ. η $dir αποτιμά την τιμή της μεταβλητής dir.

Για να αποκαλυφθεί, εάν σε μια μεταβλητή sum1 έχει εκχωρηθεί απ' ευθείας μια τιμή,

χρησιμοποιείται η: $?sum1. Η έκφραση επιστρέφει 1 εάν πραγματι έχει και 0 εάν δεν έχει.

Για να προσδιοριστεί ο αριθμός των μερικών τιμών που έχουν εκχωρηθεί σε μια

πολυδιάστατη μεταβλητή sum1 χρησιμοποιείται η έεκφραση: $#sum1

Τα παραπάνω διασαφίζονται μέσα από το παρακάτω παράδειγμα (σε άμεσο "διάλογο" με το

σύστημα).

set sum1 = (a b c)

echo $?sum1

--> 1

echo $#sum1

--> 3

echo $sum1[1]

--> a

echo $sum1[$#sum1]

-> c-

unset sum1

echo $?sum1

--> 0

51

Page 52: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

52

echo $#sum1

--> Undefined variable: sum1

Αλλες μορφές είναι:

Η $n (οπου n είναι ένας αριθμός) η οποία επιστρέφει το n-οστό στοιχείο της πολυδιάστατης

μεταβλητής argu.

Η $* η οποία επιστρέφει τις τιμές ολων των ορισμάτων και οι οποίες περιέχονται στην argu.

Η $$ επιστρέφει τον αριθμό διαδικασίας (PID) του τρέχοντος shell. Τέλος η μορφή $< είναι

πολύ σημαντική, διότι αντικαθίσταται από την επόμενη γραμμή εισόδου. Είναι πολύ χρήσιμη

σε διαλογικές script εντολές, διότι μέσω αυτής διαβάζεται το περιεχόμενο της εισόδου.

π.χ. ... echo "yes or no"

set re = ($<) ...

Δομές ελέγχου στις εντολές C - Shell scripts

Είναι περίπου ίδιες με αυτές της γλώσσας C.

α) Η εντολή foreach (αντίστοιχη της for)

Συντάσσεται ως:

foreach index-variable (loop-count-value-list)

Command1

Command2

end

β) Η εντολή if-then-endif

Συντάσεται ως:

If (expression1) then

Command1a

Command1b

else if (expression2) then

Command2a

Command 2 b

endif

γ) Η εντολή while συντάσσεται ως:

while (expression)

Command1

Command2

.

.

.

end

52

Page 53: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

53

δ) Η εντολή switch συντάσσεται ως:

switch (word)

case string1:

commands

breaksw

.

.

.

case stringn:

commands

breaksw

default:

commands

breaksw

endsw

ε) Η εντολή goto συντάσσεται ως:

loop-name:

command1

command2

.

goto loop-name

53

Page 54: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

54

ΜΕΡΟΣ ΙΙ

ΟΔΗΓΙΕΣ ΧΡΗΣΗΣ UNIX ΓΙΑ ΤΟΝ

SYSTEM ADMINISTRATOR

ΕΓΚΑΤΑΣΤΑΣΗ ΚΑΙ ΣΥΝΤΗΡΗΣΗ ΔΙΚΤΥΩΝ

ΣΤΟ UNIX

(UNIX ΕΠΙΠΕΔΟ ΙΙ)

Διάρκεια σεμιναρίου: 40 ώρες

Εισηγητές: Δημήτρης Καλογεράς και Νάσος Παπακώστας

54

Page 55: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

55

ΚΕΦΑΛΑΙΟ 1. ΓΕΝΙΚΑ ΚΑΘΗΚΟΝΤΑ ΔΙΑΧΕΙΡΙΣΤΗ

Ο διαχειριστής ενός συστήματος UNIX (UNIX system administrator) είναι το

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

δικαιοδοσία πάνω σε όλα τα υποσυστήματα που το απαρτίζουν και σε όλα τα αρχεία. Είναι ο

χρήστης που προσπελαύνει το σύστημα με τον κωδικό root.

Τα καθήκοντα του περιλαμβάνουν τα ακόλουθα:

1 πρόσθεση, αφαίρεση και γενικότερη διαχείριση των χρηστών στο σύστημα

1 εξασφάλιση της ασφαλούς λειτουργίας του συστήματος

1 διαχείριση του συστήματος αρχείων

1 διαδικασία αντιγράφων (backup)

1 πρόσθεση νέων μονάδων περιφερειακής μνήμης

1 πρόσθεση, αφαίρεση και γενικότερη διαχείριση υποσυστήματος εκτυπωτών

1 πρόσθεση, αφαίρεση και γενικότερη διαχείριση τερματικών, modem και κάθε είδους

συσκευών, καρτών και άλλου εξοπλισμού.

1 συκρότηση (configuration) του πυρήνα (kernel) και των διάφορων βοηθητικών αρχείων

του UNIX ανάλογα με την αναμενόμενη λειτουργία του συστήματος

1 εγκατάσταση νέων εκδόσεων του λογισμικού (software)

1 εγκατάσταση και διαχείριση του συστήματος δικτύωσης και των υποσυστημάτων του

(NFS, NIS, DNS, e-mail) και των προγραμμάτων χρήστη

1 η υποβοήθηση των χρηστών σε τυχόν προβλήματα τους σχετικά με τη χρήση του

συστήματος

Το να είναι κανείς διαχειριστής συστήματος απαιτεί, εκτός απο καλή γνώση του

UNIX και γενικότερα των υπολογιστών και άλλες αρετές: ψυχραιμία και αυτοσυγκράτηση,

αντοχή, γερά νεύρα, ευγένεια και γενικότερη ικανότητα επικοινωνίας, ευστροφία, όρεξη για

ενασχόληση και ενημέρωση, ικανότητα ανάλυσης και πρόβλεψης, υπομονή και επιμονή. Δεν

χρειάζεται πολλή προσπάθεια για να γίνει κανείς διαχειριστής UNIX, χρειάζεται όμως πάρα

πολλή προσπάθεια για να γίνει κανείς καλός διαχειριστής UNIX.

ΚΕΦΑΛΑΙΟ 2. EEPROM

Η eeprom (electricaly erasable prom) είναι το περιβάλλον στο οποίο βρισκόμαστε όταν

ανοίγουμε την τροφοδοσία στον υπολογιστή, και πρίν αυτός φορτώσει το λειτουργικό. Εάν

θέλουμε να διακόψουμε την διαδικασία εκκίνησης του λειτουργικού πρέπει να πατήσουμε

εγκαίρως το συνδυασμό πλήκτρων L1-A ή Stop-A (εξαρτάται από την έκδοση του

πληκτρολογίου της Sun).

55

Page 56: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

56

H eeprom των μηχανημάτων Sun δέχεται ένα πλήθος εντολών οι οποίες καθορίζουν στοιχεία

που πρέπει να γνωρίζει το μηχάνημα όταν πρωτοέρχεται σε λειτουργία, όπως είναι ο δίσκος

από τον οποίο θα γίνει η εκκίνηση του λειτουργικού, το είδος της οθόνης, το είδος των τυχών

τερματικών που χρησιμοποιούνται αντί της οθόνης για κονσόλα, το eeprom password (βλ.

παρακάτω) καθώς και άλλων παραμέτρων που επεξηγούνται στη συνέχεια. Σημειώνεται οτι η

eeprom έχει ενσωματωμένο ένα υποσύνολο της γλώσσας FORTH.

Σημαντικότερες εντολές της eeprom:

printenv τυπώνει όλες τις τρέχουσες μεταβλητές

setenv variable value

εισάγει στην μεταβλητή variable την τημή value

probe-scsi ανιχνέυει το SCSI BUS για SCSI συσκευές

boot το σύστημα εκκινείται από τη συσκευή που ορίζεται στη μεταβλητή boot-device

reset ισοδυναμεί με ανοιγμα - κλεισιμο του διακόπτη τροφοδοσίας

help εμφανίζει θεματική βοήθεια για τις εντολές

Σημαντικότερες μεταβλητές της eeprom:

boot-device

Η συσκευή από την οποία θα εκκινηθεί το σύστημα. Π.χ. setenv boot-device

net

setenv boot-device disk

setenv boot-device /sbus@1,f8000000/sd@3,0:a

security-mode

Εάν έχει τεθεί σε "full" τότε το σύστημα ζητάει ένα password κάθε φορά που

τροφοδοτείται. Αυτό είναι πολύ χρήσιμο για να μην μπορει κάποιος να

εκκινήσει το σύστημα από ταινεία ή από CD και να αποκτήσει δικαιώματα

super-user.

security-password

Θέτει το password που αναφέρεται παραπάνω.

Παράδειγμα:

setenv security-mode full

56

Page 57: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

57

Πολλές από τις μεταβλητές της eeprom μπορούν να αλλάξουν μέσα από το Solaris™ με την

εντολή eeprom. Π.χ. eeprom setenv security-mode = full. Για περισσότερες πληροφορίες

ανατρέξτε στο Reference Manual.

57

Page 58: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

58

ΚΕΦΑΛΑΙΟ 3. Ο Πυρήνας (Kernel)

3.1 Γενικά περί πυρήνα

Ένα σύστημα UNIX διαθέτει 3 βασικά επίπεδα:

• το hardware (υλικό)

• τον πυρήνα του λειτουργικού συστήματος (operating system kernel)

• τα προγράμματα επιπέδου χρήστη (user-level programms)

Ο πυρήνας κρύβει την αρχιτεκτονική του υπολογιστή κάτω από ένα υψηλού επιπέδου

αφαιρετικό περιβάλλον. Είναι υπεύθυνος για την λειτουργία πολλών διαδικασιών που οι

χρήστες και τα user-level προγράμματα θεωρούν δεδομένη. Για παράδειγμα ο πυρήνας

υλοποιεί τις παρακάτω λειτουργίες, χωρίς το πώς να γίνεται αντιληπτό στους χρήστες:

• διεργασίες (processes)

• εικονική μνήμη (virtual memory)

• σύστημα αρχείων (filesystem)

• σήματα και σηματοφορείς (signals, semaphores)

• πυρήνας περιέχει οδηγούς συσκευών (device drivers) οι οποίοι χειρίζονται συγκεκριμένα

τμήματα του hardware. Μιά κλήση ενός user-level προγράμματος στον πυρήνα π.χ. για

ανάγνωση από το δίσκο, μεταφράζεται και προωθείται από τον πυρήνα στον κατάληλο

οδηγό συσκευής, ο οποίος συνεργάζεται κατευθείαν με το hardware.

3.1 Kernel Configuration

Η επανα-ρύθμιση (reconfiguration) του πυρήνα δεν είναι κάτι που χρειάζεται συχνά.

Κρίνεται απαραίτητη οταν για παράδειγμα, εγκαθιστούμε ένα νέο σύστημα εξ'αρχής, όταν

αλλάζουμε το λειτουργικό, όταν εγκαθιστούμε ένα νέο περιφερειακό (απαιτείται καινούριος

device driver) ή απλά για να κάνουμε ορισμένες ρυθμίσεις όπως το μέγεθος των πινάκων

στους οποίους ο πυρήνας δεσμεύει την ώρα της εκκίνησης για την αποθήκευση των filesystem

buffers, process slots κ.λ.π.

Το configuration ενός solaris kernel (ATT Kernel) δέν είναι δύσκολη υπόθεση. Κατά

την εκκίνηση του συστήματος με την εντολή boot -r , το σύστημα ανιχνεύει νέα devices και

58

Page 59: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

59

αρχικοποιεί τον κατάλληλο driver για κάθε device (συσκευή) που ανιχνεύει.Επίσης η

παραπάνω διαδικασία μπορεί να γίνει με τη δημιουργία του αρχείου /reconfigure (με /

bin/touch /reconfigure ) το οποίο άν ανιχνευθεί κατα την εκκίνιση του συστήματος έχει το

ίδιο αποτέλεσμα με την εντολή boot -r. Τα απαραίτητα αρχεία για τον πυρήνα βρίσκονται

στο directory /kernel και δέν έχει νόημα να τα αναφέρουμε εδώ γιατι θα σας χρειαστούν

μόνο για την εγκατάσταση ενός οδηγού συσκευής ο οποίος δεν υπάρχει στο σύστημα. Το

αρχείο που χρειάζεται να αλλαχθεί σε περίπτωση που το Solaris δεν αναγνωρίσει από μόνο

του τις νέες συσκευές, για να φορτώσει αυτόματα τα κατάλληλα modules κατά την εκκίνηση,

είναι το /etc/system.

Οι βασικές του "εντολές" είναι:

rootfs,rootdev καθορισμός είδους και τοποθεσίας του swap partitition

forceload καθορισμός drivers που πρέπει να φορτωθούν υποχρεωτικά

exclude καθορισμός drivers που δεν πρέπει να φορτωθούν

moddir καθορισμός εναλλακτικής τοποθεσίας των modules

set καθορίζει μεταβλητές του πυρήνα όπως η MAXUSERS

Παράδειγμα τμήματος αρχείου /etc/system:

rootfs:ufs

rootdev:/sbus@1,f8000000/esp@0,800000/sd@3,0:a

forceload: drv/superplotter

set maxuser=64

Αυτές οι γραμμές καθορίζουν ότι το root filesystem είναι τύπου UFS και βρίσκεται στο

partitition sd3a. Επίσης ο driver superplotter φορτώνεται υποχρεωτικά κατά την εκκίνιση του

συστήματος. Τέλος καθορίζεται ότι οι πίνακες του πυρήνα θα υποστηρίζουν μέχρι 64 χρήστες.

59

Page 60: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

60

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

4.1 Βασικά στοιχεία του υποσυστήματος χρηστών στο UNIX

Ο κωδικός χρήστη (username) είναι η ταυτότητα του χρήστη ως προς το σύστημα. Για

την ακρίβεια, εσωτερικά στο πυρήνα (kernel) του UNIX κάθε χρήστης αναπαριστάται με τον

αριθμό χρήστη (userid,UID) που έχει 1 προς 1 αντιστοιχία σε κάποιο κωδικό χρήστη. Επίσης

υπάρχουν και ομάδες χρηστών όπου κάθε ομάδα έχει ένα κωδικό ομάδας (group) και

εσωτερικά στον πυρήνα η ομάδα αναπαριστάται με τον αριθμό της (groupid). Υποτίθεται πως

όλοι οι χρήστες που ανήκουν σε μια ομάδα έχουν κάποιο κοινό χαρακτηριστικό ή ιδιότητα,

πχ. στην ομάδα με όνομα faculty ανήκουν όλοι οι καθηγητές, σε μια ομάδα sysadmin

ανήκουν όλοι οι διαχειριστές, σε μια ομάδα db ανήκουν όσοι ασχολούνται με βάσεις

δεδομένων, σε μια ομάδα lan όσοι προσπελαύνουν το δίκτυο κοκ. Kάθε κωδικός χρήστη

ανήκει σε μια τουλάχιστον ομάδα, μπορεί δε, όπως είναι προφανές, να ανήκει και σε

περισσότερες. Με τις ομάδες σχετίζονται οι άδειες χρήσης (permissions) των αρχείων. Για

παράδειγμα, είναι δυνατό το πρόγραμμα της βάσης δεδομένων να έχει execute άδεια για τα

μέλη της ομάδας db αλλά όχι για τον υπόλοιπο κόσμο. Ή κάποιο αρχείο μπορεί να έχει άδεια

ανάγνωσης απο τα μέλη της ομάδας sysadmin και όχι απο τους άλλους. Με τρόπους σαν

αυτούς η συμμετοχή σε μια ομάδα αποκτά ουσιαστική υπόσταση, παρόμοια με αυτή του

κωδικού χρήστη: δίνει στο συμμετέχοντα κάποιες ιδιότητες και κάποια προνόμια. Σε

ορισμένους τύπους UNIX (πχ. SunOS, Ultrix και γενικά συστήματα προερχόμενα απο το BSD

UNIX) ο χρήστης που ανήκει σε πολλές ομάδες έχει ταυτόχρονα τις δυνατότητες προσπέλασης

όλων των ομάδων, δηλ. στο παραπάνω παράδειγμα ένας χρήστης που ανήκει στις ομάδες db

και sysadmin μπορεί ταυτόχρονα να εκτελέσει το πρόγραμμα της βάσης δεδομένων και να

διαβάσει το αρχείο. Σε άλλες περιπτώσεις ο χρήστης έχει τα δικαιώματα μιας ομάδας μόνο,

της εξ' ορισμού (default) ομάδας και "αλλάζει ομάδα" με την εντολή newgrp <newgroup>,

αντίστοιχη της su αλλά για ομάδες. Η πολιτική του διαχειριστή απέναντι στις ομάδες μπορεί

να είναι είτε αδιάφορη, δηλ. να μην τις πολυ-χρησιμοποιεί, είτε στενής συνεργασίας, δηλ. να

τις χρησιμοποιήσει για να επιτύχει όπου απαιτείται διαχωρισμό των χρηστών.

Αλλο βασικό χαρακτηριστικό των κωδικών χρηστών είναι ο εξ΄ ορισμού φλοιός (default shell)

τους. O φλοιός είναι ο μεταφραστής των εντολών του χρήστη προς το λειτουργικό σύστημα

και επιπλέον μια πλήρης γλώσσα προγραμματισμού. Υπάρχουν πολλοί διαφορετικοί φλοιοί,

μια και ο φλοιός είναι ενα πρόγραμμα χρήστη που μπορεί να επιλεγεί απο κάθε χρήστη

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

bin/sh (Bourne shell), /bin/csh (C shell), /bin/ksh (Korn shell), /bin/tcsh (Turbo C shell) κα.

Κάθε ένας έχει ορισμένα πλεονεκτήματα. Το ksh είναι υπερσύνολο του sh. Και οι δύο φλοιοί

είναι πολύ καλοί και γρήγοροι για τη συγγραφή προγραμμάτων φλοιού (shell scripts) αλλά

όχι τόσο για διαλογική χρήση. Το tcsh είναι υπερσύνολο του csh. Και οι δύο αυτοί φλοιοί

60

Page 61: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

61

είναι προσανατολισμένοι στη διαλογική χρήση. Το ποιός φλοιός θα χρησιμοποιηθεί είναι

θέμα προτίμησης του χρήστη αλλά και πιθανής πολιτικής της διαχείρισης του συστήματος.

Γενικά προτιμάται το tcsh ή, αν δεν είναι διαθέσιμο, το csh για φλοιό χρηστών. Για

προγράμματα φλοιού προτιμούνται τα ksh - sh.

Ο βασικός κατάλογος (home directory) του χρήστη είναι ο κατάλογος στον οποίο κανονικά

εισάγεται ο χρήστης κατά την είσοδο του στο σύστημα. Ολο το δέντρο καταλόγων (directory

tree) "κάτω" απο το βασικό κατάλογο περιέχει τα αρχεία του χρήστη.

Κάθε βασικός κατάλογος χρήστη περιέχει ορισμένα αρχεία αρχικοποίησης

(initialisation) του περιβάλλοντος εργασίας του. Αυτά τα αρχεία περιλαμβάνουν αρχεία

αρχικοποίησης του φλοιού (.login, .cshrc για τα tcsh και csh, .tcshrc επιπλέον του .cshrc για το

tcsh, .profile για τα sh και ksh, .kshrc για το ksh επιπλέον του .profile), του συντάκτη

κειμένων (editor) (.exrc για τον vi), του ηλεκτρονικού ταχυδρομείου (e-mail) (.mailrc για το

mail και κατάλογος elm/elmrc για το elm), των προσωπικών πληροφοριών χρήστη (.plan

και .project), των ηλεκτρονικών "νέων" (κατάλογος .nn για το nn, .newsrc για το tin) κοκ.

Αυτά τα αρχεία ανήκουν στο χρήστη και μπορεί να τα τροποποιήσει, όμως τοποθετούνται στο

βασικό κατάλογο απο το διαχειριστή κατά τη δημιουργία του κωδικού.

4.2 Βασικά αρχεία υποσυστήματος χρηστών

Τα βασικά αρχεία του υποσυστήματος χρηστών του UNIX είναι τα ακόλουθα:

1 /etc/passwd. Το αρχείο αυτό περιέχει μια εγγραφή για κάθε κωδικό χρήστη του

συστήματος. Οι εγγραφές έχουν την ακόλουθη μορφή:

username:password:userid:groupid:info:homedir:shell

Η σημασία των περισσότερων πεδίων πρέπει να είναι σαφής. Ο αριθμός ομάδας

groupid είναι αυτός της εξ΄ ορισμού ομάδας του χρήστη, αυτής στην οποία ανήκει όταν

εισέρχεται στο σύστημα. Στο πεδίο info αποθηκεύονται προσωπικές πληροφορίες του

ιδιοκτήτη του κωδικού όπως το ονοματεπώνυμο του και το τηλέφωνο του. Στο πεδίο

password αποθηκεύεται το σύνθημα του σε κρυπτογραφημένη (encrypted) μορφή (μή

αντιστρέψιμη κρυπτογράφηση). Η διαδικασία κρυπτογράφησης παίρνει ένα σύνθημα

μέχρι 8 χαρακτήρων και με χρήση του αλγόριθμου DES το μετατρέπει σε μια

κρυπτογραφημένη συμβολοσειρά (string) 13 χαρακτήρων που αποθηκεύεται στο /

etc/passwd. Οταν ο χρήστης περνά απο τη διαδικασία login τότε το σύνθημα που δίνει

επίσης κρυπτογραφείται και συγκρίνεται με το αποθηκευμένο. Αν τα δυο

κρυπτογραφημένα δεν είναι ίδια, η πρόσβαση απορρίπτεται.

Παραδείγμα εγγραφών του /etc/passwd είναι τα ακόλουθα:

root:qs/RTioNFGsqa:0:0:System Administrator:/:/bin/sh

user:ervBdJaswirel:102:100:User:/home/user:/bin/tcsh

61

Page 62: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

62

nouser:*:2156:2150:No User:/home/nouser:/bin/ksh

Ο χρήστης nouser έχει σαν σύνθημα (πεδίο password στο /etc/passwd) το *. Αν ο

διαχειριστής θέσει * ή κάποιο άλλο εύκολα αναγνωρίσιμο χαρακτήρα ή ακόμα και

σειρά χαρακτήρων πχ. disabled ή nologin στο πεδίο password αυτό είναι σαν να

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

πρόκειται να παράγει αυτόν τον χαρακτήρα ή αυτή τη σειρά χαρακτήρων, ό,τι και αν

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

στο σύστημα.

Φαίνεται επίσης να υπάρχει σχέση ανάμεσα στον αριθμό του χρήστη και τον αριθμό

της ομάδας, σαν ο χρήστης να "ανήκει" σε αυτήν την εξ΄ ορισμού ομάδα του. Δεν είναι

απαραίτητο βέβαια να σχετίζονται κατά αυτό τον τρόπο οι αριθμοί χρήστη και ομάδας,

βοηθά όμως το διαχειριστή.

Τέλος όλοι οι βασικοί κατάλογοι τοποθετούνται κάτω απο ένα κατάλογο με κατάλληλο

όνομα, πχ. /home, /var/home, /users κτλ. και σε κάθε περίπτωση στο ίδιο σύστημα

αρχείων.

Εναλλακτικά, μπορεί να χρησιμοποιηθεί το αρχείο /etc/shadow για την καταγραφή

των κρυπτογραφημένων password σε συνδυασμό με το /etc/passwd. Το /etc/shadow

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

κρυπτογραφημένα passwords με αποτέλεσμα την αύξηση της ασφάλειας του

συστήματος. Η σύνταξη του αρχείου /etc/shadow είναι:

username:password:lastchg:min:max:warn:inactive:expire:flag

όπου username το όνομα του χρήστη, password το κρυπτογραφημένο pasword,

lastchg o αριθμός των ημερών από την 1/1/1970 μέχρι την ημέρα που άλλαξε το

password,min ο ελάχιστος αριθμός ημερών μεταξύ αλλαγών του password, max ο

μέγιστος αριθμός ημερών που το password είναι σε ισχύ, warn o αριθμός των ημερών

πρίν τη λήξη που ειδοποιείται ο χρήστης, inactive ο μέγιστος αριθμός ημερών μή

χρήσης του κωδικού, expire η ημερομινία στην οποία απενεργοποιείται ο κωδικός, flag

δεν χρησιμοποιείται

1 /etc/group. Το αρχείο αυτό περιέχει όλες τις ομάδες του συστήματος. Κάθε ομάδα

καταλαμβάνει μια εγγραφή της μορφής:

groupname:password:groupid:[username[,username]]

Δηλαδή το όνομα και ο αριθμός της ομάδας, ένα πεδίο συνθήματος που συνήθως δεν

χρησιμοποιείται και παίρνει την τιμή * και προαιρετικά ενας κατάλογος με τους

χρήστες που ανήκουν σε αυτή την ομάδα. Για παράδειγμα:

wheel:*:0:user1,user2

62

Page 63: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

63

src:*:100:user2,user4,user5

Η πρώτη απο τις παραπάνω γραμμές καθορίζει τους χρήστες που ανήκουν στην ομάδα

wheel ή σε άλλες περιπτώσεις root με αριθμό 0. Σε ορισμένα συστήματα UNIX δεν είναι

δυνατό για λόγους ασφάλειας σε κάποιο χρήστη να κάνει su root αν δεν ανήκει στην

ομάδα 0.

1 /etc/shells. Σε κάθε γραμμή του αρχείου αυτού υπάρχει το πλήρες όνομα (full

pathname) ενός εκτελέσιμου αρχείου που είναι "εγκεκριμένο" απο το διαχειριστή για

να παίξει το ρόλο του φλοιού.

4.3 Πρόσθεση - διαγραφή κωδικών χρηστών

H διαδικασία πρόσθεσης χρηστών στο σύστημα δεν είναι ιδιαίτερα πολύπλοκη ή

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

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

αποκτήσει κωδικό πρέπει να γίνονται τα ακόλουθα:

1 διαπιστώνεται πως όντως υπάρχει λόγος χρήσης του συγκεκριμένου συστήματος.

Πολλές φορές ο διαχειριστής δεν είναι σε θέση να κατασκευάσει έναν κωδικό χωρίς

κατάλληλη "εντολή" απο κάποιο εντεταλμένο πρόσωπο ή όργανο.

1 αποφασίζεται ο κωδικός χρήστη. Θα πρέπει να είναι μοναδικός και να μην υπάρχει

ανάμεσα στους ήδη υπάρχοντες, να χαρακτηρίζει το χρήστη -γιαυτό και πρέπει να

αποφεύγονται οι "γενικοί" κωδικοί όπως user κτλ.- και να έχει μήκος μέχρι και 8

χαρακτήρες. Σε μερικές περιπτώσεις απαιτείται απο την γενικότερη πολιτική να

υπάρχει άμεση σχέση του κωδικού με το όνομα του χρήστη (πχ. πρώτο γράμμα

ονόματος + μερικά γράμματα επωνύμου ή αντίστροφα). Πρέπει να αποφεύγονται οι

αριθμητικοί κωδικοί και γενικά αυτοί που δεν είναι εύκολο να τους θυμηθεί ο χρήστης

και να τους ελέγξει ο διαχειριστής.

1 αποφασίζεται σε ποιές ομάδες θα ανήκει ο χρήστης και ποιά θα είναι η εξ΄ ορισμού

ομάδα του. Στη συνέχεια, σε σχέση με την εξ΄ ορισμού ομάδα του να αποφασίζεται ο

αριθμός χρήστη, συνήθως ο προηγούμενος αριθμός χρήστη της ομάδας αυτής + 1.

1 αποφασίζεται ο βασικός κατάλογος του χρήστη. Δεν είναι υποχρεωτικό αλλά

συνιστάται το όνομα του καταλόγου αυτού να είναι ίδιο με τον κωδικό χρήστη ώστε να

είναι απλή η αναγνώριση του. Μερικές φορές ο βασικός κατάλογος δεν τοποθετείται

αμέσως κάτω απο τον αρχικό κατάλογο του συστήματος χρηστών (πχ. /home, /users)

αλλά κάτω απο έναν υποκατάλογο για την εξ΄ ορισμού ομάδα (πχ. /

home/somegroup/newuser) ώστε να είναι σαφής και η ομαδοποίηση αλλά και

ταχύτερη η λειτουργία του συστήματος σε περίπτωση μεγάλου αριθμού χρηστών.

63

Page 64: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

64

1 αποφασίζεται απο το χρήστη ο επιθυμητός φλοιός ανάμεσα απο τους περιεχόμενους

στο αρχείο /etc/shells. Σε περίπτωση που ο χρήστης δεν έχει άποψη, χρησιμοποιείται

κάποιος εξ΄ ορισμού φλοιός γενικά csh ή tcsh, αν είναι διαθέσιμο.

1 με χρήση της εντολής vipw ξεκινά ο συντάκτης κειμένου (editor) vi πάνω σε ένα

αντίγραφο του αρχείου /etc/passwd, το /etc/ptmp. Η ύπαρξη αυτού του αρχείου

στον κατάλογο /etc σημαίνει πως το /etc/passwd "διορθώνεται", πρόκειται δηλ. για

κάποια μορφή κλειδώματος ώστε να μην είναι δυνατή η ταυτόχρονη διόρθωση του

αρχείου. Αν για κάποιο λόγο το /etc/ptmp υπάρχει χωρίς να γίνεται χρήστη της vipw

αυτό σημαίνει πως κάποια προηγούμενη vipw τερματίστηκε ανώμαλα (πχ. system

crash). Το αρχείο /etc/ptmp πρέπει τότε να σβησθεί.

Κατά τη διάρκεια της χρήσης του vipw ο διαχειριστής προσθέτει μια γραμμή - εγγραφή

με τα στοιχεία που αποφασίστηκαν με την ορθή σύνταξη, αφήνοντας κενό το πεδίο του

συνθήματος. Για παράδειγμα:

newuser::1536:1500:New User:/home/newuser:/bin/tcsh

(δεν πρέπει να υπάρχουν κενά μετά το τέλος τoυ φλοιού). Στη συνέχεια η vipw

τερματίζεται. Προσοχή χρειάζεται στο ό,τι αν γίνει λάθος στη σύνταξη του τότε το

αρχείο /etc/passwd μπορεί να γίνει "corrupt" οπότε η πρόσβαση στο σύστημα για

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

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

η vipw ελέγχει την ορθότητα της εγγραφής του root.

1 το σύνθημα του χρήστη προστίθεται με την εντολή passwd <user>, π.χ. passwd

dimitris. Το σύνθημα ζητείται δύο φορές για να αποκλειστεί η περίπτωση λάθους. Το

μέγιστο σημαντικό μήκος του συνθήματος είναι 8 χαρακτήρες. Ανάμεσα στους

χαρακτήρες αυτούς πρέπει συνήθως να υπάρχουν ένας αλφαβητικός, ένας αριθμητικός

(0 - 9) και / ή ένας ειδικός χαρακτήρας (!, *, _ κτλ) και το ελάχιστο μήκος του

συνθήματος είναι 4 - 6 χαρακτήρες ωστόσο ο διαχειριστής (μόνο) μπορεί αν επιμείνει

δίνοντας το ίδιο σύνθημα πολλές φορές (2 - 3) να τους υπερβεί. Χρειάζεται λοιπόν

προσοχή να μην πειστεί ο διαχειριστής απο το χρήστη να δώσει ένα ακατάλληλο απο

άποψη ασφάλειας σύνθημα, πιθανά για "ευκολία".

1 με την εντολή mkdir κατασκευάζεται ο βασικός κατάλογος του χρήστη. Σε αυτόν ο

χρήστης θα πρέπει να έχει άδεια ανάγνωσης, εγγραφής και εκτέλεσης (read - write -

execute permission) και κατά προτίμηση να είναι και ο ιδιοκτήτης του.

1 αντιγράφονται στο βασικό κατάλογο τα "πρότυπα" αρχεία .cshrc / .tcshrc / .kshrc, .

profile, .login, .plan, .project και όσα άλλα αρχεία θεωρείται πως πρέπει να υπάρχουν

στο βασικό κατάλογο όταν ο χρήστης εισέλθει στο σύστημα (πχ. κάποιο αρχείο

πληροφοριών, καλωσορίσματος, πολιτικής κοκ). Τα πρότυπα αρχεία μπορούν να

βρίσκονται όλα μαζί σε κάποιο κατάλογο του συστήματος, πχ. /usr/skel.

64

Page 65: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

65

1 όλος ο βασικός κατάλογος του χρήστη -και τα περιεχόμενα αρχεία και υποκατάλογοι-

αλλάζει ιδιοκτήτη με την εντολή chown -R <username> <directory> και ομάδα με την

εντολή chgrp -R <groupname> <directory>, πχ. chown -R newuser /home/newuser

και chgrp -R somegroup /home/newuser.

Μετά τα παραπάνω ο κωδικός είναι έτοιμος για χρήση. Τυχόν επιπλέον βήματα που πρέπει

να γίνουν είναι η πρόσθεση - μεταβολή των ορίων χρήσης δίσκου (quotas) και η ενημέρωση

του NIS. Θα αναφερθούν στα αντίστοιχα κεφάλαια.

Η διαγραφή ενός χρήστη είναι μια άλλη διαδικασία σχετική με τη διαχείριση των χρηστών.

Σε πολλά συστήματα ένας χρήστης διαγράφεται απλά απενεργοποιώντας τον κωδικό του με

θέση του * στο πεδίο συνθήματος του /etc/passwd. Αυτό σημαίνει βέβαια πως τα αρχεία του

συνεχίζουν να καταλαμβάνουν χώρο στο δίσκο. Η ορθή πολιτική για τη διαγραφή του

χρήστη περιλαμβάνει:

1 αφαίρεση ή απλή απενεργοποίηση της εγγραφής του κωδικού χρήστη απο το /

etc/passwd. Η αφαίρεση είναι προτιμότερη για διάφορους λόγους, όπως οικονομία

κωδικών και αριθμών χρήστη, μεγέθους /etc/passwd, ηλεκτρονικού ταχυδρομείου κα.

1 αποθήκευση των αρχείων του χρήστη απο το βασικό του κατάλογο και "κάτω" σε μια

μονάδα ταινίας με χρήση της εντολής tar ή cpio.

1 πιθανό ψάξιμο όλων των δίσκων του συστήματος για αρχεία του χρήστη με χρήση μιας

εντολής της μορφής find / -user <deleted user> -print -exec ... Το τι θα γίνει για κάθε

τέτοιο αρχείο (πεδίο -exec) δεν είναι αυστηρά καθορισμένο. Μπορεί να σωθεί σε ταινία

ή και να σβηστεί τελείως.

Μια ειδική περίπτωση είναι η προσωρινή απενεργοποίηση του κωδικού του χρήστη

για διάφορους λόγους (πχ. παραβίαση απο αυτόν κανονισμών ασφάλειας). Στην περίπτωση

αυτή μερικές φορές αρκεί το * στο /etc/passwd. Ακόμα καλύτερη λύση είναι η θέση σαν

φλοιού του χρήστη (με κατάλληλη εγγραφή και στο /etc/shells) ενός προγράμματος φλοιού

(πχ. /usr/local/bin/disablelogin) που θα τον ειδοποιεί για το πρόβλημα, θα ειδοποιεί και τον

διαχειριστή για την πρόσβαση του χρήστη και θα τερματίζεται, τερματίζοντας έτσι και την

πρόσβαση του χρήστη. Για παράδειγμα:

#!/bin/sh

# Notify user. Username is $USER. Some systems use

# $LOGNAME instead.

cat <<EOF1 # echo would be fine, too

Your account has been temporarily disabled, $USER.

Please contact the system administrator.

EOF1

65

Page 66: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

66

# Notify root via e-mail. Add time stamp.

mail root <<EOF2

User $USER logged in on `date`

EOF2

exit 0

Εναλλακτικά η πρόσθεση χρηστών μπορεί να γίνει και με την εντολή useradd του Solaris και

η διαγραφή με την userdel.Τα σημαντικότερα ορίσματα της useradd είναι:

-d dir : καθορίζει το home directory

-e date : καθορίζει την ημερομηνία λήξης του κωδικού (expiration date)

-g gid : καθορίζει το GID (group ID) στο οποίο θα ανήκει ο χρήστης

-k skel :καθορίζει ένα directory με τα default αρχεία αρχικοποίησης - skeleton files. (.cshrc

k.l.p.)

-m : χρειάζεται για να κατασκευάσει το home dir του χρήστη άν αυτό δεν υπάρχει

-s shell : καθορίζει το shell (φλοιό) του χρήστη

-u uid : καθορίζει το uid του χρήστη

Για περισσότερες πληροφορίες σχετικά με τη χρήση των εντολών, πληκτρολογίστε "man

useradd"

4.4 Διαδικασία εισόδου και περιεχόμενο αρχείων αρχικοποίησης

H διαδικασία εισόδου ενός χρήστη στο σύστημα έχει διάφορα στάδια. Πρώτα η

διαδικασία /etc/getty καθορίζει τις παραμέτρους του τερματικού (πχ. ταχύτητα) και

παρουσιάζει στην οθόνη ένα μήνυμα που καταλήγει στο γνωστό login: (τα υπόλοιπα

περιεχόμενα του μηνύματος όπως όνομα συστήματος - οργανισμού κτλ. ορίζονται στο

αρχείο /etc/issue για συστήματα SYSV. Μόλις ο χρήστης δώσει τον κωδικό του, ξεκινά η

διαδικασία /bin/login που τυπώνει το επίσης γνωστό Password: και διαβάζει το ("αόρατο")

σύνθημα του χρήστη. Το κρυπτογραφεί, το συγκρίνει με το αποθηκευμένο στο πεδίο

συνθήματος του /etc/passwd και αν είναι ορθό επιτρέπει την πρόσβαση. Τυπώνει διάφορα

μηνύματα όπως την έκδοση (version) του UNIX και κυρίως το περιεχόμενο του αρχείου /

etc/motd και έπειτα ξεκινά το φλοιό του χρήστη. Στο αρχείο /etc/motd περιέχονται γενικά

μηνύματα του διαχειριστή προς τους χρήστες, διάφορες πληροφορίες (πχ. μηνύματα για

τυχόν μη διαθεσιμότητα του συστήματος), ρητά κα.

Οταν ο φλοιός ξεκινήσει διαβάζει και εκτελεί το αρχείο αρχικοποίησης του (.cshrc για το csh, .

tcshrc αν υπάρχει αντί του .cshrc για το tcsh, .kshrc αν υπάρχει για το ksh) και εφόσον είναι

φλοιός εισόδου (login shell) το αρχείο αρχικοποίησης για αυτή την περίπτωση (.login για τα

csh, tcsh και .profile για τα sh , ksh). Τα αρχεία αυτά τα εκτελεί πρώτα από το /etc και έπειτα

66

Page 67: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

67

από το home directory του χρήστη. Στα πρώτα γίνεται αρχικοποίηση μεταβλητών γενικά για

όλους τους χρήστες, ενώ τα άλλα μπορεί ο κάθε χρήστης να τα μετατρέψει όπως επιθυμεί.

Στα αρχεία αρχικοποίησης γενικά:

1 δίνονται αρχικές τιμές σε σημαντικές μεταβλητές του περιβάλλοντος του χρήστη όπως

οι $path - $PATH, $prompt - $PS1 κτλ.

1 καθορίζονται οι συντμήσεις χρήστη (aliases) για διάφορες εντολές, πχ. rm -i αντί για

rm, ls -asF αντί για "απλό" ls κοκ.

Στα αρχεία αρχικοποίησης για την είσοδο:

1 καθορίζεται το είδος και τα χαρακτηριστικά του τερματικού με τη μεταβλητή $TERM

και τα προγράμματα stty, tset κτλ.

1 τυπώνονται διάφορα μηνύματα και ερωτήσεις προς το χρήστη. Γενικά τα αρχεία αυτά

μπορούν να είναι διαλογικά, σε αντίθεση με τα απλά αρχεία αρχικοποίησης που

καλύτερα να μην είναι. Επίσης στα αρχεία αυτά αρκεί άδεια ανάγνωσης ενώ στα άλλα

χρειάζεται και εκτέλεσης.

67

Page 68: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

68

ΚΕΦΑΛΑΙΟ 5. ΘΕΜΑΤΑ ΑΣΦΑΛΕΙΑΣ

Η ασφάλεια των συστημάτων UNIX είναι ένα απο τα σοβαρότερα καθήκοντα του

διαχειριστή. Πρέπει να διασφαλίσει:

1 τη λειτουργία του συστήματος χωρίς διακοπές της ή μείωση των παρεχόμενων

υπηρεσιών, εκτός προγραμματισμένων περιπτώσεων.

1 τον περιορισμό της χρήσης του συστήματος μόνο στους αρμόδια εξουσιοδοτημένους

χρήστες.

1 την ακεραιότητα των δεδομένων των χρηστών. Οχι μόνο πρέπει τα δεδομένα αυτά να

παραμείνουν αναλλοίωτα στο σύστημα για όσο χρόνο ο ιδιοκτήτης τους και μόνο

επιθυμεί αλλά και να μην επιτραπεί η ανάγνωση και φυσικά η εγγραφή τους απο

τρίτους χωρίς άδεια του ιδιοκτήτη.

Κατά αυτή την έννοια ένα σύστημα πρέπει να προστατεύεται απο:

1 φυσικές καταστροφές (πυρκαγιά, πλημμύρα κτλ.)

1 σφάλματα (bugs) και βλάβες στο υλικό (hardware) και το λογισμικό (software). Πχ.

καταστροφή δίσκων.

1 προσπάθειες πρόσβασης χωρίς άδεια.

1 τυχαία λάθη χρηστών.

1 κακόβουλους χρήστες που επίτηδες προσπαθούν να αποκτήσουν δικαιώματα

διαχειριστή.

Απόλυτα ασφαλές σύστημα δεν υπάρχει, ωστόσο υπάρχουν πολλές διαφαθμίσεις

επιτυγχανόμενης ασφάλειας. Κάθε τι που γίνεται για την ασφάλεια ανεβάζει το επίπεδο της

αλλά μειώνει τη λειτουργικότητα και πρακτικότητα του συστήματος, πολλά δε μέτρα είναι

πρακτικώς ανεφάρμοστα. Αρα το όλο ζήτημα είναι θέμα συμβιβασμών και προτεραιοτήτων.

Βασικό στοιχείο της προστασίας είναι η διαδικασία φύλαξης αντιγράφων (backup). Η

διαδικασία αυτή περιγράφεται αργότερα. Για την προστασία απο φυσικές καταστροφές καλό

είναι τα αντίγραφα να φυλάσσονται σε διαφορετικό χώρο απο αυτόν του υπολογιστή.

Εννοούνται βέβαια μέτρα όπως πυροσβεστήρες κοκ. Ενάντια στις βλάβες στο υλικό μια καλή

πολιτική είναι η χρησιμοποίηση Τροφοδοτικών Αδιάλειπτης Παροχής (UPS), ο κλιματισμός

του χώρου κοκ. Επίσης καλό είναι ο χώρος του υπολογιστή να είναι φυσικά απομονωμένος -

κλειδωμένος απο πρόσβαση μη εξουσιοδοτημένου προσωπικού. Σε αντίθετη περίπτωση

μπορούν να παρουσιασθούν φαινόμενα παραβίασης του συστήματος (πχ. πρόσβαση στην

κονσόλα όπου έχει "ξεχασθεί" ένας φλοιός απο το διαχειριστή ή εκκίνηση του συστήματος απο

ταινία για απόκτηση προνομίων root) ή απλά, κλοπής εξοπλισμού. Για αντιμετώπιση τυχόν

σφαλμάτων πρέπει να καταβάλλεται προσπάθεια προμήθειας κάθε φορά των πιο

αποσφαλματωμένων (debugged) εκδόσεων του εξοπλισμού αλλά με προσοχή, διότι πολλές

68

Page 69: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

69

φορές οι νέες εκδόσεις περιέχουν καινούργιες επαυξημένες δυνατότητες και διορθώνουν

σφάλματα των προηγούμενων αλλά εισάγουν νέα. Υπάρχουν διαχειριστές που δεν

προμηθεύονται νέες εκδόσεις διότι γνωρίζουν πως οι υπάρχουσες δεν έχουν (πολλά)

σφάλματα και διασφαλίζουν τη λειτουργία του συστήματος τους. Αυτή η πολιτική βέβαια

στερεί τους χρήστες απο τις επιπλέον δυνατότητες και μοιάζει στρουθοκαμηλική, είναι όμως

δεκτή σε κάποιες περιπτώσεις.

Τα τυχαία λάθη χρηστών σε περίπτωση που δεν εμπλέκεται κάποιο σφάλμα λογισμικού δεν

είναι εύκολο να επηρεάσουν άλλους χρήστες, παρότι αυτό είναι δυνατό. Ως παράδειγμα

αναφέρεται το ακόλουθο προγραμματάκι:

#!/bin/sh

while : ; do

mkdir b

cd b

done

που μπορεί, αν δεν υπάρχουν όρια χρήσης δίσκου, να προκαλέσει crash λόγω έλλειψης i-

nodes. Κάποιος χρήστης είναι δυνατό να κατασκευάσει κάτι τέτοιο (πχ. πρόγραμμα φλοιού

με αναδρομή) με άλλη πρόθεση και να έχει αυτά τα δυσάρεστα αποτελέσματα. Υπάρχουν

βέβαια και χρήστες που σπαταλούν τους πόρους (resources) του συστήματος τρέχοντας χωρίς

πρόνοια για τους άλλους χρήστες προγράμματα με μεγάλες απαιτήσεις σε μνήμη, CPU ή

δίσκο και πρακτικά απαγορεύοντας τη χρήση του συστήματος απο άλλους. Η εντολή nice

ήταν αυτή που ο χρήστης έπρεπε να είχε χρησιμοποιήσει για να μειώσει την προτεραιότητα

του προγράμματος του, μειώνοντας αν μη τι άλλο τις απαιτήσεις CPU. H εντολή renice σε

αυτή την περίπτωση χρησιμοποιούμενη απο το διαχειριστή μειώνει εκ των υστέρων τις

απαιτήσεις CPU των προγραμμάτων αυτών.

To κύριο πρόβλημα της ασφάλειας είναι ωστόσο η αντιμετώπιση των κακόβουλων χρηστών.

Και αυτό διότι συνήθως αυτοί οι χρήστες είναι καλοί γνώστες του UNIX και συστηματικά

εκμεταλεύονται γνωστά σφάλματα του λογισμικού συστήματος ή ανακαλύπτουν λάθη του

διαχειριστή για να επιτύχουν την παράνομη πρόσβαση στο σύστημα και την απόκτηση

αυξημένων προνομίων. Οι λόγοι που δρούν έτσι διαφέρουν ανα περίπτωση: προσωπικό

όφελος, εγωισμός και περηφάνεια, εκδίκηση ακόμα κοκ. Η αντιμετώπιση τους χρειάζεται

συνεπή και σαφώς καθορισμένη πολιτική και συνεργασία του διαχειριστή με τους χρήστες του

συστήματος για τον εντοπισμό και την απομόνωση των περιστατικών. Πάνω απ΄ όλα δεν

χρειάζεται μια στείρα απαγορευτική πολιτική που θα δυσκολεύει και θα αποθαρρύνει τη

χρήση του συστήματος και απο τους νόμιμους χρηστες του αλλά μια πολιτική πρόληψης,

συνεργασίας και ενημέρωσης η οποία θα κάνει τους χρήστες να κατανοήσουν τα προβλήματα

69

Page 70: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

70

της ασφάλειας, να προβληματιστούν και να δεχθούν τυχόν μικροδυσκολίες χρήσης του

συστήματος σαν απαραίτητες για τη συνέχιση της ομαλής λειτουργίας του.

Διάφορα ζητήματα που ο διαχειριστής πρέπει να έχει υπόψη τους όσον αφορά στην ασφάλεια

του συστήματος του είναι:

1 σφάλματα λογισμικού συστήματος υπάρχουν και θα υπάρχουν. Απλά πρέπει να

καταβληθεί προσπάθεια να περιοριστούν οι συνέπειες τους.

1 η σύνδεση του συστήματος σε δίκτυο αυξάνει πολύ τη λειτουργικότητα του αλλά και

τους κινδύνους ασφάλειας.

1 αν διαπιστωθεί παραβίαση, ο πανικός (που εκδηλώνεται με σπασμωδικές κινήσεις με

κύριο χαρακτηριστικό τους περιορισμούς, όπως αποσύνδεση απο το δίκτυο, διακοπή

παροχής διαφόρων χρήσιμων υπηρεσιών όπως το ηλεκτρονικό ταχυδρομείο, διαγραφή

κωδικών κοκ) θα είναι η χειρότερη αντίδραση. Με ψυχραιμία αλλά και με

συντονισμένες κινήσεις πρέπει να τεθεί υπο παρακολούθηση ο παραβάτης, να

διαπιστωθεί η ταυτότητα, η προέλευση, οι σκοποί του και κυριότερα η μέθοδος και ο

τρόπος παραβίασης και, αν πρόκειται για "τοπικό" χρήστη, να "συλληφθεί επ΄

αυτοφώρω", αν δε προέρχεται απο το δίκτυο, να ειδοποιηθεί ο διαχειριστής του

συστήματος και αυτός της περιοχής του ώστε να του αφαιρεθεί ο κωδικός ή να γίνει ό,τι

εν πάση περιπτώσει καθορίζει η πολιτική εκείνου του συστήματος. Επειτα πρέπει να

κλείσει η "τρύπα" απο την οποία έκανε την παραβίαση και να επιδιορθωθούν τυχόν

προβλήματα που προξένησε.

1 ο πλέον συχνός τρόπος παράνομης εισόδου σε ένα σύστημα είναι μέσω κακού

συνθήματος ενός νόμιμου χρήστη. Ημερομηνίες γέννησης, αριθμοί κυκλοφορίας ή

ταυτότητας, ονόματα και γενικά προσωπικά στοιχεία, ο ίδιος ο κωδικός κανονικός ή

ανάποδα, λέξεις απο οποιδήποτε λεξικό κανονικά ή ανάποδα, εξ΄ ορισμού συνθήματα

και βέβαια έλλειψη συνθήματος είναι τυπικές περιπτώσεις. Η παραβίαση γίνεται είτε με

απλό μάντεμα του συνθήματος με πιθανή γνώση προσωπικών στοιχείων του κατόχου

του κωδικού είτε με εξαντλητικό ψάξιμο σε ηλεκτρονικό λεξικό. Υπάρχουν public

domain προγράμματα σαν το crack που ο διαχειριστής μπορεί να τρέξει για να

διαπιστώσει ποιοί χρήστες έχουν κακά συνθήματα. Αλλα κακά συνθήματα είναι αυτά

που είναι τόσο πολύπλοκα ώστε χρειάζεται να καταγραφούν για να μπορεί ο χρήστης

να τα θυμηθεί. Για το λόγο αυτό και δεν συνίστανται οι γεννήτορες συνθημάτων

(password generators), μια και παράγουν πολλές φορές εξαιρετικά πολύπλοκα

συνθήματα. Υπακοή όμως στους κανόνες που επιβάλλει το πρόγραμμα passwd είναι

μια στοιχειώδης προφύλαξη.

1 δεν πρέπει ποτέ τερματικά να αφήνονται χωρίς να γίνει logout ή κάποιο κλείδωμα

τους. Επίσης δεν πρέπει να παρακολουθεί κανείς όταν κάποιος χρήστης πληκτρολογεί

το σύνθημα του.

70

Page 71: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

71

1 ο τρόπος που χρησιμοποιεί το UNIX για να μπορούν απλοί χρήστες να εκτελούν

προνομιούχες εντολές και διαδικασίες (πχ. να αλλάζουν το σύνθημα που έχει σαν

συνέπεια την αλλαγή των περιεχομένων του αρχείου /etc/passwd) είναι το Set UserID

(SUID) bit. Αυτό είναι ένα bit στις άδειες χρήσης του αρχείου που σημαίνει το εξής:

όταν εκτελείται ένα εκτελέσιμο πρόγραμμα που έχει αυτό το bit = 1 τότε ο ενεργός

κωδικός (effective userid) κάτω απο τον οποίο εκτελείται είναι αυτός του ιδιοκτήτη του

αρχείου και όχι ο πραγματικός κωδικός (real userid) του χρήστη που εκτελεί το

πρόγραμμα. Αν λοιόν ο ιδιοκτήτης του εκτελέσιμου αρχείου είναι ο root ο απλός

χρήστης που έχει άδεια εκτέλεσης (execute) του αρχείου γίνεται κατά το διάστημα της

εκτέλεσης του root. Αυτή είναι μια πολύ έξυπνη ιδέα που όμως παρουσιάζει μερικά

προβλήματα ασφάλειας. Για παράδειγμα, ένας φλοιός με SUID bit = 1 σημαίνει πως

όποιος τον εκτελεί γίνεται root. Για το λόγο αυτό, και επειδή πολλοί παραβάτες

αφήνουν πίσω τους ένα SUID root φλοιό σαν "πόρτα" για να ξαναεισέλθουν στο

σύστημα αργότερα, ο διαχειριστής πρέπει σε τακτά χρονικά διαστήματα να ελέγχει αν

τα SUID προγράμματα είναι αυτά που πρέπει και μόνο. Αυτό γίνεται με μια εντολή

find σε όλα τα αρχεία της μορφής find / -perm 004000 -print. Επίσης: ποτέ δεν πρέπει

προγράμματα φλοιού να είναι SUID root.

1 κανένα αρχείο και πολύ περισσότερο του διαχειριστή δεν πρέπει να έχει άδεια

εγγραφής για τους άλλους (δηλ. της μορφης rw-rw-rw-), τόσο για να μην είναι δυνατή

η τροποποίηση του περιεχομένου του απ΄ όλους όσο και -στην περίπτωση του

διαχειριστή- να μην μπορεί να τοποθετηθεί μέσα στο αρχείο κάποια "παγίδα" της

μορφής:

#!/bin/sh

# This shell script called myprog was rw by everyone

# A hacker renamed it to /tmp/myprog. See what happens

# when root runs it from the current directory:

#/tmp/myprog1 becomes superuser shell (SUID root)

/bin/cp /bin/sh /tmp/myprog1

/bin/chown root /tmp/myprog1

/bin/chmod u+s /tmp/myprog1

cp /tmp/myprog $0

. $0

Φυσικά δεν αλλάζει συχνά κανείς τις άδειες χρήσης των αρχείων του ώστε να είναι

δυνατόν να το γράψουν όλοι. Ωστόσο μπορεί η τιμή της μεταβλητής umask να είναι

τέτοια που εξ΄ ορισμού δημιουργούνται αρχεία με τέτοιες άδειες. Η εξ΄ ορισμού άδεια

δημιουργίας αρχείων είναι 0666 (rw-rw-rw) και 0777 (rwxrwxrwx) για εκτελέσιμα

71

Page 72: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

72

προγράμματα. Αυτή η τιμή γίνεται binary and με το αντίθετο της τιμής της umask και

προκύπτει η τελική άδεια για νέα αρχεία. Για παράδειγμα 0666 &~ 022 = 0644 δηλ. μια

τιμή umask ίση με 022 αφαιρεί την άδεια εγγραφής απο τους άλλους. Γενικά, αν το

umask περιέχει 1 αφαιρείται απο την αντίστοιχη θέση των αδειών (χρήστη, ομάδας,

άλλων) η άδεια εκτέλεσης, με 2 τότε αφαιρείται η άδεια εγγραφής, αν περιέχει 3 η άδεια

εκτέλεσης και εγγραφής και με 7 όλες οι άδειες. Δηλαδή umask = 037 αφαιρεί απο τους

άλλους όλες τις άδειες και απο την ομάδα την άδεια εγγραφής και τυχόν άδεια

εκτέλεσης. Πρέπει λοιπόν στα αρχεία αρχικοποίησης του φλοιού ο χρήστης να θέτει την

επιθυμητή τιμή umask. Πάντα πρέπει να είναι διάφορη απο 0.

1 δεν πρέπει να περιέχεται στο PATH ή αν περιέχεται να περιέχεται τελευταίος ο τρέχων

κατάλογος . διότι κάτι τέτοιο είναι πιθανή "τρύπα" ασφάλειας. Για παράδειγμα,

κάποιος επίδοξος παραβάτης μπορεί να φτιάξει το ακόλουθο πρόγραμμα φλοιού, να το

τοποθετήσει σε κάποιο κοινό κατάλογο όπως ο /tmp και να το ονομάσει ls:

#!/bin/sh

/bin/cp /bin/sh /tmp/myprog1

/bin/chown root /tmp/myprog1

/bin/chmod u+s /tmp/myprog1

/bin/rm /tmp/ls

exec /bin/ls $*

Αν o root έχει τον τρέχοντα κατάλογο πιο "μπροστά" στο PATH απο τους καταλόγους

με τα εκτελέσιμα αρχεία του συστήματος όπως ο /bin όπου βρίσκεται το ls τότε αν

βρεθεί στον κατάλογο αυτό και εκτελέσει ls θα δημιουργήσει ενα SUID root sh με

όνομα /tmp/myprog1.

72

Page 73: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

73

ΚΕΦΑΛΑΙΟ 6. YΠΟΣΥΣΤΗΜΑ ΑΡΧΕΙΩΝ

6.1 Γενικά

Κάθε υπολογιστικό σύστημα UNIX περιλαμβάνει και έναν τουλάχιστον μαγνητικό

σκληρό δίσκο (hard disk). Ο δίσκος ή οι δίσκοι είναι το βασικό σύστημα περιφερειακής

μνήμης και η ορθή διαχείριση του έχει μεγάλη σημασία για τη λειτουργία και την απόδοση

του συστήματος. Κάθε δίσκος χωρίζεται με κάποιο βοηθητικό πρόγραμμα (utility) όπως

format, mediainit κτλ σε ένα ή περισσότερα τμήματα (partitions). Το μέγεθος των τμημάτων

πρέπει να είναι αρκετό για τα δεδομένα που πρόκειται να αποθηκευθούν σε αυτά. Αν σε ένα

δίσκο κάποιο τμήμα έχει πολύ ελεύθερο χώρο και κάποιο άλλο καθόλου αυτό σημαίνει πως

εξαρχής δεν έγινε σωστός υπολογισμός των μεγεθών των τμημάτων και της εξέλιξης της

χρήσης του δίσκου. Σε κάθε περίπτωση δεν είναι δυνατό να επεκταθεί εκ των υστέρων ένα

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

καθορισθεί ορθά απο την αρχή με βάση τις τωρινές και τις μελλοντικές ανάγκες.

Σε κάθε τμήμα αντιστοιχεί ένα σύστημα αρχείων του UNIX (UNIX file system). Κάθε

σύστημα αρχείων έχει σα λογική αναπαράσταση το "ανάποδο" δένδρο καταλόγων και

υποκαταλόγων που περιέχουν αρχεία. Μια κοινή ρίζα βρίσκεται στην κορυφή του δένδρου,

κάθε δε αρχείο χαρακτηρίζεται απο ένα μοναδικό πλήρες όνομα που είναι το "μονοπάτι"

(path) απο τη ρίζα του δένδρου. Μέσα στον κατάλογο του - υποκατάλογο του ένα αρχείο

πρέπει να έχει επίσης μοναδικό όνομα.

Το κύριο χαρακτηριστικό του συστήματος αρχείων του UNIX είναι πως είναι αναρτώμενα

(mountable). Δηλαδή κάθε σύστημα αρχείων μπορεί να "κολλήσει", να αναρτηθεί απο ένα

κενό κατάλογο ενός άλλου συστήματος αρχείων ώστε τα δύο συστήματα να αποτελέσουν μια

οντότητα. Στο παρακάτω σχήμα υπάρχουν δύο συστήματα αρχείων αλλά το δεύτερο

αναρτάται στον κατάλογο /home του πρώτου έτσι ώστε το πλήρες όνομα του αρχείου /

maria/src γίνεται μετά την ανάρτηση /home/maria/src. Για το χρήστη αυτό είναι σχεδόν

διαφανές και νομίζει πως εργάζεται σε ένα ενιαίο σύστημα αρχείων αν και υπάρχουν μερικές

διαφορές: πχ. δεν γίνεται link (εντολή ln) ανάμεσα σε αρχεία διαφορετικών συστημάτων

αρχείων - γίνεται όμως symbolic link (εντολή ln -s).

73

Page 74: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

74

/

bindev usretchome

mitsos takis maria

dir1 dir2 dir2

bin man src

X11 X11 localsrc

Ειδικά τμήματα σε δίσκους παίζουν το ρόλο του swap space. Το UNIX μπορεί να τρέξει

διεργασίες (processes) με συνολικές απαιτήσεις μνήμης μεγαλύτερες απο τη διαθέσιμη φυσική

μνήμη (RAM) χρησιμοποιώντας κάποια ειδικά τμήματα δίσκων σαν εικονική μνήμη (virtual

memory). Μη πολυχρησιμοποιούμενες σελίδες (pages) διεργασιών γράφονται στους δίσκους

(page out), ακριβώς στα τμήματα swap space, ελευθερώνοντας τον αντίστοιχο χώρο στη

φυσική μνήμη για περισσότερο ενεργές σελίδες. Μερικές φορές ολόκληρες διεργασίες

γράφονται στα swap space (swap out) ελευθερώνοντας ακόμα περισσότερο χώρο. Η

διεργασία που γράφει τις σελίδες στο swap space είναι η pagedaemon (BSD) ή η vhand

(SYSV). H διεργασία που γράφει ολόκληρες διεργασίες είναι η swapper με pid = 0. Στο swap

space δεν κατασκευάζεται σύστημα αρχείων, το διαχειρίζεται απευθείας το UNIX για

μεγαλύτερη ταχύτητα.

6.2 Αρχιτεκτονική συστήματος αρχείων

Kάθε αρχείο έχει μια εγγραφή στον κατάλογο στον οποίο ανήκει. Η εγγραφή αυτή

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

βέβαια) και τον αύξοντα αριθμό ενός i-node πάνω στο δίσκο. Ενα i-node είναι μια ενδιάμεση

κατασκευή που περιέχει όλα τα χαρακτηριστικά του αρχείου εκτός απο το όνομα (στον

κατάλογο) και τα πραγματικά δεδομένα του (σε άλλο σημείο του δίσκου): ημερομηνίες / ώρες

τελευταίας προσπέλασης / τροποποίησης, ιδιοκτήτης και ομάδα, άδειες πρόσβασης κοκ.

Επίσης περιέχει τις διευθύνσεις πάνω στο δίσκο (αύξοντες αριθμούς data blocks) των data

blocks του αρχείου σε μια ειδική μορφή λίστας οργανωμένης για γρηγορότερη προσπέλαση

των μικρότερων αρχείων σε πολλαπλά επίπεδα.

74

Page 75: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

75

mitsos takis maria

dir1 dir2 dir2 src

file1 file2i-node data blocks

Ετσι, απο το όνομα του αρχείου στον κατάλογο μπορεί να προσπελάσει κανείς τα δεδομένα

και τα χαρακτηριστικά του του έμμεσα μέσω του i-node. Eίναι πλέον προφανής η ευκολία με

την οποία εκτελούνται οι εντολές χειρισμού αρχείων: η mv αρκεί να αλλάξει το όνομα στον

κατάλογο ή το πολύ πολύ να το σβήσει απο τον έναν κατάλογο και να το επανεισάγει σε

κάποιον άλλον αλλά πάντα με το ίδιο i-node και data blocks, δεν μετακινούνται δηλ.

δεδομένα στο δίσκο. Η rm μειώνει έναν μετρητή πάνω στο i-node (reference count) που

δείχνει πόσες εγγραφές καταλόγων δείχνουν σε αυτό το i-node. Αν ο μετρητής γίνει 0 τότε

διαγράφεται το i-node και τα data blocks. Η ln δημιουργεί μια νέα εγγραφή σε κάποιο

κατάλογο αλλά δείχνει στο παλιό i-node χωρίς αντιγραφή δεδομένων, απλά μόνο με αύξηση

του μετρητή κατά 1. Μόνο στην cp προστίθενται i-nodes και data blocks. Και οι κατάλογοι

αποτελούνται απο data blocks και i-nodes.

Τα τελευταία χρόνια έχει επικρατήσει το Berkeley FFS (Fast File System) σαν αρχιτεκτονική

συστήματος αρχείων: το σύστημα αρχείων είναι χωρισμένο σε ομάδες κυλίνδρων (cylinder

groups) που αποθηκεύονται διαδοχικά πάνω στο τμήμα. Κάθε ομάδα κυλίνδρων

περιλαμβάνει στην αρχή της εναν αριθμό i-nodes και στη συνέχεια έναν αριθμό data blocks.

Ετσι, το τμήμα είναι αλληλοδιαδοχή περιοχών με i-nodes και περιοχών με data blocks. Αυτή η

δομή επιταχύνει πολύ τη χρήση του δίσκου. Ειδικά blocks, τα λεγόμενα superblocks

περιέχουν γενικές πληροφορίες για το σύστημα αρχείων: μέγεθος, σημείο ανάρτησης και,

φυσικά, τη λίστα ελεύθερου χώρου (free list), δηλ. ποιά data blocks είναι ελεύθερα στο

σύστημα. Η διάθεση χώρου στα αρχεία γίνεται με μονάδα το data block (δηλ. και το

μικρότερο αρχείο θα καταλαμβάνει ένα τουλάχιστον data block και στη συνέχεια η επέκταση

του θα γίνεται προσθέτοντας data blocks -ή fragments). Τα data blocks χωρίζονται σε δυο

κατηγορίες, τα "κανονικά" data blocks και τα fragments ή frags. Ο χώρος που καταλαμβάνει

το αρχείο αποτελείται απο ένα ή περισσότερα data blocks και μηδέν, ένα ή περισσότερα

fragments στο τέλος. Ενα fragment είναι ενα μικρότερο data block με μέγεθος συνήθως το 1/4

75

Page 76: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

76

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

παράδειγμα ένα αρχείο έχει μέγεθος 11 ΚΒytes με μέγεθος data block 8 ΚBytes και χωρίς

fragments τότε το αρχείο θα καταλάβει 2 data blocks αλλά το δεύτερο data block θα περιέχει

μόνο 3 ΚByte δεδομένων και τα υπόλοιπα 5 KBytes θα είναι άδεια. Αν υπάρχουν fragments

με μέγεθος 2 KBytes τότε το αρχείο θα αποτελείται απο 1 data block και 2 fragments με

επιπλέον "άδειο" χώρο 1 μόνο KByte. Με fragment 1 KByte δεν υπάρχει στη περίπτωση αυτή

σπατάλη χώρου. Προφανώς, τα μεγάλα αρχεία συμφέρει να αποθηκεύονται σε συστήματα

αρχείων με μεγάλα μεγέθη data blocks και fragments ώστε να χρειάζονται λιγότερα data

blocks / fragments για να περιγράψουν το αρχείο και να επιτυγχάνουν μεγαλύτερη

ταχύτητα. Αντίθετα, τα μικρά αρχεία χρειάζονται μικρά μεγέθη ώστε να γίνεται μικρότερη

σπατάλη χώρου (πχ. να μην δεσμεύεται ένα data block 8 KBytes για ένα αρχείο 200 Bytes).

Ανάμεσα στο συμβιβασμό: μεγάλο μέγεθος data blocks / fragments = μεγαλύτερη ταχύτητα +

σπατάλη χώρου εναντίον μικρό μέγεθος data blocks / fragments = μικρότερη ταχύτητα +

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

εκείνο το συνδυασμό που ταιριάζει καλύτερα στο είδος των αρχείων που θα αποθηκευθούν.

Συνήθως οι εξ΄ ορισμού τιμές που δίνονται απο τα προγράμματα κατασκευής (πχ. data block

8 KBytes - fragment 1 KByte) συστημάτων αρχείων είναι ικανοποιητικές στην πλειοψηφία

των περιπτώσεων.

76

Page 77: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

77

6.3 Χειρισμός συστημάτων αρχείων

O χειρισμός των συστημάτων αρχείων γίνεται απο το διαχειριστή κατά την

εγκατάσταση του συστήματος και κατά την εκκίνηση και τον τερματισμό της λειτουργίας του

συστήματος. Βασίζεται σε μια σειρά απο αρχεία και εντολές που το κύριο χαρακτηριστικό

τους είναι η προσοχή που απαιτείται στη χρήση τους.

1 /etc/vfstab Το αρχείο αυτό περιέχει έναν κατάλογο των διαθέσιμων συστημάτων

αρχείων και τμημάτων δίσκου και των σημείων ανάρτησης τους. Περιγράφει δηλ. τους

δίσκους του συστήματος και το "ολικό" σύστημα αρχείων. Η μορφή του αρχείου είναι:

#device device mount FS fsck mount mount

#to mount to fsck point type pass at boot options

/dev/dsk/c0t0d0s1 - - swap - no -

alexander:/home - /home nfs - yes rw, bg

<device to mount> είναι το o δίσκος, τοπικός ή από άλλο μηχάνημα μέσω NFS, <mount

point> είναι το σημείο ανάρτησης και <FS type> είναι ο τύπος του τμήματος (μπορεί να

είναι hfs για FFS σύστημα αρχείων, swap για swap space, nfs για σύστημα NFS (βλ.

παρακάτω) κτλ.). <options> είναι διάφορες επιλογές που έχει ο διαχειριστής για αυτό

το σύστημα και <fsck pass> η σειρά με την οποία το σύστημα θα ελέγχεται για τυχόν

προβλήματα. Για παράδειγμα η εγγραφή:

/dev/dsk/c0t0d0s1 - - swap - no -

σημαίνει πως το τμήμα δίσκου /dev/sd0g περιέχει swap filesystem. Αντίστοιχα η

εγγραφή:

alexander:/home - /home nfs - yes rw, bg

σημαίνει πως το /home του μηχανήματος alexander αναρτάται στο /home, με write

permissions και άν δεν είναι διαθέσιμο προσπαθεί συνέχεια στο παρασκήνιο.

1 mount / umount. Η εντολή mount με μορφή mount [ -F <type> ] [ -o <options> ]

<partition> <mount> αναρτά το τμήμα <partition> απο τον κατάλογο <mount>.

Γενικά οι παράμετροι έχουν αντιστοιχία με το αρχείο vfstab. H mount -a αναρτά όσα

τμήματα στο αρχείο αυτό δεν έχουν ήδη αναρτηθεί. H εντολή umount "ξε-αναρτά" το

τμήμα ή τον κατάλογο που δίνεται ως παράμετρος.

1 swap [-a]

swap [-l]

. Η εντολή swap -a <partition> είναι αντίστοιχη της mount και εντάσει το τμήμα

<partition> στο συνολικό swap space του συστήματος. Ενα τμήμα swap space

κατασκευάζεται με την εντολή format όπως και τα άλλα τμήματα αλλά δεν φτιάχνεται

77

Page 78: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

78

πάνω του σύστημα αρχείων. Το τμήμα αυτό αν ενεργοποιηθεί σαν swap space δεν

μπορεί στη συνέχεια να απενεργοποιηθεί. Το μέγεθος του swap space καθορίζει τελικά

το μέγιστο δυνατό μέγεθος διεργασίας στο σύστημα, καθώς καμιά διεργασία

μεγαλύτερη απο το διαθέσιμο swap space δεν μπορεί να εκτελεσθεί. Το swap space

καλό είναι να μοιράζεται -αν είναι δυνατό- σε περισσότερους του ενός δίσκους για

ταχύτερη -παράλληλη- λειτουργία. Το συνολικό μέγεθος του στα σύγχρονα συστήματα

πρέπει να είναι 2 - 3 φορές το μέγεθος της διαθέσιμης φυσικής μνήμης. Υπάρχει επίσης

η δυνατότητα, με ανάλογη αύξηση στην ευελιξία (προσθήκη swap space μόνο όταν

χρειάζεται) και επιβάρυνση στην ταχύτητα, να χρησιμοποιηθεί ένας κατάλογος

συστήματος αρχείων σαν βοηθητικό swap space.

Παράδειγμα με swap -a /dev/dsk/c0t3d0s1 ενεργοποιείται το swap στο παραπάνω

partitition, ενώ με swap -l φαίνονται η τρέχουσα κατάσταση της swap.

1 fsck. Η εντολή αυτή είναι εξαιρετικά χρήσιμη. Το UNIX κρατά στη φυσική μνήμη

τυχόν τροποιήσεις στα συστήματα αρχείων και επίσης διαβάζει κάποιο disk block απο

τη φυσική μνήμη αν είναι διαθέσιμο, κάνει δηλ. disk caching. Κάθε περίπου 30 sec οι

πληροφορίες αυτές γράφονται στο δίσκο απο το δαίμονα (daemon) update. Αυτό

αυξάνει την ταχύτητα του συστήματος, αν όμως διακοπεί για οποιοδήποτε λόγο

(έλλειψη ηλεκτρικής τάσης, system crash) η λειτουργία του τότε οι πληροφορίες του

συστήματος αρχείων θα είναι ασυνεπείς (inconsistent). Το ίδιο συμβαίνει και για

περιπτώσεις μικρών προβλημάτων στην επιφάνεια του δίσκου και γενικά για βλαβες

του συστήματος αρχείων. Το πρόγραμμα fsck <raw devices> ελέγχει την ορθότητα των

πληροφοριών του συστήματος αρχείων που περιέχεται στο τμήμα δίσκου <raw

devices> (βλ. παρακάτω για τη διαφορά ανάμεσα στα raw και τα block devices) και

διορθώνει τυχόν σφάλματα ώστε όταν το τμήμα αναρτηθεί να είναι απόλυτα συνεπές.

Η διαδικασία αυτή γίνεται κατά την εκκίνηση του συστήματος με τη σειρά που

καθορίζεται απο το πεδίο <fsck> του αρχείου vfstab και είναι απόλυτα απαραίτητη,

παρότι μερικές φορές καθυστερεί. Το fsck σε πολλαπλές φάσεις ή περάσματα ελέγχει

απο διάφορες οπτικές γωνίες την ορθότητα του συστήματος αρχείων και το διορθώνει.

Πρέπει επίσης να χρησιμοποιείται αν υπάρχει υποψία προβλήματος στο σύστημα

αρχείων (πχ. χρήστες παραπονούνται πως ανεξήγητα έχασαν αρχεία τους) ή

πιθανότητα βλαβης του δίσκου.

1 format. Ενας δίσκος όπως αυτοί που χρησιμοποιούνται στα σύγχρονα συστήματα

(τύπου SCSI) δεν χρειάζεται μορφοποίηση (format) εκτός ίσως των περιπτώσεων που

παρουσιάζονται βλάβες στην επιφάνεια του (bad blocks). Οταν αγοραστεί όμως και

τοποθετηθεί στο σύστημα πιθανότατα χρειάζεται κατάτμηση (partitioning) ώστε να

δημιουργηθούν τα αναγκαία τμήματα. Η διαδικασία αυτή είναι πιθανά ανεξάρτητη

απο το UNIX και πάντα γίνεται απο ειδευμένα βοηθητικά προγράμματα του

κατασκευαστή του συστήματος. Τα προγράμματα αυτά λέγονται format, mediainit κα.

78

Page 79: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

79

και έχουν συνήθως διαλογικό interface όπου ο διαχειριστής μπορεί να καθορίσει την

επιθυμητή κατάτμηση του δίσκου, να ενημερώσει τον κατάλογο βλαβών κοκ. Τυχόν

λανθασμένη χρήση αυτών των προγραμμάτων μπορεί να έχει δυσάρεστες συνέπειες,

ιδιαίτερα σε δίσκους με ενεργά συστήματα αρχείων.

1 newfs. Ενα νέο τμήμα κατασκευάζεται απο το πρόγραμμα μορφοποίησης. Στη

συνέχεια το τμήμα αυτό μπορεί να παραμείνει χωρίς σύστημα αρχείων για χρήση σαν

swap space, απο Βάσεις Δεδομένων (databases) κοκ. Σε περίπτωση που αποφασισθεί η

χρήση του τμήματος απο σύστημα αρχείων, αυτό το σύστημα αρχείων πρέπει να

κατασκευασθεί πάνω στο τμήμα. Αυτό το αναλαμβάνει το πρόγραμμα newfs που είναι

ένα νεώτερο interface στο παλαιότερο δύσχρηστο mkfs. Με σύνταξη newfs

[ <options> ] <raw device> [ <type> ] το newfs κατασκευάζει νέο σύστημα αρχείων

πάνω στο τμήμα <raw device>. Κατάλληλη χρήση των επιλογών <options> μπορεί να

αλλάξει τα χαρακτηριστικά του νέου συστήματος αρχείων, πχ. μέγεθος data block ή

fragment, αριθμό ομάδων κυλίνδρων κοκ. Είναι προφανές πως ακατάλληλη χρήση του

newfs μπορεί επίσης να οδηγήσει σε σοβαρά προβλήματα.

1 ufsdump / ufsrestore. H εντολή dump κρατά αντίγραφο ασφάλειας ενός συστήματος

αρχείων σε μαγνητικές ταινίες. Η σύνταξη της είναι dump dumplevel <options>

<tape> <partition>. Χαρακτηριστικό της είναι πως μπορεί να κάνει αυτό που λέγεται

"incremental dump" δηλ. να κρατά αντίγραφο μόνο των αρχείων που άλλαξαν απο την

τελευταία φορά που κρατήθηκε αντίγραφο. Ετσι γίνεται οικονομία χώρου και χρόνου.

H παράμετρος dumplevel παίρνει τιμή 0 - 9 και καθορίζει την πολιτική incremental

dump. Αν είναι 0 τότε παίρνεται αντίγραφο όλου του δίσκου, διαφορετικά παίρνεται

αντίγραφο των αρχείων που άλλαξαν απο την ημερομηνία του τελευταίου dump ίδιου

ή μικρότερου dumplevel. Για παράδειγμα αν τη Δευτέρα γίνει dump 3 και την Τρίτη

dump 5 τότε ενα dump 4 την Πέμπτη θα περιλάβει τα αρχεία που άλλαξαν απο τη

Δευτέρα μέχρι και την Πέμπτη. Η εντολή restore γράφει τα περιεχόμενα dump

ολόκληρης της ταινίας ή συγκεκριμένων αρχείων της πίσω στο δίσκο. Γενικά αυτές οι

εντολές είναι τα βασικά εργαλεία για διατήρηση αξιόπιστων αντιγράφων ασφαλείας.

Αλλες εντολές που μπορούν να χρησιμοποιηθούν είναι οι tar και cpio, για μικρότερες

απαιτήσεις ταχύτητας, ασφάλειας και όγκου δεδομένων. Οι εντολές αυτές βέβαια

μπορούν και πρέπει να χρησιμοποιούνται απο τους χρήστες για φύλαξη προσωπικών

αντιγράφων. Παράδειγμα χρήσης:

# ufsdump 0uf /dev/tape /home

6.3.1 Εγκατάσταση νέου δίσκου στό Solaris

Η εγκατάσταση ενός νέου δίσκου περιλαμβάνει τα εξής βήματα:

79

Page 80: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

80

• Σύνδεση του δίσκου στον υπολογιστή

• Δημιουργία device files, ειδικών αρχείων μέσα από τα οποία θα γίνεται η πρόσβαση στο

δίσκο. (βρίσκονται στο directory /dev και /devices)

• Formating - Αρχικοποίηση του δίσκου

• Labeling και partititioning του δίσκου

• Δημιουργία UNIX συστήματος αρχείων (filesystem)

• Έλεγχος των filesystems

• Αυτοματοποίηση της ανάρτησης (mounting) των νέων συστημάτων αρχείων

• Δημιουργία swap space (χώρου αντιμετάθεσης)

Τα παρακάτω θα γίνουν κατανοητά με το ακόλουθο παράδειγμα.

Μετά τη σύνδεση του δίσκου στον υπολογιστή, εκτελούμε την εντολή "disks" για να

κατασκευαστούν τα κατάλληλα links στον κατάλογο /dev.

Έπειτα εκτελούμε την εντολή format <raw disk device>. Π.χ. format /dev/rdsk/c0t3d0s2

που σημαίνει controller0, target3 partitition2 (whole disk). To label είναι το τμήμα του δίσκου

στο οποίο καταγράφεται το είδος του partititioning (ή slicing όπως το ονομάζει ορισμένες

φορές η Sun). Π.χ.:

format> label

Ready to label disk, continue? Y

format> partitition

PARTITITION MENU:

….

Partitition> print

Current partitition table (default):

Part Tag Flag Cylinders Size Blocks

0 root wm 0-94 32.15MB (95/0/0)

2 swap wu 95-189 32.15MB (95/0/0)

…..

6 usr wm 190-1426 418.57MB (1237/0/0)

7 unassigned wm 0 0 (0/0/0)

partitition> quit

….

format> quit

80

Page 81: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

81

Από το παραπάνω εύχρηστο menu αλλάζουμε το μεγέθη των partititions εάν χρειάζεται. Με

την εντολή printvoc <raw device> ελέγχουμε το label. Το νέο filesystem το δημιουργούμε με

την εντολή newfs. Π.χ. για το δίσκο /dev/rdsk/c0t3d0s0 , 3600 στροφών το λεπτο:

# newfs -r 3600 /dev/rdsk/c0t3d0s0

και το νέο filesystem δημιουργήθηκε. Ελέγχουμε τα νέα συστήματα αρχείων με την εντολή:

# fsck /dev/rdsk/c0t3d0s0

….

Επαναλαμβάνουμε για τα υπόλοιπα συστήματα αρχείων. Μπορούμε τώρα να τα

αναρτήσουμε:

# mkdir /new

# mount /dev/dsk/c0t3d0s0 /new

Τώρα ο νέος δίσκος βρίσκεται κάτω από το directory /new

προσοχη: στην mount δεν βαζουμε τα raw devices(rdsk) αλλα τα block devices (dsk).

Προσθέτουμε το swap:

# swap -a /dev/dsk/c0t3d0s1

Τροποποιούμε το /etc/vfstab ωστε ο δίσκος να αναρτάται σε κάθε εκκίνηση του συστήματος.

Προσθέτουμε σε αυτό την ακόλουθη γραμμή

/dev/dsk/c0t3d0s1 - - swap - no -

/dev/dsk/c0t3d0s0 /dev/rdsk/c0t3d0s0 /new ufs 1 yes -

Εάν επιθυμούμε ο νέος δίσκος να είναι bootable, δηλαδή να μπορεί το σύστημα να εκκινηθεί

από αυτόν , χρησιμοποιούμε την εντολή installboot:

# /usr/sbin/installboot /usr/lib/fs/ufs/bootblk /dev/rdsk/c0t3d0s0

6.4 Ορια χρήσης δίσκου (quotas)

Για να είναι η χρήση του δίσκου απο τους χρήστες λογική και περιορισμένη, ιδίως σε

περιπτώσεις έλλειψης χώρου δίσκου υπάρχουν τα quotas, όρια χρήσης δίσκου. Τα quotas ενός

χρήστη σε κάποιο σύστημα αρχείων είναι ο μέγιστος χώρος δίσκου που μπορούν να

καταλάβουν τα αρχεία του σε αυτό το σύστημα και ο μέγιστος αριθμός αρχείων (i-nodes) που

μπορεί να έχει ο χρήστης. Τα quotas "μπαίνουν" και αναφέρονται σε κάθε σύστημα αρχείων

ξεχωριστά. Το αν θα χρησιμοποιηθούν quotas και ποιά θα είναι αυτά για κάθε χρήστη είναι

81

Page 82: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

82

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

παρακολούθηση της χρήσης των δίσκων χωρίς quotas.

Απαραίτητη προϋπόθεση για να ενεργοποιηθούν τα quotas είναι να υπάρχει η αντίστοιχη

δήλωση στον πυρήνα του στύλ options QUOTA (κάτι που δέν χρειάζεται τροποποίηση στα

περισσότερα λειτουργικά)

Σε κάθε σύστημα αρχείων - τμήμα στο οποίο ενεργοποιούνται τα quotas υπάρχει στον

κατάλογο ρίζας του ένα αρχείο quotas που περιέχει τις πληροφορίες για τη χρήση του δίσκου

απο διάφορους χρήστες. Για κάθε χρήστη εισάγονται quotas με την εντολή edquota [ -p

<protouser> ] <user> η οποία καλεί τον vi και παρουσιάζει σε μια οθόνη τα quotas του

χρήστη <user>, μια γραμμή - εγγραφή για κάθε σύστημα αρχείων που έχει ενεργοποιημένα

quotas. Με εντολές του vi μπορεί ο διαχειριστής να αλλάξει τις τιμές που παρουσιάζονται για

τα όρια σε χώρο δίσκου και αριθμό αρχείων - i-nodes. Υπάρχουν δύο όρια: το soft limit είναι

το όριο του οποίου η υπέρβαση προκαλεί την ειδοποίηση στο χρήστη πως έχει ξεπεράσει το

όριο και πρέπει να διαγράψει αρχεία ώστε να επανέλθει κάτω απο το όριο σε ένα χρονικό

διάστημα 7 ημερών. Αν ο χρήστης δεν συμμορφωθεί σε αυτό το διάστημα τότε το soft limit

μετατρέπεται σε hard limit, δηλ. ο χρήστης δεν έχει πια δικαίωμα εγγραφής σε αυτό το

σύστημα αρχείων αν δεν διαγράψει αρχεία. Με την προαιρετική παράμετρο -p <protouser> o

διαχειριστής μπορεί να δώσει στο χρήστη ίδια quotas με το χρήστη <protouser>. Με την

εντολή quota -v [<user>] κάθε χρήστης μπορεί να δεί τη χρήση του δίσκου που έχει κάνει ενώ

με την προαιρετική παράμετρο <user> μόνο ο διαχειριστής μπορεί να δει τα quotas του

χρήστη <user>.

Κατά την εκκίνηση του συστήματος ελέγχονται τα quotas με την εντολή quotacheck και στη

συνέχεια ενεργοποιούνται με την εντολή quotaon. Απο κεί και πέρα το συγκεκριμένο σύστημα

αρχείων στο οποίο ενεργοποιήθηκαν quotas είναι προστατευμένο (εκτός και αν δοθεί εντολή

quotaoff). Με διαγραφή του αρχείου quotas και της παραμέτρου quota στο αρχείο vfstab

απενεργοποιούνται μόνιμα τα quotas σε κάποιο σύστημα αρχείων.

6.5 Ειδη συσκευών

Παρενθετικά μερικά στοιχεία για τις συσκευές στο UNIX. Κάθε συσκευή έχει μέσα

στον πυρήνα του UNIX ένα σύνολο συναρτήσεων που λέγεται οδηγός συσκευής (device

driver) και είναι το λογισμικό ελέγχου της. Ο πυρήνας δίνει εντολές του τύπου read - write

στον οδηγό και αυτός τις μεταφράζει σε χαμηλού επιπέδου κλήσεις προς τη συσκευή.

Κάθε συσκευή αναπαριστάται απο ενα αρχείο στον κατάλογο /dev. To αρχείο αυτό είναι

ειδικού τύπου, μια και δεν περιέχει δεδομένα, είναι απλά το interface προς τον οδηγό της

συσκευής. Μια διεργασία που κάνει πρωτογενείς κλήσεις (system calls) του τύπου open(),

82

Page 83: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

83

read(), write(), close(), ioctl() κτλ. πάνω στο αρχείο προσπελαύνει τον οδηγό συσκευής και

μέσω αυτού την πραγματική συσκευή και διαβάζει - γράφει δεδομένα.

Ενα αρχείο συσκευής χαρακτηρίζεται απο 4 παραμέτρους:

1 το όνομα του στον κατάλογο /dev. Το όνομα αυτό είναι χαρακτηριστικό του τύπου της

συσκευής. Σε κάθε φυσική συσκευή μπορεί να αντιστοιχούν πολλές λογικές συσκευές

και αντίστοιχα αρχεία συσκευής. Για παράδειγμα μια μονάδα ταινίας μπορεί να

γυρίζει την ταινία στην αρχή της όταν τελειώσει η λειτουργία της (rewind-on-close) ή

να την αφήνει στο σημείο που τελείωσε (non-rewind-on-close). Αυτές οι δύο λειτουργίες

αναπαρίστανται απο δύο διαφορετικές λογικές συσκευές - αρχεία που αναφέρονται

όμως στην ίδια φυσική συσκευή.

1 τον τύπο της συσκευής και συγκεκριμένα αν είναι τύπου "χαρακτήρα" (character

device) δηλ. διαβάζει ενα - ενα Byte ή τύπου block (block device) δηλ. διαβάζει σε

blocks πολλών Bytes. Οι δίσκοι έχουν για παράδειγμα δύο λογικές συσκευές, μια τύπου

block που είναι το σύνηθες interface που διαβάζει δεδομένα απο το σύστημα αρχείων

με βάση την οργάνωση του σε blocks και μια τύπου χαρακτήρα που διαβάζει τα

δεδομένα χαρακτήρα προς χαρακτήρα (raw partitions).

1 τον κύριο αριθμό συσκευής (major device number) που είναι στην πραγματικότητα ο

αριθμός ταυτότητας του οδηγού συσκευής μέσα στον πυρήνα.

1 τον δευτερεύονται αριθμό συσκευής (minor device number) που είναι ο αριθμός της

λογικής συσκευής για το συγκεκριμένο οδηγό συσκευής - κύριο αριθμό. Η παραλλαγή

δηλ. της χρήσης της ίδιας συσκευής.

Παραδείγματα αρχείων συσκευών είναι τα ακόλουθα:

/dev/console: character, major 0 minor 0

/dev/dsk/c0t0d0s0: block

/dev/rdsk/c0t0d0s0: raw (character) device

/dev/zero: character, major 3, minor 3

Νέες συσκευές δημιουργούνται αυτόματα στο Solaris με την εντολή drvconfig.

83

Page 84: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

84

ΚΕΦΑΛΑΙΟ 7. ΣΤΟΙΧΕΙΑ ΤΕΡΜΑΤΙΚΩΝ

ΚΑΙ MODEM

Θα αναφέρουμε περιληπτικά τον τρόπο με τον οποίο γίνεται δισχείρηση των αρχείων των

τερματικών και modems. Στο SYSV η διαχείριση των τερματικών και modems γίνεται από τα

αρχεία _sactab (αρχή / τερματισμός υπηρεσίας), _sactab (παράμετροι είδους τερματικών), /

etc/saf/zsmon/_pmtab (παράμετροι λειτουργίας) και τέλος το ttymon που είναι το

πρόγραμμα (αντίστοιχο της getty του BSD UNIX) το οποίο επιτελεί το monitoring, δηλαδή

ελέγχει την πρόσβαση στις σειριακές θύρες. Γενικά η διαχείρηση τερματικών στο Solaris είναι

από τις πιο δύστροπες, αν όχι η πιο δύστροπη, που υπάρχουν στις διάφορες εκδόσεις του

UNIX. Η γενική ιδέα της υλοποίησης είναι ότι υπάρχει μια συσπειρωμένη ιεραρχική υπηρεσία

που ονομάζεται Service Access Facility (SAF) και ελέγχει άλλες υπηρεσίες όπως προγράμματα

παρακολούθησης θυρών και τερματικών (port monitors, ΤΤΥ monitors) και άλλες. Για την

εγκατάσταση μιας σειριακής θύρας στην οποία θα υπάρχει η προτροπή login: πρέπει να

διαμορφωθεί ένα πρόγραμματα παρακολούθησης (monitor) που θα ελέγχει την κατάσταση

της θύρας (π.χ. ttymon). Έπειτα πρέπει να διαμορφωθεί ένα monitor που θα παρακολουθεί

την κατάσταση του προηγούμενου monitor (!). Για παράδειγμα για την εγκατάσταση ενός

τερματικού τύπου VT100 στη δεύτερη σειριακή θύρα (/dev/term/b) πρέπει να δοθεί η εξής

εντολή:

# sacadm -a -p myttymon -t ttymon -c /usr/lib/saf/ttymon -v 1

# pmadm -a -p myttymon -s b -I root -fu -v 1 -m "`ttyadm -d /dev/term/b -l 9600 -T vt100 -s /

usr/bin/login`"

Η παραπάνω διαδικασία γίνεται και με το πρόγραμμα admintool το οποίο είναι γραφικό,

έχει μενού και γενικά είναι πολύ απλό στη χρήση του, όχι όμως εξίσου αποτελεσματικό.

Στο αρχείο /etc/ttydefs υπάρχουν ρυθμίσεις που καθορίζουν την ταχύτητα σύνδεσης του

περιφεριακού , την ύπαρξη ή όχι ισοτιμίας (parity) καθώς και άλλες παραμέτρους. Γενικά

αυτό το αρχείο πρέπει να τροποποιηθεί προκειμένου να δουλέψει σωστά το περιφερειακό μας.

To συντακτικό είναι το ακόλουθο:

label#initial flags#final flags#login prompt#next label

Η διαδικασία ttymon ταιριάζει το δεύτερο όρισμα με ένα από τα πεδία label. Εάν κληθεί

χωρίς όρισμα θα διαλέξει το πρώτο που θα βρεί . Τα πεδία initial flags και final flags θέτουν

ορισμένες παράμετρους της Ι/Ο επικοινωνίας (ioctl) και εκτελούνται πριν και μετά την

διαδικασία login. To πεδίο next label χρησιμοποιείται στην περίπτωση που ο χρήστης στείλει

break και δείχνει το επόμενο label που θα εκτελεσθεί. Στην περίπτωση hard-wired τερματικών

πρέπει να δείχνει στον εαυτό του.

84

Page 85: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

85

Μιά κατάλληλη εγραφή που δουλεύει σωστά για modems στο αρχείο αυτό είναι η εξής:

modem:38400 onlcr -parity opost hupcl:38400 sane hupcl

-parity crtscts::modem

Έπειτα μπορεί να αρχικοποιηθεί το Service Access Facility με την εντολή:

# sacadm -s -p zsmon

# /usr/sbin/pmadm -a -p zsmon -s tty$PORT -i root \

-v `/usr/sbin/ttyadm -V` -fu -m "`/usr/sbin/ttyadm \

-p "Login" -d /dev/term/$PORT -s /usr/bin/login -l 38400 -T vt100 -b\

-h -S n -m ldterm,ttcompat`" -y "dial in/out on serial port"

Για να απενεργοποιηθεί αυτή η υπηρεσία, μπορεί να εισαχθεί η εντολή:

/usr/sbin/pmadm -r -p zsmon -s ttya

85

Page 86: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

86

ΚΕΦΑΛΑΙΟ 8. ΥΠΟΣΥΣΤΗΜΑ ΕΚΤΥΠΩΣΕΩΝ

8.1 Εισαγωγή

Η εκτύπωση στο Solaris γίνεται με την εντολή lp, η οποία παίρνει τα δεδομένα και τα

αντιγράφει στην κατάλληλη ουρά αναμονής για τον τελικό προορισμό. Το πρόγραμμα

lpshed είναι ο δαίμονας που καθορίζει πότε και που θα εκτυπωθεί ένα συγκεκριμένο αρχείο

και στην συνέχεια εκτελεί ένα πρόγραμμα φλοιού (shell script) interface το οποίο μορφοποιεί

τα δεδομένα για την έξοδο. Με την έννοια destination εννοούμε μιά συμβολοσειρά μήκους

μέχρι 14 χαρακτήρων η οποία ονοματίζει ένα εκτυπωτή και μπορεί να ανήκει σε μία ή

περισσότερες classes. Με την έννοια class από destinations εννοούμε ένα σύνολο από

εκτυπωτές οι οποίοι εξυπηρετούν τον ίδιο σκοπό. Για παράδειγμα εάν έχουμε δύο σειριακούς

εκτυπωτές μπορούμε να τους βάλουμε στην ίδια κλάση για να είναι δυνατόν ο lpshed να

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

Η εντολή lp είναι εντολή επιπέδου χρήστη για την εκτύπωση στους ενεργοποιημένους

εκτυπωτές. Ουσιαστικά η lp εντολή αντιγράφει το αρχείο στον κατάλογο /etc/lp/<dest>

(όπου <dest> είναι το όνομα του εκτυπωτή) με όνομα τύπου <dest>N όπου Ν είναι ο

αριθμός εργασίας εκτύπωσης (job). O κατάλογος αποτελεί την ουρά αναμονής του εκτυπωτή.

Με την παράμετρο -d <dest> καθορίζεται το όνομα του εκτυπωτή στον οποίο θα τυπωθεί το

αρχείο.

Ο δαίμονας της εκτύπωσης είναι το πρόγραμμα lpsched o οποίος παίρνει τα αρχεία από την

ουρά αναμονής και τα προωθεί για εκτύπωση. Επιπλέον ο δαίμονας κρατά ένα αρχείο με τις

εκτυπώσεις και τα σφάλματα που συμβαίνουν στην θέση /var/lp/logs. Για να σταματήσουμε

τον δαίμονα της εκτύπωσης (π.χ για να τρέξουμε lpadmin) εκτελούμε την εντολή /

usr/lib/lpshut. Στην περίπτωση που σταματήσει ο δαίμονας με άλλο τρόπο (π.χ kill -9) τότε

πρέπει να σβήσσουμε το αρχείο /usr/spool/lp/SCHEDLOCK το οποίο υπάρχει για να

εξασφαλίζει το γεγονός οτι τρέχει μόνο ένας δαίμονας.

O δαίμονας lpsched ξεκινά συνήθως κατα την διαδικασία εκκίνησης ώς εξής :

rm 4f /usr/spool/lp/LPSHEDLOCK

/usr/lib/lpsched

echo "lpshed started"

86

Page 87: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

87

8.2 Η εντολή lpadmin

Με την εντολή lpadmin πληροφορούμε το σύστημα για νέους εκτυπωτές, κλάσεις ή

απομακρυσμένους εκτυπωτές. Στην πραγματικότητα δημιουργούνται νέα αρχεία και

κατάλογοι κάτω απο τον κατάλογο /etc/lp. Το συντακτικό της εντολής είναι

/usr/lib/lpadmin -p<printer> -v<device> {-e<pr> | -m<mod> | -i<inter>} [-c<class> ..] [{-l

| -h}] όπου:

<printer> είναι το όνομα του εκτυπωτή

<device> είναι το όνομα του αρχείου της πόρτας. Αυτό είναι συνήθως στον κατάλογο /dev.

π.χ /dev/tty03

Tα flags e m i χρησιμοποιούνται για να δηλώσουν το interface πρόγραμμα που θα

χρησιμοποιείται:

Με την παράμετρο -e<printer> δηλώνουμε το όνομα ενός ήδη χρησιμοποιούμενου εκτυπωτή.

Mε αυτόν τον τρόπο φτιάχνουμε αντίγραφα ενός interface προγράμματος για τον νέο

εκτυπωτή.

Με την παράμετρο -m<mode>l δηλώνουμε το όνομα ενός μοντέλου εκτυπωτή για το οποίο

υπάρχει interface πρόγραμμα. Τα μοντέλα υπάρχουν στον κατάλογο /usr/spool/lp/model.

Με την παράμετρο -i<interface> δηλώνουμε απ' ευθείας το interface πρόγραμμα που θα

χρησιμοποιηθεί.

Με την παράμετρο -c<class> δίνουμε το όνομα της κλάσης που θα ανήκει ο εκτυπωτής. Ενώ

με την παράμετρο -l ειδοποιούμε τον lpsched να μήν ξεκινήσει αυτόματα τον εκτυπωτή κατά

την διαδικασία εκκίνησης επειδή η πόρτα μπορεί να χρησιμοποιείται και για τερματικά.

Τέλος με την παράμετρο -h δηλώνει οτι ο εκτυπωτής είναι hardwired και χρησιμοποιείται για

να εξουδετερώσει την παράμετρο -l. Η εντολή lp θα δέχεται κλήσεις για τον εκτυπωτή μόνο

εάν το δηλώσουμε την εντολή accept.

Η εντολή lpadmin μπορεί να χρησιμοποιηθεί και για την τροποποίηση των ήδη

εγκατεστημένων εκτυπωτών. Γενικά θα πρέπει να μην τρέχει ο lpsched όταν αλλάζουμε ή

προσθέτουμε ένα εκτυπωτή.

Είναι δυνατόν να αφαιρέσουμε ένα εκτυπωτή με την εντολή lpadmin -p<printer> -r<class>

που διαγράφει τον εκτυπωτή <printer> από την κλάση <class>. Ενώ με την παράμετρο

-x<printer> διαγράφεται ο εκτυπωτής. Καμία από τις παραπάνω διαδικασίες δεν μπορεί να

συμβεί εάν υπάρχουν εργασίες που περιμένουν στην ουρά. Με τις εντολές lpmove και cancel

μπορούμε να μετακινήσουμε εργασίες από τον εκτυπωτή. Ενώ με την εντολή lpstat βλέπουμε

87

Page 88: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

88

την κατάσταση του εκτυπωτή. Μερικά τυπικά παραδείγματα της εντολής lpadmin είναι τα

παρακάτω:

#server> /usr/lib/lpadmin -ppr1 -v/dev/term/a -mdump -cpr

#server> /usr/lib/lpadmin -ppr2 -v/dev/bpp0 -epr1 -cpr

#server> /usr/lib/lpadmin -dpr

#server> /usr/lib/lpadmin -ppr1 -rpr -cfast

#server> /usr/lib/lpadmin -xpr1

Σημείωση: Στο Solaris πρέπει να καθοριστεί το είδος των αρχείων που μπορεί να εκτυπώσει

κάθε εκτυπωτής με την επιλογή -I . Για postscript εκτυπωτή: -I postscript,simple ενώ για line

printer: -I simple.

8.3 Οι εντολές cancel, accept, reject, enable, disable, lpmove, lpstat

Η εντολή cancel επιτρέπει στον χρήστη να σβήνει μια εργασία απο τόν εκτυπωτή π.χ

cancel 576 ή cancel pr1 . Eάν η εργασία δεν ανήκει στον χρήστη που εκτελεί την εντολή τότε

στέλνεται mail στον χρήστη του οποίου η εργασία διεκόπη. Με την εντολή reject

απενεργοποιούμε ένα εκτυπωτή στέλνoντας μήνυμα στον lpsched που τον ειδοποιούμε να

μήν βάζει μυνήματα στην ουρά αναμονής. Αντίθετα με την εντολή disable στέλνουμε μήνυμα

στον lpsched για την απενεργοποίηση του εκτυπωτή. Η ουρά συνεχίζει να δουλεύει και οι

εργασίες θα τυπωθούν με την ενεργοποίηση του εκτυπωτή με την εντολή enable.

Mε την εντολή lpmove μετακινούμε εργασίες απο την ουρά ενός εκτυπωτή σε ένα άλλο

εκτυπωτή. Π.χ :

/usr/lib/lpmove pr1-324 pr10325 pr2

/usr/lib/lpmove pr1 pr2

Με την εντολή lpstat βλέπουμε την κατάσταση των εκτυπωτών και των ουρών αναμονής του

δαίμονα και του εξ' ορισμού εκτυπωτή χρησιμοποιώντας τις παραμέτρους -p ,-s και -r

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

παράμετρο -t. Σε περίπτωση που θέλουμε να βρούμε τους εκτυπωτές που ανήκουν στην κλάση

<class> χρησιμοποιούμε την παράμετρο -c<class>. Επίσης μπορούμε να βρούμε τον εξ'

όρισμού εκτυπωτή με την παράμετρο -d.

88

Page 89: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

89

ΚΕΦΑΛΑΙΟ 9. ΕΓΚΑΤΑΣΤΑΣΗ ΝΕΟΥ ΛΟΓΙΣΜΙΚΟΥ

9.1 Οι εντολές pkginfo & pkgadd

Δεν υπάρχει κάποιος καθορισμένος τρόπος για την εγκατάσταση νέου λογισμικού.

Κάθε φορά πρέπει να ακολουθούνται οι οδηγίες που παρέχει ο κατασκευαστής του

λογισμικού προκειμένου να γίνει η εγκατάσταση. Ένα μέρος του λογισμικού έρχεται όμως με

μια συγκεκριμένη μορφή που ονομάζεται package. Παράδειγμα τέτοιου λογισμικού είναι τα

patches που εκδίδει η Sun. Ο βασικός χειρισμός των packages γίνεται με τις εντολές pkginfo

και pkgadd. Η πρώτη μας ενημερώνει για τα packages που έχουν εγκατασταθεί στο σύστημα,

ενώ η δεύτερη εγκαθιστά νέα packages στο σύστημα. Η σύνταξη της pkgadd είναι:

pkgadd [ -n ] [ -a admin ] [ -d device ] [ -R root_path ]

[ -r response ] [ pkginst1 [ pkginst2 ] ...]

όπου admin καθορίζει ένα administration file ή το όρισμα "none",

root_path είναι ο κατάλογος κάτω από τον οποίο θα γίνει η εγκατάσταση,

response είναι ένα αρχείο με απαντήσεις από προηγούμενες ερωτήσεις του προγράμματος,

και

pkginst είναι τα instances του package.

Η pkgadd χωρίς την επιλογή -d <device> ψάχνει για καινούρια packages στο /

var/spool/pkg, ενώ μέ αυτην καθορίζεται η θέση των νέων packages. Π.χ. η εντολή:

# pkgadd -d /cdrom/solaris_2_3/s0/Solaris_2.3

εγκαθιστά ένα package από το Solaris CD-ROM. Ο χρήστης προτρέπεται να καθορίσει το

όνομα του package που θέλει να εγκαταστήσει. Χρησιμοποιώντας το όρισμα "all" στο τέλος

της εντολής, τότε θα εγκαθίστανται όλα τα διαθέσιμα packages.

89

Page 90: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

90

ΚΕΦΑΛΑΙΟ 10 ΔΙΚΤΥΑ ΥΠΟΛΟΓΙΣΤΩΝ ΚΑΙ

UNIX

10.1 Βασικές αρχές δικτύωσης

Στην περίπτωση που δύο ή περισσότεροι υπολογιστικά συστήματα είναι έτσι

συνδεδεμένα μεταξύ τους ώστε να ανταλλάσουν πληροφορίες, τότε ως δίκτυο νοείται το

σύνολο των συνδεδεμένων υπολογιστών, του φυσικού μέσου διασύνδεσης και του

αντίστοιχου λογισμικού. Ρόλος του λογισμικού δικτύου είναι η μετατροπή των πληροφοριών

σε μορφή κατάλληλη για μετάδοση σε άλλον υπολογιστή. Ρόλος του φυσικού μέσου είναι η

"αγώγιμη" σύνδεση των υπολογιστών του δικτύου, η μετατροπή των "τελικών" πληροφοριών

σε ηλεκτρικά σήματα και η μετάδοση των τελευταίων πάνω απο την αγώγιμη σύνδεση. Η

σύνδεση αυτή μπορεί να είναι κάποιας μορφής καλώδιο, μια τηλεφωνική γραμμή, ασύρματη

ή laser ζεύξη κοκ. Απο την άλλη, το λογισμικό του δικτύου περιλαμβάνει διάφορα

προγράμματα επικοινωνίας όπως απομακρυσμένης πρόσβασης (remote login), μεταφοράς

αρχείων (file transfer), ηλεκτρονικού ταχυδρομείου (electronic mail), ταυτόχρονης συνομιλίας

(on-line talk) κοκ. και πρωτόκολλα. Ενα πρωτόκολλο είναι ένα ευρύτερα γνωστό και

αποδεκτό σύνολο τυπικών κανόνων καθορισμού κοινής συμπεριφοράς και επικοινωνίας. Με

τη χρήση των πρωτοκόλλων μπορούν ανομοιογενή (heterogeneous) υπολογιστικά συστήματα

να επικοινωνούν σε περίπτωση που υπακούουν στο κοινά αποδεκτό σύνολο κανόνων

συμπεριφοράς.

Η αρχιτεκτονική των δικτύων μπορεί να αναπαρασταθεί με το μοντέλο 7 επιπέδων

ISO/OSI. Κάθε επίπεδο αντιπροσωπεύει μια λειτουργία που εφαρμόζεται στις πληροφορίες

που μεταδίδονται πάνω απο το δίκτυο. Μπορεί να θεωρηθεί πως σε κάθε επίπεδο υπάρχει

κάποια ομάδα πρωτοκόλλων που εκτελούν αυτή τη λειτουργία. Τα πρωτόκολλα αυτά

επικοινωνούν μόνο με τα αντίστοιχα πρωτόκολλα του ίδιου επιπέδου στο "άλλο" σύστημα.

Στην πραγματικότητα όμως οι πληροφορίες κάθε επιπέδου στον σύστημα - αποστολέα αφού

υποστούν την επεξεργασία που αντιστοιχεί στη λειτουργία του συγκεκριμένου επιπέδου (δηλ.

αφού εφαρμοσθούν πάνω τους οι κανόνες του πρωτοκόλλου) στέλνονται στο παρακάτω

επίπεδο και τελικά, μέσω του φυσικού επιπέδου στο σύστημα - παραλήπτη, όπου απο κάθε

επίπεδο στέλνονται στο αμέσως παραπάνω. Ετσι υπάρχει μια λογική ροή πληροφοριών

ανάμεσα στα ίδια επίπεδα και μια φυσική ροή προς τα αμέσως παραπάνω και αμέσως

παρακάτω επίπεδα.

Συνοπτικά οι λειτουργίες των 7 επιπέδων είναι:

90

Page 91: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

91

7 Στο επίπεδο Εφαρμογής βρίσκονται τόσο τα προγράμματα του χρήστη όσο και τα

διάφορα προγράμματα δικτύωσης.

6 Στο επίπεδο Παρουσίασης καθορίζεται ο τρόπος αναπαράστασης των πληροφοριών

ανεξάρτητα των συμμετεχόντων συστημάτων, πχ. Ελληνικοί ή ειδικοί χαρακτήρες,

αλφάβητα, αναπαράσταση ακεραίων και αριθμών κινητής υποδιαστολής κοκ.

5 Στο επίπεδο Συνόδου καθορίζεται ο τρόπος σύνδεσης ανάμεσα σε συνεργαζόμενες

εφαρμογές.

4 Το επίπεδο Μεταφοράς είναι υπεύθυνο για την αποστολή των πληροφοριών στον

τελικό προορισμό τους χωρίς λάθη και με τη σωστή σειρά.

3 Το επίπεδο Δικτύου είναι αυτό στο οποίο καθορίζεται ο τρόπος αξιόπιστης αποστολής

των πληροφοριών και η διαδρομή που θα ακολουθήσουν.

2 Στο επίπεδο Διασύνδεσης εξασφαλίζεται η χωρίς λάθη μετάδοση των πληροφοριών

ανάμεσα στα ενδιάμεσα συστήματα που αποτελούν τη συνολική διαδρομή.

1 Στο Φυσικό επίπεδο γίνεται η πραγματική μετάδοση των πληροφοριών, ακόμα και με

λάθη τα οποία διορθώνονται απο τα παραπάνω επίπεδα.

Μια χρήσιμη έννοια που εισάγεται είναι η δρομολόγηση (routing): πράγματι, για να

φτάσει η πληροφορία απο τον αποστολέα στον παραλήπτη είναι δυνατό να περάσει απο

πολλά ενδιάμεσα συστήματα. Ο καθορισμός της διαδρομής που θα ακολουθήσει η

πληροφορία λέγεται δρομολόγηση και τα ενδιάμεσα συστήματα δρομολογητές (routers) ή

πύλες (gateways).

Η πληροφορία απο το Φυσικό επίπεδο μεταδίδεται πάντα σε σταθερού, συνήθως,

μεγέθους θεμελιώδεις μονάδες που λέγονται πλαίσια (frames). Κατά τη διαδρομή της απο το

7.Εφαρμογής

6.Παρουσίασης

5. Συνόδου

4.Μεταφοράς3.Δικτύου

2.Διασύνδεσης1.Φυσικό

7.Εφαρμογής

6.Παρουσίασης

5. Συνόδου

4.Μεταφοράς3.Δικτύου

2.Διασύνδεσης1.Φυσικό

91

Page 92: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

92

7ο στο 1ο επίπεδο η πληροφορία μοιράζεται και ομαδοποιείται απο τα πρωτόκολλα κάθε

επιπέδου σε "πακέτα". Κάθε πακέτο ή πλαίσιο αντιστοιχεί σε ένα πρωτόκολλο ενός

συγκεκριμένου επιπέδου και συνοδεύεται απο επικεφαλίδα (header) που το περιγράφει.

Τα δίκτυα τέλος χωρίζονται σε Τοπικά Δίκτυα (Local Area Networks, LANs) και Δίκτυα

Ευρείας Περιοχής (Wide Area Networks, WANs).

10.2 Πρωτόκολλo Ethernet

Το πλέον διαδεδομένο πρωτόκολλο Διασύνδεσης και Φυσικού επιπέδου για Τοπικό

Δίκτυο συστημάτων UNIX είναι το Ethernet. Ως μέσον μετάδοσης χρησιμοποιεί παχύ (thick) ή

λεπτό (thin) ομοαξονικό καλώδιο ή καλώδιο πλεγμένων ζευγών (twisted pair) ή οπτική ίνα

(fibre) ή laser κοκ. Πάνω σε αυτό το μέσο μετάδοσης συνδέονται σε τοπολογία διαύλου (bus)

οι διάφοροι υπολογιστές. Η τοπολογία διαύλου έχει το νόημα της ταυτόχρονης δυνατότητας

όλων των συνδεδεμένων υπολογιστών να αντιληφθούν την παρουσία των πληροφοριών στο

καλώδιο και να μεταδόσουν σε αυτό. Κάθε πλαίσιο που μεταδίδεται στο καλώδιο Ethernet

γίνεται ταυτόχρονα αντιληπτό απο όλους τους συνδεδεμένους υπολογιστές. Εχει όμως στην

επικεφαλίδα του μια διεύθυνση προέλευσης (source address) και μια προορισμού (destination

address). Οι διευθύνσεις αυτές είναι αριθμοί 48 bit της μορφής xx:xx:xx:xx:xx:xx όπου xx είναι

1 Byte, πχ. 08:00:20:0b:9c:d4. Οι διευθύνσεις είναι μοναδικές, δηλ. κάθε ελεγκτής (controller)

Ethernet ενός συστήματος έχει μια και μόνο μια και δεν υπάρχει άλλος ελεγκτής με την ίδια

διεύθυνση.

Η διαδικασία μετάδοσης πλαισίου στο Ethernet είναι η ακόλουθη: κάθε σταθμός

"αφουγκράζεται" το καλώδιο μήπως εκπέμπει κάποιος άλλος. Οταν διαπιστώσει "ησυχία"

εκπέμπει το πλαίσιο του στο καλώδιο σαν ακολουθία bits - ηλεκτρικών σημάτων, οπότε ο

σταθμός προορισμού αντιλαμβάνεται απο τη διεύθυνση προορισμού στην επικεφαλίδα του

πλαισίου πως απευθύνεται σε αυτόν. Υπάρχει βέβαια και ο κίνδυνος "σύγκρουσης" (collision)

δηλ. δύο σταθμοί να αποφασίσουν να εκπέμψουν την ίδια στιγμή σε ένα προηγούμενα

ανενεργό καλώδιο. Στην περίπτωση αυτή και τα δύο πλαίσια καταστρέφονται και κάθε

σταθμός αποφασίζει να αναμείνει για τυχαίο χρονικό διάστημα μέχρι να αφουγκραστεί το

92

Page 93: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

93

καλώδιο και όταν μείνει ελεύθερο να ξαναεκπέμψει. Αν και πάλι υπάρξει σύγκρουση

αναμένει διπλάσιο χρονικό διάστημα κοκ. Η διαδικασία αυτή λέγεται binary back-off. Η

ονομαστική ταχύτητα ενός δικτύου Ethernet είναι 10 Mbits/sec. Προφανώς όσο περισσότερα

συστήματα υπάρχουν πάνω στο δίκτυο τόσο περισσότερες συγκρούσεις θα συμβαίνουν με

αποτέλεσμα την πτώση της πραγματικής (effective) ταχύτητας του δικτύου. Επίσης ένα δίκτυο

Ethernet έχει μέγιστο μήκος ανάλογο με το χρησιμοποιούμενο φυσικό μέσο. Το μέγιστο μήκος

είναι συνάρτηση της καθυστέρησης διάδοσης του σήματος μέσα στο καλώδιο και της

απόσβεσης του. Ειδικές συσκευές που ονομάζονται επαναλήπτες (repeaters) χωρίζουν το

δίκτυο σε δύο ή περισσότερα τμήματα (segments) και ενισχύουν τα σήματα πριν τα

μεταδώσουν στο άλλο τμήμα. Οι γέφυρες (bridges) λειτουργούν και σαν επαναλήπτες αλλά

μπορούν επιπλέον να μειώσουν το φόρτο του δικτύου με εντοπισμό της "τοπικής"

κυκλοφορίας κάθε τμήματος σε αυτό μόνο.

Υπάρχει τέλος και η δυνατότητα καθολικής εκπομπής (broadcast), πλαισίων δηλ. που

απευθύνονται σε όλους τους σταθμούς του δικτύου.

Το μήκος ενός πλαισίου Ethernet είναι 1514 Bytes, με 14 απο αυτά να είναι η επικεφαλίδα. Η

κατάσταση των interface δικτύου και μεταξύ αυτών και των Ethernet interfaces ενός

συστήματος φαίνεται με την εντολή netstat -i. Σαν αποτέλεσμα της εντολής εποστρέφονται

διάφορες πληροφορίες, μεταξύ αυτών και ο αριθμός συγκρούσεων. Μεγάλος αριθμός

συγκρούσεων, μεγαλύτερος απο περίπου 1% των συνολικών πλαισίων πιθανά να υπονοεί

πρόβλημα στο δίκτυο.

10.3 Πρωτόκολλα TCP/IP, Internet και διευθύνσεις

H οικογένεια πρωτοκόλλων με τη γενική ονομασία TCP/IP (Transmission Control

Protocol / Internet Protocol) είναι τα πλέον διαδεδομένα πρωτόκολλα Μεταφοράς και

Δικτύου για συστήματα UNIX. Ξεκίνησαν τη ζωή τους σαν τα βασικά πρωτόκολλα στο

πειραματικό δίκτυο ARPANET του υπουργείου Αμυνας των ΗΠΑ. Απο τη στιγμή που το

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

TCP/IP περιελήφθηκε στο σύστημα BSD UNIX 4.2 του Πανεπιστημίου του Berkeley άρχισε η

διάδοση του στην κοινότητα του UNIX έτσι ώστε σήμερα να είναι πρακτικά πρότυπο

πρωτόκολλο (defacto standard). Το TCP/IP είναι και το βασικό πρωτόκολλο του παγκόσμιου

"υπερδικτύου" Internet που διασυνδέει μεταξύ τους δίκτυα απο όλο τον κόσμο. Τα

περισσότερα Πανεπιστήμια στην Ελλάδα αλλά και πολλοί άλλοι Οργανισμοί ανήκουν στο

Internet και σαν συνέπεια μπορούν να επικοινωνήσουν τόσο μεταξύ τους όσο και με

συστήματα σε όλο τον κόσμο.

Στο TCP/IP κάθε σύστημα έχει μια μοναδική διεύθυνση ΙΡ (IP address). Η διεύθυνση αυτή

είναι 32 bits και έχει τη μορφή xxx.yyy.www.zzz όπου κάθε τμήμα είναι 1 Byte πχ.

93

Page 94: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

94

147.102.1.101, 139.91.6.17 κοκ. Πρέπει να γίνει σαφές πως η διεύθυνση ΙΡ δεν έχει άλλη σχέση

με τη διεύθυνση Ethernet εκτός απο το ό,τι και οι δύο αναφέρονται στο ίδιο σύστημα και

υπάρχει σχεδόν πάντα μια σχέση 1 - 1 ανάμεσα τους. Επειδή η διεύθυνση ΙΡ καθορίζει την

ταυτότητα του συστήματος στο Internet πρέπει να προσδιορίζει ταυτόχρονα τόσο τον

"αριθμό" του δικτύου στο οποίο ανήκει το σύστημα μέσα στο Internet όσο και τον "αριθμό"

του συστήματος μέσα σε αυτό το δίκτυο. Δηλαδή απο τη διεύθυνση xxx.yyy.www.zzz ένα

κομμάτι είναι ο αριθμός του δικτύου και ένα άλλο ο αριθμός του συστήματος μέσα στο

δίκτυο. Το ποιό κομμάτι είναι το δίκτυο και ποιό το σύστημα καθορίζεται ως εξής:

1 Καταρχήν απο το είδος της διεύθυνσης ΙΡ. Διευθύνσεις ΙΡ με πρώτο τμήμα (xxx) απο 1

ως 126 λέγονται class A, απο 128 ως 192 λέγονται class B και απο 192 ως 223 class C.

Στις class A διευθύνσεις το πρώτο Byte καθορίζει τον αριθμό του δικτύου και τα άλλα 3

Bytes τον αριθμό του συστήματος, συνεπώς υπάρχουν 125 class A δίκτυα κάθε ένα απο

τα οποία έχει μέχρι 224 συστήματα. Αντίστοιχα στα class B δίκτυα τα πρώτα δύο Bytes

καθορίζουν τον αριθμό του δικτύου και τα υπόλοιπα 2 τον αριθμό του συστήματος.

Υπάρχουν περίπου 214 class B δίκτυα κάθε ένα απο τα οποία έχει μέχρι 216 συστήματα.

Τέλος τα class C δίκτυα έχουν τα 3 πρώτα Bytes να καθορίζουν τον αριθμό του δικτύου

και το εναπομείνον ένα τον αριθμό του συστήματος. Υπάρχουν έτσι περίπου 221 class

C δίκτυα που το καθένα μπορεί να έχει μέχρι 255 συστήματα.

1 Η παραπάνω περιγραφή επεκτείνεται και στη διαίρεση του τμήματος του συστήματος

στην ΙΡ διεύθυνση σε υποδίκτυα (subnets). Υπάρχει δηλαδή ένα βασικό δίκτυο, αυτό

που καθορίζεται απο το είδος της διεύθυνσης (Α, Β, C) και μπορεί να χωρίζεται σε

υποδίκτυα, δηλ. το τμήμα του συστήματος να αντιστοιχεί σε ένα τμήμα υποδικτύου και

το πραγματικό τμήμα του συστήματος. Ο χωρισμός των τμημάτων δικτύου -

υποδικτύου και συστήματος γίνεται με χρήση μιας μάσκας δικτύου (netmask). Η μάσκα

αυτή είναι ένας αριθμός 32 bits που έχει 1 στις θέσεις που αντιστοιχούν στο δίκτυο και 0

στις θέσεις που αντιστοιχούν στο σύστημα. Λογικό and της διεύθυνσης ΙΡ με τη μάσκα

δίνει το τμήμα δικτύου - υποδικτύου.

Για παράδειγμα, το δίκτυο του ΕΜΠ είναι το class B 147.102.0.0 με συνήθη μάσκα την

255.255.255.0 (δηλ. τα 3 πρώτα Bytes είναι 1). Η κανονική μάσκα για class B δίκτυο

είναι βέβαια η 255.255.0.0, δηλ. τα 2 πρώτα Bytes αντιπροσωπεύουν το δίκτυο και τα

υπόλοιπα 2 το σύστημα. Το ό,τι χρησιμοποιείται διαφορετική μάσκα έχει σαν

αποτέλεσμα την περαιτέρω διαίρεση του δικτύου του ΕΜΠ σε 255 υποδίκτυα, δηλ. ένα

επιπλέον Byte της διεύθυνσης ΙΡ αφιερώνεται στο υποδίκτυο. Μένει 1 Byte, το

"δεξιότερο" για προσδιορισμό του συστήματος. Το δίκτυο του ΕΜΠ έχει, αντί για 65536

συστήματα (με την κανονική μάσκα), 255 υποδίκτυα που το καθένα μπορεί να έχει 255

συστήματα. Είναι προφανές πως μια τέτοια διάταξη αυξάνει την ευελιξία του

συστήματος. Πρέπει όμως να είναι γνωστή η μάσκα προκειμένου να γίνεται ορθά η

επικοινωνία TCP/IP.

94

Page 95: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

95

Στο τμήμα συστήματος υπάρχουν και δύο ειδικές τιμές για τον αριθμό συστήματος. Με

αριθμό συστήματος 0, πχ. 147.102.1.0 για μάσκα 255.255.255.0, καθορίζεται το δίκτυο -

υποδίκτυο συνολικά. Με αριθμό συστήματος 255, πχ. 147.102.1.255 για την ίδια μάσκα,

καθορίζεται η διεύθυνση καθολικής εκπομπής, δηλ. ένα πακέτο που στέλνεται σε αυτή

τη διεύθυνση στέλνεται ταυτόχρονα σε όλα τα συστήματα του υποδικτύου. Επίσης το

δίκτυο 0.0.0.0 έχει μια ειδική σημασία: είναι το default route, η εξ΄ ορισμού διαδρομή

(βλ. παρακάτω για την εντολή route). Τέλος το δίκτυο 127.0.0.0 έχει επίσης ειδική

σημασία: πρόκειται για το loopback interface lo0 του TCP/IP δηλ. το παρόν σύστημα.

Κλήση στη διεύθυνση αυτή προκαλεί σύνδεση με το ίδιο το καλόν σύστημα.

Εναλλακτικές μάσκες μπορούν να χρησιμοποιηθούν ανάλογα με το αν χρειάζονται

περισσότερα υποδίκτυα ή περισσότερα συστήματα ανα δίκτυο. Για παράδειγμα η

μάσκα 255.255.255.192 χωρίζει ένα class C δίκτυο σε 4 υποδίκτυα κάθε ένα απο τα

οποία έχει μέχρι 64 συστήματα.

Κάθε σύστημα, πέρα απο τη διεύθυνση του έχει και ένα όνομα. Είναι προφανές πως για το

χρήστη είναι προτιμότερο να προσπελάσει το σύστημα με βάση το όνομα του παρά τη

διεύθυνση του. Το αντίθετο ισχύει για τα συστήματα. Η αντιστοίχιση ονομάτων - διευθύνσεων

γίνεται απο την υπηρεσία ονοματολογίας (name service) που περιγράφεται παρακάτω.

95

Page 96: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

96

10.4 Υπηρεσίες

Με τους παραπάνω τρόπους είναι δυνατό να εντοπιστεί και να προσπελασθεί κάποιο

σύστημα με χρήση του TCP/IP. Το ζητούμενο είναι όμως να χρησιμοποιηθεί κάποια απο τις

υπηρεσίες που προσφέρει το σύστημα αυτό, πχ. να γίνει απομακρυσμένη πρόσβαση ή

μεταφορά αρχείων ή ακόμα και κάποια υπηρεσία κατασκευασμένη απο το χρήστη κοκ. Σε

κάθε σύστημα υπάρχουν εξυπηρετητές (servers) για την κάθε υπηρεσία. Υπάρχουν επίσης και

θύρες (ports) (που αντιστοιχίζονται σε sockets του UNIX) και συνδέονται με τις διάφορες

υπηρεσίες και τους εξυπηρετητές τους1. Κάποιος χρήστης - πελάτης (client) συνδέεται με

κάποιο σύστημα μέσω της διεύθυνσης του. Σε αυτό το σύστημα ζητά την υπηρεσία που

χαρακτηρίζεται απο τον αριθμό της θύρας. Σε αυτή τη θύρα "ακούει" ο εξυπηρετητής που

παρέχει την υπηρεσία σε όποιον τη ζητήσει. Υπάρχει δηλ. αρχιτεκτονική πελάτη -

εξυπηρετητή (client - server). H πλήρης ταυτοποίηση μιας απομακρυσμένης υπηρεσίας

γίνεται απο το συνδυασμό xxx.yyy.www.zzz:pppp. Για παράδειγμα, η απομακρυσμένη

πρόσβαση σε κάποιο σύστημα με διεύθυνση 147.102.1.2 γίνεται με την εντολή telnet

147.102.1.2 (ή telnet phgasos.ntua.gr αν χρησιμοποιηθεί το όνομα του συστήματος). Αυτό που

κάνει στην πραγματικότητα το πρόγραμμα - πελάτης telnet είναι πως προσπελαύνει το

σύστημα 147.102.1.2 και σε αυτό το σύστημα την θύρα 23 που αντιστοιχεί στην υπηρεσία

απομακρυσμένης πρόσβασης telnet. Στη συνέχεια την υπηρεσία παρέχει ο δαίμονας -

εξυπηρετητής telnetd.

Η αντιστοίχιση αριθμών θυρών - ονομάτων υπηρεσιών υπάρχει στο αρχείο /etc/services. Σε

κάθε γραμμή του αρχείου αντιστοιχεί μια υπηρεσία για την οποία υπάρχει το όνομα της, ο

αριθμός της θύρας που της αντιστοιχεί και το πρωτόκολλο που χρησιμοποιείται για τη

σύνδεση (TCP ή UDP).

Η εκκίνηση των εξυπηρετητών γίνεται ως ακολούθως: για να μην "τρέχουν" συνέχεια οι

εξυπηρετητές καταλαμβάνοντας χώρο μνήμης, τρέχει μόνο ένας "υπερεξυπηρετητής", ο inetd.

Ο inetd έχει ένα αρχείο συγκρότησης (configuration file) το /etc/inetd.conf. Κάθε γραμμή του

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

1 H καλύτερη ερμηνεία των θυρών και της σχέσης τους με τους εξυπηρετητές μπορεί να

γίνει με μια παρομοίωση των συστημάτων UNIX με την Εφορία: η ΙΡ διεύθυνση του

συστήματος είναι σαν τον αριθμό της εφορίας (πχ. ΙΘ Αθήνας Γ Πειραιά), και μάλιστα η

περιοχή της εφορίας αντιστοιχεί στο δίκτυο (πχ. Εφορίες Ελλάδας) - υποδίκτυο (Εφορίες

περιοχής) και ο αριθμός της στο σύστημα, δηλ. τον αριθμό της Εφορίας στην περιοχή. Για να

εξυπηρετηθεί κάποιος πολίτης στην Εφορία δεν αρκεί να πάει εκεί (δηλ. δεν αρκεί να γνωρίζει

απλά την ΙΡ διεύθυνση) αλλά πρέπει να πάει και στην κατάλληλη θυρίδα - γκισέ όπου θα

απευθυνθεί στον υπάλληλο που περιμένει πίσω απο τη θυρίδα και θα του παράσχει την

επιθυμητή υπηρεσία (πχ. ΦΠΑ, Ταμείο). Η θυρίδα είναι σαν τη θύρα στο TCP/IP και ο

υπάλληλος σαν τον εξυπηρετητή.

96

Page 97: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

97

εξυπηρετητή της. Για όλες τις υπηρεσίες του αρχείου αυτού ο inetd "ακούει" στις αντίστοιχες

θύρες, όπως προκύπτουν απο το αρχείο /etc/services. Οταν κάποιος ζητήσει εξυπηρέτηση στη

θύρα αυτή, ο inetd εκκινεί τον αντίστοιχο εξυπηρετητή. Στο παραπάνω παράδειγμα ο inetd

"ακούει" και στη θύρα 23 που στο αρχείο /etc/services αντιστοιχεί στο telnet. Μόλις το

πρόγραμμα telnet συνδεθεί σε αυτήν, o inetd εκκινεί τον εξυπηρετητή /etc/telnetd που στη

συνέχεια παρέχει την υπηρεσία της απομακρυσμένης πρόσβασης.

10.5 Διάφορες γενικές εντολές δικτύωσης

1 telnet. Η εντολή αυτή ενεργοποιεί την υπηρεσία απομακρυσμένης πρόσβασης.

Δίνοντας telnet <IP address> ή telnet <name> ο χρήστης μπορεί να έχει πρόσβαση

login στο απομακρυσμένο σύστημα με διεύθυνση <IP address> ή όνομα <name>. Με

τον χαρακτήρα διαφυγής (escape character) <CTRL>] το telnet μπαίνει σε κατάσταση

εντολών όπου μπορούν να αλλαχθούν διάφορες λειτουργικές παράμετροι του, να

επιχειρηθεί μια νέα παράλληλη σύνδεση κα.

1 ftp. Πρόκειται για την υπηρεσία μεταφοράς αρχείων. Γίνεται σύνδεση με το

απομακρυσμένο σύστημα και με χρήση διαλογικού (interactive) interface μπορούν να

σταλούν αρχεία απο το απομακρυσμένο σύστημα στο τοπικό και αντίστροφα, να

δημιουργηθούν κατάλογοι κα.

1 elm / mail / mailx. Πρόκειται για προγράμματα που υλοποιούν την πλευρά του χρήστη

- πελάτη για την υπηρεσία ηλεκτρονικού ταχυδρομείου (electronic mail ή e-mail).

Εχουν και αυτά διαλογικό interface. H γενική μορφή ηλεκτρονικής διεύθυνσης είναι η

[email protected] όπου user είναι ο κωδικός χρήστη στον οποίο στέλνεται το

ταχυδρομείο, host το όνομα του συστήματος του και domain η "περιοχή" στην οποία

ανήκει το απομακρυσμένο σύστημα, η ευρύτερη δηλαδή κοινότητα υπολογιστών της

οποίας το συγκεκριμένο σύστημα είναι μέλος και η οποία περιγράφεται με ένα

"ιεραρχικό" όνομα όπου κάθε τμήμα του είναι υποσύνολο του προηγούμενου2. Πχ.

[email protected], [email protected], [email protected],

[email protected], [email protected].

1 ifconfig. Με την εντολή αυτή ελέγχεται και καθορίζεται η συγκρότηση (configuration)

οποιουδήποτε interface δικτύου. Η συνήθης μορφή της είναι ifconfig <interface> inet

<IP address> [ netmask <IP mask> ] [ broadcast <broadcast IP address> ]

2 Η αντιστοίχιση με το "κανονικό" ταχυδρομείο (s-mail κατά το e-mail και σημαίνει

slow-mail ή snail-mail) είναι η εξής: ο κωδικός χρήστη είναι βέβαια το όνομα του παραλήπτη.

Το όνομα του συστήματος αντιστοιχεί στο δρόμο / αριθμό της διεύθυνσης του παραλήπτη. Η

περιοχή αντιστοιχεί στα υπόλοιπα στοιχεία της διεύθυνσης που ιεραρχικά την προσδιορίζουν,

δηλ. χώρα - πόλη - συνοικία κτλ.

97

Page 98: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

98

Πχ. η ifconfig lan0 inet 147.102.1.102 netmask 255.255.255.0 broadcast 147.102.1.255

καθορίζει πως το interface lan0 θα έχει διεύθυνση ΙΡ 147.102.1.102 με μάσκα

255.255.255.0 (δηλ. το 147.102.0.0 είναι το δίκτυο, 1 είναι το υποδίκτυο και 102 το

σύστημα) και διεύθυνση broadcast 147.102.1.255.

1 ping. Με την εξαιρετικά χρήσιμη αυτή εντολή με σύνταξη ping <IP address> ή ping

<name> ελέγχεται το αν ανάμεσα στο παρόν σύστημα και το σύστημα με διεύθυνση <IP

address> ή όνομα <name> υπάρχει δυνατότητα TCP/IP επικοινωνίας, αν δηλ. τα δύο

συστήματα επικοινωνούν. Σε περίπτωση που επικοινωνούν το ping επιστρέφει το χρόνο

που κάνουν τα πακέτα για να φτάσουν στο άλλο σύστημα. Αν χρησιμοποιηθεί η

αναζήτηση του ονόματος του συστήματος και το ping επιστρέψει Unknown host τότε

υπάρχει κάποιο πρόβλημα με το name service.

1 route. Με την εντολή αυτή καθορίζεται ο τρόπος με τον οποίο το τοπικό σύστημα

γνωρίζει τη διαδρομή για απομακρυσμένα συστήματα και δίκτυα. Στον πυρήνα του

UNIX υπάρχουν πίνακες δρομολόγησης (routing tables) που περιέχουν τριάδες της

μορφής: (destination, gateway, hopcount) δηλ. για να προσπελασθεί το

απομακρυσμένο δίκτυο ή σύστημα με διεύθυνση destination πρέπει τα πακέτα να

σταλούν στην πύλη gateway (κάποιος δρόμος για την πύλη πρέπει να είναι γνωστός)

και αυτή (θεωρείται πως) ξέρει πως να τα στείλει στον προορισμό τους (πιθανά μέσα

απο άλλες πύλες). Το hopcount είναι μια ένδειξη του κόστους της συγκεκριμένης

διαδρομής. Ανάμεσα σε δύο τριάδες για τον ίδιο προορισμό θα προτιμηθεί αυτή της

οποίας η πύλη έχει μικρότερο hopcount. Σαν φυσικό μέγεθος το hopcount μπορεί να

θεωρηθεί πως είναι ο αριθμός των πυλών - αλμάτων (hops) μέχρι τον προορισμό. Ο

προορισμός default route με διεύθυνση 0.0.0.0 είναι το που στέλνονται τα πακέτα αν

δεν είναι γνωστός κανένας άλλος δρόμος για τον προορισμό τους. Οπως είναι φυσικό ο

καθορισμός του default route έχει μέγιστη σημασία για την ορθή λειτουργία της

δρομολόγησης.

Με την εντολή route add εισάγονται στους πίνακες δρομολόγησης νέες τριάδες όπως

πχ. route add 0.0.0.0 147.102.1.117 5 και route add 147.102.3.0 147.102.1.26 1. Με την

πρώτη απο τις παραπάνω εντολές καθορίζεται πως ο default route είναι μέσω της πύλης

147.102.1.117 με κόστος 5. Με τη δεύτερη καθορίζεται πως ο δρόμος για το υποδίκτυο

147.102.3.0 (είναι γνωστό πως πρόκειται για δίκτυο λόγω της γνωστής μάσκας) περνά

απο την πύλη 147.102.1.26 με κόστος 1. Προφανώς πακέτα με προορισμό κάπου στο

υποδίκτυο 147.102.3.0, πχ. 147.102.3.2 θα σταλούν στην πύλη 147.102.1.26 η οποία ξέρει

πως να τα προωθήσει στο υποδίκτυο 147.102.3.0. Αν δεν υπήρχε η δεύτερη εντολή ή αν

το hopcount της ήταν μεγαλύτερο απο 5 τότε τα πακέτα θα στέλνονταν στο default

route 147.102.1.117. Με την εντολή route delete διαγράφονται τριάδες απο τους

πίνακες δρομολόγησης του UNIX.

98

Page 99: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

99

1 netstat. Η εντολή αυτή, μαζί με την ping είναι πολύ χρήσιμη για τον έλεγχο της

κατάστασης του δικτύου. Με διάφορα ορίσματα εκτελεί διάφορους ελέγχους: με -i

ελέγχει την κατάσταση των interfaces, με -nr ελέγχει τους πίνακες δρομολόγησης κοκ.

1 rlogin / rsh / rcp. Οι εντολές r- είναι χρήσιμες επεκτάσεις συνηθισμένων εντολών του

UNIX σχεδιασμένες ειδικά για περιβάλλον δικτύωσης. Με την εντολή rlogin με

σύνταξη rlogin host [ -l user ] μπορεί ο χρήστης να κάνει login στο απομακρυσμένο

σύστημα host και αν δοθεί και η προαιρετική παράμετρος -l user τότε θα

χρησιμοποιηθεί ο κωδικός χρήστη user αντί για τον τρέχοντα κωδικό χρήστη. Το

απομακρυσμένο σύστημα ζητά το σύνθημα (password) του χρήστη και αν αυτό είναιο

σωστό επιτυγχάνεται το login και απο κεί και πέρα είναι σαν να έχει γίνει "κανονικό"

login στο απομακρυσμένο σύστημα. Το rlogin είναι απλούστερο πρωτόκολλο απο το

telnet αλλά δεν είναι τόσο standard. Επίσης αντιγράφει στο περιβάλλον (environment)

της νέας σύνδεσης βασικά στοιχεία του περιβάλλοντος της τρέχουσας όπως ο τύπος του

τερματικού (μεταβλητή $TERM), ο αριθμός των γραμμών και στηλών του τερματικού

κα. Με το χαρακτήρα διαφυγής ~ στην αρχή μιας γραμμής αμέσως ακολουθούμενο

απο ένα γράμμα εντολής μπορούν να διθούν διάφορες εντολές στο rlogin για τον

καθορισμό της συμπεριφοράς του. Πιθανά η πλέον χρήσιμη είναι η ~<CTRL>Z η οποία

διακόπτει προσωρινά (suspend) τη σύνδεση με το απομακρυσμένο σύστημα και

επιστρέφει τον έλεγχο στο τρέχον σύστημα. Ο έλεγχος στο απομακρυσμένο σύστημα

δίνεται ξανά με την εντολή fg. H εντολή rsh είναι παρόμοια με την rlogin αλλά δεν

εκτελεί στο απομακρυσμένο σύστημα πλήρες login αλλά μόνο μια εντολή. Η σύνταξη

της είναι rsh host [ -l user ] [ command ]όπου command μπορεί να είναι μια

οποιαδήποτε εντολή του φλοιού (νόμιμη βέβαια στο απομακρυσμένο σύστημα) πχ. rsh

phgasos ls /tmp. Αν το προαιρετικό όρισμα command απουσιάζει τότε η εντολή rsh

είναι ίδια σε συμπεριφορά με την rlogin.

Ενα βασικό χαρακτηριστικό του συστήματος rlogin / rsh είναι η δυνατότητα να μην

ζητείται σύνθημα απο το απομακρυσμένο σύστημα όταν το τοπικό θεωρείται

"εμπιστοσύνης" (trusted) ή ασφαλή (secure). Κατάλογος των συστημάτων που απο

κάποιο σύστημα θεωρούνται ασφαλή υπάρχει στο αρχείο /etc/hosts.equiv. Το αρχείο

αυτό έχει γραμμές της μορφής <όνομα συστήματος> [<κωδικός χρήστη>]. Κάθε

σύστημα του οποίου το όνομα παρουσιάζεται στο hosts.equiv θεωρείται ασφαλές και

διαδικασίες rlogin / rsh απο αυτό στο παρόν σύστημα γίνονται (αν βέβαια ο κωδικός

χρήστη υπάρχει και στα δύο συστήματα) χωρίς σύνθημα. Αν η εγγραφή για κάποιο

σύστημα έχει και τον προαιρετικό κωδικό χρήστη τότε η πρόσβαση χωρίς σύνθημα

επιτρέπεται μόνο απο το συγκεκριμένο κωδικό χρήστη (ή απο τους κωδικούς χρήστη αν

υπάρχουν πολλαπλές εγγραφές με ίδιο όνομα συστήματος και διαφορετικούς

κωδικούς). Κάποιος μεμονωμένος χρήστης μπορεί να ορίσει δικές του αντιστοιχίες στο

αρχείο $HOME/.rhosts που έχει μορφή (format) ίδια με το /etc/hosts.equiv και ίδια

99

Page 100: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

100

λειτουργία αλλά μόνο για το συγκεκριμένο χρήστη ιδιοκτήτη του .rhosts. Επίσης ο root

δεν υπόκειται στο /etc/hosts.equiv αλλά μόνο στο /.rhosts αν υπάρχει -που καλό

είναι, για λόγους ασφαλείας να μην υπάρχει-. Γενικά τα αρχεία αυτά είναι πιθανά

προβλήματα ασφαλείας και γιαυτό πρέπει να ελέγχεται ότι ιδιοκτήτης τους είναι ο root

για τα hosts.equiv και /.rhosts και ο χρήστης στο βασικό κατάλογο (home directory)

του οποίου βρίσκεται το .rhosts, ότι δεν έχουν άδεια εγγραφής (write permission) ή

ακόμα και ανάγνωσης (read permission) απο την ομάδα των άλλων (other) ή και απο

την ομάδα του χρήστη (group) και ότι δεν περιέχουν εγγραφές που αρχίζουν απο +

που σημαίνει "όλα τα συστήματα". Υπάρχουν μάλιστα συστήματα που το εξ΄ ορισμού

αρχείο /etc/hosts.equiv όπως έρχεται απο τον προμηθευτή περιέχει μια εγγραφή, την

+.

Η εντολή rcp αντιγράφει αρχεία απο ένα σύστημα σε ένα άλλο και έχει τη ίδια γενική

μορφή με τη cp εκτός του ό,τι τα ονόματα των αρχείων μπορούν να έχουν σαν πρόθεμα

το <host>: που σημαίνει το συγκεκριμένο αρχείο στο σύστημα με όνομα <host>. Επίσης

μπορεί να υπάρχει σαν πρόθεμα το <user>@<host>: που σημαίνει πως το συγκεκριμένο

αρχείο θα προσπελασθεί στο σύστημα <host> με κωδικό χρήστη <user>. Για

παράδειγμα: rcp -r mydir otherhost:/otherdir, rcp host1:/file1 user2@host2:/file2 κτλ.

O μηχανισμός hosts.equiv / .rhosts πρέπει να υπάρχει για πρόσβαση δίχως σύνθημα

μια και το rcp δεν ζητά συνθήματα - η χρήση του δεν είναι διαλογική όπως των rlogin /

rsh.

100

Page 101: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

101

ΚΕΦΑΛΑΙΟ 11. ΤΟ ΣΥΣΤΗΜΑ D ΟΜΑΙΝ N ΑΜΕ SERVICE (DNS)

11.1 Εισαγωγή

Στα μέσα της δεκαετίας του 80 το ARPANET ήταν σχετικά μικρό. ‘Οταν άρχισε να

μεγαλώνει δεν ήταν δυνατό να διατηρεί ενημερωμένη συνεχώς μια βάση δεδομένων με

ολα τα ονόματα και διευθύνσεις των υπολογιστών. Ετσι γεννήθηκε η ιδέα του DNS για μια

κατανεμημένη βάση ονομάτων και διευθύνσεων των υπολογιστών. Για παράδειγμα ο

υπολογιστής με όνομα theseas.ntua.gr έχει διεύθυνση 147.102.1..1 Η σχεδίαση του DNS

επιτρέπει την τοπική διαχείρηση της βάσης αλλά ταυτόχρονα επιτρέπει τα στοιχεία της βάσης

να είναι προσπελάσιμα απ΄ όλα τα δίκτυα υπολογιτών μέσω μιας client / server

αρχιτεκτονικής. Τα προγράμματα που λέγονται name servers υλοποιούν κατα το ήμισυ την

διαδικασία της client server αρχιτεκτονικής. Οι Name servers κατέχουν την πληροφορία και

την κάνουν διαθέσιμη στους clients που ονομάζονται resolvers. Οι resolvers είναι

συναρτήσεις βιβλιοθηκών, οι οποίες μεταφράζονται μέσα σε προγράμματα όπως telnet ή ftp

που δημιουργούν ερωτήσεις σχετικές διευθύνσεις υπολογιστών. Αυτές τις ερωτήσεις

διαβιβάζουν μέσω του δικτύου στους name servers για απάντηση.

11.2 Δομή και λειτουργία του DNS

Η δομή του DNS μοιάζει με το σύστημα αρχείων του UNIX. Η βάση δεδομένων

είναι ένα ανεστραμένο δέντρο με την ρίζα στην κορφή. Στο UNIX η κορφή είναι το / ενώ

εδώ ειναι το “ ” ενώ ο διαχωρισμός των ονομάτων γίνεται με την τελεία “.”. Αντί για

καταλόγους έχουμε περιοχές εποπτείας ονόματος (domains). Κάθε domain μπορεί περαιτέρω

να διαχωρισθεί σε subdomains όπως οι κατάλογοι σε άλλους καταλόγους ή αρχεία. Τα

αρχεία παίζουν το ρόλο των υπολογιστών ενώ οι κατάλογοι το ρόλο των subdomains. Έτσι

π.χ. έχουμε τα βασικά domain .com, .edu, .gov , .mil, .net, .org, .gr, .fr κτλ. και κάτω απο

αυτά μπορούμε να έχουμε αλλά, π.χ ntua.gr, central.ntua.gr ή hydro.civil.ntua.gr ή ακόμα

alexander.ntua.gr κ.οκ. Το όνομα του κάθε domain δίνει την σχετική θέση του σε σχέση με τον

πατέρα του, ενώ το απόλυτο όνομα δίνει domain name. Στο DNS σε κάθε domain μπορεί να

γίνεται διαχείριση απο διαφορετικό φυσικό πρόσωπο. Π.χ το .gr το διαχειρίζεται στην

Ελλάδα το Πανεπιστήμιο της Κρήτης αλλά η διαχείρηση του ntua.gr ανήκει στο Ε. Μ.

Πολυτεχνείο. Στην προκειμένη περίπτωση λέμε οτι το .gr έκανε delegate το ntua.gr στο Ε. Μ.

Πολυτεχνείο. Στην περίπτωση που η διαχείριση κάποιου subdomain ανήκει φυσικά στο ίδιο

που κάνει διαχείριση του πατέρα του subdomain τότε μιλάμε για zone του subdomain μέσα

στο domain. Μπορεί να φαίνεται η διαφορά απλά φιλολογική αλλά δεν είναι έτσι. Οταν ένα

101

Page 102: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

102

domain κάνει delegate ένα subdomain αφήνει την διαχείρηση του subdomain σε

διαφορετικούς name servers. Με αυτό τον τρόπο όταν χρειαζόμαστε δεδομένα για το

subdomain ρωτάμε τους name servers για να πάρουμε έγκυρες (authoritative) απαντήσεις.

Εάν κάποιος ρωτήσει τον parent name server για δεδομένα του subdomain θα απαντήσει με

μία λίστα από τους name servers που πρέπει να ρωτήσει.

Οι προδιαγραφές του DNS ορίζουν δύο τύπους servers τους primary master και τους

secondary master . Ο primary master παίρνει τις πληροφορίες για υπολογιστές από δικά του

αρχεία ενώ ο secondary server παίρνει τα δεδομένα του zone από άλλον name server ο

οποίος είναι υπεύθυνος για το zone. Είναι δυνατόν για ένα zone να υπάρχουν αρκετοί name

servers ετσι ώστε η υπηρεσία να συνεχίζει ακόμα και εαν ο master server βγεί εκτός

λειτουργίας. Οι secondary servers ρωτούν περιοδικά τον master server και εφόσον

υπάρχουν αλλάγες στον master server μεταφέρουν τα νεα στοιχεία. Είναι δυνατόν ένας

name server είναι υπεύθυνος για πολλά domain ή να είναι master για κάποιο zone και

secondary για άλλο.

Οι resolver δημιουργούν δύο ειδών ερωτήσεις στους name servers , αναδρομικές (recursive)

και επαναλήπτικές (iterative) .‘Οταν γίνει αναδρομική ερώτηση σε ένα name server τότε

αυτός ψάχνει αναδρομικά τους authoritative name servers για κάθε subdomain που αποτελεί

το πλήρες όνομα του υπολογιστή μέχρι να βρεί τον υπεύθυνο name server του domain στον

οποίον ανήκει ο υπολογιστής. Αφού τον βρεί ή βρεί οτι δεν υπάρχει το domain ή το όνομα

του υπολογιστή δεν υπάρχει γυρίζει την απάντηση στον resolver ή το σφάλμα. Είναι δυνατόν

ο name server να κάνει και αυτός αναδρομική ερώτηση σε άλλον name server και να αφήσει

τον άλλον να βρεί την απάντηση. Στις επαναληπτικές ερωτήσεις οι name servers δίνουν την

καλύτερη απάντηση που μπορούν να έχουν (λόγω caching) χωρίς περαιτέρω ερωτήσεις. Εάν

δεν είναι η ζητούμενη απάντηση δίνουν δεδομένα τα οποία για name server οι οποίοι

βρίσκονται πλησιέστερα στη λύση.

Οι απαντήσεις που μπορούν να δώσουν οι name servers είναι διαφόρων ειδών. Πρώτα από

όλα δίνουν την διεύθυνση σε Ιnternet format δεδομένου του ονόματος π.χ ο

acheloos.hydro.civil.ntua.gr έχει διεύθυνση 147.102.156.1. Μπορούν να κάνουν όμως και το

ανάποδο, δεδομένης της διεύθυνσης να δώσουν το όνομα μέσω ενός ειδικού domain του in-

addr.arpa. Μπορούν αν γίνουν ερωτήσεις για το ποιός παραδίδει mail για ένα μηχάνημα , τα

ψευδώνυμα ενός μηχανήματος καθώς και για το ποιός έχει την ευθύνη ενός subdomain όπως

και για τους name servers ενός domain.

Ας πούμε όμως περισσότερα για το in-addr.arpa domain το οποίο αποτελεί ειδική περίπτωση.

Οι διευθύνσεις σε Internet format,π.χ 147.102.1.12, έχουν ιεραρχική μορφή; η σημαντικότητα

102

Page 103: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

103

τους μειώνεται από τα αριστερά πρός τα δεξιά . Στην ονοματολογία των υπολογιστών όμως

συμβαίνει το αντίθετο, π.χ areti.naval.ntua.gr. Για να γίνουν λοιπόν τα νούμερα των

υπολογιστών ονόματα σε κάποιο domain πρέπει να αλλάξει η φορά εγγραφής του στο

συγκεκριμένο domain. Το domain in-addr.arpa έιναι το αυτό το ξεχωριστό domain του

οποίου την ευθύνη (authority) έχει το arpa. Έτσι για παράδειγμα το μηχάνημα με διεύθυνση

12.1..102.147.in-addr.arpa έχει όνομα manolito.ntua.gr Με αυτό τον τρόπο (ανεστραμένη

φορά) είναι δυνατόν να γίνει delegation από ένα domain σε ένα subdomain όσο αφορά τις

αριθμητικές διευθύνσεις.

11.3 Συγκρότηση του DNS

Είναι σχετικά απλό να γίνει συγκρότηση (configuration) ενός υπολογιστή ο οποίος

κάνει μόνο ερωτήσεις. Απλά ετοιμάζουμε το αρχείο /etc/resolv.conf .Π.χ

domain ntua.gr

nameserver 147.102.1.1

nameserver 147.102.1.2

Με την πρώτη γραμμή δείχνουμε το επίθεμα που πρέπει να επικολλάται στα μηχανήματα που

δεν έχουν τελεία μέσα στο όνομα τους για τους υπολογιστές που βρίσκονται στο ίδιο

subdomain. Με τις επόμενες γραμμές δηλώνουμε τους υπολογιστές που θέλουμε να μας

κάνουν name service πράγμα το οποίο είναι το πιό συνηθισμένο.

Τα αρχείο που καθορίζει την φύση του name server ( primary master και secondary) είναι

το /etc/named.boot Παρακάτω βέπουμε το αρχείο για τον theseas.ntua.gr primary server

του domain ntua.gr

;

; @(#)named.boot 1.1 (NTUA) 27/03/1991

;

; Boot file for authoritive master name server for

; ntua.gr

; Note that there should be one primary entry for each

; SOA record.

;

; Written by: achilles

; -----------------------------------------------------------------

103

Page 104: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

104

;

; Default domain

;

domain ntua.gr

;

; Directory in which the nameserver should run.

;

directory /etc/namedb

;

; NTUA zone

primary ntua.gr zone/ntua.gr

primary media.ece.ntua.gr zone/media.ece.ntua.gr

;

primary eetaa.gr zone/eetaa.gr

primary inmis.gr zone/inmis.gr

;

; Reverse mapping

primary 0.0.127.in-addr.arpa rev/local

primary 102.147.in-addr.arpa rev/NTUA

primary 1.102.147.in-addr.arpa rev/ntua-ether-swlab

primary 2.102.147.in-addr.arpa rev/ntua-ether-mop

primary 177.107.192.in-addr.arpa rev/eetaa

;

;

; These are here to avoid silly queries to higher level

; servers.

;

primary 0.in-addr.arpa rev/0

primary 255.in-addr.arpa rev/255

;

; secondary zones:

;

secondary csi.forth.gr 139.91.1.1 secondary/csi.forth.gr

secondary 91.139.in-addr.arpa 139.91.1.1 secondary/csi-rev

;

...

104

Page 105: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

105

;

forwarders 139.91.1.1 143.233.1.1

;

cache . named.cache

Περιληπτικά μπορούμε να αναφέρουμε για τα παραπάνω τα εξής:

Με την εντολή domain ntua.gr δηλώνουμε το domain το οποίο θα κάνουμε διαχείριση.

Με την εντολή directory /etc/namedb δηλώνουμε τον κατάλογο που θα βρίσκονται τα

αρχεία με τις πληροφορίες είτε αυτά που έχουμε φτιάξει εμείς είτε αυτά που θα πάρουμε από

άλλους name servers. Με την εντολή primary δηλώνουμε τους primary servers για τα

διάφορα zones και subdomains και τα αρχεία από τα οποία θα φορτωθούν τα αρχικά

στοιχεία. Με την εντολή secondary δηλώνουμε τα διάφορα zones και subdomains για τα

οποία είμαστε secondary servers. Εδώ δείνουμε και την διεύθυνση ή διευθύνσεις του

υπολογιστή από τον οποίο θα μεταφέρουμε τα αρχικά στοιχεία καθώς επίσης και τα αρχεία

στα οποία θα αποθηκευτούν τα στοιχεία. Στην συνέχεια με την εντολή forwarders δηλώνουμε

τους servers στους οποίους θα γίνονται αναδρομικές ερωτήσεις ενώ με την εντολή cache

δίνουμε τους master server για το root domain.

Το αρχείο /etc/named.boot συμβουλεύεται ο δαίμονας /etc/named για να ξεκινήσει να

τρέχει κατα την διαδικασία εκκίνησης. Ο δαίμονας αυτός είναι υπεύθυνος για το name

service.

Η σύνταξη ενός master file ακολουθεί τον παρακάτω κανόνα :

$INCLUDE <filename>$ORIGIN <domain><domain> <opt_ttl> <opt_class>

<type> <resource_record_data>

όπου <domain> είναι ‘.’ για το root και το @ για το τρέχον domain ή για ένα standard

domain name τα οποία δεν τελειώνουν σε τελεία . Το προαιρετικό πεδίο opt_ttl καθορίζει το

χρόνο ζωής της συγκεκριμένης πληροφορίας. Το πεδίο opt_class περιλαμβάνει προς το

παρόν την τιμή IN για το Internet. Το πεδίο type παίρνει μία απο τις παρακάτω τιμές,

ενώ τα <resource_record_data> δηλώνονται μέσα σε παρενθέσεις.

SOA Δείχνει την πηγή της εξουσίας στον τρέχον domain

ΝS Δείχνει τους name server στον τρέχον domain

105

Page 106: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

106

A Δεδομένα για την διευθύνση ενός μηχανήματος

PTR Αντιστοίχηση του ονόματος σε διεύθυνση

CNAME To κανονικό όνομα ενός μηχανήματος

TXT Πληροφορία κείμενου

WKS Γνωστές υπήρεσιες

HINFO Πληροφορίες συστήματος

MX Παραλήπτης του mail για το συγκεκριμένο μηχάνημα .

Παρατίθεται συντμημένα το αρχείο zone/ntua.gr για πληροφοριακούς λόγους.

;

; @(#)zone/ntua.gr 1.24 (NTUA) 7/12/1991

;

; Authoritative data for ntua.gr (ORIGIN assumed ntua.gr)

;

;name ttl addr-cl SOA Origin Person in charge

;

@ IN SOA theseas.ntua.gr. noc.theseas.ntua.gr. (

1137 ; Serial

21600 ; Refresh 6 hours

7200 ; Retry 2 hours

360000 ; Expire 100 hours

86400 ) ; Minimum 24 hours

IN NS theseas.ntua.gr.

IN NS pythia.csi.forth.gr.

;

;

IN PTR 0.0.102.147.in-addr.arpa.

IN MX 100 theseas.ntua.gr.

IN MX 200 pythia.csi.forth.gr.

;

localhost IN A 127.0.0.1

loghost IN A 127.0.0.1

;

;

theseas IN A 147.102.1.1

IN MX 100 theseas.ntua.gr.

IN WKS 147.102.1.1 UDP ( echo discard

106

Page 107: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

107

daytime time

name domain sunrpc

tftp )

IN WKS 147.102.1.1 TCP ( echo discard

systat daytime netstat

ftp-data ftp telnet

smtp time whois domain

hostnames sunrpc rje finger

link supdup iso-tsap x400

x400-snd csnet-ns pop-2

uucp-path nntp )

IN HINFO SUN-4/35C Sun_OS_4.1.3C

;

;

theseus IN CNAME theseas

ftp IN CNAME theseas

news IN CNAME theseas

theseas-gw IN CNAME theseas

IN MX 100 theseas.ntua.gr.

;

swlab-ether IN A 147.102.1.0

;

mop-ether IN A 147.102.2.0

;

cslab-ether IN A 147.102.3.0

;

building-A IN A 147.102.12.0

;

math-net IN A 147.102.206.0

;

phgasos IN A 147.102.1.2

IN MX 100 theseas.ntua.gr.

IN HINFO SS10/41-C Sun_OS_4.1.3

;

icaros IN A 147.102.1.3

IN MX 100 theseas.ntua.gr.

IN HINFO "Sun-4/25M" Sun_OS_4.1.3

;

107

Page 108: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

108

; Sparc ELC - SW lab.

athena IN A 147.102.1.29

IN MX 100 theseas.ntua.gr.

IN HINFO "Sun-4/25M" Sun_OS_4.1.3

; Computer center (CCC)

zeus.central IN A 147.102.240.1

IN A 147.102.241.1

IN A 147.102.250.1

IN HINFO SGI-IRIS-4D/480S IRIX

;

;

; MOP (building B)

;

macedonia IN A 147.102.1.101

IN MX 100 theseas.ntua.gr.

IN HINFO "HP-9000/867S" "HP-UX-9.00"

cheetah IN CNAME macedonia

;

alexander IN A 147.102.2.1

IN MX 100 theseas.ntua.gr.

IN HINFO "SparcServer-690MP" Sun_OS_4.1.3

leopard IN CNAME alexander

;

; Papahlioy, ktirio E

;

; Papakon - LAB (147.102.3.x)

;

; danaos second ethernet controller

;

mykonos IN A 147.102.3.1

IN MX 100 theseas.ntua.gr.

IN HINFO SUN-4/75C Sun_OS_4.1.2

;

; PCs

;

; X400

;

108

Page 109: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

109

eecs-x400 IN MX 100 chenas.inria.fr.

IN MX 100 corton.inria.fr.

Παρατίθενται και τα περιεχόμενα του αρχείου rev/ntua-ether-swlab με τις αντιστοιχίες απο

ονόματα σε διευθύνσεις των υπολογιστών.

;

; @(#)rev/ntua-ether-swlab (NTUA) 1/4/1991

;

@ IN SOA theseas.ntua.gr. noc.theseas.ntua.gr. (

1061 ; Serial

32400 ; Refresh 6 hours

3600 ; Retry 2 hours

360000 ; Expire 100 hours

172800 ) ; Minimum 48 hours

IN NS theseas.ntua.gr.

IN NS 139.91.1.1.

;

; Software lab and surroundings

1 IN PTR theseas.ntua.gr.

2 IN PTR phgasos.ntua.gr.

3 IN PTR icaros.ntua.gr.

4 IN PTR daidalos.ntua.gr.

5 IN PTR kentayros.ntua.gr.

6 IN PTR aris.ntua.gr.

;

7 IN PTR skollias-pc.ntua.gr.

8 IN PTR moon.ntua.gr.

9 IN PTR medusa.ntua.gr.

10 IN PTR iason.ntua.gr.

11 IN PTR lucifer.ntua.gr.

12 IN PTR manolito.ntua.gr.

;

109

Page 110: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

110

ΚΕΦΑΛΑΙΟ 12. ΤΟ ΣΥΣΤΗΜΑ NETWORK

FILE SYSTEM (NFS)

12.1 Εισαγωγή

Το σύστημα NFS είναι ένα κατανεμημένο σύστημα αρχείων (Distributed File

System - DFS) που επιτρέπει διαφανή πρόσβαση σε απομακρυσμένους δίσκους. Όπως το ΝΙS

επιτρέπει συγκεντρωμένη διαχείριση των χρηστών και μηχανημάτων έτσι το ΝFS επιτρέπει

συγκεντρωμένη διαχείριση των δίσκων. Αντί για παράδειγμα, για αντιγραφή του /usr/local

καταλόγου σε κάθε σύστημα είναι δυνατή η χρησιμοποίηση απ΄όλους τους σταθμούς

εργασίας, υπολογιστές στο δίκτυο. Σε ένα υπολογιστή που έχει κατάλογους αρχείων από

NFS, τα απομακρυσμένα αρχεία είναι αδιαχώρηστα από τα τοπικά . Στο δε χρήστη παρέχει

την ευκολία οτι δεν χρειάζεται να κάνει rlogin σε άλλους υπολογιστές για να έχει πρόσβαση

σε αρχεία. Επιπλέον δεν υπάρχει λόγος για rcp ή ταινίες για την μεταφορά αρχείων στο

τοπικό σύστημα αρχείων.

Το NFS στηρίζεται και αυτό στο πρωτόκολο RPC και είναι σχεδιασμένο με την

αρχιτεκτονική client server. O NFS server είναι ένας υπολογιστής που έχει στην κυριαρχία

του τα συστήματα αρχείων τα οποία διαθέτει στο δίκτυο. Οι NFS clients κάνουν mount

συστήματα αρχείων από ένα ή περισσότερους servers. Είναι σημαντικό για τον τελικό χρήστη

να υπάρχει διαφάνεια από άκρη σε άκρη σε όλο το δίκτυο.

12.2 Προετοιμασία του NFS

Η προετοιμασία του NFS στον client και τον server συνίσταται στο στο να

ξεκινήσουν οι δαίμονες που χειρίζονται το NFS RPC πρωτόκολλο και δαίμονες για το

κλείδωμα αρχείων και στο τέλος να γίνει mount ή export το σύστημα αρχείων . Σ ένα NFS

client πρέπει να τρέχουν οι δαίμονες rpc.lockd, biod και rpc.statd. Οι δαίμονες αυτοί

ξεκινούν συνήθως στά αρχεία εκκίνησης .

if [ -f /usr/lib/nfs/statd] ; then

statd & echo -n ' statd'

fi

110

Page 111: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

111

if [ -f /usr//lib/nfs/lockd] ; then

lockd & echo -n ' lockd'

fi

Στον client είναι δυνατόν ο biod να ξεκινά μόνο εφόσον το αρχείο /etc/vfstab έχει

δημιουργηθεί και περιέχει γραμμές για συστήματα αρχείων nfs. Ο δαίμονας biod

πραγματοποιεί το Ι/Ο στους nfs clients χρησιμοποιώντας απλές διαδικασίες βελτιστοποίησης

προανάγνωσης (read ahead) και μετεγγραφής (write back). Οι δαίμονες lockd και statd

χειρίζονται το κλείδωμα (locking) και απεγκλωβισμό (lock-recovering) των αρχείων στον

NFS client. Αντίστοιχοι δαίμονες τρέχουν και στον client. Στον NFS server οι υπηρεσίες

εξυπηρετούνται από τον nfsd και mountd.

To αρχείο /etc/dfs/dfstab δείχνει τα NFS συστήματα αρχείων που επιτρέπει ο

server στους client να κάνουν mount. Ο δαίμονας δέχεται NFS RPC αιτήσεις και τις εκτελεί

στον server. Ο server τρέχει πολλαπλά αντίγραφα ώστε να μπορεί να εξυπηρετήσει

περισσότερες απο μιά αιτήσεις ανά στιγμή. Ο αριθμός των αντιγράφων είναι θέμα

βελτιστοποίησης (tuning) στον server. Ο δαίμονας mountd εξυπηρετεί τις κλήσεις για mount

. Το πρωτόκολλο mount δεν είναι μέρος του NFS και γι’αυτό απαιτεί τους δικούς του

δαίμονες για μετατροπή της πληροφορίας για mount από τον client στον server.

12.3 Εξαγωγή αρχείων (exporting)

Συνήθως ένας υπολογιστής γίνεται NFS server όταν έχει να κάνει εξαγωγή (export) ή

αλλιώς μοίρασμα (sharing) αρχείων. Ο server δημοσιοποιεί στούς άλλους υπολογιστές τα

συστήματα αρχείων αλλά κρατά μιά λίστα των συστημάτων αρχείων για exporting μαζί με

τους περιορισμούς πρόσβασής τους. Στόν server ανήκει η απόφαση για να επιτρέψει σε

κάποιον client να κάνει mount ένα σύστημα αρχείων. Ο πίνακας περιορισμών αρχικοποιείται

στο αρχείο /etc/dfs/dfstab. O χρήστης root μπορεί να κάνει export και άλλα συστήματα

αρχείων μετα την διαδικασία της εκκίνησης την βοήθεια της εντολής share. Π.χ με την εντολή

share -F nfs -o rw=gavdos /disk1/ επιτρέπουμε στο μηχάνημα gavdos να κάνει NFS mount

το /disk1 με δικαίωμα εγγραφής & ανάγνωσης.

Υπάρχουν ορισμένοι βασικοί κανόνες γιά την εξαγωγή συστημάτων αρχείων.

1 Κάθε σύστημα αρχείου ή κατάλληλο υποσύνολο του μπορεί να γίνει export σε ένα

server. Κατάλληλο υποσύνολο ενός συστήματος αρχείων είναι ένα αρχείο ή κατάλογος

που ξεκινά χαμηλότερα από το mount point ενός συστήματος αρχείων.

1 Δεν επιτρέπεται να γίνει export ένας υποκατάλογος ενός κατάλογου που έχει ήδη γίνει

export εκτός και εάν ανήκει σε διαφορετική συσκευή - σύστημα αρχείων. Π.χ

/dev/sd0g /usr/local 4.2 rw 1 3

111

Page 112: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

112

/dev/sd1d /usr/local/bin 4.2 rw 1.4

Δεν επιτρέπεται να γίνει export ένας κατάλογος που είναι ψηλότερα από ένα

κατάλογο ο οποίος εχει γίνει ήδη export και ανήκει στο ίδιο σύστημα αρχείων.

1 Μπορεί να γίνει export μόνο σε τοπικά συστήματα αρχείων.

Το αρχείο /etc/dfs/dfstab περιέχει μια λίστα συστημάτων αρχείου τα οποία ο server

δηλώνει για export (sharing) με ειδικές παραμέτρους για το καθένα . Οι παράμετροι

ακολουθούν μια παύλα και χωρίζονται μεταξύ τους με κόματα:

share -F nfs -o rw=alex:imvrosi,root=alex /opt

Ενας κατάλογος των παραμέτρων δίνεται παρακάτω:

1 ro. Αποτρέπει στους NFS clients να γράψουν σε ένα σύστημα αρχείων. Αυτή η

παράμετρος δεν ελέγχεται όταν ο client κάνει mount ένα σύστημα αρχείων αλλά όταν

προσπαθεί να γράψει . Ετσι εάν σε ένα κατάλογο με export παράμετρους

αποκλειστικής ανάγνωσης (read-only) γίνει mount με παραμέτρους εγγραφής-

ανάγνωσης δεν θα συμβεί αρχικά τίποτα. Οταν γίνει απόπειρα για εγγραφή θα βγεί

μήνυμα Read only filesystem ή Permission Denied.

1 rw=host[:host]. Περιορίζει το σύνολο των υπολογιστών που μπορούν να έχουν άδεια

εγγραφής. Εάν δεν υπάρχει αυτή ή παράμετρος κάθε NFS client μπορεί να γράψει στο

σύστημα αρχείων

1 anon=uid. Δίνει στους “ανώνυμους” χρήστες userid = uid.. Ανώνυμοι χρήστες δέν

είναι αυτοί που δεν έχουν κωδικό, αλλά αυτοί που δεν τηρούν ορισμένα

“δικαιολογητικά“ στις κλήσεις NFS.To default είναι "nobody"

1 root=host[:host]. Δώσε root πρόσβαση στα συγκεκριμένα συστήματα.

12.4 Filesystem mount

Οι NFS clients μπορούν να κάνουν mount ένα ή μέρος των αρχείων που έχει γίνει

export. από τον server. Τα συστήματα που θα γίνουν mount βρίσκονται στο αρχείο /

etc/vfstab. Είναι όμως δυνατόν να γίνουν mount χρησιμοποιώντας την εντολή mount με τα

κατάλληλα ορίσματα. Ενα σύστημα αρχείου που γίνεται mount πάνω σε μη κενό κατάλογο

έχει ώς αποτέλεσμα να καλύψει τον κατάλογο και να είναι αδύνατη η πρόσβαση των

προηγουμένων εγγραφών του καταλόγου εκτός και εάν γίνει unmount το σύστημα αρχείων.

Τα συστήματα αρχείων από NFS φαίνονται ως φυσιολογικά συστήματα αρχείων στον client,

112

Page 113: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

113

πράγμα που σημαίνει ότι μπορούν να γίνουν mount από οποιονδήποτε πανω στον client.

Προσθέτoντας στοιχεία στο /etc/vfstab και εκτελώντας mount -a ώς χρήστης root είναι ο

πιο απλός τρόπος να κάνουμε mount.. Ειδικά για την την χρήση της εντολή mount πάνω σε

συστημάτα αρχείων NFS ισχύουν τα παρακάτω.

1 Το όνομα του τμήματος αντικαθίσταται με το server:filename όπου filename είναι ένα

απλό όνομα αρχείου ή καταλόγου .

1 Το είδος του συστήματος αρχείου είναι nfs

Επιπλέον επιλογές είναι δυνατές μέσω των επιλογών της εντολής mount. Τυπικά

παραδείγματα της εντολής σε σχέση με τα περιεχόμενα του αρχείου vfstab είναι

alexander:/solo - /solo nfs - yes rw,bg

alex:/var/spool/news - /var/spool/news nfs - yes rw,bg

Παρ’ολο που οι εντολές στο αρχείο /etc/vfstab χρησιμοποιούνται για διαδικασίες mount

κατά την διαδικασία επανεκκίνησης στον υπολογιστή. είναι δυνατόν να κάνουμε mount ένα

κατάλογο για να αντιγράψουμε αρχεία ή κάποια άλλη εργασία. Αυτό γίνεται με την εντολή

mount. Εάν αργότερα θελήσουμε να να καταργηθεί η διαδικασία εκτελούμε την εντολή

umount . Ας υποθέσουμε το σενάριο που θέλουμε να φτιάξουμε ένα νέο /usr/local

κατάλογο . Εστω ότι στον NFS client έχουμε το παλιό /usr/local πάνω στο τοπικό δίσκο και

έστω οτι στον server phgasos στον κατάλογο /new/local την νέα έκδοση του /usr/local για

τον client. Αυτό μπορεί να γίνει με την παρακάτω εντολή mount.

mount phgasos:/new/local /usr/local

Οτιδήποτε υπήρχε στο /usr/local κρύφτηκε από το /new/local του NFS server phgasos.

Από τo prompt η εντολή mount χρησιμοποιεί το συντακτικό server:filename για συστήματα

αρχείων τύπου NFS όπως στο αρχείο fstab. H εντολή mount υποθέτει ότι κάθε φορά που

συστήματα αρχείων τύπου nfs θα γίνουν mount o τύπος της συσκευής είναι εξ’ ορισμού

τύπου server:filename, π.χ

mount alexander:/home/ikaria /home -o rw,bg

Tο σύστημα αρχείων στο server πρέπει να δίνεται κατά απόλυτο τρόπο (ξεκινώντας /) χωρίς

να έιναι απαραίτηττο να ταιρίαζει ακριβώς στον ορισμό του συστήματος αρχείων που έγιναν

export από τον server (μπορεί να είναι και υποκατάλογος). O μόνος περιορισμός είναι να

περιέχει ένα νόμιμο πρόθεμα , συστήματος αρχείων που έχει γίνει export. Για παράδειγμα

113

Page 114: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

114

ακόμη και εάν ο server alexander κάνει export στο /usr είναι δυνατό στόν client να υπάρχει

στο vfstab αρχείο το εξής:

alexander:/usr/local/bin /usr/local/bin nfs,bg

Αν και οι παράμετροι αλλάζουν από λειτουργικό σε λειτουργικό θα αναφέρουμε τις πιο

κοινές.

1 rw/ro Η rw παράμετρος επιτρέπει εγγραφή στο σύστημα αρχείων που είναι και η εξ

όρισμού εκλογή. Η παράμετρος ro χρησιμοποιείται εφόσον το αντίστοιχο σύστημα

αρχείων έχει γίνει export μόνο για ανάγνωση.

1 bg Επιτρέπει την διαδικασία mount να συνεχίσει στο παρασκήνιo (background) σε

περίπτωση που η προσπάθεια για mount απετύχει.

1 hard / soft Εξ ορισμού τα NFS συστήματα γίνονται mount με την παράμετρο hard.

Αυτό το γεγονός έχει σαν αποτέλεσμα όλες οι ενέργεις να επαναδοκιμάζονται μέχρις

ότου επιβεβαιωθούν απο τον server. Στην περίπτωση του soft μία κλήση NFS

επιστρέφει NFS timeout error όταν αστοχήσει ένα αριθμό επαναλήψεων όπως αυτός

ορίζεται από την παράμετρο retrans.

1 retrans / timeo Η παράμετρος retrans καθορίζει τον αριθμό των επαναλήψεων που

πρέπει να επαναληφθεί μιά αίτηση NFS RPC για να επιστρέψει σφάλμα τέλος

χρόνου. Η παράμετρος timeo ορίζει το τέλος χρόνου σε μονάδες δεκάτων του sec:

phgasos:/home/src /home/src nfs, retrans=6,timeo=11 0 0

1 intr Συνήθως οι κλήσεις NFS είναι μή διακόψιμες μέχρις ότου συμβεί ένα RPC

σφάλμα ή απαντήσει ο server . Εάν ο server αστοχεί συνεχώς ο client μπορεί να

“κρεμάσει”. Με την παράμετρο αυτή μπορεί ο χρήστης να διακόπτει τις κλήσεις NFS

RPC.

1 retry O αριθμός των επαναλήψεων για μιά κλήση mount πρότου διακοπεί από

αστοχία του server (default 10000)

Είναι δυνατόν ένας client να προσπαθεί να κάνει mount ένα σύστημα αρχείων όταν ο server

έχει αστοχήσει. Σ’ αυτήν την περίπτωση ο client συνεχίζει να δοκιμάζει τόσες φορές όσες

καθορίζεται από την παράμετρο retry. Εάν έχει ορισθεί και η παράμετρος bg τότε η εντολή

mount συνεχίζει με το επόμενο σύστημα αρχείων πρός σύνδεση θεωρώντας οτι η

προηγούμενη πέτυχε. Εάν δε υπάρχει η παράμετρος bg ίσως ο client παγώσει για μερικές

ώρες εκτός και εάν έχουμε θέση μικρή τιμή στην παράμετρο retry.

Δεν ειναι σωστό να μπαίνουν με παράμετρο bg κρίσιμα συστήματα αρχείων όπως το / ή

το /usr σε μηχανήματα χωρίς τοπικούς δίσκους Μόνο τα μη κρίσιμα μπορούν να έχουν την

παράμετρο bg.

114

Page 115: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

115

Σε δύο servers οι οποίοι αμοιβαία δανίζονται ένας από τον άλλον συστήματα αρχείων

πρέπει ο ένας να έχει την παράμετρο bg, επειδή είναι διαφορετικά η αμοιβαία προσπάθεια

να οδηγήσει σε αδιέξοδο.

Οι παράμετροι hard και soft καθορίζουν πώς θα συμπεριφέρεται ο client όταν ο server θα είναι

υπερβολικά φορτωμένος ή έχει αστοχήσει. Όλα τα NFS συστήματα αρχείων έχουν γίνει εξ’ ορισμού

mount με την παράμετρο hard, γεγονός που δίνει στον client την εικόνα ενός τοπικού δισκού με

υψηλης προτεραιότητας Ι/Ο για τον NFS server. Ετσι εάν ο server αστοχήσει και o client

προσπαθεί να κάνει πρόσβαση σε κατάλογο αρχείων του server θα έχει σαν αποτέλεσμα να

κολλήσει. ο client. Η κατάσταση αυτή μπορεί να αποφευχθεί εάν το συστημα αρχείων γίνει mount

με την παράμετρο intr, οπότε ο χρήστης πατώντας <Ctrl-C > μπορεί να διακόψει την διαδικασία.

Προβλήματα μπορούμε να αντιμετωπίσουμε είτε στον server είτε στον client.. Από την μεριά του

client συμβαίνει το γεγονός να μην μπορεί να βρεί τον server λόγω δικτυακού προβλήματος

(δρομολόγηση, χαλασμένο καλώδιο) ή να μην μπορεί να βρεί το σύστημα αρχείων. Είναι όμως

δυνατό να δούμε και το ακόλουθο:

#client> mount orion:/home/orion /home/orion

mount: orion:home/orion /home/orion : No such device

Το παραπάνω μήνυμα σημαίνει οτι δεν έχει προετοιμαστεί ο server για NFS μέσα στον πυρήνα

του. Είναι όμως δυνατό να σταματήσει να λειτουργεί ο δαίμονας rpc.mountd ή ο portmap.

Μπορούμε να διαπιστώσουμε ποιό από τα δύο έχει συμβεί με την εντολή ps.

#server > ps -ef| fgrep mountd

dkalo 212 0.0 0.8 144 224 p0 S 15:30 0:00 fgrep mountd

dkalo 112 0.0 0.8 144 248 ? S 15:30 0:00 rpc.mountd

#server> ps -ef| fgrep portmap

dkalo 212 0.0 0.8 144 224 p0 S 15:30 0:00 fgrep portmap

dkalo 112 0.0 0.8 144 248 ? S 15:30 0:00 portmap

Εάν η εντολή mount δώσει το μήνυμα “ΜOUNT_PROG not registered” σημαίνει οτι ο δαίμονας

δεν ξεκίνησε ποτέ. Σε αυτή την περίπτωση πρέπει να βεβαιωθούμε οτι ο δαίμονας ξεκινά κατά την

διάρκεια της εκκίνησης.

115

Page 116: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

116

Ο portmap είναι ένας δαίμονας που βασισμένος και αυτός σε αρχιτεκτονική client server έχει

σκοπό να μετατρέπει κλήσεις rpc σε Ιnternet Protocol πόρτες. Ο portmap είναι και αυτός rpc

service (πόρτα 111) ετσι ώστε να μπορεί να καλεσθεί από απομακρυσμένα μηχανήματα για να

δώσει πληροφορίες για τις υπάρχουσες εν ενεργεία υπηρεσίες.

Τόσο ο client και ο server συλλέγουν στατιστικά στοιχεία της υπηρεσίας του NFS σε διάφορα

επίπεδα λειτουργίας(rpc και application layer) Τα στατιστικά στοιχεία μπορούμε να τα δούμε με

την χρήση της εντολής nfstat.

116

Page 117: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

117

ΚΕΦΑΛΑΙΟ 13. SENDMAIL

13.1 Γενικά

To sendmail είναι το πιό σύνθετο και πλήρες σύστημα μεταφοράς ταχυδρομείου σε κοινή χρήση. Η

διάδοσή του οφείλεται στην εξαιρετική του ευελιξία και παραμετροποίηση η οποία γίνεται μέσα

από το αρχείο sendmail.cf το οποίο μπορεί να βρίσκεται στο /etc ή στο /usr/lib. To sendmail όπως

έρχεται μαζί με κάθε λειτουργικό έχει αρκετά προβλήματα ασφαλείας, γι'αυτό συνίσταται έντονα η

αντικατάστασή του με κάποια από τις τελευταίες εκδόσεις του Eric Allman (V8). Για την

εγκατάσταση νέας έκδοσης του sendmail είναι απαραίτητος ένας C compiler.

13.2 Τρόποι λειτουργίας

Το sendmail μπορεί να δουλέψει με αρκετούς διαφορετικούς τρόπους οι οποίοι επιλέγονται με την

παράμετρο -b (από το become) η οποία συνδυάζεται με άλλες παραμέτρους οι βασικότερες από τις

οποίες είναι:

Επιλογή Σημασία

-bd Λειτουργία σε daemon mode

-bi αναγνώριση νέων aliases

-bp εκτύπωση της ουράς (mail queue)

-bz "πάγωμα" των configuration files

-bt εισαγωγή σε κατάσταση ελέγχου διευθύνσεων

-bs λειτουργεία σαν εξυπηρετητής SMTP

Όταν το sendmail τρέχει σάν δαίμονας, η επιλογή -q καθορίζει το χρονικό διάστημα κατα το οποίο

επεξεργάζεται το mail queue (τα mails που πρέπει να σταλθούν). Το sendmail εκκινήται συνήθως

ώς:

# sendmail -bd -q1h

Κανονικά το sendmail προσπαθεί να στείλει τα μηνύματα χωρίς ενδιάμεση αποθήκευση, εάν όμως

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

τότε τα mails αποθηκεύονται προσωρινά στο mail queue (συνήθως /var/spool/mqeue).

13.4 To sendmail.cf

117

Page 118: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

118

Η λειτουργία του sendmail καθορίζεται από το αρχείο sendmail.cf το οποίο βρίσκεται στο /etc/ ή

στο /usr/lib/. To sendmail.cf καθορίζει :

• τους "πρακτορες" παράδοσης ταχυδρομείου - mailers

• τους κανόνες σύνταξης και εγγραφής διευθύνσεων

• τη μορφή των επικεφαλίδων - headers

Oι εντολές στο sendmail.cf αρχίζουν στην πρώτη στήλη. Ο πρώτος χαρακτήρας της γραμμής

καθορίζει το είδος της εντολής και τη μορφή της υπόλοιπης γραμμής. Κάθε γραμμή είναι μια

πλήρης εντολή, εκτός από τις γραμμές που αρχίζουν με κενό ή tab οι οποίες θεωρούνται συνέχεια

προηγουμένων γραμμών. Οι γραμμές που αρχίζουν με τον χαρακτήρα "#" θεωρούνται σχόλια. Οι

χαρακτήρες

< > ( ) " \

έχουν ειδική σημασία, και κάθε προσπάθεια να αλλαχθεί η σημασία τους είναι καταδικασμένη σε

αποτυχία. Στον επόμενο πίνακα φαίνονται οι εντολές που αναγνωρίζονται από το sendmail:

Εντολή Λειτουργία

D Καθορίζει μια μακρο-μεταβλητή, macro variable

C Καθορίζει μια μεταβλητή τάξης ,class variable

F Καθορίζει μια τάξη χρησιμοποιώντας τα περιεχόμενα αρχείου

O Ενεργοποιεί διάφορες επιλογές

H Καθορίζει μια επικεφαλίδα , header

P Καθορίζει τις τάξεις προτεραιότητας του mail.

T Καθορίζει "έμπιστους" χρήστες, trusted users

V Προσδιορίζει την έκδοση, version

K Καθορίζει αρχείο βάσης δεδομένων (V8)

S Εισάγει ένα σύνολο επανεγγραφής κανόνων

R Καθορίζει έναν κανόνα επανεγγραφής μέσα σε ένα set

M Καθορίζει έναν delivery agent

Στην έκδοση 8 του sendmail υπάρχουν και ορισμένες καλά ορισμένες μεταβλητές που

χρησιμοποιούνται στο sendmail.cf. Αυτές είναι οι:

Όνομα Σημασία Όνομα Σημασία

a Αρχική ημερομηνία n Όνομα δαίμονα (για τα λάθη)

b Τρέχουσα ημερομηνία o Set of "Οperators"

c Αριθμός "hops" p Το PID του sendmail

118

Page 119: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

119

d Τρέχουσα ημερομηνία (ctime) q Mορφή διεύθυν. Αποστολέα

e Mήνυμα SMTP r Πρωτόκολο που χρησ/ται

f Διεύθυνση αποστολέα s Hostname αποστολέα

g "Φάκελος" αποστολέα t Η ώρα σε αριθμ. Μορφή

h Mηχάνημα παραλήπτη u username παραλήπτη

i Α.Τ. Ουράς - Queue ID v Έκδοση του sendmail

j Πλήρες όνομα host w Το hostname του site

k Όνομα UUCP x Όνομα αποστολέα

l Μορφή γραμμής "From" z Home directory παραληπτη

m DNS domain name _ Επικυρωμένη διευθ. αποστ.

Για παράδειγμα έχουμε:

# delimeter characters

Do.!:@^/[]

# format of a total name

Dq$?x$x<$g>$|$g$.

To πρώτο παράδειγμα καθορίζει τα ειδικά σύμβολα τα οποία το sendmail θα αναγνωρίζει ώς

διαχωριστές χαρακτήρων στις διευθύνσεις. Το δεύτερο παράδειγμα είναι της μορφής:

$?X true $| false $.

Που σημαίνει ότι εάν η μεταβλητή Χ είναι ορισμένη, τότε εκτιμάται ο όρος true , αλλιώς ο όρος

false. Το παραπάνω αναπτύσσεται σε κάτι σαν

Evi Papaggeli <[email protected]>

εάν η μεταβλητή x είναι ορισμένη, και σε

[email protected]

αλλιώς.

119

Page 120: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

120

Ακολουθεί ένα παράδειγμα sendmail.cf αρχείου από το σύστημα alexander.cc.ece.ntua.gr .

############# Copyright (c) 1983 Eric P. Allman# Copyright (c) 1988, 1993# The Regents of the University of California. All rights reserved.##### SENDMAIL CONFIGURATION FILE########## built by root@ajax on Thu Aug 31 16:27:33 EET DST 1995##### in /etc/sendmail.ntua/ntua

##### @(#)notsticky.m4 8.1 (Berkeley) 6/7/93 #####

V5

################### local info ###################

Cwlocalhost# file containing names of hosts for which we receive emailFw/etc/sendmail.data/localnet

CP.

# UUCP relay host#DYuucp0.ntua.grDYachilles.noc.ntua.grCPUUCP

# BITNET relay host#DBmail0.ntua.grDBachilles.noc.ntua.grCPBITNET

# "Smart" relay host (may be null)DSsmtp:ulysses.noc.ntua.gr

# who I send unqualified names to (null means deliver locally)DR

# who gets all local email traffic ($R has precedence for unqualified names)DH

# who I masquerade as (null for no masquerading)DMcc.ece.ntua.gr

# class L: names that should be delivered locally, even if we have a relay# class E: names that should be exposed as from this host, even if we masquerade#CLrootCEroot daemon uucp

# operators that cannot be in local usernames (i.e., network indicators)CO @ % !

120

Page 121: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

121

# a class with just dot (for identifying canonical names)C..

# dequoting mapKdequote dequote

CPREDIRECT

# Domains served by this hostCDFD/etc/sendmail.data/localdomain

# User's full namesKuserfullnames dbm -f -N -o /etc/userfullnames

####################### Special macros #######################

# SMTP initial login messageDe$j sendmail $v $b

# UNIX initial From header formatDlFrom $g $d

# my name for error messagesDnMAILER-DAEMON

# delimiter (operator) charactersDo.:%@!^/[]

# format of a total nameDq$?x$x $.<$g>

# configuration file versionDZ1.0-NTUA

################ Options ################

# strip message body to 7 bits on input?O7False

# wait (in minutes) for alias file rebuildOa1

# location of alias fileOAnis:[email protected]/etc/aliases

# minimum number of free blocks on filesystem

121

Page 122: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

122

Ob100

# substitution for space (blank) charactersOB_

# avoid connecting to "expensive" mailers on initial submission?OcFalse

# checkpoint queue runs after every N successful deliveriesOC10

# default delivery modeOdbackground

# automatically rebuild the alias database?ODFalse

# error message header/file#OE/etc/sendmail.oE

# error mode#Oep

# save Unix-style "From_" lines at top of header?OfTrue

# temporary file modeOF0600

# match recipients against GECOS field?OGFalse

# default GIDOg1

# maximum hop countOh17

# location of help fileOH/usr/lib/sendmail.hf

# ignore dots as terminators in incoming messages?OiFalse

# Insist that the BIND name server be running to resolve namesOITrue

# deliver MIME-encapsulated error messages?OjTrue

# Forward file search path#OJ/var/forward/$u:$z/.forward.$w:$z/.forward

# open connection cache sizeOk2

122

Page 123: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

123

# open connection cache timeoutOK5m

# use Errors-To: header?OlTrue

# log levelOL9

# send to me too, even in an alias expansion?OmFalse

# verify RHS in newaliases?OnTrue

# default messages to old style headers if no special punctuation?OoFalse

# SMTP daemon options#OOPort=esmtp

# privacy flagsOpauthwarnings, needmailhelo, needexpnhelo, needvrfyhelo, restrictqrun, restrictmailq

# who (if anyone) should get extra copies of error messagesOPpostmaster

# slope of queue-only function#Oq600000

# queue directoryOQ/var/spool/mqueue

# read timeout -- now OK per RFC 1123 section 5.3.2#Ordatablock=10m

# queue up everything before forking?OsTrue

# status fileOS/usr/adm/sendmail.st

# default message timeout intervalOT7d/2d

# time zone handling:# if undefined, use system default# if defined but null, use TZ envariable passed in# if defined and non-null, use that info#Ot

# default UIDOu1

# list of locations of user database file (null means no lookup)OU

123

Page 124: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

124

# fallback MX hostOVachilles.noc.ntua.gr

# if we are the best MX host for a site, try it directly instead of config errOwNTUA_TRUE_FALSE

# load average at which we just queue messagesOx8

# load average at which we refuse connectionsOX12

# work recipient factor#Oy30000

# deliver each queued job in a separate process?OYFalse

# work class factor#Oz1800

# work time factor#OZ90000

############################ Message precedences ############################

Pfirst-class=0Pspecial-delivery=100Plist=-30Pbulk=-60Pjunk=-100

###################### Trusted users ######################

TrootTdaemonTuucp

########################## Format of headers ##########################

# Received and Message-Id headers edited by nass Thu Jan 12 15:02:50 EET 1995H?P?Return-Path: $g

HReceived: by $m$?r with $r$.id $i at $b

H?D?Resent-Date: $aH?D?Date: $a

124

Page 125: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

125

H?F?Resent-From: $qH?F?From: $qH?x?Full-Name: $xHSubject:# HPosted-Date: $a# H?l?Received-Date: $b

H?M?Resent-Message-Id: <$t.$i@$m>H?M?Message-Id: <$t.$i@$m>

#_###################################################################################################################################################### REWRITING RULES#################################################################################################################################################

########################################## Ruleset 1 -- Sender Rewriting ##########################################

S1

# Replace user nameR$=E $@ $1R$- $@ $(userfullnames $1 $:$1 $)R$* <$*$M.> $@ $(userfullnames $1 $:$1 $)

############################################## Rulset 3 -- Name Canonicalization ##############################################S3

# handle null input (translate to <@> special case)R$@ $@ <@>

# basic textual canonicalization -- note RFC733 heuristic hereR$*<$*>$*<$*>$* $2$3<$4>$5 strip multiple <> <>R$*<$*<$+>$*>$* <$3>$5 2-level <> nestingR$*<>$* $@ <@> MAIL FROM:<>caseR$*<$+>$* $2 basic RFC821/822 parsing

# handle list:; syntax as special caseR$*:;$* $@ $1 :; <@>

# make sure <@a,@b,@c:user@d> syntax is easy to parse -- undone laterR@ $+ , $+ @ $1 : $2 change all "," to ":"

125

Page 126: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

126

# localize and dispose of route-based addressesR@ $+ : $+ $@ $>96 < @$1 > : $2 handle <route-addr>

# find focus for list syntaxR $+ : $* ; @ $+ $@ $>96 $1 : $2 ; < @ $3 > list syntaxR $+ : $* ; $@ $1 : $2; list syntax

# find focus for @ syntax addressesR$+ @ $+ $: $1 < @ $2 > focus on domainR$+ < $+ @ $+ > $1 $2 < @ $3 > move gaze rightR$+ < @ $+ > $@ $>96 $1 < @ $2 > already canonical

# do some sanity checkingR$* < @ $* : $* > $* $1 < @ $2 $3 > $4 nix colons in addrs

# convert old-style addresses to a domain-based addressR$- ! $+ $@ $>96 $2 < @ $1 .UUCP > resolve uucp namesR$+ . $- ! $+ $@ $>96 $3 < @ $1 . $2 > domain uucpsR$+ ! $+ $@ $>96 $2 < @ $1 .UUCP > uucp subdomains

# if we have % signs, take the rightmost oneR$* % $* $1 @ $2 First make them all @s.R$* @ $* @ $* $1 % $2 @ $3 Undo all but the last.R$* @ $* $@ $>96 $1 < @ $2 > Insert < > and finish

# else we must be a local name

################################################### Ruleset 96 -- bottom half of ruleset 3 ###################################################

# At this point, everything should be in a "local_part<@domain>extra" format.S96

# handle special cases for local names# edited by nass to add domain specification Wed Feb 1 22:13:36 EET 1995R$* < @ localhost > $* $: $1 < @ $j . > $2 no domain at allR$* < @ localhost . $m > $* $: $1 < @ $j . > $2 no domain at allR$* < @ localhost . UUCP > $* $: $1 < @ $j . > $2 .UUCP domainR$* < @ [ $+ ] > $* $: $1 < @@ [ $2 ] > $3 mark [a.b.c.d]R$* < @ $=w > $* $: $1 < @ $j . > $3 self-literalR$* < @ $=w . $m > $* $: $1 < @ $j . > $3 self-literal

# pass UUCP addresses straight throughR$* < @ $+ . UUCP > $* $@ $1 < @ $2 . UUCP . > $3

# pass to name server to make hostname canonicalR$* < @ $* $~P > $* $: $1 < @ $[ $2 $3 $] > $4

# local host aliases and pseudo-domains are always canonical# edited by nass to add domain specification Wed Feb 1 22:21:03 EET 1995R$* < @ $=w > $* $: $1 < @ $2 . > $3R$* < @ $=w . $m > $* $: $1 < @ $2 . > $3R$* < @ $* $=P > $* $: $1 < @ $2 $3 . > $4

126

Page 127: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

127

R$* < @ $* . . > $* $1 < @ $2 . > $3

# if this is the local hostname, make sure we treat is as canonicalR$* < @ $j > $* $: $1 < @ $j . > $2

##################################################### Ruleset 4 -- Final Output Post-rewriting #####################################################S4

R$*<@> $@ $1 handle <> and list:;

# strip trailing dot off possibly canonical nameR$* < @ $+ . > $* $1 < @ $2 > $3

# externalize local domain infoR$* < $+ > $* $1 $2 $3 defocusR@ $+ : @ $+ : $+ @ $1 , @ $2 : $3 <route-addr> canonicalR@ $* $@ @ $1 ... and exit

# UUCP must always be presented in old formR$+ @ $- . UUCP $2!$1 [email protected] => h!u

# delete duplicate local names# edited by nass to add domain specification Wed Feb 1 22:15:33 EET 1995R$+ % $=w @ $=w $1 @ $j u%host@host => u@hostR$+ % $=w . $m @ $=w . $m $1 @ $j u%host@host => u@hostR$+ % $=w @ $=w . $m $1 @ $j u%host@host => u@hostR$+ % $=w . $m @ $=w $1 @ $j u%host@host => u@host

################################################################# Ruleset 97 -- recanonicalize and call ruleset zero ###### (used for recursive calls) #################################################################

S97R$* $: $>3 $1R$* $@ $>0 $1

######################################### Ruleset 0 -- Parse Address #########################################

S0

R<@> $#local $: <> special case error msgsR$* : $* ; $#error $@ USAGE $: "list:; syntax illegal for recipient addresses"R<@ $+> $#error $@ USAGE $: "user address required"R<$* : $* > $#error $@ USAGE $: "colon illegal in host name part"

# handle numeric address specR$* < @ [ $+ ] > $* $: $>98 $1 < @ [ $2 ] > $3 numeric internet spec

127

Page 128: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

128

R$* < @ [ $+ ] > $* $#smtp $@ [$2] $: $1 < @ [$2] > $3 still numeric: send

# now delete the local info -- note $=O to find characters that cause forwarding# edited by nass to add domain specification Wed Feb 1 22:17:00 EET 1995R$* < @ > $* $@ $>97 $1 user@ => userR< @ $=w . > : $* $@ $>97 $2 @here:... -> ...R< @ $=w . $m . > : $* $@ $>97 $2 @here:... -> ...R$* $=O $* < @ $=w . > $@ $>97 $1 $2 $3 ...@here -> ...R$* $=O $* < @ $=w . $m . > $@ $>97 $1 $2 $3 ...@here -> ...

# handle local hacksR$* $: $>98 $1

# short circuit local delivery so forwarded email works# edited by nass to add domain specification Wed Feb 1 22:18:05 EET 1995R$=L < @ $=w . > $#local $: @ $1 special local namesR$=L < @ $=w . $m . > $#local $: @ $1 special local namesR$+ < @ $=w . > $#local $: $1 dispose directlyR$+ < @ $=w . $m . > $#local $: $1 dispose directly

# resolve remotely connected UUCP links (if any)

# resolve fake top level domains by forwarding to other hostsR$*<@$+.BITNET.>$* $: $>95 < $B > $1 <@$2.BITNET.> $3 [email protected]

# forward non-local UUCP traffic to our UUCP relayR$*<@$*.UUCP.>$* $: $>95 < $Y > $1 <@$2.UUCP.> $3 uucp mail

# figure out what should stay in our local mail system

# Aggelos: pass anything with a dot to the name serverR$-.$+ < @ $=D . > $#ph $@ $3 $: $1.$2

# Consider local domains mailR$* < @ $=D . > $* $#local $: $1# Send all NTUA mail directly (ok, in fact using MX pointers)R$* < @ $* . ntua . gr . > $* $#smtp $@ $2.ntua.gr. $: $1 <@$2.ntua.gr.> $3

# pass names that still have a host to a smarthost (if defined)R$* < @ $* > $* $: $>95 < $S > $1 < @ $2 > $3 glue on smarthost name

# deal with other remote namesR$* < @$* > $* $#smtp $@ $2 $: $1 < @ $2 > $3 [email protected]

# if this is quoted, strip the quotes and try againR$+ $: $(dequote $1 $) strip quotesR$+ $=O $+ $@ $>97 $1 $2 $3 try again

# handle locally delivered namesR$=L $#local $: @ $1 special local names# Aggelos: pass anything with a dot to the name serverR$-.$+ $#ph $@ $M $: $1.$2R$+ $#local $: $1 regular local names

128

Page 129: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

129

############################################################################## Ruleset 5 -- special rewriting after aliases have been expanded ###### (new sendmail only) ##############################################################################

S5

# see if we have a relay or a hubR$+ $: < $R > $1 try relayR< > $+ $: < $H > $1 try hubR< > $+ $@ $1 nope, give upR< $- : $+ > $+ $: $>95 < $1 : $2 > $3 < @ $2 >R< $+ > $+ $@ $>95 < $1 > $2 < @ $1 >

###################################################################### Ruleset 95 -- canonify mailer:host syntax to triple ######################################################################

# edited by nass to add domain specification Wed Feb 1 22:20:17 EET 1995S95R< > $* $@ $1 strip off null relayR< $- : $+ > $* $# $1 $@ $2 $: $3 try qualified mailerR< $=w > $* $@ $2 delete local hostR< $=w . $m > $* $@ $2 delete local hostR< $+ > $* $#relay $@ $1 $: $2 use unqualified mailer

###################################################################### Ruleset 98 -- local part of ruleset zero (can be null) ######################################################################

S98

# addresses sent to [email protected] will give a 551 error codeR$* < @ $+ .REDIRECT. > $# error $@ NOUSER $: "551 User not local; please try "<$1@$2>#_###################################################################################################################################################### MAILER DEFINITIONS#################################################################################################################################################

##################################################### Local and Program Mailer specification #####################################################

129

Page 130: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

130

##### @(#)local.m4 8.6 (Berkeley) 10/24/93 #####

Mlocal, P=/bin/mail, F=DEFMlmnrs, S=10, R=20/40,A=mail -d $u

Mprog, P=/bin/sh, F=lsDFMeu, S=10, R=20/40, D=$z:/,A=sh -c $u

Mph, P=/var2/nserve/bin/phquery, F=DFMhnmur, A=phquery $u

S10R<@> $n errors to mailer-daemonR$+ $: $>40 $1

S20R$+ < @ $* > $: $1 strip host part

S40

######################################## SMTP Mailer specification ########################################

##### @(#)smtp.m4 8.15 (Berkeley) 2/14/94 #####

Msmtp, P=[IPC], F=mDFMuXan, S=11/31, R=21, E=\r\n,L=990, M=1048576, A=IPC $h

Mesmtp, P=[IPC], F=mDFMuXaan, S=11/31, R=21, E=\r\n,L=990, M=1048576, A=IPC $h

Mrelay, P=[IPC], F=mDFMuXaan, S=11/31, R=61, E=\r\n,L=2040, A=IPC $h

## envelope sender and masquerading recipient rewriting#S11R$+ $: $>51 $1 sender/recipient commonR$* :; <@> $@ $1 :; list:; special caseR$* $@ $>61 $1 qualify unqual'ed names

## header recipient rewriting if not masquerading recipients#S21

# do sender/recipient common rewritingR$+ $: $>51 $1

# unqualified names (e.g., "eric") are qualified by local hostR$* < @ $* > $* $@ $1 < @ $2 > $3 already qualifiedR$+ $: $1 < @ $j > add local domain

## header sender and masquerading recipient rewriting#S31

130

Page 131: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

131

R$+ $: $>51 $1 sender/recipient commonR$* :; <@> $@ $1 :; list:; special case

# do special header rewritingR$* <@> $* $@ $1 <@> $2 pass null host throughR< @ $* > $* $@ < @ $1 > $2 pass route-addr throughR$=E < @ $=w . > $@ $1 < @ $2 > exposed user as isR$* < @ $=w . > $: $1 < @ $2 @ $M > masquerade as domainR$* < @ $+ @ > $@ $1 < @ $2 > in case $M undefinedR$* < @ $+ @ $+ > $@ $1 < @ $3 > $M is defined -- use itR$* $@ $>61 $1 qualify unqual'ed names

## convert pseudo-domain addresses to real domain addresses#S51

# pass <route-addr>s throughR< @ $+ > $* $@ < @ $1 > $2 resolve <route-addr>

# output fake domains as user%fake@relayR$+ <@ $+ .BITNET. > $: $1 % $2 .BITNET < @ $B > [email protected]$+.BITNET <@ $+:$+ > $: $1 .BITNET < @ $3 > strip mailer: part

# do UUCP heuristics; note that these are shared with UUCP mailersR$+ < @ $+ .UUCP. > $: < $2 ! > $1 convert to UUCP formR$+ < @ $* > $* $@ $1 < @ $2 > $3 not UUCP form

# leave these in .UUCP form to avoid further tamperingR< $&h ! > $- ! $+ $@ $2 < @ $1 .UUCP. >R< $&h ! > $-.$+ ! $+ $@ $3 < @ $1.$2 >R< $&h ! > $+ $@ $1 < @ $&h .UUCP. >R< $+ ! > $+ $: $1 ! $2 < @ $Y >R$+ < @ > $: $1 < @ $j > in case $Y undefinedR$+ < @ $+ : $+ > $: $1 < @ $3 > strip mailer: part

## common sender and masquerading recipient rewriting#S61

R$* < @ $* > $* $@ $1 < @ $2 > $3 already qualifiedR$=E $@ $1 < @ $j> show exposed namesR$+ $: $1 < @ $M > user w/o hostR$+ <@> $: $1 < @ $j > in case $M undefined

.

131

Page 132: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

132

ΚΕΦΑΛΑΙΟ 14. UUCP

14.1 Εισαγωγή

Το UUCP (Unix to Unix CoPy) είναι ένα σύνολο προγραμμάτων και πρωτοκόλλων που επιτρέπουν

σε υπολογιστές να επικοινωνούν μέσω σειριακών συνδέσεων, δικτύων ή και συνηθισμένων

τηλεφωνικών γραμμών. Υποστηρίζει δυο κύριες λειτουργίες: αντιγραφή αρχείων, και εκτέλεση

προγραμμάτων σε απομακρυσμένο υπολογιστή. Το UUCP δημιουργήθηκε την εποχή που το UNIX

ήταν στα πρωτα του βήματα. Σήμερα ίσως να θεωρείται ότι δεν έχει παρά ιστορική μόνο αξία,

παραμένει παρ'ολ'αυτά ο πιο συνηθισμένος τρόπος επικοινωνίας δυο υπολογιστών μέσω modems.

14.2 Χρησιμότητα του UUCP

Οι λειτουργίες που προσφέρει το UUCP είναι ένα υποσύνολο αυτών που προσφέρει το Internet, και

το ενδιαφέρον για το UUCP ελαττώνεται καθώς η εγκατάσταση συνδέσεων Internet γίνεται όλο πιο

εύκολη και φτηνή. Ακόμα και για υπολογιστές των οποίων η πρόσβαση στον "έξω κόσμο" γίνεται

μέσα από modems, υπηρεσίες όπως το SLIP και το PPP μπορούν να προσφέρουν καλύτερη

διασύνδεση και λειτουργικότητα από το UUCP. Εάν όμως το modem σας βρίσκεται περισσότερη

ώρα ανενεργό παρά σε λειτουργία και η μόνη του χρήση είναι η μεταφορά ηλεκτρονικού

ταχυδρομίου και news, τότε το UUCP είναι και απλούστερο και ασφαλέστερο από τη χρήση

εναλλακτικών λύσεων που βασίζονται στο Internet Protocol όπως SLIP ή PPP.

14.3 Επισκόπιση του UUCP

Προκειμένου να γίνει σύνδεση ενός υπολογιστή με έναν άλλο απομακρυσμένο μέσω UUCP, πρέπει

από τον διαχειριστή αυτού του συστήματος να γίνουν πρώτα οι απαραίτητες τροποποιήσεις.

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

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

ρυθμίσεις, τα δύο συστήματα μπορούν να συνδεθούν και να επικοινωνούν χωρίς να απαιτείται

ανθρώπινη επίβλεψη. Αυτό ονομάζεται σύνδεση UUCP παρόλο που τα συστήματα δεν είναι

συνδεχώς συνδεδεμένα, αλλα μόνο περιστασιακά. Τα συστήματα με τα οποία συνδέεται το

σύστημά μας ονομάζονται "γείτονες" UUCP.

Οι λειτουργίες του UUCP γίνονται με τις εντολές uux και uucp. Η πρώτη εκτελεί μια εντολή σε ένα

απομακρυσμένο σύστημα, ενώ η δεύτερη αντιγράφει αρχεία μεταξύ των δύο συστημάτων. Και οι

δύο εντολές δημιουργούν ένα αρχείο που περιγράφει τις λειτουργίες που πρέπει να επιτελεστούν

132

Page 133: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

133

για να επιτύχουν το σκοπό τους, το οποίο σώζεται στην ουρά εργασίας του UUCP

(/var/spool/uucp στα περισσότερα συστήματα). Τις εγρασίες φέρει εις πέρας ένα άλλο

πρόγραμμα, το uucico (Unix to Unix Copy In, Copy Out). Τη συχνότητα λειτουργίας του

τελευταίου την καθορίζει ο διαχειριστής του συστήματος.

Καθώς το mail και τα news απαιτούν προώθηση από κάποιον τρίτο, τα συστήματα παρέχουν

τις δικές τους λειτουργίες προώθησης. Κάθε φορά δηλαδή που ένα mail μεταβαίνει από ένα

μηχάνημα σε ένα άλλο, επανεισέρχεται στο σύστημα ηλεκτρονικού ταχυδρομίου για

περεταίρω δρομολόγιση.

14.4 Διευθυνσιοδότηση UUCP

Οι διευθύνσεις είναι βασισμένες στη δρομολόγηση είτε στον προορισμό. "Πηγαινε ίσια 10 μέτρα,

στρίψε στο φανάρι αριστερά και μετά δεξιά στο τρίτο σπίτι" είναι μία διεύθυνση δρομολόγισης

(route - based). "Αγίας Σοφίας 1" είναι μια διεύθυνση προορισμού (destination - based), και για να

φτάσεις στον προορισμό χρειάζεσαι ασφαλώς κάποιον χάρτη για να καθορίσεις ένα δρομολόγιο. Η

σύνταξη των εντολών στο UUCP για τον προσδιορισμό απομακρυσμένων αρχείων και εντολών

είναι της μορφής σύστημα!στόχος. Μία διεύθυνση αποτελείαι από μια λίστα ονομάτων που

χωρίζονται από θαυμαστικά "!". Το τελευταίο όρισμα είναι όνομα χρήστη, όνομα αρχείου ή όνομα

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

αρχείου ή εκτέλεση εντολής.. Για παράδειγμα η διεύθυνση ταχυδρομίου foo!bar!roger δρομολογεί

ταχυδρομείο στον roger στο σύστημα bar μέσω του συστήματος foo.

14.5 Το UUCP από την πλευρά του χρήστη.

Η εντολή uucp που χρησιμοποιείται για την αντιγραφή αρχείων μέσω UUCP χρησιμοποιείται

παρόμοια με την εντολή cp. Tα ονόματα των αρχείων μπορούν να είναι :

• full pathnames π.χ. /usr/dict/words

pathnames που χρησιμοποιούν τον χαρακτήρα ~

• π.χ. ~evi/proposal

• ή ~/answer

• relative pathnames π.χ.: bin/myprog

Για παράδειγμα ενάν εισέλθετε στον κατάλογο /staff/boss και εκτελέσετε την εντολή:

uucp akel!files/exabyte exabyte

τo uucp θα αντιγράψει το αρχείο /staff/boss/files/exabyte από το σύστημα akel στο /

staff/boss/exabyte στο τοπικό μηχάνημα.

133

Page 134: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

134

Κάτι που πρέπει να εχετε υπόψη σας είναι ότι όταν ένα αρχείο γράφεται από το uucico τότε αυτό

έχει UID και GID ίδιο με αυτό του uucico και προκειμένου να γραφεί ένα αρχείο στο home

directory κάποιου χρήστη, τότε αυτό το directory πρέπει να έχει άδεια εγγραφής από όλους, κάτι

ασφαλώς μή επιθυμητό. Γι'αυτό το σκοπό υπάρχει ο κατάλογος /var/spool/uucppublic οποίος

είναι κάτι αντίστοιχο με το /tmp.

Εκτός από την uucp αναφέραμε και την εντολή uux η οποία εκτελεί εντολές σε ένα απομακρυσμένο

σύστημα. Η εντολή αυτή συντάσεται παρόμοια με την uucp και επιπλέον καταλαβαίνει και τους

ειδικούς χαρακτήρες "<", ">", "|", ";" με τον ίδιο τρόπο με τον οποίο τους αντιλαμβάνονται και οι

συνηθισμένοι φλοιοί στο UNIX. Για παράδειγμα η εντολή:

uux '!diff hal!/usr/jack/rabbit moon!/res/hare >!diffs'

καλεί την τοπική εντολή diff με ορίσματα τα αρχεία /usr/jack/rabbit από το σύστημα hal και το /

res/hare από το σύστημα moon στέλνοντας την έξοδο στο αρχείο diffs στο τοπικό σύστημα.

14.6 Εγκατάσταση του UUCP

H εγκατάσταση του UUCP δεν είναι δύσκολη, είναι όμως ιδιαίτερα χρονοβόρος. Προκειμένου να

εγκατασταθεί χρειάζεται να εκτελεστούν σε γενικές γραμμές τα ακόλουθα:

• Αναγνώριση του λογισμικού μας

• Επαλήθευση της εγκατάστασης του λογισμικού

• Σύνδεση των modems

• Περιγραφή των modems στο UUCP

• Εισαγωγή προθεματικών τηλεφωνικών κωδικών

• Προετοιμασία ελέγχου πρόσβασης

• Εύρεση γείτονα UUCP

• Σύνδεση με τον γείτονα

• Δημιουργία Systems αρχείων για τον γείτονα

• Αποσφαλμάτωση της σύνδεσης

• Τροποποίηση του συστήματος ταχυδρομείου για να συνεργάζεται με το UUCP

• Ρύθμιση αυτόματων τηλεφωνικών κλήσεων - συνδέσεων μέσω του cron

Αναγνώριση του λογισμικού

134

Page 135: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

135

Υπάρχουν τρείς βασικοί κατάλογοι σε ένα σύστημα UUCP:

• /usr/lib/uucp - για την αποθήκευση εκτελέσιμων αρχείων και αρχείων ρυθμίσεων

• /var/spool/uucp - για την αποθήκευση εργασιών και προσωρινών αρχείων

• /var/spool/uucppublic - χρησιμοποιείται ως αποθηκευτικός χώρος από τους χρήστες

Οι περισσότερες εντολές χρήστη βρίσκονται στον κατάλογο /usr/bin. Σε μερικά συστήματα ο

κατάλογος /usr/lib/uucp μετακόμισε στο /etc/uucp και ο /var/spool/uucp στο /

usr/spool/uucp. Στο Solaris τα αρχεία ρυθμίσεων βρίσκονται στο /etc/uucp και τα

εκτελέσιμα στο /usr/lib/uucp. Η έκδοση του UUCP με την οποία έρχεται το Solaris είναι

HoneyDanBer-ish (HDB) σε αντίθεση με την BSD έκδοση. Η εγκατάσταση του UUCP

θεωρείται προεραιτική και πρέπει ν γίνει από το CD-ROM. Τα βασικά αρχεία που θα

συναντήσετε στο UUCP είναι τα:

HDB Σκοπός

Devices Περιέχει τα είδη των διαθέσιμων modems

Dialers Περιέχει κατάλληλες εντολές χειρισμού των modems

Dialcodes Περιέχει τηλεφωνικό κατάλογο

Permissions Περιέχει τις διαθέσιμες εντολές του uuxqt καθώς και τις άδειες

πρόσβασης στο σύστημα αρχείων

Systems Περιέχει τους γείτονες, καθώς και scripts πρόσβασης σε

αυτούς

uucico Διαχειρίζεται την ενδοεπικοινωνία των συστημάτων

uuclean Καθαρίζει το spool directory

uuxqt Εξυπηρετητής (server) απομακρυσμένων εντολών

Επαλήθευση εγκατάστασης λογισμικού

Οτιδήποτε στον κατάλογο /usr/lib/uucp πρέπει να ανήκει στον χρήστη uucp και τα

προγράμματα πρέπει να έχουν suid σε αυτόν το χρήστη. Επιπροσθέτωςτο το /

var/spool/uucppublic πρέπει να ανήκει στον uucp και να έχει group owner daemon. Αυτές

οι άδειες χρήσεις πρέπει να ελεγθούν προσεκτικά γιατι μερικές φορές έχουν αρκετά

προβλήματα εξ'αρχής. Στον κατάλογο /usr/lib/uucp τα αρχεία πρέπει να είναι εγγράψιμα

μόνο από τον ιδιοκτήτη τους και τα αρχεία Devices,Dialcodes και Systems να έχουν άδεια

ανάγνωσης επίσης μόνο από τον ιδιοκτήτη τους. Όλοι οι υποκατάλογοι στο /var/spool/uucp

πρέπει να έχουν άδεια 755, και ο ίδιος ο κατάλογος 755. Ο κατάλογος /

var/spool/uucppublic πρέπει να υπάρχει και να ανήκει στο χρήστη uucp και στο group

daemon και να έχει άδεια 777. Τέλος ο κωδικός του uucp στο /etc/passwd πρέπει να είναι

135

Page 136: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

136

απενεργοποιημένος με ένα "*" στη θέση του password, εφόσον κανείς δεν πρόκειται να

χρησιμοποιήσει αυτόν τον λογαριασμό για να κάνει log-in.

Σύνδεση των modems.

Με τη χρήση της εντολής tip μπορείτε να ελέγξετε την λειτουργία των modems κατα πόσο

δηλαδή είναι ικανά να επιτελέσουν λειτουργία dialοut σε άλλο σύστημα.

Περιγραφή των modems στο UUCP

Το UUCP αναγνωρίζει μόνο τα δικά του αρχεία ρυθμίσεων. Ρυθμίσεις σχετικά με τα modems

που πιθανόν να έχουν γίνει στα αρχεία /etc/ttys /etc/remote /etc/inittab αγνοούνται

πλήρως από το UUCP. To UUCP πρέπει να είναι ικανό να ελέγξει το modem προκειμένου να

καλέσει ένα σύστημα, να καθορίσει την ταχύτητα επικοινωνίας, και να ανιχνεύσει τυχόν

προβλήματα. Όλα αυτά καθορίζονται στο αρχείο Dialers. Εάν ο τύπος του modem που

διαθέτετε δεν υπάρχει στο αρχείο αυτό, τότε η επιλογή Hayes compatible θα δουλέψει στο

95% των περιπτώσεων χωρίς άλλες αλλαγές.

Οι πληροφορίες για τα modems βρίσκονται στο αρχείο Devices όπου καθορίζονται για κάθε

είδος μόντεμ, το device file που θα χρησιμοποιηθεί καθώς και η ταχύτητα σύνδεσης με το

modem. Κάθε γραμμή σε αυτό το αρχείο έχει τη μορφή:

type device dialer speed brand chat

Στο reference manual ίσως τα παραπάνω να έχουν διαφορετική ονομασία.

To type καθορίζει το είδος της συσκευής που χαρακτηρίζει η τρέχουσα γραμμή. Για μόντεμς

πρέπει να τεθεί η λέξη ACU που σημαίνει "Automatic Control Unit". Άλλες επιλογές είναι DIR

"Dedicated serial line" , TCP για Internet links.

To device καθορίζει το device file . Π.χ. /dev/cua/a

To πεδίο dialer καθόριζε παλιά τη συσκευή που θα επιτελούσε την τηλεφωνική κλήση. Η

επιλογή είναι παρωχημένη, απλά μια παύλα "-" αρκεί.

Το πεδίο speed καθορίζει το πεδίο ταχυτήτων που υποστηρίζει το modem. Π.χ. 300-19200 ή

"Any"

To πεδίο brand καθορίζει συγκεκριμένο τύπο και κατασκευαστή modem. Π.χ. hayestone ή

hayespulse.

136

Page 137: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

137

Το πεδίο chat καθορίζει ένα μικρό script το οποίο χρησιμεύει στην απόκτηση πρόσβασης στην

συσκευή επικοινωνίας. Συνήθως δεν χρησιμοποιείται.

Παράδειγμα:

ACU /dev/cua/a unused 19200 hayestone

Εισαγωγή προθεματικών τηλεφωνικών κωδικών

Το UUCP επιτρέπει να αντιστοιχίσετε τηλεφωνικούς αριθμούς σε ονόματα. Αυτό γίνεται στο

αρχείο Dialcodes Παράδειγμα:

joe 123-4567

To παραπάνω αντιστοιχίζει το joe στο 123-4567 οπότε στο αρχείο Systems όπου καθορίζονται

οι γείτονες μπορεί να εμφανίζεται η λέξη joe αντί του αριθμού 123-4567

Προετοιμασία ελέγχου πρόσβασης

Το UUCP επιτρέπει τον καθορισμό των αρχείων στα οποία οι γείτονες μπορούν να έχουν

ελεύθερη πρόσβαση, και τις εντολές τις οποίες επιτρέπεται να εκτελέσουν. Για λόγους

ασφαλείας πρέπει να επιτρέπεται η χρήση μόνο των απολύτως απαραίτητων εντολών όπως

rmail (receive mail) και rnews. Η κατάλληλη γραμμή στο αρχείο Permisions θα μοιάζει ώς

εξής:

MACHINE=OTHERMACHINE COMMANDS=rnews:rmail

Εύρεση γείτονα UUCP & Δημιουργία Systems αρχείων για τον γείτονα

Στο παρελθόν η εξεύρεση γείτονα UUCP (UUCP - neighbor) απαιτούσε ικανότητες ικεσίας

μιας και τα πανεπιστήμια ήταν τα μόνα υποψήφια σημεία σύνδεσης, σήμερα όμως υπάρχουν

πολλές εταιρείες που προσφέρουν υπηρεσίες UUCP με χαμηλά σχετικό κόστος. Περεταίρω

πληροφορίες για τη μορφοποίηση του αρχείου Systems δίνονται από τον εκάστοτε παροχέα

σύνδεσης.

Αποσφαλμάτωση της σύνδεσης

137

Page 138: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

138

Ο καλύτερος τρόπος αποσφαλμάτωσης της σύνδεσης είναι η δοκιμαστική λειτουργία της σε

συνεργασία με τον διαχειριστή του απομακρυσμένου συστήματος σε συνδυασμό με την

επιλογή αποσφαλμάτωσης (debug) του uucico

# uucico -r1 -ssystem -x9

όπου system το όνομα του απομακρυσμένου συστήματος. Η επιλογή -x9 επιτελεί την έξοδο

αποσφαλμάτωσης. Το νούμερο που ακολουθεί το x είναι ένα μέτρο των πληροφοριών που

τυπώνονται στην οθόνη κατα την αποσφαλμάτωση. Μεγαλύτερα νούμερα οδηγούν σε

περισσότερες πληροφορίες.

Τροποποίηση του συστήματος ταχυδρομείου για να συνεργάζεται με το UUCP

Οι περισσότερες εκδόσεις του sendmail δεν ειναι ικανές να χειριστούν UUCP mail απευθείας,

αλλά παραδίνουν αυτού του είδους το mail σε έναν ειδικό UUCP mailer που συνήθως

ονομάζεται rmail, προκειμένου να το προωθήσει. Το σύστημα ταχυδρομείου (mail system)

εκτελεί την ανάγνωση και την επανεγγραφή των διευθύνσεων και ο UUCP mailer είναι

υπεύθυνος για την επανεξέταση του τελικού αποτελέσματος και την προώθησή του στο

κατάλληλο σύστημα. Στις περισσότερες περιπτώσεις αυτός ο μηχανισμός λειτουργεί και

αντίστροφα: ο uucp mailer δεχεται ταχυδρομείο μέσω uucp και το προωθεί στο τοπικό mail

system. Είναι εφικτό το ταχυδρομίο να έχει δευθύνσεις ανάλογες με αυτές του Internet. Αυτή

την υπηρεσία την προσφέρει ο παροχέας UUCP σύνδεσης, ο οποίος για κάθε πελάτη

προσθέτει ένα πεδίο MX στο Domain Name System (DNS) ακριβώς γι'αυτόν το σκοπό.

Ο έλεγχος του ταχυδρομίου είναι σχετικά εύκολη υπόθεση. Δίνεται ένα παράδειγμα χρήσης

της εντολής mail.

# mail -v neighborname!localmachinename!myusername

Το παραπάνω πρέπει να επιστρέψει κάτι σαν:

# mail -v neighborname!localmachinename!myusername

Subject: Hello

<Control-D>

Cc:

Null message body; hope that's ok

neighborname!localmachinename!myusername … Connecting to neighborname.uucp

neighborname!localmachinename!myusername … Sent

138

Page 139: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

139

Άν αντι αυτού το sendmail απαντήσει ότι είναι "totally stumped" τότε το πρόβλημα βρίσκεται

στο αρχείο sendmail.cf οπότε πρέπει να επανεξεταστούν οι κανόνες στο αρχείο αυτό. Μπορεί

επίσης να χρησιμοποιηθεί η εντολή uustat -sονομαγείτονα για να επιβεβαιωθεί εάν μία

εργασία έχει μπεί στην ουρά. Αν όλα δείχνουν σωστά μπορεί να εκτελεστεί η εντολή:

# uucico -r1 -sneighborname -x5

(θα κάνει γύρω στο 5λεπτο να ολοκληρωθεί)

και μετά μπορούν να ελεγθούν τα log files στον κατάλογο /var/spool/uucp

Ρύθμιση αυτόματων τηλεφωνικών κλήσεων - συνδέσεων μέσω του cron

Με την εντολή

# crontab -e uucp

μπορεί να εισαχθεί στο αρχείο λειτουργίας του cron κάτι σαν:

43 * * * * /usr/lib/uucp/uucico -r1

που σημαίνει ότι στις και 43 κάθε ώρα θα εκτελείται η παραπάνω εντολή. Η επιλογή -r

εξασφαλίζει ότι τα συστήματα θα συνδεθούν ανεξάρτητα από το εάν υπάρχουν jobs που

πρέπει να δρομολογηθούν προς τα έξω.

Ειδικά στο Solaris υπάρχει το αρχείο /etc/uucp/Devconfig το οποίο επιτρέπει εφόσον

χρησιμοποιείτε modems να ρυθμίσετε τις στοίβες πρωτοκόλλου (protocol stacks). Για να το

επιτύχετε θα χρειαστεί να διαβάσετε τα σχόλια που υπάρχουν σ'αυτό το αρχείο καθώς και ένα

καλό βιβλίο για STREAMS.

139

Page 140: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

140

ΚΕΦΑΛΑΙΟ 15. Firewalls

15.1 Εισαγωγή

Καθημερινά ο κόσμος χρησιμοποιεί τις ασφάλειες για να προστατέψει τα πολύτιμα αγαθά του από

φωτιά ή κλοπή, oι εταιρείες προστατεύουν την πνευματική τους ιδιοκτησία με πατέντες και

κατατεθέντα σήματα. Επειδή η δικτύωση αυξήθηκε ραγδαία τα τελευταία χρόνια και η ροή της

πληροφορίας εξαρτάται από την τεχνολογία των υπολογιστών, οι διαχειριστές συστημάτων

πληροφοριών συνειδητοποίησαν την ανάγκη προστασίας των υπολογιστικών τους συστημάτων

των δικτύων τους και των πληροφοριών από καταστροφή και κλοπή. Παρόλο που υπάρχουν

πολλοί τρόποι να επιτευχθεί αυτό, ο επικρατέστερος τρόπος είναι η χρήση firewalls.

Ένα firewall τοποθετείται σε ένα κτίριο για να αποτρέψει την διέλευση της φωτιάς μέσα από αυτό.

Η λέξη χρησιμοποιείται παρομοίως και στους υπολογιστές όπου όλες οι προσβάσεις από και σε ένα

δίκτυο ελέγχονται και διέρχονται μέσω ενός μηχανήματος, του firewall το οποίο ελέγχει και

αποφασίζει για όλη την διακίνιση πληροφοριών μεταξύ του δικτύου και του έξω κόσμου. Firewall

ονομάζεται οποισδήποτε τρόπος προστασίας ενός δικτύου από ένα άλλο δίκτυο. Ο μηχανισμός με

τον οποίο επιτυγχάνεται το παραπάνω διαφέρει από υλοποίηση σε υλοποίηση, μπορούμε όμως να

θεωρήσουμε το firewall ως ένα ζεύγος μηχανισμών: ο ένας "μπλοκάρει" και ο άλλος επιτρέπει την

διέλευση της δικτυακής πληροφορίας. Ορισμένες υλοποιήσεις firewall δίνουν μεγαλύτερη έμφαση

στον ένα μηχανισμό και ορισμένες στον άλλο. Ένα firewall μπορεί να υλοποιήσει ένα είδος

"πρεσβευτή" ενός δικτύου στο Internet. Πολλές εταιρείες χρησιμοποιούν συστήματα firewall για να

αποθηκεύουν πληροφορίες στις οποίες απαιτείται ελεύθερη πρόσβαση όπως πληροφορίες για

προϊόντα, bug-fixes κ.α.

15.2 Απο τί μπορεί να προστατέψει ένα firewall?

Ορισμένα firewalls επιτρέπουν μόνο τη διέλευση ηλεκτρονικού ταχυδρομίου, με αποτέλεσμα

να προστατεύουν το δίκτυο από οποιουδήποτε είδους "επίθεση" εκτός από επίθεση με στόχο

την υπηρεσία ηλεκτρονικού ταχυδρομίου. άλλα firewalls παρέχουν λιγότερο αυστηρά μέτρα

ασφαλείας, προστατεύοντας μόνο υπηρεσίες με γνωστά προβλήματα ασφαλείας. Γενικά τα

firewalls περιορίζουν την πρόσβαση από τον "έξω κόσμο", επιτρέπουν όμως ελεύθερη

πρόσβαση εκ των έσω πρός το υπόλοιπο δίκτυο.

15.3 Από τι δεν μπορεί να προστατέψει ένα firewall?

Τα firewalls δεν παρέχουν προστασία από επιθέσεις οι οποίες παρακάμπτουν το firewall.

Πολλές εταιρείες συνδεδεμένες με το Internet παίρνουν πολύ αυστηρά μέτρα προστασίας των

140

Page 141: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

141

ευαίσθητων δεδομένων τους από τυχόν επιθέσεις που προέρχονται από το Internet, μια

μαγνητική ταινεία όμως είναι εξίσου αποτελεσματική στην κλοπή δεδομένων. Οι

εφαρμοζόμενη πολιτική στο firewall πρέπει να αντικατοπτρίζει το επίπεδο της ασφάλειας και

στο υπόλοιπο δίκτυο. Για παράδειγμα, ένα σύστημα με πολύ σημαντικές πληροφορίες που δεν

πρέπει να διαρεύσουν σε καμία περίπτωση, δεν χρειάζεται firewall: δεν πρέπει καν να είναι

συνδεδεμένο στο δίκτυο. Τέλος τα firewalls δεν παρέχουν πολύ καλή προστασία από τους ιούς

(viruses). Υπάρχουν πάρα πολλοί τρόποι κωδικοποίησης ενός αρχείου προκειμένου να

μεταφερθεί από το δίκτυο, και τόσες πολλές αρχιτεκτονικές ιών ώστε καθίσταται πρακτικά

αδύνατη η πλήρης προστασία από αυτούς. Ώς ιός νοείται κάθε πρόγραμμα που με

οποιονδήποτε τρόπο (κυρίως από αμέλεια των χρηστών) εκτελείται στο τοπικό σύστημα με

σκοπό να προκαλέσει καταστροφές ή να προκαλέσει τη διαρροή πληροφοριών. Τέτοιου είδους

επιθέσεις είχαν πραγματοποιηθεί παλιότερα με κάποια παλιότερη έκδοση του sendmail.

15.4 Βασικές αρχές σχεδίασης ενός firewall

Αρχικά πρέπει να ληφθεί υπόψη ο τρόπος με τον οποίο πρέπει να λειτουργεί το σύστημα:

είναι σε θέση να αρνείται τη σύνδεση σε όλες τις υπηρεσίες εκτός από αυτές που είναι

απαραίτητες για τη διασύνδεση με το υπόλοιπο δίκτυο ή είναι σε θέση να παρέχει έναν απλά

πιό ελεγχόμενο τρόπο πρόσβασης; Υπάρχουν πολλές εναλλακτικές λύσεις ανάμεσα στις δύο

προηγούμενες, το ποιά θα επιλεγέι σε κάθε περίπτωση είναι περισσότερο αποτέλεσμα

πολιτικής του κάθε συστήματος παρά τεχνικό θέμα. Έπειτα πρέπει να καθοριστεί το επιθυμητό

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

το τί πρέπει να επιτρέπεται, τί πρέπει να ελέγχεται και τι πρέπει να απαγορεύεται. Τέλος

πρέπει να ληφθεί υπόψη και το οικονομικό θέμα: ένα προϊόν firewall μπορεί να κοστίσει από

0 έως 100000$ το οποίο αντιστοιχεί είτε σε έτοιμο προϊόν είτε σε ανάπτυξη εξειδικευμένου

προϊόντος για τις εκάστοτε ανάγκες του συστήματος. Από τεχνικής απόψεως υπάρχει το

δίλλημα της εγκατάστασης ενός εκτεθειμένου συστήματος εκτός του δικτύου που θα παρέχει

υπηρεσίες proxy (για telnet, ftp, news κ.λ.π) ή της εγκατάστασης ενός router που θα εργάζεται

σαν φίλτρο επιτρέποντας την επικοινωνία με ένα ή περισσότερα μηχανήματα προς το

εσωτερικό δίκτυο. Υπάρχουν πλεονεκτήματα και μειονεκτήματα και στις δύο υλοποιήσεις: η

υλοποίηση με τη χρήση συστήματος proxy παρέχει καλύτερο επίπεδο ασφαλείας με

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

υπηρεσιών εφόσον απαιτείται ανάπτυξη ενός proxy για κάθε παρεχόμενη υπηρεσία.

15.5 Proxy Servers

141

Page 142: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

142

Ένας proxy server (καμιά φορά ονομάζονται και ως application gateways ή forwarders) είναι

μια εφαρμογή που μεσολαβεί μεταξύ ενός προστατευμένου δικτύου και του Internet (ή

κάποιου άλλου δικτύου). Χρησιμοποιούνται συχνά αντί ελέγχου βασιζόμενου σε

δρομολογητές (routers) γιατί παρέχουν επιπλέον λειτουργικότητα όπως καλύτερη καταγραφή

(logging) και υποστηρίζουν user authentication (εξακρίβωση στοιχείων χρήστη). Εφόσον οι

proxies πρέπει να αντιλαμβάνονται το πρωτόκολλο που χρησιμοποιείται μπορούν

επιπροσθέτως να ενσωματώσουν ασφάλεια σε επίπεδο πρωτοκόλλου,για παράδειγμα ένας

FTP proxy μπορει να επιτρέπει τα εισερχόμενα FTP πακέτα αλλά να απαγοεύει τα

εξερχόμενα.

15.6 Παράδειγμα ρύθμισης ενός Cisco router

Το παρακάτω παράδειγμα επιδεικνύει μια πιθανή ρύθμιση ενός Cisco router που προκειται

να χρησιμοποιηθεί για το "φιλτράρισμα" των πληροφοριών.

Σημειώστε τα εξής:

1. Στους παρακάτω κανόνες οι δρομολογητές φιλτράρουν μόνο τα εξερχόμενα πακέτα

2. Οι κανόνες εκτελούνται σειριακά και ο έλεγχος σταματά όταν ικανοποιηθεί ένας από

αυτούς.

3. Η αρίθμηση των γραμμών έχει προστεθεί για μεγαλύτερη αναγνωσιμότητα.

4. Η πολιτική που εφαρμόζεται είναι:

4a Οτιδήποτε δεν επιτρέπεται ρητά,απαγορεύεται

4b Μεταφορά πληροφορίας μεταξύ του εξωτερικού συστήματος gatway και του blue net

επιτρέπεται

4γ Επιτρέπονται οι υπηρεσίες που προέρχονται από το blue net

4d Επιτρέπεται ένα εύρος ports για σύνδεση FTP πρός το blue net.

5. Το δίκτυο που εξετάζουμε είναι Class B με διεύθυνση 128.88.0.0 και χρησιμοποιεί 8 bit για

τα υποδίκτυα.

6. H σύνδεση με το Internet είναι στο "κόκκινο" υποδίκτυο 128.88.254.0 Όλα τα υπόλοιπα

υποδίκτυα θεωρούνται εμπιστοσύνης (trusted) ή αλλιώς "μπλέ" (blue) υποδίκτυα (subnets).

1. no ip source-route

2. !

3. interface Ethernet 0

142

Page 143: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

143

4. ip address 128.88.1.1 255.255.255.0

5. ip access-group 10

6. !

7. interface Ethernet 1

8. ip address 128.88.254.3 255.255.255.0

9. ip access-group 11

10. !

11. access-list 10 permit ip 128.88.254.2 0.0.0.0 128.88.0.0 0.0.255.255

12. access-list 10 deny tcp 0.0.0.0 255.255.255.255 128.88.0.0 0.0.255.255 lt 1025

13. access-list 10 deny tcp 0.0.0.0 255.255.255.255 128.88.0.0 0.0.255.255 gt 4999

14. access-list 10 permit tcp 0.0.0.0 255.255.255.255 128.88.0.0 0.0.255.255

15. !

16. access-list 11 permit ip 128.88.0.0 0.0.255.255 128.88.254.2 0.0.0.0

17. access-list 11 deny tcp 128.88.0.0 0.0.255.255 0.0.0.0 255.255.255.255 eq 25

18. access-list 11 permit tcp 128.88.0.0 0.0.255.255 0.0.0.0 255.255.255.255

Επεξήγηση των γραμμών :

1. Παρόλο που αυτός δέν είναι κανόνας φιλτραρίσματος, είναι καλό να

συμπεριληφθεί

5. Το Ethernet 0 βρίσκεται στο κόκκινο δίκτυο. Η λίστα πρόσβασης 10 θα

εφαρμοστεί στα εξερχόμενα από αυτό το interface. Μπορείτε να θεωρήσετε ότι η έξοδος από το

κόκκινο δίκτυο είναι η είσοδος του μπλέ δικτύου.

11 Επίτρεψη όλης της κυκλοφορίας πληροφοριών από το σύστημα gateway στο μπλέ δίκτυο.

12-14 Επίτρεψη των συνδέσεων που προέρχονται από το κόκκινο δίκτυο στις θύρες 1024 μέχρι

5000.

16 Επίτρεψη όλων των πακέτων από το μπλέ δίκτυο πρός το σύστημα gateway.

17 Μπλοκάρισμα πακέτων SMTP (mail) πρός το κόκκινο δίκτυο.

18 Επίτρεψη όλων των άλλων TCP πακέτων προς το κόκκινο δίκτυο.

143

Page 144: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

144

ΚΕΦΑΛΑΙΟ 16. JumpStart

16.1 Εισαγωγή

Υπάρχουν τρείς μέθοδοι εγκατάστασης του λειτουργικού συστήματος Solaris:

1. JumpStart™ - ο πιο εύκολος τρόπος εγκατάστασης του Solaris. To JumpStart εγκαθιστά

αυτόματα ένα σύστημα σαν standalone το λογισμικό όμως αυτό δεν διατίθεται σε όλα τα

συστήματα. Τα συστήματα για τα οποία διατίθεται είναι: SPARCclassic™, SPARCstation™

IPX, SPARCstation LX, SPARCstation 5,10,10 SX,20, SPARCstation™ Voyager™.

2. Interactive - σχετικά εύκολος τρόπος όπου το πρόγραμμα εγκατάστασης καθοδηγεί βήμα-

βήμα το διαχειριστή στις διαδικασίες αναγνώρισης του συστήματος και εγκατάστασης του

λογισμικού Solaris™.

3. Custom JumpStart - για προχωρημένους χρήστες με εμπειρία στον προγραμματισμό σε

φλοιό Bourne. Κατασκευάζοντας προφίλ και κανόνες είναι δυνατό το Solaris να

εγκατασταθεί αυτόματα και με πολλούς τρόπους σε διαφορετικά συστήματα. Αυτού του

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

είναι η πιό αποδοτική στην περίπτωση που το λειτουργικό πρέπει να στηθεί σε πολλά

μηχανήματα όπως σε μια μεγάλη εταιρεία για παράδειγμα. Η αυτοματοποίηση μπορεί να

προχωρήσει σε τέτοιο βαθμό ωστε το λειτουργικό να αυτο-εγκαθίσταται πλήρως με την

εκκίνισή του συστήματος χωρίς την παραμικρή παρεμβολή από μεριάς του χρήστη!

Στο κεφάλαιο αυτό θα συζητηθεί το Custom JumpStart εφόσον στο απλό Jumpstart δεν

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

εγκατάστασης.

16.2 Προετοιμασία εγκατάστασης του Solaris σε δίκτυο.

Ένας τυπικός τρόπος εγκατάστασης του λειτουργικού είναι από το CD που περιέχει το

λειτουργικό. Ένας τρόπος εγκατάστασης του λειτουργικού σε σύστμα που δεν διαθέτει cdrom

είναι η εγκατάσταση μέσω δικτύου (network instalation). Για να γίνει το τελευταίο χρειάζονται:

• Install Server - ένα σύστημα που διαθέτει CD-ROM και είναι συνδεδεμένο στο δίκτυο και

θα παρέχει υπηρεσίες εγκατάστασης για άλλα συστήματα.

• Name Server - Ένα σύστημα που διαχειρίζεται μια κατανεμημένη βάση δεδομένων (όπως

οι NIS & NIS+) που θα περιέχει πληροφορίες για χρήστες και άλλα συστήματα στο δίκτυο.

• Boot Server - To σύστημα από οποίο θα εκκινούνται τα υπόλοιπα προκειμένου να

εγκατασταθεί το λειτουργικό. Τυπικά ο Boot Server είναι το ίδιο σύστημα με τον Install

144

Page 145: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

145

Server εκτός και άν πρέπει ο Βoot Server να εξυπηρετήσει κάποιο σύστημα σε διαφορετικό

υποδίκτυο, οπότε πρέπει να εγκατασταθεί κάποιος Boot Server σε αυτό το υποδίκτυο.

Για συστήματα που θα φορτώνουν κάθε φορά το λειτουργικό από άλλο σύστημα (Dataless

Clients) χρειάζεται επίσης και ένας

• OS server - το σύστημα που θα παρέχει το λειτουργικό στους Dataless Clients.

Δημιουργία ενός Install Server

Ο Install Server μπορεί να εγκαταστήσει τα παρακάτω είδη συστημάτων:

• Os servers

• Standalone συστήματα

• Dataless Clients

H δημιουργία περιλαμβάνει τα παρακάτω αρχικά βήματα:

1. Εγκατάσταση του hardware, συμπεριλαμβανομένου και ενός οδηγού CD-ROM

2. Σύνδεση του συστήματος στο δίκτυο

3. Εγκατάσταση του λογισμικού Solaris επιλέγοντας NIS ή NIS+ όταν ζητηθεί η επιλογή

name service.

4. Εάν το σύστημα θα είναι και name server δείτε τα προηγούμενα κεφάλαια για NIS+ και

DNS καθώς και τα Reference Manuals της Sun για εγκατάσταση των παραπάνω

υπηρεσιών.

5. Τοποθετήστε το CD-ROM με το Solaris στο drive και αναρτήστετο (εάν δεν τρέχει ο vold).

6. Εάν θέλετε την αντιγραφή του CD στο δίσκο για πιο γρήγορη εγκατάσταση δώστε την

εντολή setup_install_server ακολουθούμενη από τον κατάλογο αντιγραφής

(install_dir_path). Π.χ. ./setup_install_server /export/install . Έπειτα αλλάξτε τον τρέχονται

κατάλογο με cd install_dir_path και Return.

7. Εάν θέλετε να δημιουργήσετε Boot Server για άλλο υποδίκτυο τότε εκτελέστε τα βήματα

1-5 στον Boot Server (χρησιμοποιώντας NFS mount για το CD-ROM εάν χρειάζεται) και

πληκτολογήστε την εντολή ./setup_install_server -b <boot_dir_path> .

8. Στον Install Server κάντε log-in σάν χρήστης που ανήκει στο group 14 (administration

group).

9. Ξεκινήστε το Solistice AdminSuite (για Solaris 2.5) με την εντολή: /usr/bin/solistice & Για

τις υπόλοιπες εκδόσεις του Solaris δείτε πληροφορίες σχετικά με την εντολή

add_install_client

10. Επιλέξτε το εικονίδιο host manager

145

Page 146: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

146

11.Επιλέξτε naming service και δώστε τις κατάλληλες πληροφορίες στο σύστημα.

12.Στον host manager επιλέξτε AddHost και δώστε τον κατάλληλο host type καθώς και τις

υπόλοιπες πληροφορίες που ζητούνται

13.Επιλέξτε OK και μετά Save.

Το Custom JumpStart Installation

Τα βήματα που απαιτούνται για τη εκπόνηση ενός Custom JumpStart Installation είναι:

• Δημιουργία καταλόγου JumpStart σε δισκέττα ή σε ένα Server.

• Παροχή άδειας πρόσβασης στον server από τους clients.

• Δημιουργία profiles

• Δημιουργία αρχείου κανόνων - rules

• Χρήση του check για τον έλεγχο του αρχείου κανόνων.

Πώς δουλεύει το JumpStart:

1. Μετά την εκκίνηση του συστήματος το σύστημα ψάχνει το drive και έπειτα το δίκτυο για

το αρχείο rules.ok με τους κανόνες για το συγκεκριμένο σύστημα.

2. Οι κανόνες καθορίζουν ένα profile για το κάθε σύστημα.

3. Εάν δεν βρεθεί το κατάλληλο αρχείο τότε εκτελείται το Interactive Installation.

H δημιουργία JumpStart καταλόγου σε μια δισκέττα πρέπει να χρησιμοποιείται μόνο εάν το

σύστημα:

• Διαθέτει οδηγό δισκέτας

• Διαθέτει τοπικό οδηγό CD-Rom

• Δεν είναι συνδεδεμένο στο δίκτυο

Το παραπάνω δεν θα μας απασχολήσει και θα ασχοληθούμε κατευθείαν με τη δημιουργία

JumpStart καταλόγου σε κάποιον Server. Πρέπει να γίνουν οι εξής ενέργειες:

1. Κάντε log-in στον server στον καττάλογο όπου θα τοποτετηθεί το JumpStart directory.

(π.χ. cd /)

2. Δημιουργήστε τον κατάλογο (π.χ. mkdir /jumpstart)

3. Στο αρχείο /etc/dfs/dfstab προσθέστε την ακόλουθη γραμμή (για το παραπάνω

παράδειγμα): share -F nfs -o,anon=0 /jumpstart

4. Δώστε unshareall <return>

5. Δώστε shareall <return>

6. Αναρτήστε εάν χρειάζεται το Solaris Cdrom

146

Page 147: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

147

7. Αντιγράψτε τα περιεχόμενα του καταλόγου auto_install_sample στο jumpstart_dir_path

(π.χ. cp -r auto_install_sample/* /jumpstart)

8. Αλλάξτε εάν χρειάζεται το αρχείο /etc/bootparams ωστε να επιτρέπεται η πρόσβαση στο

jumpstart directory από οποιοδήποτε σύστημα. Για το παράδειγμά μας προσθέστε την

ακόλουθη γραμμή στο /etc/bootparams: * install_config=server:jumpstart_dir_path και

ενημερώστε τα NIS ή NIS+ databases: cd /var/yp;make ή /usr/lib/nis/nispopulate -F

-p /etc bootparams

Τώρα πρέπει να δημιουργηθούν τα profiles και τα rule files. Τα profiles είναι αρχεία κειμένου

που παρέχουν πληροφορίες για την εγκατάσταση του λειτουργικού όπως το είδος του

installation, το είδος της κατάτμησης του δίσκου κ.α. Tα rule files είναι αρχεία από τα οποία

προκύπτουν τα rules.ok αρχεία. Είναι αρχεία - πίνακες που αντιστοιχίζουν αρχιτεκτονικές και

συστήματα με profiles. Για παράδειγμα το :

karch sun4c - basic_prof -

αντιστοιχίζει ένα σύστημα αρχιτεκτονικής sun4c με το profile "basic_prof".

1. Δημιουργήστε ένα καινούριο profile ή αλλάξτε ένα από τα υπάρχοντα, χρησιμοποιώντας

τον παρακάτω πίνακα στο SPARC®:Installing Solaris Software , Solaris 2.5 manual, σελίδα 72.

που περιέχει τις κατάλληλες λέξεις-κλειδιά που αναγνωρίζει το JumpStart. Σημειώστε ότι

μπορείτε να προσθέσετε σχόλια με τον χαρακτήρα "#", οτι οι κενές γραμμές αγνοούνται,

ότι οι λέξεις-κλειδιά είναι case-sensitive και τέλος οτι τα profiles πρέπει να ανήκουν στον

root και νά έχουν άδειες 644

2. Δημιουργήστε τα rules αρχεία (με όνομα "rules") ή αλλάξτε το υπάρχον δείγμα. Ο πίνακας

της σελίδας 88 στο SPARC®:Installing Solaris Software , Solaris 2.5 manual, περιέχει τις

αναγνωρίσιμες λέξεις - κλειδιά. Προσθέστε έναν κανόνα για κάθε ομάδα συστημάτων

όπου θα εγκατασταθεί το Solaris, και χρησιμοποιείστε το πρόγραμμα "check" για να

ελέγξετε την εγκυρότητα του αρχείου κανόνων ή και ενός μεμονομένου κανόνα: ./check

[-p path] -r [filename]. Εάν δεν βρεθούν λάθη επιστρέφεται το μήνυμα "The auto-install

configuration is ok"

3. Εκκινήστε τα συστήματα στα οποία πρέπει να εγκατασταθεί λειτουργικό και στο PROM

monitor δώστε την εντολή "boot net - install" (με κενά μεταξύ κάθε λέξης)

4. Αναμείνατε μέχρι τον τερματισμό της εγκατάστασης, δίνοντας πληροφορίες για το

σύστημα εάν τυχόν ζητηθούν.

147

Page 148: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

148

ΚΕΦΑΛΑΙΟ 17. Optimisations - βελτιστοποίηση ταχύτητας

17.1 Γενικά

Η κακή απόδοση ενός συστήματος οφείλεται στην υπερβολική εκμετάλλευση κάποιου από

τους πόρους του. Όταν οι πόροι (resources) δεν επαρκούν για να καλύψουν τη ζήτηση, οι

διεργασίες είναι αναγκασμένες να περιμένουν με αποτέλεσμα ένα πιο αργό σύστημα. Όπως ο

λαιμός ενός μπουκαλιού εμποδίζει τη γρήγορη ροή του υγρού προς τα έξω, έτσι και οι πόροι

που προκαλούν τις καθυστερήσεις σε ένα σύστημα ονομάζονται bottlenecks.

17.2 Ο νόμος του Amdahl

Ας υποθέσουμε ότι ένα πρόγραμμα θέλει 10 ώρες για να ολοκληρωθεί. Ας υποθέσουμε ακόμα

ότι στις 2 από τις 10 αυτές ώρες το πρόγραμμα εκτελέι αριθμητικούς υπολογισμούς. Εάν

αλλάζαμε την μονάδα αριθμητικών υπολογισμών με μια άλλη απείρως πιο γρήγορη, τότε το

πρόγραμμα θα ήθελε 8 ώρες να ολοκληρωθεί, δηλαδή έχουμε μονο 20% βελτίωση. Εάν όμως

στις 9 από τις 10 ώρες το πρόγραμμα εκτελεί αριθμητικούς υπολογισμούς, τότε με την

παραπάνω αλλαγή θα ολοκληρωνόταν σε 1 ώρα, δηλαδη έχουμε 1000% βελτίωση!

Όπως δείχνει το παράδειγμα, η μέγιστη επιτάχυνση που μπορούμε να πετύχουμε

βελτιώνοντας μόνο ένα τμήμα προγράμματος ή του συστήματος εξαρτάται απο το ποσοστό

του χρόνου που το σύστημα σπαταλά στο τμήμα αυτό. Για παράδειγμα εάν ένα πρόγραμμα

χρησιμοποιεί το 10% των πόρων της CPU, τότε αλλάζοντας τη CPU με μια άλλη διπλάσιας

ταχύτητας έχουμε μόνο 5% βελτίωση του χρόνου εκτέλεσης του προγράμματος.

17.3 Το Bubble Effect

Βελτιώνοντας την απόδοση ενός συστήματος, δίνεται η εντύπωση ότι μόλις λυθεί ένα

πρόβλημα, ένα άλλο εμφανίζεται στη θέση του. Η διαδικασία είναι παρόμοια με το σπρώξιμο

φυσαλίδων (bubbles) πάνω σε μια επιφάνεια: οι φυσαλίδες δεν εξαφανίζονται, απλά

αλλάζουν θέση.

Ας υποθέσουμε ότι ένα πρόγραμμα έχει δυο ρουτίνες από τις οποίες η πρώτη καταλαμβάνει

το 90% του χρόνου εκτλεσης, η δεύτερη το 8% και οι υπόλοιπες από 2%. Εάν βρεθεί τρόπος να

εξαληφθεί ο χρόνος εκτέλεσης της πρώτης ρουτίνας, τότε η δεύτερη θα καταλαμβάνει το 80%

του συνολικού χρόνου εκτέλεσης!

17.4 Χρόνος απόκρισης εναντίον συνολικής απόδοσης (throughput)

148

Page 149: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

149

Παρόλο που οι δύο όροι φαίνονται ταυτόσημοι, υπάρχει σημαντική διαφορά στη σημασία

τους. Εάν το σύστημα έχει 100 χρήστες, αυξάνοντας το throughput, σημαίνει συνολικά οι 100

χρήστες θα κάνουν περισσότερη δουλειά, και όχι αναγκαστικά οτι ο καθένας από αυτούς θα

έχει γρηγορότερη απόκριση (response time) από το σύστημα. Πώς συμβαίνει αυτό; Έστω ότι

έχουμε δύο διεργασίες από τις οποίες η μία χρησιμοποιεί πολύ τη CPU και η άλλη τους

δίσκους. Εάν όταν ξεκινήσει η διεργασία που χρησιμοποιεί δίσκους ξεκινήσει ταυτόχρονα και

η άλλη και εκτελείτε τις χρονικές στιγμές που η CPU περιμένει τους δίσκους να εργαστούν το

συνολικό troughput αυξάνει γιατί το σύστημα τελειώνει δύο δουλειές με μιας. Προκειμένου

να αυξηθεί ο χρόνος απόκρισης θα έπρεπε να επιταχυνθεί το σύστημα των δίσκων ώστε να

τελειώσει πιό γρήγορα η πρώτη διεργασία.

Αν και είναι ευκολότερο να αυξηθεί η συνολική απόδοση, οι χρήστες προτιμούν την αύξηση

του χρόνου απόκρισης εφόσον δεν ενδιαφέρονται για τη παραγωγικότητα του συστήματος.

Για να επιτευχθεί αυτό πρέπει να αναιρεθούν τα bottlenecks που εισάγονται στις εφαρμογές

των χρηστών.

17.5 Ο ψυχολογικός παράγοντας

Εξετάζοντας τον χρόνο απόκρισης ενός συστήματος πρέπει να πάρουμε υπόψη μας δύο

μεγέθη: το μέσο χρόνο απόκρισης και τις αποκλίσεις από αυτόν. Διαπιστώνουμε ότι το

δεύτερο μέγεθος μπορεί να είναι πιό σημαντικό από το πρώτο: αυτό που δυσαρεστεί τους

χρήστες περισσότερο είναι οι διακυμάνσεις στο χρόνο απόκρισης. Είναι προτιμότερο για ένα

χρήστη ένα πρόγραμμα να κάνει πάντα 5 δευτερόλεπτα να εκτελεστεί παρά να κανει συνήθως

2 και μερικές φορές 10. Κάτι ακόμα που πρέπει να ληφθεί υπόψη είναι οτι οι μέσοι χρήστες

δεν μπορούν αντιληφθούν βελτιώσεις στο χρόνο απόκρισης μικρότερο του 20%.

17.6 Η εντολή sar

Το πρόγραμμα sar μπορεί παρακολουθεί ένα σύστημα και επιστρέφει τη χρήσιμοποίηση των

πόρων του. Οι συνηθέστερες παράμετροί του είναι:

Παράμετρος Περιγραφή

u Χρήση CPU

b Στατιστικά Buffer cache

c System calls

d Disk Input/Output

g Pageout information

149

Page 150: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

150

p Pagein information

r Ελεύθερη μνήμη και swap

q CPU run queue

v Kernel table size & χρησιμοποίηση

w Στατιστικά swap

y Terminal I/O

n Name caching (μόνο στο SCO UNIX)

A Όλα τα στατιστικά

17.7 Βελτιστοποίηση του NFS

Πολλά συστήματα παρέχουν την εντολή nfsstat η οποία μπορεί να εμφανίσει αρκετά

στατιστικά χρήσης του συστήματος. Με την παράμετρο -s δίνει πληροφορίες για τις

διεργασίες του NFS server ενώ με την επιλογή -c για τον NFS client. Για παράδειγμα:

# nfsstat -c

Παρατηρήστε πρώτα τον αριθμώ των εγγραφών. Εάν ξεπερνάει το 10% τότε ένας dedicated

NFS server ή μία cache board κατά πάσα πιθανότητα θα βελτίωνε τις δικτυακές επιδόσεις.

Εάν περισσόερο από 3% των κλήσεων κάνει "time out" τότε υπάρχει κάποιο πρόβλημα με το

δίκτυο ή με τον NFS server: εάν το badxid είναι κοντά στο 0 με τα timeouts περισσότερα από

3%, τότε τα πακέτα χάνονται στο δίκτυο. Μπορείτε πιθανώς να διορθώσετε το πρόβλημα

μειώνοντας τις παραμέτρους rsize και wsize στο mount.

Σε ένα φορτωμένο NFS server τα UDP sockets μπορούν να υπερχειλίσουν εάν οι αιτήσεις

συμπέσουν με όλους τους πόρους των nfsd διεργασιών εξαντλημένους. Με την εντολή netstat

-s μπορούμε να διαπιστώσουμε τον αριθμό των υπερχειλίσεων (overflows). Από αυτόν τον

αριθμό μπορούμε να κάνουμε μια εκτίμιση για το πόσες διεργασίες nfsd πρέπει να τρέχουν

ταυτόχρονα: προσθέτουμε τόσες ώστε οι υπερχειλίσεις να μηδενιστούν, όχι όμως πολύ

περισσότερες από 10 διεργασίες.

150

Page 151: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

151

ΚΕΦΑΛΑΙΟ 18. ΤΟ ΣΥΣΤΗΜΑ ΝETWORK INFORMATION SERVICE PLUS

(NIS+)

18.1 Εισαγωγή

Ενα σημαντικό πρόβλημα στην διαχείριση ενός κατανεμημένου υπολογιστικού

συστήματος είναι η διατήρηση πολλαπλών αντίγραφων αρχείων όπως των αρχείων των

κωδικών και μηχανημάτων (/etc/passwd, /etc/hosts..) κ.ά. σε κάθε σταθμό εργασίας. Κάθε

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

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

μεγαλυτέρα ( > 10 υπολογιστές) μπορεί να γίνει πολύ χρονοβόρα

18.2 Γενικά

Το NIS αποθηκεύει πληροφορίες τις οποίες χρησιμοποιούν οι χρήστες, τα συστήματα και οι

εφαρμογές προκειμένου να επικοινωνίσουν σε ένα δίκτυο. Χωρίς το NIS, κάθε σύστημα θα

έπρεπε να διατηρεί το δικό του αντίγραφο των παραπάνω πληροφοριών. Το NIS+

Σχεδιάστηκε με σκοπό να αντικαταστήσει το NIS, προκειμένου να διευθετήσει προβλήματα τα

οποία αδυνατούσε να διευθετήσει το NIS. Πρέπει να διευκρινιστεί ότι δεν υπάρχει σχέση

μεταξύ NIS και NIS+: οι εντολές και η γενική δομή των δύο υπηρεσιών διαφέρουν ριζικά.

Επιπροσθέτως, διαφέρει και η σύνταξη ορισμένων εντολών. Το NIS+ είναι πιό ασφαλές

παρέχοντας μια πρόσθετη μέθοδο εξακρίβωσης χρηστών. Οι χρήστες διατηρούν το γνωστό

password διαθέτουν όμως και ένα "SECURE RPC PASSWORD" ή αλλιώς "NETWORK

PASSWORD". Αυτό το τελευταίο είναι απαραίτητο προκειμένου να υπάρξει πρόσβαση στο

NIS+ και είναι αυτό που παρέχει όλη αυτή την πρόσθετη ασφάλεια. Συνήθως τα login

PASSWORD και το network PASSWORD είναι τα ίδια με αποτέλεσμα ο χρήστης καθώς

εισάγεται στό σύστημα να διαθέτει πρόσβαση σε όλες τις υπηρεσίες του NIS+. Τα

προγράμματα και οι εφαρμογές που σχετίζονται με το NIS+ είναι πάρα πολλά, και δίνεται

ένας συνοπτικός κατάλογος από αυτά στα επόμενα.

To NIS+ έχοντας ιεραρχική δομή (σε αντίθεση με το NIS) ευνοεί ένα σχήμα αποκεντρωμένης

διαχείρησης. Αυτό επιτρέπεει στο NIS+ να χρησιμοποιείται τόσο σε μικρά όσο και σε πολύ

μεγάλα δίκτυα. Επιτρέπει επίσης την προσαρμογή του καθώς τα δίκτυα επεκτείνονται.

Παρόλο που το NIS+ χρησιμοποιεί μια ιεραρχική δομή παρόμοια με αυτή του DNS, το NIS+

είναι πολύ πιό ευέλικτο από το DNS: το τελευταίο παρέχει αντιστοίχηση διευθύνσεων και

ονομάτων των συστημάτων, το NIS+ όμως είναι μια συλλογή πληροφοριών για τα συστήματα

, τους χρήστες και τις δικτυακές υπηρεσίες σε ένα δίκτυο. Το μοντέλο που χρησιμοποιείται

151

Page 152: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

152

είναι αυτό του client-server: υπάρχει ένας master server, ο κυρίως εξυπηρετητής, και

ορισμένοι βοηθητικοί εξυπηρετητές που ονομάζονται replicas (slave servers). Καί ο master

server αλλά και οι replica servers διαθέτουν αντίγραφα των πινάκων NIS+, o master server

τα πρωτότυπα και οι replica servers τα αντίγραφα.

Στο NIS η ανανέωση των πληροφοριών δεν γίνεται αυτόματα, με αποτέλεσμα και η

παραμικρή αλλαγή σε ορισμένες περιπτώσεις να κάνει μέχρι και μια ολόκληρη ημέρα να

διαδοθεί σε όλους τους NIS clients ιδίως σε μεγάλα δίκτυα. Το NIS+ παρέχει incremental

update (προσθετική ανανέωση) της πληροφορίας. Οι αλλαγές αρκεί να γίνουν στον master

server και δέν χρειάζεται η επαναδημιουργία χαρτών όπως στο NIS αλλά οι αλλαγές γίνονται

διαθέσιμες σε ολόκληρο το δίκτυο σε πολύ μικρό χρονικό διάστημα.

18.3 Περιγραφή των βασικών αντικειμένων του NIS+

DIRECTORY OBJECTS: Παρόμοια με το σύστημα αρχείων, ένα directory object μπορεί να

περιέχει ένα ή περισσότερα objects (αντικείμενα) όπως table objects (πίνακες αντικειμένων),

group objects (αντικείμενα ομάδων) , entry objects ή link objects. Tα Directory objects

υλοποιούν μιά δενδρική δομή (βλ. κεφάλαιο περι filesystem). Χρησιμοποιούνται για τον

διαχωρισμό της δικτυακής πληροφορίας (namespace) σε διάφορα τμήματα. Έτσι κάθε κύριος

κατάλογος (main directory) θα περιέχει τα αντικείμενα org_dir και groups_dir του εκάστοτε

domain

Tα αντικείμενα org_dir περιέχουν αντικείμενα πινάκων (table objects) για το ίδιο domain. Οι

κατάλογοι αντικείμενα groups_dir περιέχουν αντικείμενα σχετικά με ομάδες διαχείρησης του

NIS+ (administrative group objects).

18.4 Η δομή των πινάκων στο NIS+

Στο NIS+ οι πληροφορίες αποθήκεύονται σε πίνακες οι οποίοι άν και περιέχουν διαφορετικά

είδη πληροφοριών έχουν παρόμοια δομή: αποτελούνται από γραμμές και στήλες. Οι γραμμές

ονομάζονται entries (καταχωρήσεις) ή entry objects (καταχωρημένα αντικείμενα). Ένας client

μπορεί να αναζητήσει πληροφορίες όχι απλά γνωρίζοντας κάποιο κλειδί αλλά με βάση

κάποια στήλη. Για παράδειγμα για να βρεί την διεύθυνση δικτύου ενός συστήματος που

ονομάζεται "Α" ένας client θα μπορούσε να αναζητήσει την πληροφορία στην στήλη με τα

ονόματα συστημάτων μέχρι να βρεί το όνομα "Α" και τότε κινούμενος οριζόντια στην ίδια

γραμμή "entry" θα διάβαζε τη διεύθυνση από τη στήλη με τις διευθύνσεις

K

L

152

Page 153: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

153

129.44.1.2 A

18.5 Ασφάλεια στο NIS+

Στο NIS+ δίνεται η δυνατότητα επιλογής του επιπέδου ασφαλείας έτσι ώστε να

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

τροποποίησή τους. Η ασφάλεια παρέχεται με δύο τρόπους: το authentication και το

autorization (εξακρίβωση στοιχείων χρήστη και επίτρεψη πρόσβασης με βάση τα δικαιώματα

χρήσης αντίστοιχα). NIS+ principal είναι η οντότητα που αποστέλλει αιτήσεις στο NIS+ από

έναν client. Αυτή η οντότητα μπορεί να είναι ένας χρήστης ή ο υπερχρήστης. Στην πρώτη

περίπτωση η αίτηση προέρχεται από τον χρήστη-πελάτη (user client) ενώ στη δεύτερη από το

σύστημα-πελάτη (client workstation). Τα principals καθορίζονται από τα διαπιστευτήριά τους

(credentials) τα οποία μπορούν να είναι LOCAL είτε DES. To LOCAL credential είναι απλά

το UID του συστήματος (0). Το DES credential αποτελείται από το "secure RPC netname" και

από ένα πεδίο επαλήθευσης (verification field). To secure RPC netname είναι αυτό που

απαιτείται για την αναγνώριση του NIS+principal. Κάθε secure RPC αρχίζει με το πρόθεμα

"unix.". Εάν πρόκειται περι client user το δεύτερο πεδίο στο netname είναι το UID του χρήστη.

Εάν πρόκειται για σύστημα, το δεύτερο πεδίο είναι το όνομα του συστήματος. Το τελευταίο

πεδίο είναι το home domain του principal. Όταν ένας χρήστης εισάγεται σε ένα σύστημα αιτεί

από την υπηρεσία NIS+ τα προσωπικά του credentials. Tα αντικείμενα NIS+ προσδιορίζουν

δικαιώματα πρόσβασης με τον ίδιο τρόπο που καθορίζονται δικαιώματα χρήσης για το

σύστημα αρχείων. Τα δικαιώματα πρόσβασης καθορίζουν τη φύση των λειτουργιών που

επιτρέπεται να εκτελεστούν σε ένα αντικείμενο. Τέτοιες λειτουργίες είναι η ανάγνωση, η

δημιουργία, η τροποποίηση και η διαγραφή. Σημειώστε ότι ένα αντικείμενο δεν επιτρέπει την

πρόσβαση σε ένα συγκεκριμένο principal αλλά σε τέσσερεις κλάσεις principal:

owner,group,world και nobody τα οποία έχουν αντίστοιχες σημασίες με τις άδειες

πρόσβασης στο σύστημα αρχείων.

Παράδειγμα DIRECTORY OBJECTS:

Sun.Com.

org_dir.Sun.Com.

groups_dir.Sun.Com.

153

Page 154: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

154

TABLE OBJECTS: Παρόμοια με τους χάρτες NIS. Περιέχουν μια πληθώρα δικτυακών

πληροφοριών. Οι πινακες (tables) μπορούν να περιέχουν κανένα ή περισσότερα ENTRY

OBJECTS. Υπάρχουν συνολικά 16 προκαθορισμένα TABLE OBJECTS. Η διαχείρηση των

πινάκων γίνεται με την εντολή nistbladm ή nisaddent. Tα αντικείμενα entry συνιστούν μια

σειρά στους πίνακες και κάθε σειρά συνιστά μια εγγραφή (record).

Παράδειγμα TABLE OBJECTS

Passwd.org_dir.Sun.Com.

Hosts.org_dir.Sun.Com.

Οι 16 προκαθόρισμένοι πίνακες είναι:

Hosts

Bootparams

Password

Cred

Group

Netgroups

Mail Aliases

Timezone

Networks

Netmasks

Ethers

Services

Protocols

RPC

Auto_Home

Παράδειγμα TABLE OBJECTS:

[name=user1],passwd.org_dir.Sun.Com.

GROUP OBJECTS: Αυτά διαχειρίζονται τα δικαιώματα ελεγχόμενης αλλαγής

ονοματολογίας σε επίπεδο ομάδας. Η διαχείρισή τους γίνεται με την εντολή nisgrpadm.

Παράδειγμα GROUP OBJECTS:

154

Page 155: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

155

admin.groups_dir.Sun.Com.

LINK OBJECTS: Αυτά αποτελούν δείκτες σε άλλα αντικείμενα. Είναι παρόμοια με τα

symbolic links. Τυπικά δείχνουν σε πίνακες ή σε object entrys. Η διαχείρησή τους γίνεται με

την εντολή nisln

18.6 Εγκατάσταση ενός NIS+ Root Master Server

Σάν superuser χρησιμοποιήεστε το script "nisserver" που είναι αρκετά εύχρηστο:

root-server# nisserver -v -r -d domain_name

(όπου domain_name το NIS+ domain_name)

Έπειτα θα χρειαστεί να κατασκευάσετε (populate) τους πίνακες του NIS+. Είναι προτιμότερο

να κατασκευάσετε ένα καινούριο κατάλογο όπου θα έχετε τα απαραίτητα αρχεία. Για

παράδειγμα κατασκευάστε τον κατάλογο /var/tmp/nisfiles και αντιγράψτε τα αρχεία που

θέλετε εκεί. Συνήθως τα αρχεία που θέλετε να διαχειρίζεται η βάση δεδομένων NIS+ είναι:

aliases

auto_home

auto_master

bootparams

cred

group

hosts

netgroups

netmasks

networks

passwd

protocols

rpc

services

timezone

Για να ενημερώσετε τους πίνακες εκτελέστε τα εξής:

155

Page 156: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

156

root-master# cd /var/tmp/nisfiles

root-master# nispopulate -v -F

Σημειώστε ότι το password που δημιουργήθηκε είναι "nisplus" και καλό είναι να τόν

αλλάξετε για λόγους ασφαλείας.

Τώρα πρέπει να επανεκκινήσετε το σύστημα. Μπορείτε να δοκιμάσετε την επιτυχία της

εγκατάστασης με ορισμένες συνηθισμένες εντολές του NIS+ :

root-master% nisls

root-master% niscat passwd.org_dir

18.7 Εγκατάσταση ενός NIS+ Client

Σάν υπερχρήστες εκτελέστε την εντολή nisclient. Mην ανησυχείτε εάν το σύστημα αναφέρει

πώς "the credentials already exist for your client_machine"

client# nisclient -v -i -h master_machine -a master_ip -d domain_name

Όπου master_machine το όνομα τού NIS+ master και master_ip η IP διεύθυνσή του.

18.8 Εγκατάσταση ενός NIS+ Replica

Στον replica server εκτελέστε ώς root τον δαίμονα του NIS+ :

root-replica# rpc.nisd

τώρα μπορείτε να ενημερώσετε τον NIS Master :

root-master#nisserver -v -R -d domain_name -h replica_machine

και ενημερώστε τους πίνακές του εκτελώνας από τον Master τις εντολές:

root-master# nisping domain_name.

root-master# nisping org_dir.domain_name.

root-master# nisping groups_dir.domain_name.

156

Page 157: ΣΕΜΙΝΑΡΙΟ UNIX Solarisnicolast/courses/lectures/Unix-Solaris.pdfσημειώσεις καλύπτουν την ύλη των 18 πρώτων ωρών του σεμιναρίου

157

Η εγκατάσταση πρέπει να είναι επιτυχής! Εάν θέλετε να προσθέσετε επιπλέον χρήστες στην

ομάδα Admin αυτό γίνεται εύκολα με την εντολή :

# nisgrpadm -a admin.domain_name. username

Τα NIS+ credentials διαχειρίζονται με την εντολή nisaddcred.

Προσέξτε την ονομασία των principals και των credentials. Για παράδειγμα για το χρήστη

jack στο δίκτυο example.com ισχύουν τα παρακάτω:

principal-name: jack.example.com.

rpc-netname: [email protected]

όπου 555 το UID του jack.

Για τον root στο σύστημα example1 του ίδιου δικτύου ισχύουν:

principal-name: example1.example.com.

rpc-netname: [email protected]

ΠΡΟΣΟΧΗ! Προσέξτε τις τελείες στα παραπάνω παραδείγματα, δέν είναι τυχαίες.

157