UNIX: Πέμπτο Μάθημα

5.1 Ασφάλεια Συστήματος Αρχείων (Δικαιώματα Πρόσβασης)

Με τρέχοντα κατάλογο τον unixstuff, πληκτρολογήστε:

% ls -l (l for long listing!)

Θα παρατηρήσετε ότι βλέπετε τώρα πολλές περισσότερες λεπτομέρειες σχετικά με τα περιεχόμενα του καταλόγου σας. Θα μοιάζουν με το παράδειγμα που βλέπετε παρακάτω:

File and directory access rights

Κάθε αρχείο (και κατάλογος) έχει κάποια δικαιώματα πρόσβασης που του αναλογούν και τα οποία μπορείτε να δείτε γράφοντας ls -l. Επίσης, η εντολή ls -lg δίνει πρόσθετες πληροφορίες, όπως για παράδειγμα το όνομα της ομάδας στην οποία ανήκει το αρχείο (στο παράδειγμα μας, beng95):

-rwxrw-r-- 1 ee51ab beng95 2450 Sept29 11:52 file1

Στην πιο αριστερή στήλη, υπάρχει μια σειρά από 10 σύμβολα στα οποία εμφανίζονται τα γράμματα d, r, w, x, - και περιστασιακά το s ή το S. Αν υπάρχει το d, θα είναι εντελώς αριστερά και συμβολίζει ότι το όνομα που βλέπουμε είναι στην πραγματικότητα κατάλογος. Αν είναι αρχείο, στη θέση του d θα υπάρχει μια παύλα (-).

Τα 9 σύμβολα που απομένουν, δείχνουν τις άδειες ή δικαιώματα πρόσβασης και ομαδοποιούνται σε τρεις ομάδες με τρία σύμβολα η κάθε μία

Τα σύμβολα r, w, κ.λ.π. έχουν ελαφρά διαφορετικό νόημα ανάλογα με το αν αναφέρονται σε ένα απλό αρχείο ή σε ένα κατάλογο.

Δικαιώματα Πρόσβασης σε Αρχεία

Δικαιώματα Πρόσβασης σε Κατάλογους

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

Μερικά Παραδείγματα

-rwxrwxrwx Ένα αρχείο το οποίο μπορεί καθένας να διαβάσει, να αλλάξει και να διαγράψει.
-rw------- Ένα αρχείο το οποίο μπορεί μόνο ο ιδιοκτήτης να γράψει και να διαβάσει, και κανείς άλλος δεν έχει οποιοδήποτε δικαίωμα. Κανείς (ούτε ο ιδιοκτήτης) έχει δικαίωμα εκτέλεσης. Για παράδειγμα, μπορεί να είναι το αρχείο με τα email σας.

5.2 Αλλαγή Δικαιωμάτων Πρόσβασης

chmod (αλλαγή κατάστασης ενός αρχείου)

Μόνο ο ιδιοκτήτης ενός αρχείου μπορεί να χρησιμοποιήσει την chmod για να αλλάξει τα δικαιώματα ενός αρχείου. Οι επιλογές της εντολής chmod είναι οι παρακάτω:

Σύμβολο Σημασία
u
χρήστης
g
ομάδα
o
υπόλοιποι
a
όλοι
r
ανάγνωση
w
εγγραφή (και διαγραφή)
x
εκτέλεση (και πρόσβαση στον κατάλογο)
+
προσθήκη δικαιώματος
-
διαγραφή δικαιώματος

Για παράδειγμα, για να αφαιρέσετε τα δικαιώματα εγγραφής και εκτέλεσης στο αρχείο biglist για την ομάδα και τους υπόλοιπους χρήστες:

% chmod go-rwx biglist

Η παραπάνω εντολή δεν θα πειράξει τα υπόλοιπα δικαιώματα (π.χ. του ιδιοκτήτη).

Για να δώσετε δικαιώματα ανάγνωσης και εγγραφής στο αρχείο biglist σε όλους:

% chmod a+rw biglist

Άσκηση 5a

Δοκιμάστε να αλλάξετε δικαιώματα στο αρχείο science.txt και στον κατάλογο backups.

Χρησιμοποιήστε την εντολή ls -l για να ελέγξετε ότι τα δικαιώματα έχουν πραγματικά αλλάξει.

5.3 Διεργασίες και Jobs

Μια διεργασία είναι ένα πρόγραμμα που εκτελείται και αναγνωρίζεται από ένα μοναδικό αναγνωριστικό διεργασίας, PID. Για να δείτε πληροφορίες για τις διεργασίες σας και το αναγνωριστικό τους, γράψτε:

% ps

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

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

Εκτέλεση Εντολών στο Παρασκήνιο

Για να ξεκινήσετε μια διεργασία στο παρασκήνιο, προσθέστε ένα & στο τέλος της γραμμής εντολής. Για παράδειγμα, η εντολή sleep εισάγει μια αναμονή, για όσα δευτερόλεπτα της δώσουμε. Πληκτρολογήστε:

% sleep 10

Η παραπάνω εντολή περιμένει 10 δευτερόλεπτα πριν επιστρέψει η προτροπή του κελύφους. Μέχρι να δείτε ξανά την προτροπή δεν μπορείτε να κάνετε τίποτα εκτός από το να περιμένετε.

Για να εκτελέσετε την sleep στο παρασκήνιο, γράψτε:

