Många av er Ubuntu-användare känner säkert till verktyget ”Sök efter filer” som gör det möjligt att leta efter filer. Som med det mesta i Linux finns det bra skrivbordsverktyg, men mer kraft finns i Terminal än vad något strömlinjeformat skrivbordsverktyg kan matcha.
I dag vill jag presentera dig för några verktyg som kan göra det jobbigt att hitta filer till en enkel process.
locate
Det första verktyget som du bör bekanta dig med är också ett av de enklaste. Programmet locate
fungerar på samma sätt som de flesta grafiska sökverktyg.
Användning
Vad sägs om att du har läst på om hur du kan modifiera X för att få bättre videoprestanda. I dokumentet som du läser står det att du ska ändra filen xorg.conf
, men dokumentet säger inte var den finns och du vet inte hur du ska hitta den. Du kan använda locate
för att snabbt hitta den:
$ 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
Det är tydligt att /etc/X11/xorg.conf
är den fil vi letar efter, men vad händer om dussintals eller till och med hundratals resultat returneras? Hur skulle du kunna hantera allt detta? Om du kan lite om reguljära uttryck (alla Linuxanvändare bör verkligen lära sig grunderna) kan du enkelt använda reguljära uttryck för att söka efter kataloger eller filer. Vi kan till exempel söka efter en exakt matchning för xorg.conf
med följande kommando:
$ locate -r '/xorg.conf$'/etc/X11/xorg.conf
Om du vill leta efter filer utan att ta hänsyn till stor- och små bokstäver kan du använda alternativet -i
. Till exempel:
$ 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
En sak som kan förvirra dig när du först börjar använda locate
är att det inte bara returnerar matchningar, utan om matchningen är en katalog listar det också alla kataloger och filer under den katalogen. Till exempel:
$ locate Desktop/home/chris/Desktop/home/chris/Desktop/Head Shot.jpg/home/chris/Desktop/Skype.lnk/home/chris/Desktop/Steam.lnk...
Detta kommando returnerar mer än tusen poster på mitt system. Om du vill minska resultaten till en lista med poster som matchar sökbegreppet utan alla ingående filer och kataloger använder du alternativet -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
Det finns fortfarande en hel del träffar, men vi behöver inte längre sortera bland alla extra resultat för att hitta det vi letar efter.
Vetenskaplig anmärkning
Kommandot locate
är beroende av en slocate-databas för att fungera. Denna databas lagrar filsystemets katalog- och filnamn och gör det möjligt för locate
-kommandot att fungera på ögonblick i stället för att det tar lång tid att söka i hela filsystemet.
Denna förmåga kommer dock inte utan kostnad. Som standard kommer ditt system att köra ett kommando för att uppdatera denna databas en gång om dagen klockan 6:25. Detta kommando uppdaterar databasen med alla ändringar som gjorts i filsystemet sedan den senaste uppdateringen.
Om du har gjort ändringar nyligen, till exempel lagt till eller tagit bort stora mängder filer och kataloger, och du vill använda kommandot locate
för att söka igenom dessa nya kataloger och filer, kan du uppdatera slocate-databasen manuellt när som helst med följande kommando:
$ sudo updatedb
Avhängigt av volymen av ändringar som gjorts sedan slocate-databasen uppdaterades senast, kan detta ta några sekunder till några minuter att uppdatera. När det är gjort är du redo att söka igen med locate
.
som
locate
är utmärkt för att söka i hela filsystemet. Ibland vill du dock bara hitta var ett kommando bor. Det är där which
kommer in i bilden.
which
gör bara en sak, men den gör det bra. Med tanke på namnet på ett kommando kommer det att berätta var filen för det kommandot finns i filsystemet.
Låt oss tänka oss att vi vill ta reda på var kommandot firefox
finns. Vi kan helt enkelt köra följande för att ta reda på det:
$ which firefox/usr/bin/firefox
Varför skulle du någonsin vilja söka specifikt efter ett kommando? Tänk dig att du har en kod som måste ersätta ett gammalt kommando. Du måste verkligen ta bort det gamla kommandot (jag brukar byta namn på det till samma namn följt av ”.bak” för att ha det kvar om jag skulle behöva det) först innan du lägger in det nya kommandot i stället. which
hjälper dig att hitta filen snabbt och enkelt så att du inte behöver leta överallt för att hitta den.
whereis
Kommandot whereis
liknar vilket men går ett steg längre. Det talar inte bara om för dig var den körbara filen finns, utan det lokaliserar även källkoden, man-sidan och andra associerade kataloger också.
Vi fortsätter med which
-exemplet och frågar whereis
om firefox
-kommandot:
$ whereis firefoxfirefox: /usr/bin/firefox /usr/lib/firefox /etc/firefox /usr/share/man/man1/firefox.1.gz
Detta hjälpte mig att hitta /usr/lib/firefox/plugins
tidigare när jag arbetade med lösningen för Flash, eftersom det är där de globala tilläggsfunktionerna för Firefox lagras.
find
find
är det ultimata sökverktyget, Linuxsökningens schweiziska armékniv om du vill. find
kan göra allt från att söka efter filer baserat på senast ändrade tider, ägare och grupper, behörigheter, typ (fil, katalog, symbolisk länk etc.), om filen är läsbar/skrivbar/utförbar av den aktuella användaren, filstorlek, om filen eller katalogen är tom och mycket mer. Du kan också söka efter träffar med hjälp av reguljära uttryck.
När du använder det här verktyget i kombination med kommandot xargs
(som jag får ta upp en annan gång) kan du göra verkligt fantastiska saker på kommandoraden. Föreställ dig att du kan söka rekursivt i den aktuella katalogen efter filer som slutar med ”.bak” och som senast ändrades för mer än 100 dagar sedan och sedan radera dem med ett enda kommando:
$ find . -name '*.bak' -type f -mtime +100 -print0 | xargs -0 /bin/rm -f
Det kommer att se väldigt komplicerat ut till en början, men när du behärskar konsten att använda find
kommer det att bli som en andra natur. Snart kommer du att undra hur du någonsin sökt efter saker utan det.
För att vara uppriktig finns det mycket mer att hitta än vad jag är villig att täcka in och det finns många, många bra introduktioner till verktyget som gör ett bättre jobb än vad jag skulle göra. Så jag ska helt enkelt hänvisa dig till tre bra referenser som kan användas för att komma igång med find.
- Exempel på användning av Linuxkommandot find
- (jag ber om ursäkt för de hemska färgerna i förväg) Unix/Linux ”find”-kommandot Tutorial
- Användning av find-kommandot
Hälsa till med sökandet.
Hjälpte jag dig?
- Sänd mig ett tips via Paypal.
- Hjälp till webbhotell för den här webbplatsen med min Linode-referenskod.