5.4 Μάθημα 1
Πιστοποιητικό: |
Linux Essentials |
---|---|
Έκδοση: |
1.6 |
Θέμα: |
5 Ασφάλεια και Δικαιώματα Αρχείων |
Σκοπός: |
5.4 Eιδικοί Κατάλογοι και Αρχεία |
Μάθημα: |
1 απο 1 |
Εισαγωγή
Στο Linux, τα πάντα αντιμετωπίζονται ως αρχείο. Ωστόσο, ορισμένα αρχεία τυγχάνουν ειδικής μεταχείρισης, είτε λόγω του τόπου αποθήκευσης τους, όπως τα προσωρινά αρχεία, είτε λόγω του τρόπου αλληλεπίδρασης με το σύστημα αρχείων, όπως οι σύνδεσμοι. Σε αυτό το μάθημα, θα μάθουμε πού βρίσκονται τέτοια αρχεία, πώς λειτουργούν και πώς να τα διαχειρίζεστε.
Προσωρινά Αρχεία
Τα προσωρινά αρχεία είναι αρχεία που χρησιμοποιούνται από προγράμματα για την αποθήκευση δεδομένων που χρειάζονται μόνο για μικρό χρονικό διάστημα. Αυτά μπορεί να είναι τα δεδομένα τρεχουσών processes, τα log αρχεία σφαλμάτων, τα αρχεία από μια αυτόματη αποθήκευση, τα ενδιάμεσα αρχεία που χρησιμοποιούνται κατά τη μετατροπή ενός αρχείου, τα αρχεία προσωρινής αποθήκευσης και ούτω καθεξής.
Τοποθεσία Προσωρινών Αρχείων
Η έκδοση 3.0 του Filesystem Hierarchy Standard (FHS) ορίζει τυπικές θέσεις για προσωρινά αρχεία σε συστήματα Linux. Κάθε τοποθεσία έχει διαφορετικό σκοπό και συμπεριφορά, και συνιστάται στους προγραμματιστές να ακολουθούν τις συμβάσεις που ορίζει το FHS όταν γράφουν προσωρινά δεδομένα στο δίσκο.
/tmp
-
Σύμφωνα με το FHS, τα προγράμματα δεν πρέπει να υποθέτουν ότι τα αρχεία που θα εγγράφονται εδώ θα διατηρηθούν μεταξύ των κλήσεων ενός προγράμματος. Η σύσταση είναι να εκκαθαρίζεται αυτός ο κατάλογος (όλα τα αρχεία διαγράφονται) κατά την εκκίνηση του συστήματος, αν και αυτό δεν είναι υποχρεωτικό.
/var/tmp
-
Άλλη μια τοποθεσία για προσωρινά αρχεία, αλλά αυτή δεν πρέπει να εκκαθαριστεί κατά την εκκίνηση του συστήματος, δηλαδή τα αρχεία που είναι αποθηκευμένα εδώ θα παραμένουν συνήθως μεταξύ των επανεκκινήσεων.
/run
-
Αυτός ο κατάλογος περιέχει μεταβλητά δεδομένα χρόνου λειτουργίας που χρησιμοποιούνται από τρέχουσα processes, όπως αρχεία αναγνωριστικού process (
.pid
). Τα προγράμματα που χρειάζονται περισσότερα από ένα αρχεία χρόνου λειτουργίας μπορούν να δημιουργήσουν υποκαταλόγους εδώ. Αυτή η τοποθεσία πρέπει να εκκαθαριστεί κατά την εκκίνηση του συστήματος. Ο σκοπός αυτού του καταλόγου κάποτε εξυπηρετούνταν από το/var/run
, και σε ορισμένα συστήματα το/var/run
μπορεί να είναι ένα symbolic link προς το/run
.
Σημειώστε ότι τίποτα δεν εμποδίζει ένα πρόγραμμα να δημιουργήσει προσωρινά αρχεία αλλού στο σύστημα, αλλά είναι καλή πρακτική να τηρείτε τις συμβάσεις που ορίζονται από το FHS.
Δικαιώματα Προσωρινών Αρχείων
Η ύπαρξη προσωρινών καταλόγων σε όλο το σύστημα σε ένα σύστημα πολλών χρηστών παρουσιάζει ορισμένες προκλήσεις σχετικά με τα δικαιώματα πρόσβασης. Αρχικά κάποιος μπορεί να σκεφτεί ότι τέτοιοι κατάλογοι θα ήταν “παγκοσμίως εγγράψιμοι”, δηλαδή οποιοσδήποτε χρήστης θα μπορούσε να γράψει ή να διαγράψει δεδομένα σε αυτούς. Αλλά αν αυτό ήταν αλήθεια, πώς θα μπορούσαμε να εμποδίσουμε έναν χρήστη να διαγράψει ή να τροποποιήσει αρχεία που έχουν δημιουργηθεί από άλλον;
Η λύση είναι ένα ειδικό δικαίωμα που ονομάζεται sticky bit, η οποία ισχύει τόσο για καταλόγους όσο και για αρχεία. Ωστόσο, για λόγους ασφαλείας, ο πυρήνας του Linux αγνοεί το sticky bit όταν εφαρμόζεται σε αρχεία. Όταν αυτό το ειδικό bit έχει οριστεί για έναν κατάλογο, αποτρέπει τους χρήστες από το να αφαιρέσουν ή να μετονομάσουν ένα αρχείο μέσα σε αυτόν τον κατάλογο, εκτός εάν είναι ιδιοκτήτες του αρχείου.
Οι κατάλογοι με ορισμένο το sticky bit εμφανίζουν ένα t
που αντικαθιστά το x
στο δικαίωμα για άλλους στην έξοδο του ls -l
. Για παράδειγμα, ας ελέγξουμε τα δικαιώματα για τους καταλόγους /tmp
και /var/tmp
:
$ ls -ldh /tmp/ /var/tmp/ drwxrwxrwt 25 root root 4,0K Jun 7 18:52 /tmp/ drwxrwxrwt 16 root root 4,0K Jun 7 09:15 /var/tmp/
Όπως μπορείτε να δείτε από το t
που αντικαθιστά το x
στο δικαίωμα για τους άλλους, και οι δύο κατάλογοι έχουν ορισμένο το sticky bit.
Για να ορίσετε το sticky bit σε έναν κατάλογο χρησιμοποιώντας chmod
με αριθμητική μέθοδο, χρησιμοποιήστε τον τετραψήφιο συμβολισμό και το 1
ως πρώτο ψηφίο. Για παράδειγμα:
$ chmod 1755 temp
θα ορίσει το sticky bit για τον κατάλογο με το όνομα temp
και τα δικαιώματα ως rwxr-xr-t
.
Όταν χρησιμοποιείτε τη συμβολική μέθοδο, χρησιμοποιήστε την παράμετρο t
. Έτσι, +t
για να ορίσετε το sticky bit και -t
για να το απενεργοποιήσετε. Όπως έτσι:
$ chmod +t temp
Κατανοώντας τους Συνδέσμους
Έχουμε ήδη πει ότι στο Linux τα πάντα αντιμετωπίζονται ως αρχείο. Αλλά υπάρχει ένα ειδικό είδος αρχείου, που ονομάζεται link, και υπάρχουν δύο τύποι συνδέσμων σε ένα σύστημα Linux:
- Symbolic links
-
Ονομάζονται επίσης soft links, δείχνουν το path ενός άλλου αρχείου. Εάν διαγράψετε το αρχείο, το οποίο δείχνει ο σύνδεσμος (που ονομάζεται target), ο σύνδεσμος θα εξακολουθεί να υπάρχει, αλλά “σταματά να λειτουργεί”, καθώς τώρα δείχνει στο “τίποτα”.
- Hard links
-
Σκεφτείτε έναν hard link ως δεύτερο όνομα για το αρχικό αρχείο. Δεν είναι διπλότυπα, αλλά αντίθετα αποτελούν μια πρόσθετη καταχώρηση στο σύστημα αρχείων που δείχνει την ίδια θέση (inode) στο δίσκο.
Tip
|
Το inode είναι μια δομή δεδομένων που αποθηκεύει χαρακτηριστικά για ένα αντικείμενο (όπως ένα αρχείο ή κατάλογο) σε ένα σύστημα αρχείων. Μεταξύ αυτών των χαρακτηριστικών είναι το όνομα αρχείου, τα δικαιώματα, η ιδιοκτησία και σε ποια τμήματα του δίσκου αποθηκεύονται τα δεδομένα για το αντικείμενο. Σκεφτείτε το ως μια καταχώρηση σε ένα ευρετήριο, εξ ου και το όνομα, το οποίο προέρχεται από το “index node”. |
Εργασία με Hard Links
Δημιουργία Hard Links
Η εντολή για τη δημιουργία hard link στο Linux είναι ln
. Η βασική σύνταξη είναι:
$ ln TARGET LINK_NAME
Ο στόχος TARGET
πρέπει να υπάρχει ήδη (αυτό είναι το αρχείο στο οποίο θα δείχνει ο σύνδεσμος) και εάν ο στόχος δεν βρίσκεται στον τρέχοντα κατάλογο ή εάν θέλετε να δημιουργήσετε τον σύνδεσμο αλλού, πρέπει να καθορίσετε το πλήρες path προς αυτόν. Για παράδειγμα, η εντολή
$ ln target.txt /home/carol/Documents/hardlink
θα δημιουργήσει ένα αρχείο με το όνομα hardlink
στον κατάλογο /home/carol/Documents/
, συνδεδεμένο με το αρχείο target.txt
στον τρέχοντα κατάλογο.
Εάν αφήσετε εκτός την τελευταία παράμετρο (LINK_NAME
), θα δημιουργηθεί ένας σύνδεσμος με το ίδιο όνομα με τον στόχο στον τρέχοντα κατάλογο.
Διαχείριση Hard Links
Τα hard links είναι καταχωρήσεις στο σύστημα αρχείων που έχουν διαφορετικά ονόματα αλλά δείχνουν τα ίδια δεδομένα στο δίσκο. Όλα αυτά τα ονόματα είναι ίσα και μπορούν να χρησιμοποιηθούν για αναφορά σε ένα αρχείο. Εάν αλλάξετε τα περιεχόμενα ενός από τα ονόματα, τα περιεχόμενα όλων των άλλων ονομάτων που δείχνουν σε αυτό το αρχείο αλλάζουν, καθώς όλα αυτά τα ονόματα παραπέμπουν στα ίδια δεδομένα. Εάν διαγράψετε ένα από τα ονόματα, τα άλλα ονόματα θα εξακολουθούν να λειτουργούν.
Αυτό συμβαίνει επειδή όταν “διαγράφετε” ένα αρχείο τα δεδομένα δεν διαγράφονται πραγματικά από το δίσκο. Το σύστημα απλώς διαγράφει την καταχώρηση στον πίνακα του συστήματος αρχείων που δείχνει το inode που αντιστοιχεί στα δεδομένα στο δίσκο. Αλλά αν έχετε μια δεύτερη καταχώρηση που δείχνει τo ίδιo inode, μπορείτε ακόμα να φτάσετε στα δεδομένα. Σκεφτείτε το σαν δύο δρόμοι που συγκλίνουν στο ίδιο σημείο. Ακόμα κι αν φράξετε ή ανακατευθύνετε έναν από τους δρόμους, μπορείτε να φτάσετε στον προορισμό χρησιμοποιώντας τον άλλο.
Μπορείτε να το ελέγξετε αυτό χρησιμοποιώντας την παράμετρο -i
του ls
. Εξετάστε τα ακόλουθα περιεχόμενα ενός καταλόγου:
$ ls -li total 224 3806696 -r--r--r-- 2 carol carol 111702 Jun 7 10:13 hardlink 3806696 -r--r--r-- 2 carol carol 111702 Jun 7 10:13 target.txt
Ο αριθμός πριν από τα δικαιώματα είναι ο αριθμός inode. Βλέπετε ότι τόσο το αρχείο hardlink
και το αρχείο target.txt
έχουν τον ίδιο αριθμό (3806696
); Αυτό συμβαίνει επειδή το ένα είναι hard link του άλλου.
Ποιο όμως είναι το πρωτότυπο και ποιό ο σύνδεσμος; Δεν μπορείς πραγματικά να καταλάβεις, καθώς για κάθε πρακτικό σκοπό είναι τα ίδια.
Σημειώστε ότι κάθε hard link που δείχνει προς ένα αρχείο αυξάνει το αρθιμό συνδέσμων του αρχείου. Αυτός είναι ο αριθμός αμέσως μετά τα δικαιώματα στην έξοδο του ls -l
. Από προεπιλογή, κάθε αρχείο έχει αριθμό συνδέσμων 1
(οι κατάλογοι έχουν αριθμό 2
) και κάθε hard link σε αυτό αυξάνει τον αριθμό κατά ένα. Έτσι, αυτός είναι ο λόγος για τον αριθμό συνδέσμων 2
στα αρχεία στην παραπάνω λίστα.
Σε αντίθεση με τα symbolic links, μπορείτε να δημιουργήσετε hard links μόνο σε αρχεία και τόσο ο σύνδεσμος όσο και ο στόχος πρέπει να βρίσκονται στο ίδιο σύστημα αρχείων.
Μετακίνηση και Αφαίρεση Hard Links
Δεδομένου ότι τα hard links αντιμετωπίζονται ως κανονικά αρχεία, μπορούν να διαγραφούν με rm
και να μετονομαστούν ή να μετακινηθούν στο σύστημα αρχείων με mv
. Και δεδομένου ότι ένα hard link δείχνει στο ίδιο inode με του στόχου, μπορεί να μετακινηθεί ελεύθερα, χωρίς φόβο να “σπάσει” ο σύνδεσμος.
Symbolic links
Δημιουργία Symbolic links
Η εντολή που χρησιμοποιείται για τη δημιουργία ενός symbolic link είναι επίσης ln
, αλλά με την παράμετρο -s
να έχει προστεθεί. Έτσι:
$ ln -s target.txt /home/carol/Documents/softlink
Αυτό θα δημιουργήσει ένα αρχείο με το όνομα softlink
στον κατάλογο /home/carol/Documents/
, που δείχνει προς το αρχείο target.txt
στον τρέχοντα κατάλογο.
Όπως και με τους hard links, μπορείτε να παραλείψετε το όνομα του συνδέσμου για να δημιουργήσετε έναν σύνδεσμο με το ίδιο όνομα με τον στόχο στον τρέχοντα κατάλογο.
Διαχείριση Symbolic Links
Τα symbolic links δείχνουν προς ένα άλλο path στο σύστημα αρχείων. Μπορείτε να δημιουργήσετε soft links σε καταλόγους και αρχεία ακόμη και μεταξύ διαφορετικών partitions. Είναι πολύ εύκολο να εντοπίσετε ένα soft link στην έξοδο του ls
:
$ ls -lh total 112K -rw-r--r-- 1 carol carol 110K Jun 7 10:13 target.txt lrwxrwxrwx 1 carol carol 12 Jun 7 10:14 softlink -> target.txt
Στο παραπάνω παράδειγμα, ο πρώτος χαρακτήρας στα δικαιώματα για το αρχείο softlink
είναι l
, υποδηλώνοντας ένα symbolic link. Επιπλέον, αμέσως μετά το όνομα αρχείου βλέπουμε το όνομα του στόχου στον οποίο οδηγεί ο σύνδεσμος, το αρχείο target.txt
.
Σημειώστε ότι στις λίστες αρχείων και καταλόγων, τα ίδια τα soft links εμφανίζουν πάντα τα δικαιώματα rwx
για τον χρήστη, την ομάδα και άλλους, αλλά στην πράξη τα δικαιώματα πρόσβασης για αυτούς είναι τα ίδια με αυτά του στόχου.
Μετακίνηση και Αφαίρεση Symbolic Links
Όπως και τα hard links, τα symbolic links μπορούν να αφαιρεθούν χρησιμοποιώντας το rm
και να μετακινηθούν ή να μετονομαστούν χρησιμοποιώντας το mv
. Ωστόσο, θα πρέπει να δίνεται ιδιαίτερη προσοχή κατά τη δημιουργία τους, ώστε να αποφευχθεί το “σπάσιμο” του συνδέσμου εάν μετακινηθεί από την αρχική του θέση.
Όταν δημιουργείτε symbolic links, θα πρέπει να γνωρίζετε ότι, εκτός και εάν ένα path έχει καθοριστεί πλήρως, η θέση του στόχου ερμηνεύεται ως σχετική με τη θέση του συνδέσμου. Αυτό μπορεί να δημιουργήσει προβλήματα εάν μετακινηθεί ο σύνδεσμος ή το αρχείο στο οποίο δείχνει.
Αυτό γίνεται πιο εύκολα κατανοητό με ένα παράδειγμα. Ας πούμε ότι έχουμε ένα αρχείο με το όνομα original.txt
στον τρέχοντα κατάλογο και θέλουμε να δημιουργήσουμε ένα symbolic link προς αυτό που ονομάζεται softlink
. Θα μπορούσαμε να χρησιμοποιήσουμε:
$ ln -s original.txt softlink
Και προφανώς όλα θα πάνε καλά. Ας ελέγξουμε με ls
:
$ ls -lh total 112K -r--r--r-- 1 carol carol 110K Jun 7 10:13 original.txt lrwxrwxrwx 1 carol carol 12 Jun 7 19:23 softlink -> original.txt
Δείτε πώς είναι κατασκευασμένος ο σύνδεσμος: το softlink`" δείχνει στο (
→`) original.txt
. Ωστόσο, ας δούμε τι θα συμβεί αν μετακινήσουμε τον σύνδεσμο στον parent κατάλογο και προσπαθήσουμε να εμφανίσουμε τα περιεχόμενά του χρησιμοποιώντας την εντολή less
:
$ mv softlink ../ $ less ../softlink ../softlink: No such file or directory
Δεδομένου ότι το path προς το original.txt
δεν είχε καθοριστεί, το σύστημα υποθέτει ότι βρίσκεται στον ίδιο κατάλογο με τον σύνδεσμο. Όταν αυτό δεν ισχύει πλέον, ο σύνδεσμος σταματά να λειτουργεί.
Ο τρόπος για να αποφευχθεί αυτό είναι να καθορίζετε πάντα το πλήρες path προς τον στόχο κατά τη δημιουργία του συνδέσμου:
$ ln -s /home/carol/Documents/original.txt softlink
Με αυτόν τον τρόπο, όπου κι αν μετακινήσετε τον σύνδεσμο, θα εξακολουθεί να λειτουργεί, επειδή δείχνει την απόλυτη θέση του στόχου. Ελέγξτε με ls
:
$ ls -lh total 112K lrwxrwxrwx 1 carol carol 40 Jun 7 19:34 softlink -> /home/carol/Documents/original.txt
Καθοδηγούμενες Ασκήσεις
-
Φανταστείτε ότι ένα πρόγραμμα χρειάζεται να δημιουργήσει ένα προσωρινό αρχείο μιας χρήσης που δεν θα χρειαστεί ποτέ ξανά μετά το κλείσιμο του προγράμματος. Ποιος θα ήταν ο σωστός κατάλογος στον οποίο θα δημιουργηθεί αυτό το αρχείο;
-
Ποιος είναι ο προσωρινός κατάλογος που πρέπει να εκκαθαριστεί κατά τη διαδικασία εκκίνησης;
-
Ποια είναι η παράμετρος για το
chmod
στη συμβολική μέθοδο για να ενεργοποιηθεί το sticky bit σε έναν κατάλογο; -
Φανταστείτε ότι υπάρχει ένα αρχείο με το όνομα
document.txt
στον κατάλογο/home/carol/Documents
. Ποια είναι η εντολή για τη δημιουργία ενός symbolic link προς αυτό με το όνομαtext.txt
στον τρέχοντα κατάλογο; -
Εξηγήστε τη διαφορά μεταξύ ενός hard link σε ένα αρχείο και ενός αντιγράφου αυτού του αρχείου.
Ασκήσεις Εξερεύνησης
-
Φανταστείτε ότι μέσα σε έναν κατάλογο δημιουργείτε ένα αρχείο που ονομάζεται
recipes.txt
. Μέσα σε αυτόν τον κατάλογο, θα δημιουργήσετε επίσης ένα hard link προς αυτό το αρχείο, που ονομάζεταιreceitas.txt
, και ένα symbolic (ή soft) link προς αυτό που ονομάζεταιrezepte.txt
.$ touch recipes.txt $ ln recipes.txt receitas.txt $ ln -s receitas.txt rezepte.txt
Τα περιεχόμενα του καταλόγου θα πρέπει να εμφανίζονται ως εξής:
$ ls -lhi total 160K 5388833 -rw-r--r-- 4 carol carol 77K jun 17 17:25 receitas.txt 5388833 -rw-r--r-- 4 carol carol 77K jun 17 17:25 recipes.txt 5388837 lrwxrwxrwx 1 carol carol 12 jun 24 10:12 rezepte.txt -> receitas.txt
Να θυμάστε ότι, ως hard link, το
receitas.txt
δείχνει το ίδιο inode με τοrecipes.txt
. Τι θα συμβεί στο soft linkrezepte.txt
εάν διαγραφεί το όνομαreceitas.txt
; Γιατί; -
Φανταστείτε ότι έχετε μια μονάδα flash συνδεδεμένη στο σύστημά σας και τοποθετημένη στο
/media/youruser/FlashA
. Θέλετε να δημιουργήσετε στον αφετηριακό σας κατάλογο έναν σύνδεσμο που ονομάζεταιschematics.pdf
, που δείχνει το αρχείοesquema.pdf
στον root κατάλογο της μονάδας flash. Λοιπόν, πληκτρολογείτε την εντολή:$ ln /media/youruser/FlashA/esquema.pdf ~/schematics.pdf
Τι θα συνέβαινε; Γιατί;
-
Σκεφτείτε την ακόλουθη έξοδο του
ls -lah
:$ ls -lah total 3,1M drwxr-xr-x 2 carol carol 4,0K jun 17 17:27 . drwxr-xr-x 5 carol carol 4,0K jun 17 17:29 .. -rw-rw-r-- 1 carol carol 2,8M jun 17 15:45 compressed.zip -rw-r--r-- 4 carol carol 77K jun 17 17:25 document.txt -rw-rw-r-- 1 carol carol 216K jun 17 17:25 image.png -rw-r--r-- 4 carol carol 77K jun 17 17:25 text.txt
-
Πόσοι σύνδεσμοι δείχνουν στο αρχείο
document.txt
; -
Είναι soft ή hard links;
-
Ποια παράμετρο πρέπει να δώσετε στο
ls
για να δείτε ποια inode καταλαμβάνει κάθε αρχείο;
-
-
Φανταστείτε ότι έχετε στον κατάλογο
~/Documents
ένα αρχείο με το όνομαclients.txt
που περιέχει ορισμένα ονόματα πελατών και έναν κατάλογο με το όνομαsomedir
. Μέσα σε αυτόν υπάρχει ένα διαφορετικό αρχείο επίσης με το όνομαclients.txt
με διαφορετικά ονόματα. Για να αναπαραγάγετε αυτήν τη δομή, χρησιμοποιήστε τις ακόλουθες εντολές.$ cd ~/Documents $ echo "John, Michael, Bob" > clients.txt $ mkdir somedir $ echo "Bill, Luke, Karl" > somedir/clients.txt
Στη συνέχεια, δημιουργείτε έναν σύνδεσμο μέσα στο
somedir
με το όνομαpartners.txt
που δείχνει σε αυτό το αρχείο, με τις εντολές:$ cd somedir/ $ ln -s clients.txt partners.txt
Έτσι, η δομή του καταλόγου είναι:
Documents |-- clients.txt `-- somedir |-- clients.txt `-- partners.txt -> clients.txt
Τώρα, μετακινείτε το
partners.txt
από τοsomedir
στο~/Documents
και παραθέτετε τα περιεχόμενά του.$ cd ~/Documents/ $ mv somedir/partners.txt . $ less partners.txt
Θα εξακολουθεί να λειτουργεί ο σύνδεσμος; Εάν ναι, ποιού αρχείου τα περιεχόμενα θα παραθετηθούν; Γιατί;
-
Σκεφτείτε τα ακόλουθα αρχεία:
-rw-r--r-- 1 carol carol 19 Jun 24 11:12 clients.txt lrwxrwxrwx 1 carol carol 11 Jun 24 11:13 partners.txt -> clients.txt
Ποια είναι τα δικαιώματα πρόσβασης για το
partners.txt
; Γιατί;
Σύνοψη
Σε αυτό το μάθημα μάθατε:
-
Που αποθηκεύονται προσωρινά αρχεία.
-
Ποια είναι το ειδικό δικαίωμα που εφαρμόζεται σε αυτά.
-
Τι είναι οι σύνδεσμοι.
-
Τη διαφορά μεταξύ symbolic και hard links.
-
Πώς να δημιουργήσετε συνδέσμους.
-
Πώς να μετακινήσετε, να μετονομάσετε ή να αφαιρέσετε συνδέσμους.
Οι ακόλουθες εντολές συζητήθηκαν σε αυτό το μάθημα:
-
ln
-
Η παράμετρος
-i
στηνls
Απαντήσεις στις Καθοδηγούμενες Ασκήσεις
-
Φανταστείτε ότι ένα πρόγραμμα χρειάζεται να δημιουργήσει ένα προσωρινό αρχείο μιας χρήσης που δεν θα χρειαστεί ποτέ ξανά μετά το κλείσιμο του προγράμματος. Ποιος θα ήταν ο σωστός κατάλογος στον οποίο θα δημιουργηθεί αυτό το αρχείο;
Δεδομένου ότι δεν μας ενδιαφέρει το αρχείο μετά την ολοκλήρωση της εκτέλεσης του προγράμματος, ο σωστός κατάλογος είναι
/tmp
. -
Ποιος είναι ο προσωρινός κατάλογος που πρέπει να εκκαθαριστεί κατά τη διαδικασία εκκίνησης;
Ο κατάλογος είναι
/run
ή, σε ορισμένα συστήματα,/var/run
. -
Ποια είναι η παράμετρος για το
chmod
στη συμβολική μέθοδο για να ενεργοποιηθεί το sticky bit σε έναν κατάλογο;Το σύμβολο για το sticky bit στη συμβολική μέθοδο είναι
t
. Εφόσον θέλουμε να ενεργοποιήσουμε (προσθέσουμε) αυτό το δικαίωμα στον κατάλογο, η παράμετρος πρέπει να είναι+t
. -
Φανταστείτε ότι υπάρχει ένα αρχείο με το όνομα
document.txt
στον κατάλογο/home/carol/Documents
. Ποια είναι η εντολή για τη δημιουργία ενός symbolic link προς αυτό με το όνομαtext.txt
στον τρέχοντα κατάλογο;Το
ln -s
είναι η εντολή για τη δημιουργία ενός symbolic link. Εφόσον πρέπει να καθορίσετε το πλήρες path προς το αρχείο στο οποίο συνδέεστε, η εντολή είναι:$ ln -s /home/carol/Documents/document.txt text.txt
-
Εξηγήστε τη διαφορά μεταξύ ενός hard link σε ένα αρχείο και ενός αντιγράφου αυτού του αρχείου.
Ένα hard link είναι απλώς ένα άλλο όνομα για ένα αρχείο. Παρόλο που μοιάζει με διπλότυπο του αρχικού αρχείου, για όλους τους σκοπούς τόσο ο σύνδεσμος όσο και το πρωτότυπο είναι τα ίδια, καθώς δείχνουν τα ίδια δεδομένα στο δίσκο. Οι αλλαγές που γίνονται στα περιεχόμενα του συνδέσμου θα αντικατοπτρίζονται στο πρωτότυπο και αντίστροφα. Ένα αντίγραφο είναι μια εντελώς ανεξάρτητη οντότητα, που καταλαμβάνει διαφορετική θέση στο δίσκο. Οι αλλαγές στο αντίγραφο δεν θα αντικατοπτρίζονται στο πρωτότυπο και το αντίστροφο.
Απαντήσεις στις Ασκήσεις Εξερεύνησης
-
Φανταστείτε ότι μέσα σε έναν κατάλογο δημιουργείτε ένα αρχείο που ονομάζεται
recipes.txt
. Μέσα σε αυτόν τον κατάλογο, θα δημιουργήσετε επίσης ένα hard link προς αυτό το αρχείο, που ονομάζεταιreceitas.txt
, και ένα symbolic (ή soft) link προς αυτό που ονομάζεταιrezepte.txt
.$ touch recipes.txt $ ln recipes.txt receitas.txt $ ln -s receitas.txt rezepte.txt
Τα περιεχόμενα του καταλόγου θα πρέπει να εμφανίζονται ως εξής:
$ ls -lhi total 160K 5388833 -rw-r--r-- 4 carol carol 77K jun 17 17:25 receitas.txt 5388833 -rw-r--r-- 4 carol carol 77K jun 17 17:25 recipes.txt 5388837 lrwxrwxrwx 1 carol carol 12 jun 24 10:12 rezepte.txt -> receitas.txt
Να θυμάστε ότι, ως hard link, το
receitas.txt
δείχνει το ίδιο inode με τοrecipes.txt
. Τι θα συμβεί στο soft linkrezepte.txt
εάν διαγραφεί το όνομαreceitas.txt
; Γιατί;Το soft link
rezepte.txt
θα σταματήσει να λειτουργεί. Αυτό συμβαίνει επειδή τα soft links παραπέμπουν σε ονόματα, όχι σε inodes και το όνομαreceitas.txt
δεν υπάρχει πλέον, ακόμα κι αν τα δεδομένα βρίσκονται ακόμα στο δίσκο με το όνομαrecipes.txt
. -
Φανταστείτε ότι έχετε μια μονάδα flash συνδεδεμένη στο σύστημά σας και τοποθετημένη στο
/media/youruser/FlashA
. Θέλετε να δημιουργήσετε στον αφετηριακό σας κατάλογο έναν σύνδεσμο που ονομάζεταιschematics.pdf
, που δείχνει το αρχείοesquema.pdf
στον root κατάλογο της μονάδας flash. Λοιπόν, πληκτρολογείτε την εντολή:$ ln /media/youruser/FlashA/esquema.pdf ~/schematics.pdf
Τι θα συνέβαινε; Γιατί;
Η εντολή θα αποτύγχανε. Το μήνυμα σφάλματος θα ήταν
Invalid cross-device link
και καθιστά σαφή τον λόγο: τα hard links δεν μπορούν να οδηγήσουν σε έναν στόχο σε διαφορετικό partition ή συσκευή. Ο μόνος τρόπος για να δημιουργήσετε έναν σύνδεσμο σαν αυτόν είναι να χρησιμοποιήσετε έναν symbolic ή soft link, προσθέτοντας την παράμετρο-s
στοln
. -
Σκεφτείτε την ακόλουθη έξοδο του
ls -lah
:$ ls -lah total 3,1M drwxr-xr-x 2 carol carol 4,0K jun 17 17:27 . drwxr-xr-x 5 carol carol 4,0K jun 17 17:29 .. -rw-rw-r-- 1 carol carol 2,8M jun 17 15:45 compressed.zip -rw-r--r-- 4 carol carol 77K jun 17 17:25 document.txt -rw-rw-r-- 1 carol carol 216K jun 17 17:25 image.png -rw-r--r-- 4 carol carol 77K jun 17 17:25 text.txt
-
Πόσοι σύνδεσμοι δείχνουν στο αρχείο
document.txt
;Κάθε αρχείο ξεκινά με έναν αριθμό συνδέσμων
1
. Δεδομένου ότι ο αριθμός συνδέσμων για το αρχείο είναι4
, υπάρχουν τρεις σύνδεσμοι που δείχνουν προς αυτό το αρχείο. -
Είναι soft ή hard links;
Είναι hard links, αφού τα soft links δεν αυξάνουν τον αριθμό των συνδέσμων ενός αρχείου.
-
Ποια παράμετρο πρέπει να δώσετε στο
ls
για να δείτε ποια inode καταλαμβάνει κάθε αρχείο;Η παράμετρος είναι
-i
. Το inode θα εμφανίζεται ως η πρώτη στήλη στην έξοδο τουls
, όπως παρακάτω:$ ls -lahi total 3,1M 5388773 drwxr-xr-x 2 rigues rigues 4,0K jun 17 17:27 . 5245554 drwxr-xr-x 5 rigues rigues 4,0K jun 17 17:29 .. 5388840 -rw-rw-r-- 1 rigues rigues 2,8M jun 17 15:45 compressed.zip 5388833 -rw-r--r-- 4 rigues rigues 77K jun 17 17:25 document.txt 5388837 -rw-rw-r-- 1 rigues rigues 216K jun 17 17:25 image.png 5388833 -rw-r--r-- 4 rigues rigues 77K jun 17 17:25 text.txt
-
-
Φανταστείτε ότι έχετε στον κατάλογο
~/Documents
ένα αρχείο με το όνομαclients.txt
που περιέχει ορισμένα ονόματα πελατών και έναν κατάλογο με το όνομαsomedir
. Μέσα σε αυτόν υπάρχει ένα διαφορετικό αρχείο επίσης με το όνομαclients.txt
με διαφορετικά ονόματα. Για να αναπαραγάγετε αυτήν τη δομή, χρησιμοποιήστε τις ακόλουθες εντολές.$ cd ~/Documents $ echo "John, Michael, Bob" > clients.txt $ mkdir somedir $ echo "Bill, Luke, Karl" > somedir/clients.txt
Στη συνέχεια, δημιουργείτε έναν σύνδεσμο μέσα στο
somedir
με το όνομαpartners.txt
που δείχνει σε αυτό το αρχείο, με τις εντολές:$ cd somedir/ $ ln -s clients.txt partners.txt
Έτσι, η δομή του καταλόγου είναι:
Documents |-- clients.txt `-- somedir |-- clients.txt `-- partners.txt -> clients.txt
Τώρα, μετακινείτε το
partners.txt
από τοsomedir
στο~/Documents
και παραθέτετε τα περιεχόμενά του.$ cd ~/Documents/ $ mv somedir/partners.txt . $ less partners.txt
Θα εξακολουθεί να λειτουργεί ο σύνδεσμος; Εάν ναι, ποιού αρχείου τα περιεχόμενα θα παραθετηθούν; Γιατί;
Αυτό είναι ένα “δύσκολο”, αλλά ο σύνδεσμος θα λειτουργήσει και το αρχείο που θα παρατεθεί θα είναι αυτό στο
~/Documents`", που περιέχει τα ονόματα `John
,Michael
,Bob
.Να θυμάστε ότι εφόσον δεν προσδιορίσατε το πλήρες path προς τον στόχο
clients.txt
κατά τη δημιουργία του soft linkpartners.txt
, η τοποθεσία του στόχου θα ερμηνευτεί ως σχετική με τη θέση του συνδέσμου, η οποία σε αυτήν την περίπτωση είναι ο τρέχοντας κατάλογος.Όταν ο σύνδεσμος μετακινήθηκε από το
~/Documents/somedir
στο~/Documents
, θα έπρεπε να σταματήσει να λειτουργεί, καθώς ο στόχος δεν βρισκόταν πλέον στον ίδιο κατάλογο με τον σύνδεσμο. Ωστόσο, τυχαίνει να υπάρχει ένα αρχείο με το όνομαclients.txt
στο~/Documents
, οπότε ο σύνδεσμος θα δείχνει σε αυτό το αρχείο, αντί για τον αρχικό στόχο μέσα στο~/somedir
.Για να αποφύγετε αυτό, προσδιορίζετε πάντα το πλήρες path προς τον στόχο όταν δημιουργείτε ένα soft link.
-
Σκεφτείτε τα ακόλουθα αρχεία:
-rw-r--r-- 1 rigues rigues 19 Jun 24 11:12 clients.txt lrwxrwxrwx 1 rigues rigues 11 Jun 24 11:13 partners.txt -> clients.txt
Ποια είναι τα δικαιώματα πρόσβασης για το
partners.txt
; Γιατί;Τα δικαιώματα πρόσβασης για το
partners.txt
είναιrw-r—r--
, καθώς οι σύνδεσμοι κληρονομούν πάντα τα ίδια δικαιώματα πρόσβασης με τον στόχο.