% sleep 10 &

[1] 6259

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

Η πρώτη γραμμή στο παραπάνω παράδειγμα, έχει πληκτρολογηθεί από τον χρήστη. Η επόμενη γραμμή που αναφέρει το αριθμό της διεργασίας και του job, προέρχεται από το μηχάνημα. Ο χρήστης ειδοποιείται για τον αριθμό του job (ξεκινάει από τον αριθμό 1) ο οποίος περικλείεται σε αγκύλες και για τον αριθμό της διεργασίας. Επίσης ειδοποιείται όταν τελειώσει η εκτέλεση μιας διεργασίας που εκτελείται στο παρασκήνιο. Η εκτέλεση στο παρασκήνιο είναι χρήσιμη για εργασίες που κάνουν αρκετό χρόνο να ολοκληρωθούν.

Αποστολή στο Παρασκήνιο μιας Διεργασίας που εκτελείται στο Προσκήνιο

Στην προτροπή, πληκτρολογήστε:

% sleep 1000

Μπορείτε να βάλετε την διεργασία που εκτελείται στο προσκήνιο σε αναμονή, πληκτρολογώντας ^Z, δηλ. κρατώντας πιεσμένο το πλήκτρο [Ctrl] και πιέζοντας το [z]. Για να θέσετε κατόπιν τη διεργασία στο παρασκήνιο, πληκτρολογήστε:

% bg

Σημείωση: Μη στέλνετε στο παρασκήνιο διεργασίες που χρειάζονται είσοδο από το χρήστη, π.χ. το vi

5.4 Λίστα Διεργασιών που Έχουν Διακοπεί ή Εκτελούνται στο Παρασκήνιο

Όταν μια διεργασία εκτελείται στο παρασκήνιο ή έχει διακοπεί, βρίσκεται σε μια λίστα με ένα αντίστοιχο αριθμό job. Για να δείτε αυτή τη λίστα, γράψτε:

% jobs

Θα δείτε μια έξοδο όπως την παρακάτω:

[1] Suspended sleep 1000
[2] Running netscape
[3] Running matlab

Για να ξεκινήσετε ξανά (στο προσκήνιο) μια διεργασία που έχει διακοπεί, πληκτρολογήστε:

% fg %αριθμός job

Για παράδειγμα, για να ξεκινήσετε ξανά την εντολή sleep 1000, πληκτρολογήστε:

% fg %1

Αν γράψετε fg χωρίς να δώσετε αριθμό job, θα επαναφέρετε στο προσκήνιο την τελευταία διεργασία που διακόψατε.

5.5 Τερματίζοντας μια Διεργασία

kill (τερματισμός ή αποστολή σήματος σε μια διεργασία)

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

Για να τερματίσετε μια διεργασία που εκτελείται στο προσκήνιο, πιέστε ^C (control c). Για παράδειγμα, εκτελέστε:

% sleep 100
^C

Για να τερματίσετε μια διεργασία που βρίσκεται στο παρασκήνιο ή έχει διακοπεί, γράψτε:

% kill %αριθμός job

Για παράδειγμα, εκτελέστε:

% sleep 100 &
% jobs

Αν για παράδειγμα ο αριθμός του job είναι 4, γράψτε:

% kill %4

Για να ελέγξετε αν το παραπάνω λειτούργησε, ελέγξτε ξανά τη λίστα των jobs για να δείτε αν έχει αφαιρεθεί η διεργασία.

ps (κατάσταση διεργασίας)

Εναλλακτικά, μπορείτε να τερματίσετε μια διεργασία χρησιμοποιώντας τον αναγνωριστικό αριθμό της (PID) και την εντολή kill PID_number

% sleep 1000 &
% ps

PID TT S TIME COMMAND
20077 pts/5 S 0:05 sleep 1000
21563 pts/5 T 0:00 netscape
21873 pts/5 S 0:25 nedit

Για να τερματίσετε τη διεργασία sleep 1000, πληκτρολογήστε:

% kill 20077

και έπειτα πληκτρολογήστε ps ξανά για να δείτε αν έχει διαγραφεί από την λίστα.

Αν μια διεργασία αρνείται να τερματίσει, χρησιμοποιήστε την επιλογή -9:

% kill -9 20077

Σημείωση: Δεν μπορείτε να τερματίσετε τις διεργασίες άλλων χρηστών !!!

Περίληψη

Εντολή Σημασία
ls -lag Δείχνει τα δικαιώματα πρόσβασης για όλα τα αρχεία
chmod [options] file Αλλάζει τα δικαιώματα πρόσβασης του συγκεκριμένου αρχείου
command & Εκτελεί την εντολή στο παρασκήνιο
^C Τερματίζει την διεργασία που εκτελείται στο προσκήνιο
^Z Διακόπτει τη διεργασία που εκτελείται στο προσκήνιο
bg Θέτει στο παρασκήνιο την διεργασία που έχει διακοπεί
jobs Δείχνει λίστα με τα τρέχοντα jobs
fg %1 Επαναφέρει στο προσκήνιο το job με αριθμό 1
kill %1 Τερματίζει το job με αριθμό 1
ps Λίστα των τρεχόντων διεργασιών
kill 26152 Τερματίζει την διεργασία με αριθμό 26152

PreviousHomeNext

M.Stonebank@surrey.ac.uk, 9th October 2000