4 gode værktøjer til at finde filer hurtigt i Ubuntu

Mange af jer andre Ubuntu-brugere vil være bekendt med værktøjet “Søg efter filer”, der giver dig mulighed for at søge efter filer. Som det er tilfældet med de fleste ting i Linux, er der gode skrivebordsværktøjer, men der kan findes mere kraft i Terminal, end noget strømlinet skrivebordsværktøj kan matche.

I dag vil jeg gerne præsentere dig for et par værktøjer, der kan gøre en pligt til at finde filer til en nem proces.

locate

Det første værktøj, som du bør blive fortrolig med, er også et af de enkleste. Programmet locate fungerer på samme måde som de fleste grafiske søgeværktøjer.

Brug

Lad os sige, at du har læst om, hvordan du kan ændre X for at opnå forbedret videoydelse. I det dokument, du læser, står der, at du skal ændre filen xorg.conf, men dokumentet siger ikke, hvor den befinder sig, og du ved ikke, hvordan du finder den. Du kan bruge locate til hurtigt at finde den for dig:

$ 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 er klart, at /etc/X11/xorg.conf er den fil, vi leder efter, men hvad nu, hvis der blev returneret snesevis eller endog hundredvis af resultater? Hvordan kunne du håndtere alt det? Hvis du ved en lille smule om regulære udtryk (alle Linux-brugere bør virkelig lære det grundlæggende), kan du nemt bruge regulære udtryk til at søge efter mapper eller filer. Vi kan f.eks. søge efter et nøjagtigt match for xorg.conf med følgende kommando:

$ locate -r '/xorg.conf$'/etc/X11/xorg.conf

Hvis du ønsker at søge efter filer uden hensyn til store og små bogstaver, kan du bruge indstillingen -i. For eksempel:

$ 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 ting, der måske kan forvirre dig, når du først begynder at bruge locate, er, at den ikke kun returnerer matches, men hvis matchet er en mappe, viser den også en liste over alle mapper og filer under den pågældende mappe. For eksempel:

$ locate Desktop/home/chris/Desktop/home/chris/Desktop/Head Shot.jpg/home/chris/Desktop/Skype.lnk/home/chris/Desktop/Steam.lnk...

Denne kommando returnerer mere end tusind poster på mit system. Hvis du vil reducere resultaterne til en liste over poster, der svarer til søgeordet uden alle de indeholdte filer og mapper, skal du bruge -b-indstillingen:

$ 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

Der er stadig en hel del match, men vi behøver ikke længere at sortere i alle de ekstra resultater for at finde det, vi leder efter.

Vigtig bemærkning

Kommandoen locate er afhængig af en slocate-database for at kunne fungere. Denne database gemmer filsystemets mappe- og filnavne i en cache og gør det muligt for locate-kommandoen at fungere på få øjeblikke i stedet for at tage lang tid at søge i hele filsystemet.

Denne evne er dog ikke uden omkostninger. Som standard kører dit system en kommando for at opdatere denne database en gang om dagen kl. 6.25 om morgenen. Denne kommando vil opdatere databasen med alle ændringer, der er foretaget i filsystemet siden den sidste opdatering.

Hvis du har foretaget ændringer for nylig, f.eks. tilføjet eller fjernet store mængder filer og mapper, og du vil bruge kommandoen locate til at søge i disse nye mapper og filer, kan du til enhver tid manuelt opdatere slocate-databasen med følgende kommando:

$ sudo updatedb

Afhængigt af mængden af ændringer, der er foretaget, siden slocate-databasen sidst blev opdateret, kan det tage et par sekunder til et par minutter at opdatere. Når det er gjort, er du klar til at søge igen med locate.

hvilket

locate er fantastisk til at søge i hele filsystemet. Nogle gange vil du dog bare finde frem til, hvor en kommando bor. Det er her, which kommer ind i billedet.

which gør kun én ting, men den gør det godt. Givet navnet på en kommando vil den fortælle dig, hvor filen for den pågældende kommando befinder sig i filsystemet.

Lad os forestille os, at vi vil finde ud af, hvor kommandoen firefox befinder sig. Vi kan simpelthen køre følgende for at finde ud af det:

$ which firefox/usr/bin/firefox

Hvorfor skulle du nogensinde ønske at søge specifikt efter en kommando? Forestil dig, at du har noget kode, der skal erstatte en gammel kommando. Du er virkelig nødt til at fjerne den gamle (jeg plejer at omdøbe den til samme navn efterfulgt af “.bak” for at beholde den, hvis jeg skulle få brug for den) først, før du sætter den nye i stedet. which hjælper dig med at finde filen hurtigt og nemt, så du ikke behøver at søge overalt for at finde den.

whereis

Kommandoen whereis svarer til hvilken, men går et skridt videre. Den fortæller dig ikke kun, hvor den eksekverbare fil er placeret, men den finder også kildekoden, man-siden og andre tilknyttede mapper også.

Lad os fortsætte med which-eksemplet og spørge whereis om firefox-kommandoen:

$ whereis firefoxfirefox: /usr/bin/firefox /usr/lib/firefox /etc/firefox /usr/share/man/man1/firefox.1.gz

Denne hjalp mig med at finde /usr/lib/firefox/plugins tidligere, da jeg arbejdede på løsningen til Flash, da denne placering er der, hvor de globale tilføjelser til Firefox er gemt.

find

find er det ultimative søgeværktøj, Linux-søgningens schweizerkniv, om du vil. find kan gøre alt fra at søge efter filer baseret på sidste ændrede tidspunkter, ejere og grupper, tilladelser, type (fil, mappe, symbolsk link osv.), om filen kan læses/skrives/udføres af den aktuelle bruger, filstørrelse, om filen eller mappen er tom, og meget mere. Du kan også søge efter overenskomster ved hjælp af regulære udtryk.

Når du bruger dette værktøj i kombination med kommandoen xargs (som jeg skal dække en anden gang), kan du gøre virkelig fantastiske ting på kommandolinjen. Forestil dig, at du kan søge rekursivt i den aktuelle mappe efter filer, der slutter med “.bak”, som sidst blev ændret for mere end 100 dage siden, og derefter slette dem med én kommando:

$ find . -name '*.bak' -type f -mtime +100 -print0 | xargs -0 /bin/rm -f

Det vil se meget kompliceret ud i starten, men når du mestrer kunsten at bruge find, vil det blive en anden natur. Snart vil du undre dig over, hvordan du nogensinde har søgt efter ting uden det.

For at være ærlig, er der meget mere at finde, end jeg er villig til at dække, og der findes mange, mange gode introduktioner til værktøjet, der gør det bedre end jeg ville gøre. Så jeg vil blot henvise dig til tre gode referencer, der kan bruges til at komme i gang med find.

  • Eksempel på brug af Linux-kommandoen find
  • (jeg undskylder på forhånd for de forfærdelige farver) Unix/Linux “find” Command Tutorial
  • Using the find command

Happy searching.

Halp jeg dig?

  • Send mig et tip via Paypal.
  • Hjælp til hosting af dette websted med min Linode-henvisningskode.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.