Αναζήτηση αρχείων
Πολλές φορές ίσως χρειαστείτε κάποιο αρχείο αλλά δεν γνωρίζετε σε ποια θέση βρίσκεται. Ή ακόμη μπορεί να θελήσετε να βρείτε ένα συγκεκριμένο τύπο αρχείων ή ποια αρχεία έχουν μεταβληθεί την τελευταία ημέρα, κλπ. Το Linux προσφέρει αρκετά εργαλεία αναζήτησης αρχείων, το καθένα από τα οποία εξυπηρετεί και διαφορετικό σκοπό. Θα αναφέρουμε εδώ τα κυριότερα και πιο χρήσιμα για καθημερική χρήση.
Η εντολή find
Η εντολή find είναι ίσως το πιο δυνατό εργαλείο για αναζήτηση αρχείων. Η αναζήτηση μέσω της find μπορεί να γίνει χρησιμοποιώντας πολλά κριτήρια ακόμη και σε συνδυασμό. Ενδεικτικά αναφέρουμε ορισμένα από τα κριτήρια αναζήτησης:
- Αναζήτηση με το χρόνο προσπέλασης του αρχείου.
- Αναζήτηση με το χρόνο τροποποίησης του αρχείου.
- Αναζήτηση με το όνομα του ιδιοκτήτη ή της ομάδας του αρχείου.
- Αναζήτηση με τις άδειες προσπέλασης του αρχείου.
- Αναζήτηση με τον τύπο του αρχείου.
- Αναζήτηση με τη σχετική ηλικία του αρχείου ως προς κάποιο άλλο αρχείο.
- Αναζήτηση με το μέγεθος του αρχείου.
- Αναζήτηση με το όνομα ή με κάποια κανονική παράσταση (regular expression) χρησιμοποιώντας μεταχαρακτήρες.
Η σύνταξή της find είναι η εξής:
find directory OPTIONS ACTION
όπου directory είναι το σημείο εκκίνησης της αναζήτησης, δηλαδή ο κατάλογος από τον οποίο θα ξεκινήσει την αναζήτηση η find. Ορισμένες από τις επιλογές που δέχεται η find αναγράφονται στον επόμενο πίνακα:
|
Επιλογές
|
Λειτουργία
|
|
-amin N -atime N |
Αναζήτηση με το χρόνο προσπέλασης του αρχείου, όπου N ο αριθμός των λεπτών (για την amin) ή των ημερών (για την atime) από την τελευταία προσπέλαση. Με τη χρήση των τελεστών +, - μπορούμε να ζητήσουμε τα αρχεία που προσπελάστηκαν πριν από χρόνο μεγαλύτερο (+) ή μικρότερο (-) από N λεπτά/ημέρες. |
|
-cmin N -ctime N |
Παρόμοια λειτουργία με τις amin, atime αλλά για το χρόνο από την τελευταία τροποποίηση. |
| -follow | Αφορά τους συμβολικούς συνδέσμους αρχείων. Η διαδικασία της αναζήτησης θα εφαρμοστεί στο πραγματικό αρχείο και όχι στο σύνδεσμό του. |
| -group gname | Αναζήτηση με το όνομα της ομάδας χρηστών gname. |
| -user uname | Αναζήτηση με το όνομα χρήστη uname. |
|
-mindepth -maxdepth |
Ελάχιστο και μέγιστο βάθος διαδρομής καταλόγου στο οποίο θα πραγματοποιηθεί η αναζήτηση. Δηλαδή, καθορίζει το βάθος του δέντρου αρχείων στο οποίων θα αναζητήσει αρχεία η find. |
| -name expr | Αναζήτηση με το όνομα ή την κανονική παράσταση expr. |
| -newer file | Αναζήτηση νεώτερων αρχείων από το file. |
| -perm protbits | Αναζήτηση αρχείων που έχουν τις άδειες προσέλασης που δίνονται (protbits) σε οκταδική (απόλυτη) μορφή. |
| -size N[bckw] | Αναζήτηση με το μέγεθος. Αναγνωρίζονται οι εξής μονάδες μεγέθους: 512-byte block ('b'), bytes ('c'), kilobytes ('k'), 2-byte words ('w'). Ισχύουν και εδώ οι τελεστές +, - ζητώντας αντίστοιχα μεγαλύτερα ή μικρότερα μεγέθη αρχείων. |
| -type T | Αναζήτηση με τον τύπο του αρχείου, όπου T μπορεί να είναι ένα από τα εξής: ειδικό αρχείο block ('b'), ειδικό αρχείο χαρακτήρα ('c'), κατάλογος ('d'), ονομαστικός δίαυλος (FIFO) ('p'), κοινό αρχείο ('f'), συμβολικός σύνδεσμος ('l'), υποδοχέας (socket) ('s'). |
Ως δράση (ACTION) μπορούμε να έχουμε μία από τις εξής:
|
Παράμετρος
|
Λειτουργία
|
| -exec cmd | Εκτελεί την εντολή cmd για κάθε αρχείο που βρίσκει. Το όνομα του εκάστοτε αρχείου συμβολίζεται με τα άγκιστρα {}. |
| -ok cmd | Το ίδιο, αλλά με ερώτηση επιβεβαίωσης πριν από την εκτέλεση της εντολής. |
| Επιστρέφει το όνομα του αρχείου που βρέθηκε. | |
| -ls | Επιστρέφει το αποτέλεσμα της εντολής ls -dils για κάθε αρχείο που βρέθηκε. |
Παραδείγματα:
$ find /usr/include -name “v*.h” -print
Αναζήτηση όλων των αρχείων κεφαλίδας (include files) που βρίσκονται στον κατάλογο /usr/include και των οποίων το όνομα αρχίζει από v.
$ find / -name core -exec rm -f “{}” \;
Αναζήτηση όλων των αποτυπωμάτων μνήμης (core dumps) που βρίσκονται στο σύστημα και άνευ όρων διαγραφή τους. Το \ στο ; είναι απαραίτητο ώστε να μην θεωρηθεί τέλος εντολής από το κέλυφος, αλλά τέλος της εντολής που περνάμε ως παράμετρο στην -exec.
$ find backup -size +100k -exec mv '{}' BigFiles \;
Αναζήτηση των αρχείων του καταλόγου backup που έχουν μέγεθος μεγαλύτερο από 100 kilobytes και μετακίνησή τους στον κατάλογο BigFiles.
$ find $HOME \! -user `whoami` -type d -ok rm '{}' \;
Αναζήτηση όλων των αρχείων του καταλόγου $HOME του τρέχοντος χρήστη (προσέξατε τις δασείες στη whoami) και διαλογική διαγραφή τους.
Περισσότερα παραδείγματα και πληροφορίες για τη find, μπορείτε να βρείτε στις σελίδες οδηγιών (man find) ή στα κείμενα πληροφοριών (info find).
Η εντολή locate
Η εντολή locate είναι ένας αρκετά πιο εύκολος και γρήγορος τρόπος για να βρείτε κάποια αρχεία με βάση το όνομά τους. Δεν προσφέρει όλες τις δυνατότητες της find αλλά είναι πολύ πιο γρήγορη, καθώς χρησιμοποιεί το ευρετήριο αρχείων που δημιουργεί η εντολή updatedb. Στην πραγματικότητα, η locate δεν αναζητά αρχεία τα ζητούμενα αρχεία στο σύστημα αρχείων, αλλά τα ονόματα τους σε ένα ευρετήριο αρχείων που ανανεώνεται σε τακτά χρονικά διαστήματα. Αυτό σημαίνει ότι υπάρχει περίπτωση να μην βρίσκει κάποιο νεώτερο αρχείο αν δεν έχει ανανεωθεί το ευρετήριο.
Η σύνταξή της είναι αρκετά απλή:
locate [OPTIONS] pattern
όπου pattern η κανονική παράσταση των ζητούμενων ονομάτων, ενώ μερικές από τις σημαντικότερες επιλογές φαίνονται στον επόμενο πίνακα:
|
Επιλογές
|
Λειτουργία
|
|
-e --existing |
Επιστρέφει μόνο τα αρχεία που υπάρχουν πραγματικά στο σύστημα, και όχι όλα όσα υπάρχουν στο ευρετήριο. Αυτό μπορεί να καθυστερήσει την εκτέλεση της εντολής αισθητά. |
|
-i --ignore-case |
Να αγνοηθούν οι διαφορές πεζών-κεφαλαίων γραμμάτων. |
Η εντολή which
Η εντολή which, χρησιμοποιείται για να μάθουμε την πλήρη διαδρομή ενός ή περισσοτέρων εκτελέσιμων αρχείων. Αυτό που κάνει είναι να αναζητήσει το αρχείο που ζητούμε σε κάθε κατάλογο που ορίζεται στην διαδρομή $PATH. Λειτουργεί ως εξής:
which filename ...
όπου filename η λίστα των εντολών των οποίων θέλουμε να βρούμε τη διαδρομή.
Για παράδειγμα:
$ which ls find /bin/ls /usr/bin/find
Η which χρησιμοποιείται συχνά με το ιστορικό ή την υποκατάσταση εντολών του κελύφους, όπως δείχνει το ακόλουθο παράδειγμα:
$ which ls find /bin/ls /usr/bin/find $ ls -l `!!` ls -l `which ls find` -rwxr-xr-x 1 root root 64428 2003-05-14 00:05 /bin/ls -rwxr-xr-x 1 root root 44936 2002-11-03 20:33 /usr/bin/find
το ίδιο αποτέλεσμα επιτυγχάνεται με το συνδυασμό εντολών:
$ ls -l `which ls find` -rwxr-xr-x 1 root root 64428 2003-05-14 00:05 /bin/ls -rwxr-xr-x 1 root root 44936 2002-11-03 20:33 /usr/bin/find
Active forum topics
- Wake up from suspend mode failed
- Οργάνωση στις μεταφράσεις των ελληνικών στο Debian.
- απορια σχετικα με nvidia440
- πρόβλημα εγκατάστασης nvidia driver GTS250.
- kernel 2.6.38 για squeeze
- Gnome3
- 2 μήνες σπασμένο το upgrade σε unstable [SOLVED]
- Οι χρήστες του Internet Explorer είναι χαζοί;
- Debian Lenny + Nvidia drivers
- εγκατασταση usb cosmote
New forum topics
Νέοι χρήστες
- kountp
- Adonthegreat
- giorgos_m
- prodromos
- airmaik
Οι πιο πρόσφατες καταχωρίσεις blog.
- Fosscomm 2012
- armhf officially into Debian!
- back from UDS/Linaro Connect...
- FTF is over, Linaro Interview
- straight from FTF 2011, San Antonio...
- Όσο μεγαλώνεις μαθαίνεις...
- Emdebian 2011 Sprint report, Genesi Europe store goes online...
- Θεσσαλονίκη - open source ERP workshop
- Χρήσιμο URL για Flash Cards και Linux filesystems
- Cambridge, UK, ARM HQ for Emdebian 2011 Sprint