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.