Molti di voi utenti di Ubuntu avranno familiarità con lo strumento “Cerca file” che vi permette di cercare i file. Come è vero per la maggior parte delle cose in Linux, ci sono ottimi strumenti per il desktop, ma si può trovare più potenza nel Terminale che qualsiasi strumento semplificato per il desktop può eguagliare.
Oggi, vorrei presentarvi alcuni strumenti che possono trasformare un lavoro di ricerca di file in un processo facile.
locate
Il primo strumento con cui si dovrebbe prendere confidenza è anche uno dei più semplici. Il programma locate
funziona in modo simile alla maggior parte degli strumenti di ricerca grafica.
Usare
Diciamo che hai letto su come modificare X per fornire migliori prestazioni video. Il documento che stai leggendo dice di modificare il file xorg.conf
, ma il documento non dice dove sia e tu non sai come trovarlo. Puoi usare locate
per trovarlo rapidamente:
$ locate xorg.conf/etc/X11/xorg.conf/usr/share/man/man5/xorg.conf.5.gz/var/lib/x11/xorg.conf.md5sum/var/lib/x11/xorg.conf.roster
È chiaro che /etc/X11/xorg.conf
è il file che stiamo cercando, ma cosa succederebbe se decine o addirittura centinaia di risultati fossero restituiti? Come potreste gestire tutto questo? Se conoscete un po’ di espressioni regolari (ogni utente Linux dovrebbe davvero imparare le basi), potete facilmente usare le espressioni regolari per cercare directory o file. Per esempio, possiamo cercare una corrispondenza esatta per xorg.conf
con il seguente comando:
$ locate -r '/xorg.conf$'/etc/X11/xorg.conf
Se vuoi cercare i file senza distinzione di maiuscole e minuscole, puoi usare l’opzione -i
. Per esempio:
$ locate -i 'monthly report'/home/chris/Documents/August Monthly Report.doc/home/chris/Documents/July Monthly Report.doc/home/chris/Downloads/latest monthly report.doc
Qualcosa che può confonderti quando inizi a usare locate
è che non solo restituisce le corrispondenze, ma se la corrispondenza è una directory, elenca anche tutte le directory e i file sotto quella directory. Per esempio:
$ locate Desktop/home/chris/Desktop/home/chris/Desktop/Head Shot.jpg/home/chris/Desktop/Skype.lnk/home/chris/Desktop/Steam.lnk...
Questo comando restituisce più di mille voci sul mio sistema. Per ridurre i risultati a una lista di voci che corrispondono al termine di ricerca senza tutti i file e le directory contenuti, usa l’opzione -b
:
$ locate -b Desktop/home/chris/Desktop/home/chris/bin/recordSoundAndDesktop.sh/opt/HipChat4/lib/QtQuick/Controls/Styles/Desktop/usr/include/qt4/QtGui/QDesktopServices/usr/include/qt4/QtGui/QDesktopWidget/usr/lib/libreoffice/program/wizards/common/Desktop.py/usr/lib/libreoffice/share/gallery/computers/Computer-Desktop.png/usr/lib/python2.7/dist-packages/xdg/DesktopEntry.py/usr/lib/python2.7/dist-packages/xdg/DesktopEntry.pyc/usr/lib/python3/dist-packages/xdg/DesktopEntry.py/usr/lib/python3/dist-packages/xdg/__pycache__/DesktopEntry.cpython-35.pyc/usr/lib/x86_64-linux-gnu/qt5/qml/QtQuick/Controls/Styles/Desktop/usr/share/kde4/apps/kio_desktop/DesktopLinks/usr/share/man/man3/File::DesktopEntry.3pm.gz/usr/share/perl5/File/DesktopEntry.pm/usr/share/sounds/KDE-Window-All-Desktops-Not.ogg/usr/share/sounds/KDE-Window-All-Desktops.ogg
Ci sono ancora parecchie corrispondenze, ma non dobbiamo più cercare tra tutti i risultati extra per trovare quello che stiamo cercando.
Nota importante
Il comando locate
si basa su un database slocate per funzionare. Questo database memorizza i nomi delle directory e dei file del file system e permette al comando locate
di operare in pochi istanti piuttosto che impiegare lunghi periodi di tempo per cercare nell’intero file system.
Questa capacità non ha però un costo. Per impostazione predefinita, il vostro sistema eseguirà un comando per aggiornare questo database una volta al giorno alle 6:25 del mattino. Questo comando aggiornerà il database con tutte le modifiche apportate al file system dall’ultimo aggiornamento.
Se hai fatto cambiamenti di recente, come aggiungere o rimuovere grandi quantità di file e directory, e vuoi usare il comando locate
per cercare tra queste nuove directory e file, puoi aggiornare manualmente il database di slocate in qualsiasi momento con il seguente comando:
$ sudo updatedb
A seconda del volume dei cambiamenti fatti dall’ultimo aggiornamento del database di slocate, l’aggiornamento potrebbe richiedere da pochi secondi a qualche minuto. Una volta fatto, sei pronto a cercare di nuovo con locate
.
che
locate
è ottimo per cercare nell’intero file system. Tuttavia, a volte si vuole solo trovare dove risiede un comando. È qui che entra in gioco which
.
which
fa solo una cosa, ma la fa bene. Dato il nome di un comando, vi dirà dove risiede il file di quel comando nel file system.
Immaginiamo di voler scoprire dove risiede il comando firefox
. Possiamo semplicemente eseguire quanto segue per scoprirlo:
$ which firefox/usr/bin/firefox
Perché mai vorreste cercare specificamente un comando? Immaginate di avere del codice che deve sostituire un vecchio comando. Avete davvero bisogno di rimuovere quello vecchio (di solito lo rinomino con lo stesso nome seguito da “.bak” per tenerlo in giro nel caso ne abbia bisogno) prima di mettere quello nuovo al suo posto. which
vi aiuterà a trovare il file rapidamente e facilmente, così non dovrete cercare ovunque per trovarlo.
whereis
Il comando whereis
è simile a which ma va un passo avanti. Non solo ti dice dove si trova il file eseguibile, ma localizzerà anche il sorgente, la pagina man e altre directory associate.
Per continuare con l’esempio di which
, chiediamo a whereis
del comando firefox
:
$ whereis firefoxfirefox: /usr/bin/firefox /usr/lib/firefox /etc/firefox /usr/share/man/man1/firefox.1.gz
Questo mi ha aiutato a trovare /usr/lib/firefox/plugins
prima, quando lavoravo alla soluzione per Flash, perché quella posizione è dove sono memorizzati i componenti aggiuntivi globali per Firefox.
find
find
è lo strumento di ricerca definitivo, il coltellino svizzero della ricerca per Linux se vuoi. find
può fare tutto, dalla ricerca di file in base all’ultima modifica, proprietari e gruppi, permessi, tipo (file, directory, link simbolico, ecc.), se il file è leggibile/scrivibile/eseguibile dall’utente corrente, dimensione del file, se il file o la directory sono vuoti, e molto altro. Puoi anche cercare le corrispondenze per espressione regolare.
Quando usi questo strumento in combinazione con il comando xargs
(che dovrò trattare un’altra volta), puoi fare cose veramente sorprendenti sulla linea di comando. Immaginate di essere in grado di cercare ricorsivamente nella directory corrente i file che terminano con “.bak” che sono stati modificati l’ultima volta più di 100 giorni fa e poi cancellarli con un solo comando:
$ find . -name '*.bak' -type f -mtime +100 -print0 | xargs -0 /bin/rm -f
Sembrerà molto complesso all’inizio, ma quando padroneggerete l’arte di usare find
, diventerà una seconda natura. Presto vi chiederete come avete fatto a cercare le cose senza di esso.
Ad essere sinceri, c’è molto di più da trovare di quanto io voglia coprire e ci sono molte, molte ottime introduzioni allo strumento che fanno un lavoro migliore del mio. Quindi, vi indicherò semplicemente tre ottime referenze che possono essere usate per iniziare ad usare find.
- Esempio di utilizzo del comando Linux find
- (mi scuso in anticipo per i colori orribili) Tutorial del comando Unix/Linux “find”
- Utilizzo del comando find
Buona ricerca.
Ti ho aiutato?
- Inviami un suggerimento via Paypal.
- Aiutami con l’hosting di questo sito con il mio codice di riferimento Linode.