Κεφάλαιο 10 Διαχείριση Αρχείων και Καταλόγων Στόχος του Linux να είναι όσο πιο κοντά στο Unix γίνεται. Παραδοσιακά, τα Unix λειτουργικά συστήματα ήταν προσανατολισμένα στη γραμμή εντολών. Έχουμε γραφικό περιβάλλον στο Slackware, αλλά η γραμμή εντολών παραμένει το βασικό επίπεδο ελέγχου του συστήματος. Κατά συνέπεια είναι σημαντικό να κατανοήσετε κάποιες από τις βασικές εντολές διαχείρισης αρχείων. Οι ακόλουθες ενότητες εξηγούν τις συνηθισμένες εντολές διαχείρισης αρχείων και παρέχουν παραδείγματα χρήσης τους. Υπάρχουν πολλές ακόμα εντολές, αλλά αυτές θα σας βοηθήσουν να ξεκινήσετε. Επίσης, οι εντολές περιγράφονται σύνοπτικά εδώ. Θα βρείτε περισσότερες λεπτομέρειες στη συνοδευτική σελίδα man κάθε εντολής. 10.1 Πλοήγηση: ls, cd και pwd 10.1.1 ls Η εντολή αυτή εμφανίζει τα αρχεία ενός καταλόγου. Οι χρήστες Windows και DOS θα προσέξουν την ομοιότητά της με την εντολή dir. Από μόνη της, η ls(1) θα απεικονίσει τα αρχεία του τρέχοντος καταλόγου. Για να δείτε τι υπάρχει στον μητρικό κατάλογο, θα μπορούσατε να δώσετε τις ακόλουθες εντολές: % cd / % ls bin cdr dev home lost+found proc sbin tmp var boot cdrom etc lib mnt root suncd usr vmlinuz Το πρόβλημα που πολλοί άνθρωποι έχουν με αυτή την έξοδο είναι ότι δεν μπορεί να διακρίνει κανείς εύκολα τι είναι κατάλογος και τι αρχείο. Μερικοί χρήστες προτιμούν η ls να προσθέσει ένα αναγνωριστικό τύπου σε κάθε λίστα, όπως εδώ: % ls -FC bin/ cdr/ dev/ home/ lost+found/ proc/ sbin/ tmp/ var/ boot/ cdrom/ etc/ lib/ mnt/ root/ suncd/ usr/ vmlinuz Το όνομα ενός καταλόγου ακολουθείται από μια κάθετο, το όνομα ενός εκτελέσιμου ακολουθείται από έναν αστερίσκο και ούτο καθ'εξής. Η ls μπορεί επίσης να χρησιμοποιηθεί για να επιστρέψει και άλλα στατιστικά για τα αρχεία. Για παράδειγμα, για να δείτε τις ημερομηνίες δημιουργίας, τους ιδιοκτήτες και τις άδειες, θα χρησιμοποιούσατε μια εκτενή λίστα: % ls -l drwxr-xr-x 2 root bin 4096 May 7 09:11 bin/ drwxr-xr-x 2 root root 4096 Feb 24 03:55 boot/ drwxr-xr-x 2 root root 4096 Feb 18 01:10 cdr/ drwxr-xr-x 14 root root 6144 Oct 23 18:37 cdrom/ drwxr-xr-x 4 root root 28672 Mar 5 18:01 dev/ drwxr-xr-x 10 root root 4096 Mar 8 03:32 etc/ drwxr-xr-x 8 root root 4096 Mar 8 03:31 home/ drwxr-xr-x 3 root root 4096 Jan 23 21:29 lib/ drwxr-xr-x 2 root root 16384 Nov 1 08:53 lost+found/ drwxr-xr-x 2 root root 4096 Oct 6 12:47 mnt/ dr-xr-xr-x 62 root root 0 Mar 4 15:32 proc/ drwxr-x--x 12 root root 4096 Feb 26 02:06 root/ drwxr-xr-x 2 root bin 4096 Feb 17 02:02 sbin/ drwxr-xr-x 5 root root 2048 Oct 25 10:51 suncd/ drwxrwxrwt 4 root root 487424 Mar 7 20:42 tmp/
drwxr-xr-x 21 root root 4096 Aug 24 03:04 usr/ drwxr-xr-x 18 root root 4096 Mar 8 03:32 var/ Ας υποθέσουμε ότι θέλετε να δείτε τα κρυφά αρχεία του τρέχοντος καταλόγου. Αυτή η εντολή θα κάνει ακριβώς αυτό: % ls -a. bin cdrom home mnt sbin usr.. boot dev lib proc suncd var.pwrchute_tmp cdr etc lost+found root tmp vmlinuz Τα αρχεία που ξεκινούν με τελεία (τα αποκαλούμενα dot files) δεν εμφανίζονται όταν τρέχετε την ls. Θα τα δείτε μόνο περνώντας την -a παράμετρο. Υπάρχουν πολλές ακόμα επιλογές και μπορείτε να τις βρείτε στην σελίδα man. Μην ξεχνάτε ότι μπορείτε να συνδυάσετε τις παραμέτρους που περνάτε στην ls. 10.1.2 cd Η εντολή cd χρησιμοποιείται για να αλλάξετε τον ενεργό κατάλογο. Απλά πληκτρολογείτε cd ακολουθούμενο από το μονοπάτι στο οποίο θέλετε να μεταβείτε. Εδώ μερικά παραδείγματα: darkstar:~$ cd /bin darkstar:/bin$ cd usr bash: cd: usr: No such file or directory darkstar:/bin$ cd /usr darkstar:/usr$ ls bin darkstar:/usr$ cd bin darkstar:/usr/bin$ Προσέξτε ότι χωρίς την αρχική κάθετο, προσπαθεί να μεταβεί σε έναν κατάλογο μέσα στον ενεργό. Επίσης εκτελώντας την cd χωρίς παραμέτρους θα μεταβείτε στον προσωπικό κατάλογο (home). Η εντολή cd δεν είναι σαν τις υπόλοιπες. Είναι ενσωματωμένη στο κέλυφος εντολή. Στις ενσωματωμένες στο κέλυφος εντολές αναφέρεται η ενότητα 8.3.1. Αυτό ίσως δεν φαίνεται αμέσως να έχει νόημα. Βασικά σημαίνει ότι δεν υπάρχει σελίδα man για αυτή την εντολή. Αντί για αυτή, πρέπει να χρησιμοποιήσετε τη βοήθεια του κέλυφους. Ως εξής: % help cd Θα εμφανίσει τις επιλογές για τη cd και πως να τις χρησιμοποιήσετε. 10.1.3 pwd Η pwd εντολή χρησιμοποιείται για να δείξει την τρέχουσα θέση σας. Για να τη χρησιμοποιήσετε απλά πληκτρολογήστε pwd. Για παράδειγμα: % cd /bin % pwd /bin % cd /usr % cd bin % pwd /usr/bin
10.2 Σελιδοποίηση: more, less και most 10.2.1 more Η more(1) είναι αυτό που αποκαλούμε εργαλείο σελιδοποίησης. Συχνά η έξοδος μιας εντολής είναι υπερβολικά μεγάλη για να χωρέσει σε μια οθόνη. Οι μεμονωμένες εντολές δεν ξέρουν πως να χωρέσουν την έξοδο σε χωριστές οθόνες. Αφήνουν τη δουλειά στο εργαλείο σελιδοποίησης. Η εντολή more σπάει την έξοδο σε μεμονωμένες οθόνες και περιμένει να πατήσετε την space bar πριν συνεχίσει στην επόμενη οθόνη. Πατώντας το enter θα προχωρήσει η έξοδος κατά μια γραμμή. Εδώ ένα καλό παράδειγμα: % cd /usr/bin % ls -l Aυτό λογικά θα κυλά για λίγο. Για να σπάσετε την έξοδο σε σελίδες, απλά προωθήστε την έξοδο στη more: % ls -l more Αυτός είναι ο χαρακτήρας ανακατεύθυνσης εξόδου (pipe, shift backslash). Η ανακατεύθυνση συνοπτικά σημαίνει πάρε την έξοδο της ls και δώσε την ως είσοδο στη more. Μπορείτε να ανακατευθύνετε πρακτικά οτιδήποτε στη more, όχι μόνο την ls. Η ανακατεύθυνση καλύπτεται επίσης στην ενότητα 8.2.3. 10.2.2. less Η εντολή more είναι αρκετά πρακτική, αλλά συχνά θα ανακαλύψετε ότι προσπεράσατε τη σελίδα που θέλατε. Με την more δεν υπάρχει τρόπος να επιστρέψετε. Η εντολή less(1) παρέχει αυτή τη λειτουργία. Χρησιμοποιείται με τον ίδιο τρόπο όπως η more, άρα τα προηγούμενα παραδείγματα ταιριάζουν και εδώ. Συνεπώς η less είναι περισσότερα από τη more. Ο Joost Kremens το θέτει ως εξής: H less είναι περισσοτερα, αλλά περισσότερο more από τη more, άρα η more είναι λιγότερο less, άρα χρησιμοποιήστε περισσότερο less αν θέλετε λιγότερο more. 10.2.3 most Εκεί που τελειώνουν οι more και less αναλαμβάνει η most(1). Αν η less είναι περισσότερα από την more, η most είναι περισσότερα από τη less. Ενώ οι άλλοι σελιδοποιητές μπορούν να απεικονίσουν ένα αρχείο κάθε φορά η most είναι ικανή να απεικονίσει οσαδήποτε αρχεία, αρκεί το παράθυρο κάθε αρχείου να είναι τουλάχιστον 2 γραμμές. Η most έχει πολλές επιλογές, δείτε τη σελίδα man για λεπτομέρειες. 10.3 Απλή έξοδος: cat και echo 10.3.1 cat H cat(1) είναι συντομογραφία για την "συνένωση" (concatenate). Αρχικά σχεδιάστηκε για να συγχωνεύει αρχεία κειμένου σε ένα, αλλά μπορεί να χρησιμοποιηθεί για πολλούς ακόμη σκοπούς. Για να συγχωνεύσετε δύο ή περισσότερα αρχεία σε ένα, απλά δώστε τα αρχεία μετά την εντολή cat και ανακατευθύνετε τη νέα έξοδο σε ένα αρχείο. H cat δουλεύει με την βασική είσοδο και έξοδο (standard input and output), άρα θα πρέπει να χρησιμοποιήσετε τους χαρακτήρες ανακατεύθυνσης του κέλυφους. Για παράδειγμα: % cat file1 file2 file3 > bigfile Αυτή η εντολή παίρνει τα περιεχόμενα των file1, file2, file3 και τα συνενώνει. Η νέα έξοδος προωθείται στην βασική έξοδο. Κανείς μπορεί να χρησιμοποιήσει την cat για να απεικονίσει αρχεία. Πολλοί χρησιμοποιούν την cat μεσω των εντολών more και less, ώς εξής:
% cat file1 more Αυτό θα απεικονίσει το file1 και θα το ανακατευθύνει μέσω της εντολής more ώστε να δείτε μια οθόνη κάθε φορά. Μια άλλη κοινή χρήση της cat είναι η αντιγραφή αρχείων. Μπορείτε να αντιγράψετε οποιοδήποτε αρχείο με την cat, ώς εξής: % cat /bin/bash > ~/mybash Το πρόγραμμα /bin/bash αντιγράφεται στον προσωπικό κατάλογο και ονομάζεται mybash. Η cat έχει πολλές χρήσεις και αυτές που εξετάζονται εδώ είναι μόνο λίγες. Καθώς η cat χρησιμοποιεί εκτενώς τη βασική είσοδο και έξοδο, είναι ιδανική για χρήση σε σενάρια (scripts) του κελύφους ή ως μέρος άλλων σύνθετων εντολών. 10.3.2 echo Η εντολή echo(1) απεικονίζει το μήνυμα που καθορίζεται στην οθόνη. Εσείς καθορίζετε τη συμβολοσειρά που θα απεικονιστεί μετά την εντολή echo. Η προεπιλογή της echo είναι να απεικονίσει τη συμβολοσειρά και να τυπώσει έναν χαρακτήρα τέλους γραμμής μετά από αυτή. Μπορείτε να περάσετε την επιλογή -n για να αποφύγετε την εκτύπωση της νέας γραμμής. Η επιλογή -e θα οδηγήσει την echo να ψάξει για χαρακτήρες διαφυγής στη συμβολοσειρά και να τους εκτελέσει. 10.4 Δημιουργία: touch και mkdir 10.4.1 touch Η touch(1) χρησιμοποιείται για να αλλάξει τη χρονική σφραγίδα (timestamp) ενός αρχείου. Μπορείτε να αλλάξετε τις χρονικές σφραγίδες πρόσβασης και τροποποίησης με αυτή την εντολή. Αν το αρχείο που καθορίζεται δεν υπάρχει η touch θα δημιουργήσει ένα αρχείο μηδενικού μήκους με το όνομα που καθορίζεται. Για να σφραγίσετε ένα αρχείο με την τρέχουσα ώρα του συστήματος θα δίνατε αυτη την εντολή: % ls -al file1 -rw-r--r-- 1 root root 9779 Feb 7 21:41 file1 % touch file1 % ls -al file1 -rw-r--r-- 1 root root 9779 Feb 8 09:17 file1 Υπάρχουν αρκετές επιλογές για την touch και συμπεριλαμβάνονται επιλογές για τη χρονική σφραγίδα που θα τροποποιηθεί, ο χρόνος που θα χρησιμοποιηθεί και άλλα. H σελίδα man τις περιγράφει αναλυτικά. 10.4.2 mkdir Η mkdir(1) θα δημιουργήσει έναν καινούριο κατάλογο. Απλά καθορίζετε τον κατάλογο που θα δημιουργηθεί όταν τρέχετε τη mkdir. Το παράδειγμα δημιουργεί τον κατάλογο hejaz στον ενεργό κατάλογο: % mkdir hejaz Μπορείτε επίσης να προσδιορίσετε μονοπάτι, ως εξής: % mkdir /usr/local/hejaz Η επιλογή -p λέει στη mkdir να δημιουργήσει οποιονδήποτε μητρικό κατάλογο. Το παράδειγμα που προηγήθηκε θα αποτύχει αν δεν υπάρχει το /usr/local. Η επιλογή -p θα δημιουργήσει τα /usr/local και /usr/local/hejaz: % mkdir -p /usr/local/hejaz
10.5 Αντιγραφή και Μετακίνηση 10.5.1 cp Η cp(1) αντιγράφει αρχεία. Οι χρήστες DOS θα παρατηρήσουν ότι είναι παρόμοια με την εντολή copy. Υπάρχουν πολλές επιλογές για τη cp, άρα θα πρέπει να ρίξετε μια ματιά στη σελίδα man πριν τη χρησιμοποιήσετε. Μια κοινή χρήση της use είναι να αντιγράψει ένα αρχείο από μια τοποθεσία σε μια άλλη. Για παράδειγμα: % cp hejaz /tmp Αυτό αντιγράφει το αρχείο hejaz από τον ενεργό κατάλογο στον κατάλογο /tmp. Πολλοί χρήστες προτιμούν να διατηρήσουν τις χρονικές σφραγίδες, όπως σε αυτό το παράδειγμα: % cp -a hejaz /tmp Αυτό σας διαβεβαιώνει ότι οι χρονικές σφραγίδες δεν μεταβάλλονται με την αντιγραφή. Για να αντιγράψετε αναδρομικά τα περιεχόμενα ενός καταλόγου σε έναν άλλο κατάλογο, θα δίνατε αυτή την εντολή: % cp -R mydir /tmp Αυτό θα αντιγράψει τον κατάλογο mydir στον κατάλογο /tmp. Επίσης αν θέλετε να αντιγράψετε έναν κατάλογο ή ένα αρχείο, να διατηρήσετε τις παλιές του άδειες και χρονικές σφραγίδες και να το διατηρήσετε ανέπαφο χρησιμοποιήστε τη cp -p. % ls -l file -rw-r--r-- 1 root vlad 4 Jan 1 15:27 file % cp -p file /tmp % ls -l /tmp/file -rw-r--r-- 1 root vlad 4 Jan 1 15:27 file Η cp έχει πολλές ακόμα επιλογές που περιγράφονται αναλυτικά στη σελίδα man. 10.5.2 mv Η mv(1) μετακινεί αρχεία από μια θέση σε μια άλλη. Ακούγεται απλό και είναι. % mv oldfile /tmp/newfile Η mv έχει κάποιες χρήσιμες παραμέτρους από τη γραμμή εντολών που περιγράφονται αναλυτικά στη σελίδα man. Στην πράξη η mv σχεδόν ποτέ δεν χρησιμοποιείται με παραμέτρους γραμμής εντολών. 10.6 Διαγραφή: rm και rmdir 10.6.1 rm Η rm διαγράφει αρχεία και δέντρα καταλόγων. Οι χρήστες DOS θα προσέξουν πως είναι παρόμοια στις εντολές del και deltree. Η rm μπορεί να είναι πολύ επικίνδυνη αν δεν είστε προσεκτικοί. Αν και είναι κάποιες φορές δυνατή η επανάκτηση ενός αρχείου που διαγράφηκε πρόσφατα, μπορεί να είναι πολύπλοκο (και πιθανόν να έχει κόστος) και ξεπερνάει τους στόχους αυτού του βιβλίου. Για να διαγράψετε ένα μεμονωμένο αρχείο, καθορίστε το όνομά του όταν τρέχετε την rm: % rm file1 Αν το αρχείο δεν έχει άδεια εγγραφής ίσως σας επιστραφεί ένα μήνυμα άρνησης πρόσβασης. Για να εξαναγκάσετε τη διαγραφή του αρχείου σε κάθε περίπτωση, περάστε την επιλογή -f, ως εξής: % rm -f file1
Για να διαγράψετε έναν ολόκληρο κατάλογο, χρησιμοποιήτε τις επιλογές -r και -f μαζί. Αυτό είναι ένα καλό παράδειγμα διαγραφής όλων των περιεχομένων του σκληρού σας δίσκου. Σίγουρα δεν θέλετε να το κάνετε αυτό. Αλλά παρ'όλα αυτά ακολουθεί η εντολή: # rm -rf / Να είστε πολύ προσεκτικοί με την rm: μπορεί να αυτοτραυματιστείτε (you can shoot yourself in the foot). Υπάρχουν αρκετές επιλογές από τη γραμμή εντολών που περιγράφονται αναλυτικά στη σελίδα man. 10.6.2 rmdir Η rmdir(1) διαγράφει καταλόγους από το σύστημα αρχείων. Ο κατάλογος πρέπει να είναι άδειος πριν τη διαγραφή. Η σύνταξη είναι απλή: % rmdir <directory> Αυτό το παράδειγμα θα διαγράψει τον κατάλογο hejaz στον ενεργό κατάλογο: % rmdir hejaz Αν αυτός ο κατάλογος δεν υπάρχει η rmdir θα σας το πει. Μπορείτε επίσης να προσδιορίσετε πλήρες μονοπάτι του καταλόγου προς διαγραφή, όπως φαίνεται στο παράδειγμα: % rmdir /tmp/hejaz Το παράδειγμα θα προσπαθίσει να διαγράψει τον κατάλογο hejaz μέσα στον κατάλογο /tmp. Μπορείτε επίσης να διαγράψετε έναν κατάλογο και όλους τους μητρικούς του περνώντας την επιλογή -p. % rmdir -p /tmp/hejaz Αυτό πρώτα θα διαγράψει τον κατάλογο hejaz στον /tmp. Αν αυτό πετύχει, θα προσπαθήσει να διαγράψει το /tmp. Η rmdir θα συνεχίσει μέχρι να συμβεί ένα λάθος ή να διαγραφεί ολόκληρο το δέντρο που καθορίζεται. 10.7 Συνδέοντας αρχεία με το ln Η ln(1) χρησιμοποιείται για τη δημιουργία συνδέσμων μεταξύ αρχείων. Οι σύνδεσμοι μπορεί να είναι είτε σκληροί (hard links) ή συμβολικοί (soft/symbolic links). Οι διαφορές μεταξύ των δυο ειδών έχουν συζητηθεί στην ενότητα 9.3. Αν θέλατε να δημιουργήσετε συμβολικό σύνδεσμο στον κατάλογο /var/media/mp3 και να τον τοποθετήσετε στον προσωπικό σας κατάλογο, θα κάνατε αυτό: % ln -s /var/media/mp3 ~/mp3 Η επιλογή -s λέει στην ln να δημιουργήσει συμβολικό σύνδεσμο. Η επόμενη επιλογή είναι ο προορισμός του συνδέσμου και η τελευταία επιλογή είναι το όνομά του. Σε αυτή την περίπτωση, απλά θα δημιουργήσει ένα αρχείο με όνομα mp3 στον προσωπικό σας κατάλογο που δείχνει στο /var/media/mp3. Μπορείτε να ονομάσετε τον ίδιο τον σύνδεσμο όπως θέλετε απλά αλλάζοντας την τελευταία επιλογή. Η δημιουργία σκληρού συνδέσμου είναι εξίσου απλή. Αυτό που πρέπει να κάνετε είναι να παρακάμψετε την επιλογή -s. Ωστόσο οι σκληροί σύνδεσμοι κανονικά δεν πρέπει να αναφέρονται σε καταλόγους ή να γεφυρώνουν συστήματα καταλόγων. Για να δημιουργήσετε έναν σκληρό σύνδεσμο /usr/bin/email προς το /usr/bin/mutt, απλά πληκτρολογήστε τα ακόλουθα: % ln -s /var/media/mp3 ~/mp3