2.4 Μάθημα 1
Πιστοποιητικό: |
Linux Essentials |
---|---|
Έκδοση: |
1.6 |
Θέμα: |
2 Βρίσκοντας το Δρόμο σας σε ένα Σύστημα Linux |
Σκοπός: |
2.4 Δημιουργία, Μετακίνηση και Διαγραφή αρχείων |
Μάθημα: |
1 απο 1 |
Εισαγωγή
Αυτό το μάθημα καλύπτει τη διαχείριση αρχείων και καταλόγων στο Linux χρησιμοποιώντας εργαλεία γραμμής εντολών.
Ένα αρχείο είναι μια συλλογή δεδομένων με ένα όνομα και σύνολο χαρακτηριστικών. Εάν, για παράδειγμα, μεταφέρατε μερικές φωτογραφίες από το τηλέφωνό σας σε έναν υπολογιστή και τους δώσετε περιγραφικά ονόματα, θα έχετε τώρα μια δέσμη αρχείων εικόνας στον υπολογιστή σας. Αυτά τα αρχεία έχουν χαρακτηριστικά όπως η ώρα τελευταίας πρόσβασης ή τροποποίησης του αρχείου.
Ένας κατάλογος είναι ένα ειδικό είδος αρχείου που χρησιμοποιείται για την οργάνωση αρχείων. Ένας καλός τρόπος για να σκεφτείτε τους καταλόγους είναι σαν τους φακέλους αρχείων που χρησιμοποιούνται για την οργάνωση των εγγράφων σε ένα ντουλάπι αρχείων. Σε αντίθεση με τους χάρτινους φακέλους αρχείων, μπορείτε εύκολα να τοποθετήσετε καταλόγους μέσα σε άλλους καταλόγους.
Η γραμμή εντολών είναι ο πιο αποτελεσματικός τρόπος διαχείρισης αρχείων σε ένα σύστημα Linux. Το shell και τα εργαλεία γραμμής εντολών διαθέτουν χαρακτηριστικά που κάνουν τη χρήση της γραμμής εντολών ταχύτερη και ευκολότερη από έναν γραφικό διαχειριστή αρχείων.
Σε αυτήν την ενότητα θα χρησιμοποιήσετε τις εντολές ls
, mv
, cp
, pwd
, find
, touch
, rm
, rmdir
, echo
, cat
, και mkdir
για διαχείριση και οργάνωση αρχείων και καταλόγων.
Διάκριση Πεζών και Κεφαλαίων
Σε αντίθεση με τα Microsoft Windows, τα ονόματα αρχείων και καταλόγων στα συστήματα Linux κάνουν διάκριση πεζών-κεφαλαίων. Αυτό σημαίνει ότι τα ονόματα /etc/
και /ETC/
είναι διαφορετικοί κατάλογοι. Δοκιμάστε τις παρακάτω εντολές:
$ cd / $ ls bin dev home lib64 mnt proc run srv tmp var boot etc lib media opt root sbin sys usr $ cd ETC bash: cd: ETC: No such file or directory $ pwd / $ cd etc $ pwd /etc
Το pwd
σας δείχνει τον κατάλογο στον οποίο βρίσκεστε αυτήν τη στιγμή. Όπως μπορείτε να δείτε, η αλλαγή σε /ETC
δεν λειτούργησε καθώς δεν υπάρχει τέτοιος κατάλογος. Η αλλαγή στον κατάλογο /etc
που υπάρχει, πέτυχε.
Δημιουργία Καταλόγων
Η εντολή mkdir
χρησιμοποιείται για τη δημιουργία καταλόγων.
Ας δημιουργήσουμε έναν νέο κατάλογο εντός του αφετηριακού μας καταλόγου:
$ cd ~ $ pwd /home/user $ ls Desktop Documents Downloads $ mkdir linux_essentials-2.4 $ ls Desktop Documents Downloads linux_essentials-2.4 $ cd linux_essentials-2.4 $ pwd /home/emma/linux_essentials-2.4
Κατά τη διάρκεια αυτού του μαθήματος, όλες οι εντολές θα πραγματοποιούνται μέσα σε αυτόν τον κατάλογο ή σε έναν από τους υποκαταλόγους του.
Για να επιστρέψετε εύκολα στον κατάλογο μαθημάτων από οποιαδήποτε άλλη θέση στο σύστημα αρχείων σας, μπορείτε να χρησιμοποιήσετε την εντολή:
$ cd ~/linux_essentials-2.4
Το shell ερμηνεύει τον χαρακτήρα ~
ως τον κατάλογο αφετηρίας σας.
Όταν είστε στον κατάλογο μαθημάτων, δημιουργήστε μερικούς ακόμη καταλόγους που θα χρησιμοποιήσουμε για τις ασκήσεις. Μπορείτε να προσθέσετε όλα τα ονόματα καταλόγου, διαχωρισμένα με κενά, στο mkdir
:
$ mkdir creating moving copying/files copying/directories deleting/directories deleting/files globs mkdir: cannot create directory ‘copying/files’: No such file or directory mkdir: cannot create directory ‘copying/directories’: No such file or directory mkdir: cannot create directory ‘deleting/directories’: No such file or directory mkdir: cannot create directory ‘deleting/files’: No such file or directory $ ls creating globs moving
Παρατηρήστε το μήνυμα σφάλματος και ότι δημιουργήθηκαν μόνο τα moving
, globs
και creating
. Οι κατάλογοι copying
και deleting
δεν υπάρχουν ακόμα. Το mkdir
, από προεπιλογή, δεν θα δημιουργήσει έναν κατάλογο μέσα σε έναν κατάλογο που δεν υπάρχει. Η επιλογή -p
ή --parents
δίνει εντολή στο mkdir
να δημιουργήσει parent καταλόγους εάν δεν υπάρχουν. Δοκιμάστε την ίδια εντολή mkdir
με την επιλογή -p
:
$ mkdir -p creating moving copying/files copying/directories deleting/directories deleting/files globs
Τώρα δεν λαμβάνετε κανένα μήνυμα σφάλματος. Ας δούμε ποιοι κατάλογοι υπάρχουν τώρα:
$ find . ./creating ./moving ./globs ./copying ./copying/files ./copying/directories ./deleting ./deleting/directories ./deleting/files
Το πρόγραμμα find
χρησιμοποιείται συνήθως για την αναζήτηση αρχείων και καταλόγων, αλλά χωρίς καμία επιλογή, θα σας εμφανίσει μια λίστα με όλα τα αρχεία, τους καταλόγους και τους υποκαταλόγους του τρέχοντος καταλόγου σας.
Tip
|
Όταν παραθέτετε τα περιεχόμενα ενός καταλόγου με |
Δημιουργία Αρχείων
Συνήθως, τα αρχεία δημιουργούνται από τα προγράμματα που λειτουργούν με τα δεδομένα που είναι αποθηκευμένα στα αρχεία. Ένα κενό αρχείο μπορεί να δημιουργηθεί χρησιμοποιώντας την εντολή touch
. Εάν εκτελέσετε το touch
σε ένα υπάρχον αρχείο, τα περιεχόμενα του αρχείου δεν θα αλλάξουν, αλλά η χρονοσήμανση τροποποίησης αρχείου θα ενημερωθεί.
Εκτελέστε την ακόλουθη εντολή για να δημιουργήσετε ορισμένα αρχεία για το μάθημα globbing:
$ touch globs/question1 globs/question2012 globs/question23 globs/question13 globs/question14 $ touch globs/star10 globs/star1100 globs/star2002 globs/star2013
Τώρα ας επαληθεύσουμε ότι όλα τα αρχεία υπάρχουν στον κατάλογο globs
:
$ cd globs $ ls question1 question14 question23 star1100 star2013 question13 question2012 star10 star2002
Παρατηρήστε πώς το touch
δημιούργησε τα αρχεία; Μπορείτε να δείτε τα περιεχόμενα ενός αρχείου κειμένου με την εντολή cat
. Δοκιμάστε το σε ένα από τα αρχεία που μόλις δημιουργήσατε:
$ cat question14
Εφόσον το touch
δημιουργεί κενά αρχεία, δεν θα πρέπει να λάβετε έξοδο. Μπορείτε να χρησιμοποιήσετε το echo
με το >
για να δημιουργήσετε απλά αρχεία κειμένου. Δοκίμασέ το:
$ echo hello > question15 $ cat question15 hello
Το echo
εμφανίζει κείμενο στη γραμμή εντολών. Ο χαρακτήρας >
δίνει εντολή στο shell να γράψει την έξοδο μιας εντολής στο καθορισμένο αρχείο αντί για το τερματικό σας. Αυτό οδηγεί στην έξοδο του echo
, hello
σε αυτήν την περίπτωση, να γραφτεί στο αρχείο question15
. Αυτό δεν είναι συγκεκριμένο του echo
, μπορεί να χρησιμοποιηθεί με οποιαδήποτε εντολή.
Warning
|
Να είστε προσεκτικοί όταν χρησιμοποιείτε το |
Μετονομασία Aρχείων
Τα αρχεία μετακινούνται και μετονομάζονται με την εντολή mv
.
Θέστε τον κατάλογο εργασίας σας στον κατάλογο moving
:
$ cd ~/linux_essentials-2.4/moving
Δημιουργήστε μερικά αρχεία για εξάσκηση. Μέχρι τώρα, θα πρέπει να είστε ήδη εξοικειωμένοι με αυτές τις εντολές:
$ touch file1 file22 $ echo file3 > file3 $ echo file4 > file4 $ ls file1 file22 file3 file4
Ας υποθέσουμε ότι το file22
είναι τυπογραφικό λάθος και πρέπει να είναι file2
. Διορθώστε το με την εντολή mv
. Κατά τη μετονομασία ενός αρχείου, το πρώτο όρισμα είναι το τρέχων όνομα, το δεύτερο είναι το νέο όνομα:
$ mv file22 file2 $ ls file1 file2 file3 file4
Να είστε προσεκτικοί με την εντολή mv
. Εάν μετονομάσετε ένα αρχείο στο όνομα ενός υπάρχοντος αρχείου, θα το αντικαταστήσει. Ας το δοκιμάσουμε με το file3
και το file4
:
$ cat file3 file3 $ cat file4 file4 $ mv file4 file3 $ cat file3 file4 $ ls file1 file2 file3
Παρατηρήστε πώς τα περιεχόμενα του file3
είναι πλέον file4
. Χρησιμοποιήστε την επιλογή -i
για να σας ρωτήσει το mv
εάν πρόκειται να αντικαταστήσετε ένα υπάρχον αρχείο. Δοκίμασέ το:
$ touch file4 file5 $ mv -i file4 file3 mv: overwrite ‘file3’? y
Μετακίνηση Αρχείων
Τα αρχεία μετακινούνται από τον έναν κατάλογο στον άλλο με την εντολή mv
.
Δημιουργήστε μερικούς καταλόγους για να μετακινήσετε τα αρχεία σε αυτούς:
$ cd ~/linux_essentials-2.4/moving $ mkdir dir1 dir2 $ ls dir1 dir2 file1 file2 file3 file5
Μετακινήστε το file1
μέσα στο dir1
:
$ mv file1 dir1 $ ls dir1 dir2 file2 file3 file5 $ ls dir1 file1
Παρατηρήστε πώς το τελευταίο όρισμα για το mv
είναι ο κατάλογος προορισμού. Κάθε φορά που το τελευταίο όρισμα για το mv
είναι ένας κατάλογος, τα αρχεία μετακινούνται σε αυτόν. Μπορούν να καθοριστούν πολλαπλά αρχεία σε μία εντολή mv
:
$ mv file2 file3 dir2 $ ls dir1 dir2 file5 $ ls dir2 file2 file3
Είναι επίσης δυνατό να χρησιμοποιήσετε το mv
για να μετακινήσετε και να μετονομάσετε καταλόγους. Μετονομάστε το dir1
σε dir3
:
$ ls dir1 dir2 file5 $ ls dir1 file1 $ mv dir1 dir3 $ ls dir2 dir3 file5 $ ls dir3 file1
Διαγραφή Αρχείων και Καταλόγων
Η εντολή rm
μπορεί να διαγράψει αρχεία και καταλόγους, ενώ η εντολή rmdir
μπορεί να διαγράψει μόνο καταλόγους. Ας καθαρίσουμε τον κατάλογο moving
διαγράφοντας το file5
:
$ cd ~/linux_essentials-2.4/moving $ ls dir2 dir3 file5 $ rmdir file5 rmdir: failed to remove ‘file5’: Not a directory $ rm file5 $ ls dir2 dir3
Από προεπιλογή το rmdir
μπορεί να διαγράψει μόνο άδειους καταλόγους, επομένως έπρεπε να χρησιμοποιήσουμε το rm
για να διαγράψουμε ένα κανονικό αρχείο. Προσπαθήστε να διαγράψετε τον κατάλογο deleting
:
$ cd ~/linux_essentials-2.4/ $ ls copying creating deleting globs moving $ rmdir deleting rmdir: failed to remove ‘deleting’: Directory not empty $ ls -l deleting total 0 drwxrwxr-x. 2 emma emma 6 Mar 26 14:58 directories drwxrwxr-x. 2 emma emma 6 Mar 26 14:58 files
Από προεπιλογή, το rmdir
αρνείται να διαγράψει έναν κατάλογο που δεν είναι κενός. Χρησιμοποιήστε το rmdir
για να αφαιρέσετε έναν από τους κενούς υποκαταλόγους του καταλόγου deleting
:
$ ls -a deleting/files . .. $ rmdir deleting/files $ ls -l deleting directories
Η διαγραφή μεγάλου αριθμού αρχείων ή βαθιών δομών καταλόγων με πολλούς υποκαταλόγους μπορεί να φαίνεται κουραστική, αλλά στην πραγματικότητα είναι εύκολη. Από προεπιλογή, το rm
λειτουργεί μόνο σε κανονικά αρχεία. Η επιλογή -r
χρησιμοποιείται για την παράκαμψη αυτής της συμπεριφοράς. Προσοχή, το rm -r
είναι ένα εξαιρετικό όπλο! Όταν χρησιμοποιείτε την επιλογή -r
, το rm
όχι μόνο θα διαγράψει οποιουσδήποτε καταλόγους, αλλά και ό,τι υπάρχει μέσα σε αυτόν τον κατάλογο, συμπεριλαμβανομένων των υποκαταλόγων και των περιεχομένων τους. Δείτε μόνοι σας πώς λειτουργεί το rm -r
:
$ ls copying creating deleting globs moving $ rm deleting rm: cannot remove ‘deleting’: Is a directory $ ls -l deleting total 0 drwxrwxr-x. 2 emma emma 6 Mar 26 14:58 directories $ rm -r deleting $ ls copying creating globs moving
Παρατηρήστε πώς το deleting
έχει φύγει, ακόμα και αν δεν ήταν άδειο; Όπως το mv
, το rm
έχει μια επιλογή -i
για να σας ρωτήσει πριν κάνετε οτιδήποτε. Χρησιμοποιήστε το rm -ri
για να αφαιρέσετε καταλόγους από την ενότητα moving
που δεν χρειάζονται πλέον:
$ find . ./creating ./moving ./moving/dir2 ./moving/dir2/file2 ./moving/dir2/file3 ./moving/dir3 ./moving/dir3/file1 ./globs ./globs/question1 ./globs/question2012 ./globs/question23 ./globs/question13 ./globs/question14 ./globs/star10 ./globs/star1100 ./globs/star2002 ./globs/star2013 ./globs/question15 ./copying ./copying/files ./copying/directories $ rm -ri moving rm: descend into directory ‘moving’? y rm: descend into directory ‘moving/dir2’? y rm: remove regular empty file ‘moving/dir2/file2’? y rm: remove regular empty file ‘moving/dir2/file3’? y rm: remove directory ‘moving/dir2’? y rm: descend into directory ‘moving/dir3’? y rm: remove regular empty file ‘moving/dir3/file1’? y rm: remove directory ‘moving/dir3’? y rm: remove directory ‘moving’? y
Αντιγραφή Αρχείων και Καταλόγων
Η εντολή cp
χρησιμοποιείται για την αντιγραφή αρχείων και καταλόγων. Αντιγράψτε μερικά αρχεία στον κατάλογο copying
:
$ cd ~/linux_essentials-2.4/copying $ ls directories files $ cp /etc/nsswitch.conf files/nsswitch.conf $ cp /etc/issue /etc/hostname files
Εάν το τελευταίο όρισμα είναι ένας κατάλογος, το cp
θα δημιουργήσει ένα αντίγραφο των προηγούμενων ορισμάτων μέσα στον κατάλογο. Όπως το mv
, μπορούν να καθοριστούν πολλά αρχεία ταυτόχρονα, εφόσον ο στόχος είναι ένας κατάλογος.
Όταν και οι δύο τελεστές του cp
είναι αρχεία και υπάρχουν, το cp
αντικαθιστά το δεύτερο αρχείο με ένα αντίγραφο του πρώτου αρχείου. Ας το εξασκήσουμε αυτό αντικαθιστώντας το αρχείο issue
με το αρχείο hostname
:
$ cd ~/linux_essentials-2.4/copying/files $ ls hostname issue nsswitch.conf $ cat hostname mycomputer $ cat issue Debian GNU/Linux 9 \n \l $ cp hostname issue $ cat issue mycomputer
Τώρα ας προσπαθήσουμε να δημιουργήσουμε ένα αντίγραφο του καταλόγου files
μέσα στον κατάλογο directories
:
$ cd ~/linux_essentials-2.4/copying $ cp files directories cp: omitting directory ‘files’
Όπως μπορείτε να δείτε, το cp
από προεπιλογή λειτουργεί μόνο σε μεμονωμένα αρχεία. Για να αντιγράψετε έναν κατάλογο, χρησιμοποιείτε την επιλογή -r
. Λάβετε υπόψη ότι η επιλογή -r
θα κάνει το cp
να αντιγράψει επίσης τα περιεχόμενα του καταλόγου που αντιγράφετε:
$ cp -r files directories $ find . ./files ./files/nsswitch.conf ./files/fstab ./files/hostname ./directories ./directories/files ./directories/files/nsswitch.conf ./directories/files/fstab ./directories/files/hostname
Παρατηρήσατε πώς όταν ένας υπάρχων κατάλογος χρησιμοποιήθηκε ως προορισμός, το cp
δημιουργεί ένα αντίγραφο του καταλόγου προέλευσης μέσα σε αυτόν; Εάν ο προορισμός δεν υπάρχει, θα τον δημιουργήσει και θα τον γεμίσει με τα περιεχόμενα του καταλόγου προέλευσης:
$ cp -r files files2 $ find . ./files ./files/nsswitch.conf ./files/fstab ./files/hostname ./directories ./directories/files ./directories/files/nsswitch.conf ./directories/files/fstab ./directories/files/hostname ./files2 ./files2/nsswitch.conf ./files2/fstab ./files2/hostname
Globbing
Αυτό που συνήθως αναφέρεται ως globbing είναι μια απλή γλώσσα αντιστοίχισης μοτίβων. Τα shells γραμμής εντολών σε συστήματα Linux χρησιμοποιούν αυτή τη γλώσσα για να αναφέρονται σε ομάδες αρχείων των οποίων τα ονόματα ταιριάζουν με ένα συγκεκριμένο μοτίβο. Το POSIX.1-2017 καθορίζει τους ακόλουθους χαρακτήρες αντιστοίχισης μοτίβων:
*
-
Ταιριάζει με οποιονδήποτε αριθμό (πλήθος) οποιουδήποτε χαρακτήρα, συμπεριλαμβανομένων μη χαρακτήρων
?
-
Ταιριάζει με οποιονδήποτε χαρακτήρα
[]
-
Ταιριάζει με μια κλάση χαρακτήρων
Στα Αγγλικά, αυτό σημαίνει ότι μπορείτε να πείτε στο κέλυφός σας να ταιριάξει με ένα μοτίβο αντί για μια κυριολεκτική συμβολοσειρά κειμένου. Συνήθως οι χρήστες Linux καθορίζουν πολλά αρχεία με ένα glob αντί να πληκτρολογούν κάθε όνομα αρχείου. Εκτελέστε τις παρακάτω εντολές:
$ cd ~/linux_essentials-2.4/globs $ ls question1 question14 question2012 star10 star2002 question13 question15 question23 star1100 star2013 $ ls star1* star10 star1100 $ ls star* star10 star1100 star2002 star2013 $ ls star2* star2002 star2013 $ ls star2*2 star2002 $ ls star2013* star2013
Το shell επεκτείνει to *
σε οποιονδήποτε αριθμό του οτιδήποτε, επομένως το κέλυφός σας ερμηνεύει το star*
να σημαίνει οτιδήποτε στο πλαίσιο που ξεκινά με star
. Όταν εκτελείτε την εντολή ls star*
, το κέλυφός σας δεν εκτελεί το πρόγραμμα ls
με όρισμα star*
, αναζητά αρχεία στον τρέχοντα κατάλογο που ταιριάζουν με το μοτίβο star*
(συμπεριλαμβανομένου μόνο star
) και μετατρέπει κάθε αρχείο που ταιριάζει με το μοτίβο σε όρισμα για το ls
:
$ ls star*
όσον αφορά το ls
είναι το ισοδύναμο του
$ ls star10 star1100 star2002 star2013
Ο χαρακτήρας *
δεν σημαίνει τίποτα για το ls
. Για να το αποδείξετε αυτό, εκτελέστε την ακόλουθη εντολή:
$ ls star\* ls: cannot access star*: No such file or directory
Όταν το \`προηγείται ενός χαρακτήρα, δίνετε εντολή στο κέλυφός σας να μην τον ερμηνεύει. Σε αυτήν την περίπτωση, θέλετε το `ls
να έχει ως όρισμα το star*
αντί για αυτό στο οποίο επεκτείνεται το glob star*
.
Το ?
επεκτείνεται σε οποιονδήποτε μεμονωμένο χαρακτήρα. Δοκιμάστε τις παρακάτω εντολές για να δείτε μόνοι σας:
$ ls question1 question14 question2012 star10 star2002 question13 question15 question23 star1100 star2013 $ ls question? question1 $ ls question1? question13 question14 question15 $ ls question?3 question13 question23 $ ls question13? ls: cannot access question13?: No such file or directory
Οι αγκύλες []
χρησιμοποιούνται για την αντιστοίχιση ενός εύρους ή κλάσεων χαρακτήρων. Οι αγκύλες []
λειτουργούν όπως στις POSIX regular expressions, εκτός από το ότι με τα globs το ^
χρησιμοποιείται αντί για το !
.
Δημιουργήστε μερικά αρχεία για να πειραματιστείτε:
$ mkdir brackets $ cd brackets $ touch file1 file2 file3 file4 filea fileb filec file5 file6 file7
Τα εύρη εντός αγκύλων []
εκφράζονται χρησιμοποιώντας ένα -
:
$ ls file1 file2 file3 file4 file5 file6 file7 filea fileb filec $ ls file[1-2] file1 file2 $ ls file[1-3] file1 file2 file3
Μπορούν να καθοριστούν πολλαπλά εύρη:
$ ls file[1-25-7] file1 file2 file5 file6 file7 $ ls file[1-35-6a-c] file1 file2 file3 file5 file6 filea fileb filec
Οι τετράγωνες αγκύλες μπορούν επίσης να χρησιμοποιηθούν για να ταιριάξουν ένα συγκεκριμένο σύνολο χαρακτήρων.
$ ls file[1a5] file1 file5 filea
Μπορείτε επίσης να χρησιμοποιήσετε τον χαρακτήρα ^
ως τον πρώτο χαρακτήρα για να ταιριάξετε τα πάντα εκτός από ορισμένους χαρακτήρες.
$ ls file[^a] file1 file2 file3 file4 file5 file6 file7 fileb filec
Το τελευταίο πράγμα που θα καλύψουμε σε αυτό το μάθημα είναι οι κλάσεις χαρακτήρων. Για να ταιριάξετε μια κλάση χαρακτήρων, χρησιμοποιείτε το [:classname:]
. Για παράδειγμα, για να χρησιμοποιήσετε την κλάση ψηφίων, η οποία ταιριάζει αριθμητικά, θα κάνετε κάτι σαν αυτό:
$ ls file[[:digit:]] file1 file2 file3 file4 file5 file6 file7 $ touch file1a file11 $ ls file[[:digit:]a] file1 file2 file3 file4 file5 file6 file7 filea $ ls file[[:digit:]]a file1a
Το glob file[[:digit:]a]
, αντιστοιχεί στο file
ακολουθούμενο από ένα ψηφίο ή ένα a
.
Οι υποστηριζόμενες κλάσεις χαρακτήρων εξαρτώνται από την τρέχουσα ρύθμιση γλώσσας. Το POSIX απαιτεί τις ακόλουθες κλάσεις χαρακτήρων για όλες τις ρυθμίσεις γλώσσας:
[:alnum:]
-
Γράμματα και αριθμοί.
[:alpha:]
-
Κεφάλαια ή πεζά γράμματα.
[:blank:]
-
Κενά διαστήματα και στηλοθέτες [tabs].
[:cntrl:]
-
Χαρακτήρες ελέγχου, π.χ. backspace, bell, NAK, escape.
[:digit:]
-
Αριθμητικά (
0123456789
). [:graph:]
-
Γραφικοί χαρακτήρες (όλοι οι χαρακτήρες εκτός από το
ctrl
και τον χαρακτήρα διαστήματος) [:lower:]
-
Πεζά γράμματα (
a-z
). [:print:]
-
Εκτυπώσιμοι χαρακτήρες (
alnum
,punct
και ο χαρακτήρας διαστήματος). [:punct:]
-
Χαρακτήρες στίξης, π.χ.
!
,&
,"
. [:space:]
-
Χαρακτήρες κενού διαστήματος, π.χ. στηλοθέτες, κενά, νέες γραμμές.
[:upper:]
-
Κεφάλαια γράμματα (
A-Z
). [:xdigit:]
-
Δεκαεξαδικοί αριθμοί (συνήθως
0123456789abcdefABCDEF
).
Καθοδηγούμενες Ασκήσεις
-
Λαμβάνοντας υπόψη τα ακόλουθα, επιλέξτε τους καταλόγους που θα δημιουργηθούν με την εντολή
mkdir -p /tmp/outfiles/text/today /tmp/infiles/text/today
$ pwd /tmp $ find . ./outfiles ./outfiles/text
/tmp
/tmp/outfiles
/tmp/outfiles/text
/tmp/outfiles/text/today
/tmp/infiles
/tmp/infiles/text
/tmp/infiles/text/today
-
Τι κάνει το
-v
για ταmkdir
,rm
καιcp
; -
Τι συμβαίνει εάν επιχειρήσετε κατά λάθος να αντιγράψετε τρία αρχεία στην ίδια γραμμή εντολών σε ένα αρχείο που υπάρχει ήδη αντί για έναν κατάλογο;
-
Τι συμβαίνει όταν χρησιμοποιείτε το
mv
για να μετακινήσετε έναν κατάλογο στον εαυτό του; -
Πώς θα διαγράφατε όλα τα αρχεία στον τρέχοντα κατάλογο που ξεκινούν με
old
; -
Ποιο από τα παρακάτω αρχεία θα ταιριάζει με το
log_[a-z]_201?_*_01.txt
;log_3_2017_Jan_01.txt
log_+_2017_Feb_01.txt
log_b_2007_Mar_01.txt
log_f_201A_Wednesday_01.txt
-
Δημιουργήστε μερικά globs για να ταιριάξετε την ακόλουθη λίστα ονομάτων αρχείων:
doc100 doc200 doc301 doc401
Ασκήσεις Εξερεύνησης
-
Χρησιμοποιήστε τη σελίδα εγχειριδίου man για το
cp
για να μάθετε πώς μπορείτε να δημιουργήσετε ένα αντίγραφο ενός αρχείου και να έχετε τα δικαιώματα και τον χρόνο τροποποίησης να ταιριάζουν με το πρωτότυπο. -
Τι κάνει η εντολή
rmdir -p
; Πειραματιστείτε με αυτή και εξηγήστε πώς διαφέρει από τοrm -r
. -
ΜΗΝ ΕΚΤΕΛΕΣΕΤΕ ΣΤΗΝ ΠΡΑΓΜΑΤΙΚΟΤΗΤΑ ΑΥΤΗ ΤΗΝ ΕΝΤΟΛΗ: Τι πιστεύετε ότι θα κάνει το
rm -ri /*
; (ΕΙΛΙΚΡΙΝΑ, ΜΗΝ ΕΠΙΧΕΙΡΗΣΕΤΕ ΝΑ ΤΟ ΚΑΝΕΤΕ ΑΥΤΟ!) -
Εκτός από τη χρήση του
-i
, είναι δυνατόν να αποτραπεί η αντικατάσταση των αρχείων προορισμού τουmv
; -
Εξηγήστε την εντολή
cp -u
.
Σύνοψη
Το περιβάλλον γραμμής εντολών Linux παρέχει εργαλεία για τη διαχείριση αρχείων. Μερικά κοινώς χρησιμοποιούμενα είναι τα cp
, mv
, mkdir
, rm
και rmdir
. Αυτά τα εργαλεία, σε συνδυασμό με globs, επιτρέπουν στους χρήστες να κάνουν πολλή δουλειά πολύ γρήγορα.
Πολλές εντολές έχουν μια επιλογή -i
, η οποία σας προτρέπει πριν κάνετε οτιδήποτε. Το prompt μπορεί να σας γλιτώσει από πολλή ταλαιπωρία εάν πληκτρολογήσετε κάτι λάθος.
Πολλές εντολές έχουν την επιλογή -r
. Η επιλογή -r
συνήθως σημαίνει αναδρομή. Στα μαθηματικά και την επιστήμη των υπολογιστών, μια αναδρομική συνάρτηση είναι μια συνάρτηση που χρησιμοποιεί τον εαυτό της στον ορισμό της. Όταν πρόκειται για εργαλεία γραμμής εντολών, συνήθως σημαίνει εφαρμογή της εντολής σε έναν κατάλογο και σε όλα όσα υπάρχουν μέσα σε αυτόν.
Εντολές που χρησιμοποιήθηκαν σε αυτό το μάθημα:
cat
-
Διάβασμα και έξοδος των περιεχομένων ενός αρχείου.
cp
-
Αντιγράψτε αρχεία ή καταλόγους.
echo
-
Έξοδος μιας συμβολοσειράς.
find
-
Διατρέξτε ένα δέντρο συστήματος αρχείων και αναζητήστε αρχεία που ταιριάζουν με ένα συγκεκριμένο σύνολο κριτηρίων.
ls
-
Εμφανίστε ιδιότητες αρχείων και καταλόγων και παραθέστε τα περιεχόμενα ενός καταλόγου.
mkdir
-
Δημιουργήστε νέους καταλόγους.
mv
-
Μετακίνηση ή μετονομασία αρχείων ή καταλόγων.
pwd
-
Έξοδος του τρέχοντος καταλόγου εργασίας.
rm
-
Διαγράψτε αρχεία ή καταλόγους.
rmdir
-
Διαγραφή καταλόγων.
touch
-
Δημιουργήστε νέα κενά αρχεία ή ενημερώστε τη χρονική σήμανση τροποποίησης ενός υπάρχοντος αρχείου.
Απαντήσεις στις Καθοδηγούμενες Ασκήσεις
-
Λαμβάνοντας υπόψη τα ακόλουθα, επιλέξτε τους καταλόγους που θα δημιουργηθούν με την εντολή
mkdir -p /tmp/outfiles/text/today /tmp/infiles/text/today
$ pwd /tmp $ find . ./outfiles ./outfiles/text
Θα δημιουργηθούν οι επισημασμένοι κατάλογοι. Οι κατάλογοι
/tmp
,/tmp/outfiles
και/tmp/outfiles/text
υπάρχουν ήδη, επομένως τοmkdir
θα τους αγνοήσει./tmp
/tmp/outfiles
/tmp/outfiles/text
/tmp/outfiles/text/today
X
/tmp/infiles
X
/tmp/infiles/text
X
/tmp/infiles/text/today
X
-
Τι κάνει το
-v
για ταmkdir
,rm
καιcp
;Τυπικά το
-v
ενεργοποιεί την φλύαρη [verbose] έξοδο. Αναγκάζει τα αντίστοιχα προγράμματα να βγάζουν στην έξοδο αυτό που κάνουν καθώς το κάνουν:$ rm -v a b removed 'a' removed 'b' $ mv -v a b 'a' -> 'b' $ cp -v b c 'b' -> 'c'
-
Τι συμβαίνει εάν επιχειρήσετε κατά λάθος να αντιγράψετε τρία αρχεία στην ίδια γραμμή εντολών σε ένα αρχείο που υπάρχει ήδη αντί για έναν κατάλογο;
Το
cp
θα αρνηθεί να κάνει οτιδήποτε και θα εμφανίσει ένα μήνυμα σφάλματος:$ touch a b c d $ cp a b c d cp: target 'd' is not a directory
-
Τι συμβαίνει όταν χρησιμοποιείτε το
mv
για να μετακινήσετε έναν κατάλογο στον εαυτό του;Θα λάβετε ένα μήνυμα σφάλματος που θα σας λέει ότι το
mv
δεν μπορεί να το κάνει αυτό.$ mv a a mv: cannot move 'a' to a subdirectory of itself, 'a/a'
-
Πώς θα διαγράφατε όλα τα αρχεία στον τρέχοντα κατάλογο που ξεκινούν με
old
;Θα χρησιμοποιούσατε το glob
old*
με τοrm
:$ rm old*
-
Ποιο από τα παρακάτω αρχεία θα ταιριάζει με το
log_[a-z]_201?_*_01.txt
;log_3_2017_Jan_01.txt
log_+_2017_Feb_01.txt
log_b_2007_Mar_01.txt
log_f_201A_Wednesday_01.txt
X
$ ls log_[a-z]_201?_*_01.txt log_f_201A_Wednesday_01.txt
Το
log_[a-z]
αντιστοιχεί στοlog_
ακολουθούμενο από οποιοδήποτε πεζό γράμμα, επομένως ταιριάζουν και τα δύοlog_f_201A_Wednesday_01.txt
καιlog_b_2007_Mar_01.txt
. Το_201?
αντιστοιχεί σε οποιονδήποτε μεμονωμένο χαρακτήρα, επομένως μόνο τοlog_f_201A_Wednesday_01.txt
ταιριάζει. Τέλος, το*_01.txt
αντιστοιχεί σε οτιδήποτε τελειώνει με_01.txt
, οπότε η υπόλοιπη επιλογή μας ταιριάζει. -
Δημιουργήστε μερικά globs για να ταιριάξετε την ακόλουθη λίστα ονομάτων αρχείων:
doc100 doc200 doc301 doc401
Υπάρχουν αρκετές λύσεις. Εδώ είναι μερικά από αυτά:
doc* doc[1-4]* doc?0? doc[1-4]0?
Απαντήσεις στις Ασκήσεις Εξερεύνησης
-
Χρησιμοποιήστε τη σελίδα εγχειριδίου man για το
cp
για να μάθετε πώς μπορείτε να δημιουργήσετε ένα αντίγραφο ενός αρχείου και να έχετε τα δικαιώματα και τον χρόνο τροποποίησης να ταιριάζουν με το πρωτότυπο.Θα χρησιμοποιούσατε την επιλογή
-p
. Από τη σελίδα man:$ man cp -p same as --preserve=mode,ownership,timestamps --preserve[=ATTR_LIST] preserve the specified attributes (default: mode,ownership,time‐ stamps), if possible additional attributes: context, links, xattr, all
-
Τι κάνει η εντολή
rmdir -p
; Πειραματιστείτε με αυτή και εξηγήστε πώς διαφέρει από τοrm -r
.Αναγκάζει το
rmdir
να συμπεριφέρεται παρόμοια με τοmkdir -p
. Εάν του δοθεί ένα δέντρο άδειων καταλόγων, θα καταργηθούν όλοι.$ find . ./a ./a/b ./a/b/c $ rmdir -p a/b/c $ ls
-
ΜΗΝ ΕΚΤΕΛΕΣΕΤΕ ΣΤΗΝ ΠΡΑΓΜΑΤΙΚΟΤΗΤΑ ΑΥΤΗ ΤΗΝ ΕΝΤΟΛΗ: Τι πιστεύετε ότι θα κάνει το
rm -ri /*
; (ΕΙΛΙΚΡΙΝΑ, ΜΗΝ ΕΠΙΧΕΙΡΗΣΕΤΕ ΝΑ ΤΟ ΚΑΝΕΤΕ ΑΥΤΟ!)Θα αφαιρέσει όλα τα αρχεία και τους καταλόγους για τα οποία έχει δικαίωμα εγγραφής ο λογαριασμός χρήστη σας. Αυτό περιλαμβάνει όλα τα συστήματα αρχείων δικτύου.
-
Εκτός από τη χρήση του
-i
, είναι δυνατόν να αποτραπεί η αντικατάσταση των αρχείων προορισμού τουmv
;Ναι, η επιλογή
-n
ή--no-clobber
αποτρέπει τοmv
από την αντικατάσταση αρχείων.$ cat a a $ cat b b $ mv -n a b $ cat b b
-
Εξηγήστε την εντολή
cp -u
.Η επιλογή
-u
κάνει τοcp
να αντιγράφει ένα αρχείο μόνο εάν ο προορισμός λείπει ή είναι παλαιότερος από το αρχείο προέλευσης.$ ls -l total 24K drwxr-xr-x 123 emma student 12K Feb 2 05:34 .. drwxr-xr-x 2 emma student 4.0K Feb 2 06:56 . -rw-r--r-- 1 emma student 2 Feb 2 06:56 a -rw-r--r-- 1 emma student 2 Feb 2 07:00 b $ cat a a $ cat b b $ cp -u a b $ cat b b $ cp -u a c $ ls -l total 12 -rw-r--r-- 1 emma student 2 Feb 2 06:56 a -rw-r--r-- 1 emma student 2 Feb 2 07:00 b -rw-r--r-- 1 emma student 2 Feb 2 07:00 c