Hur man använder alla Linuxs sökkommandon

Linux erbjuder sex olika sätt att söka, och alla har sina fördelar. Vi kommer att visa hur man använder find, locate, which, whereis, whatis och apropos. Var och en utmärker sig vid olika uppgifter; så här väljer du rätt verktyg för jobbet.

Du är bortskämd med valmöjligheter när det kommer till kommandon för att söka och hitta i Linux. Varför så många? Tja, de har var och en sina specialiteter och presterar bättre än de andra under vissa omständigheter. Du kan tänka på dem som en sorts schweizisk armékniv för sökning. Vi kommer att titta på varje blad i tur och ordning och ta reda på dess speciella styrkor.

Hitta kommandot

Beteendet för find-kommandot är svårt att avgöra genom försök och misstag. När du förstå syntaxenbörjar du uppskatta dess flexibilitet och kraft.

Det enklaste sättet att använda find är att bara skriva find och trycka på enter.

find

Används på detta sätt fungerar find som ls, men det listar alla filer i den aktuella katalogen och de i underkataloger.

Vissa implementeringar av find kräver att du sätter . för den aktuella katalogen. Om detta är fallet med din version av Linux, använd följande kommando:

find .

För att hitta sökning från rotmappen skulle du använda det här kommandot:

find /

För att starta sökningen från din hemmapp använd det här kommandot:

find ~

Använda hitta med filmönster

För att hitta ska vara något mer än en automatiskt återkommande version av ls måste vi förse den med något att söka efter. Vi kan tillhandahålla filnamn eller filmönster. Mönster använder jokertecken där * betyder valfri teckensträng och ? betyder vilket enskilt tecken som helst.

Mönster måste citeras för att fungera korrekt. Det är lätt att glömma att göra detta, men om du inte citerar kommer jokerteckenmönstret inte att kunna utföra kommandot du gav det korrekt.

Med det här kommandot kommer vi att söka i den aktuella mappen efter filer som matchar mönstret ”*.*s”. Detta betyder alla filnamn som har ett filtillägg som slutar på ”s”. Vi använder alternativet -name för att säga att vi antingen skickar in ett filnamn eller ett filnamnsmönster.

find . -name "*.*s"

hitta .  -namn

find returnerar dessa matchande filer.

Observera att två av filtilläggen är två tecken långa och en är tre tecken lång. Detta beror på att vi använde mönstret ”*.*s”. Om vi ​​bara hade velat ha filtilläggen med två tecken, skulle vi ha använt ”*.?s”.

Om vi ​​hade vetat i förväg att vi letade efter JavaScript ”.js”-filer kunde vi ha varit mer specifika i vårt filmönster. Observera också att du kan använda enstaka citattecken för att linda mönstret om du föredrar det.

find . -name '*.js'

hitta .  -namn

Den här gången hittar du bara rapporter om JavaScript-filerna.

Ignorerar Case With find

Om du vet namnet på filen du vill hitta för att hitta kan du skicka det för att hitta istället för ett mönster. Du behöver inte linda filnamnet inom citattecken om det inte finns jokertecken i det, men det är bra att göra det hela tiden. Att göra det betyder att du inte glömmer att använda dem när du behöver dem.

find . -name 'Yelp.js'

Det gav inget. Men det är konstigt, vi vet att filen måste finnas där. Låt oss försöka igen och säga till find att ignorera skiftläge. Vi gör det genom att använda alternativet -iname (ignorera skiftlägesnamn)

find. -iname 'Yelp.js'

Det var problemet, filnamnet börjar med gemener ”y”, och vi sökte med versaler ”Y.”

Återkommande underkataloger med hitta

En bra sak med hitta är hur det rekursivt söker genom underkataloger. Låt oss söka efter alla filer som börjar med ”karta”.

find . -name "map*.*"

hitta .  -namn

De matchande filerna listas. Observera att de alla finns i en underkatalog.

Söker efter kataloger med find

Alternativet -path gör att hitta letar efter kataloger. Låt oss leta efter en katalog som vi inte riktigt kommer ihåg namnet på, men vi vet att den slutar med bokstäverna ”om”.

find . -path '*about'

Katalogen hittas, den heter bara ”om” och den är kapslad i en annan katalog i den aktuella katalogen.

Det finns ett -ipath-alternativ (ignorera skiftläge) som låter dig söka efter sökvägar och ignorera skiftläge, liknande alternativet –iname som diskuterats ovan.

Använda filattribut med hitta

find kan leta efter filer som har attribut som matchar sökleddet. Du kan till exempel leta efter filer som är tomma med alternativet -empty, oavsett vad de heter.

find . -empty

Alla filer med noll byte kommer att listas i sökresultaten.

Alternativet -körbar hittar alla filer som kan köras, till exempel ett program eller ett skript.

find . -executable

Resultaten listar en fil som heter ”fix_aptget.sh”.

De innehåller också tre kataloger, inklusive ’.’, den aktuella katalogen. Katalogerna ingår i resultaten eftersom exekveringsbiten är inställd i deras filbehörigheter. Utan detta skulle du inte kunna byta till (“köra”) dessa kataloger.

Alternativet -typ

Alternativet -type låter dig söka efter den typ av objekt du letar efter. Vi kommer att tillhandahålla typindikatorn ”f” som en parameter till alternativet -type eftersom vi bara vill söka efter filer.

find . executable -type f

Den här gången är underkatalogerna inte listade. Den körbara skriptfilen är det enda objektet i resultaten.

Vi kan också be find att endast inkludera kataloger i resultaten. För att lista alla kataloger kan vi använda alternativet -type med typindikatorn ”d”.

find . type -d

Endast kataloger och underkataloger listas i resultaten.

Använda andra kommandon med find

Du kan utföra några ytterligare åtgärder på filerna som hittas. Du kan i sin tur låta skicka filerna till något annat kommando.

Om vi ​​behöver se till att det inte finns några körbara filer i den aktuella katalogen och underkatalogerna, kan vi använda följande kommando:

find . -name "fix_aptget.sh" -exec chmod -x '{}' ;

Kommandot betyder:

Sök i den aktuella katalogen efter ett namngivet objekt som heter ”fix_aptget.sh”.
Om det hittas, kör kommandot chmod.
Parametrarna som skickas till chmod är -x för att ta bort körbara behörigheter och ’{}’ som representerar filnamnet på den hittade filen.
Det sista semikolonet markerar slutet på parametrarna som kommer att skickas till chmod. Detta måste ”undkomma” genom att föregå det med ett ”omvänt snedstreck”.

När detta kommando har körts kan vi söka efter körbara filer som tidigare, och den här gången kommer det inte att finnas några filer listade.

För att göra vårt nät bredare kan vi använda ett filmönster istället för filnamnet vi använde i vårt exempel.

Denna flexibilitet gör att du kan söka efter specificerade filtyper, eller med filnamnsmönster, och få vissa åtgärder utförda på de matchande filerna.

Hitta har många andra alternativinklusive sökning efter filer efter ändringsdatum, filer som ägs av en användare eller grupp, filer som är läsbara eller filer som har en specifik uppsättning filbehörigheter.

Kommandona lokalisera och lokalisera

Många Linux-distributioner brukade ha en kopia av locate med. Detta ersattes av kommandot mlocate, som var en förbättrad och uppdaterad version av locate.

När mlocate är installerat på ett system ändrar det kommandot locate så att du faktiskt använder mlocate även om du skriver locate.

Aktuella versioner av Ubuntu, Fedora och Manjaro kontrollerades för att se om de hade versioner av dessa kommandon förinstallerade på dem. Ubuntu och Fedora inkluderade båda mlocate. Det måste installeras på Manjaro, med detta kommando:

sudo pacman -Syu mlocate

På Ubuntu kan du använda lokalisera och mlocate omväxlande. På Fedora och Manjaro måste du skriva locate , men kommandot körs åt dig av mlocate.

Om du använder alternativet –version med locate kommer du att se att kommandot som svarar faktiskt är mlocate.

locate --version

Eftersom locate fungerar på alla Linux-distributioner som testades kommer vi att använda locate i våra förklaringar nedan. Och det är en bokstav mindre att skriva.

Lokalisera databasen

Den största fördelen som lokalisering har är hastigheten.

När du använder find-kommandot, hoppar det av och gör en sökning i ditt filsystem. Lokaliseringskommandot fungerar väldigt annorlunda. Den gör en databassökning för att avgöra om det du letar efter finns på din dator. Det gör sökningen mycket snabbare.

Naturligtvis väcker det en uppenbar fråga om databasen. Vad säkerställer att databasen är uppdaterad? När mlocate är installerat placerar den (vanligtvis) en post i cron.daily. Detta körs varje dag (mycket tidigt på morgonen) och uppdaterar databasen.

För att kontrollera om denna post finns, använd det här kommandot:

ls /etc/cron.daily/*loc*

Om du inte hittar en post där kan du ställa in en automatisk uppgift för att göra detta åt dig vid den tid du väljer.

Vad händer om din dator inte är på när databasen ska uppdateras? Du kan köra databasuppdateringsprocessen manuellt med följande kommando:

sudo updatedb

Använder lokalisera

Låt oss leta efter filer som innehåller strängen ”getlatlong”. Med locate söker sökningen automatiskt efter alla matchningar som innehåller söktermen var som helst i filnamnet, så det finns inget behov av att använda jokertecken.

locate getlatlong

Det är svårt att förmedla hastighet i en skärmdump, men nästan direkt listas de matchande filerna åt oss.

Talar om att hitta hur många resultat du vill ha

Ibland kanske du vet att det finns massor av filer av den typ du söker efter. Du behöver bara se de första av dem. Kanske vill du bara bli påmind om vilken katalog de finns i, och du behöver inte se alla filnamn.

Genom att använda alternativet -n (nummer) kan du begränsa antalet resultat som du hittar. I det här kommandot har vi satt en gräns på 10 resultat.

locate .html -n 10

locate svarar genom att lista de första 10 matchande filnamnen som den hämtar från databasen.

Räkna matchande filer

Om du bara vill veta antalet matchande filer och du inte behöver veta vad de heter eller var de finns på din hårddisk, använd alternativet -c (count).

locate -c .html

Så nu vet vi att det finns 431 filer med tillägget ”.html” på den här datorn. Vi kanske vill ta en titt på dem, men vi tänkte ta en titt och se hur många det var först. Beväpnade med den kunskapen vet vi att vi kommer att behöva släppa igenom resultatet mindre.

locate .html | less

Och här är de alla, eller åtminstone, här är toppen av den långa listan av dem.

Ignorera fall med lokalisera

-i (ignorera skiftläge) får locate att göra just det, den ignorerar skillnader mellan versaler och gemener mellan söktermen och filnamnen i databasen. Om vi ​​försöker räkna HTML-filerna igen, men av misstag anger söktermen med versaler, får vi noll resultat.

locate -c .HTML

Genom att inkludera alternativet -i kan vi få lokaliseringen att ignorera skillnaden i fallet och returnera vårt förväntade svar för den här maskinen, vilket är 431.

locate -c -i .HTML

Hitta databasstatus

För att se statusen för databasen, använd alternativet -s (status). Detta gör att locate returnerar en del statistik om databasens storlek och innehåll.

locate -s

Vilket kommando

Vilken kommando söker igenom katalogerna på din väg, och försöker hitta kommandot du söker efter. Det låter dig bestämma vilken version av ett program eller kommando som ska köras när du skriver dess namn på kommandoraden.

Föreställ dig att vi hade ett program som heter geoloc. Vi vet att den är installerad på datorn, men vi vet inte var den finns. Det måste vara i sökvägen någonstans för när vi skriver in dess namn körs det. Vi kan använda vilken för att lokalisera den med detta kommando:

which geoloc

som rapporterar att programmet finns i /usr/local/bin.

Vi kan kontrollera om det finns några andra kopior av programmet på andra platser inom sökvägen genom att använda alternativet -a (alla).

which -a geoloc

Detta visar oss att vi har geoloc-programmet på två ställen.

Naturligtvis kommer kopian i /usr/local/bin att hittas först av Bash-skalet varje gång, så att ha programmet på två ställen är meningslöst.

Om du tar bort versionen i /usr/bin/geoloc sparar du lite hårddiskkapacitet. Ännu viktigare, det kommer också att undvika problem som skapas av någon som manuellt uppdaterar programmet och gör det på fel ställe. Sedan undrar de varför de inte ser de nya uppdateringarna när de kör programmet.

Whereis-kommandot

Whereis-kommandot liknar which-kommandot, men det är mer informativt.

Utöver platsen för kommandot eller programfilen, rapporterar whereis också där man (manual) sidor och källkod filerna finns. I de flesta fall kommer inte källkodsfilerna att finnas på din dator, men om de är det kommer var att rapportera om dem.

Den binära körbara filen, man-sidorna och källkoden kallas ofta för ”paketet” för det kommandot. Om du vill veta var de olika komponenterna i paketet för kommandot diff finns, använd följande kommando:

whereis diff

whereis svarar genom att lista platsen för diffman-sidorna och den binära diff-filen.

För att begränsa resultaten till att endast visa platsen för binären (faktiskt få whereis att fungera som vilken ) använd alternativet -b (binärt).

whereis -b diff

whereis rapporterar endast om platsen för den körbara filen.

Använd alternativet -m (manuellt) för att begränsa sökningen till att endast rapportera på man-sidorna. Använd alternativet -s (källa) för att begränsa sökningen till att endast rapportera om källkodsfilerna.

För att se platserna som söker igenom, använd alternativet -l (platser).

whereis -l

Platserna är listade för dig.

Nu när vi vet var platserna kommer att söka i, kan vi, om vi väljer, begränsa sökningen till en viss plats eller grupp av platser.

Alternativet -B (binär lista) begränsar sökningen efter körbara filer till listan med sökvägar på kommandoraden. Du måste ange minst en plats för var du kan söka igenom. Alternativet -f (fil) används för att signalera slutet på platsen sist början av filnamnet.

whereis -B /bin/ -f chmod

var ser den ut på den enda plats vi bad om att söka igenom. Det råkar vara där filen finns.

Du kan också använda alternativet -M (manuell lista) för att begränsa sökningar efter man-sidor till de sökvägar du anger på kommandoraden. Alternativet -S (källlista) låter dig begränsa sökningen efter källkodsfiler på samma sätt.

Whatis-kommandot

Whatis-kommandot används för att snabbt söka igenom man (manuella) sidor. Det ger en rad sammanfattande beskrivningar av termen du har bett den att söka efter.

Låt oss börja med ett enkelt exempel. Även om det ser ut som utgångspunkten för en djup filosofisk debatt, frågar vi bara vad som ska berätta för oss vad termen ”man” betyder.

whatis man

whatis hittar två matchande beskrivningar. Den skriver ut en kort beskrivning för varje match. Den listar också det numrerade avsnittet i manualen som innehåller varje fullständig beskrivning.

För att öppna manualen i avsnittet som beskriver man-kommandot, använd följande kommando:

man 1 man

Manualen öppnas i avsnittet man(1), på sidan för man.

För att öppna manualen i avsnitt 7, på sidan som diskuterar makron du kan använda för att generera man-sidor, använd det här kommandot:

man 7 man

Mansidan för manmakron visas för dig.

Söka i specifika avsnitt i manualen

Alternativet -s (sektion) används för att begränsa sökningen till avsnitt i manualen du är intresserad av. För att begränsa sökningen till sektion 7 i manualen, använd följande kommando. Notera citattecken runt avsnittsnumret:

whatis -s "7" man

vad är -s

Resultaten hänvisar endast till avsnitt 7 i manualen.

Använda whatis med jokertecken

Du kan använda jokertecken med whatis. Du måste använda alternativet -w (jokertecken) för att göra det.

whatis -w char*

De matchande resultaten listas i terminalfönstret.

Det apropos kommandot

Kommandot apropos liknar whatis, men det har det några fler klockor och visselpipor. Den söker igenom man-sidans titlar och en rad beskrivningar och letar efter söktermen. Den listar de matchande man-sidans beskrivningar i terminalfönstret.

Ordet apropos betyder ”relaterat till” eller ”berörande”, och kommandot apropos har fått sitt namn från detta. För att söka efter något relaterat till kommandot grupper kan vi använda det här kommandot:

apropos groups

apropos listar resultaten till terminalfönstret.

Använder mer än en sökterm

Du kan använda mer än en sökterm på kommandoraden. apropos kommer att söka efter man-sidor som innehåller någon av söktermerna.

apropos chown chmod

Resultaten listas som tidigare. I det här fallet finns det en enda post för var och en av söktermerna.

Använder exakta matchningar

apropos kommer att returnera man-sidor som innehåller söktermen även om termen är mitt i ett annat ord. För att få apropos att endast returnera exakta matchningar för söktermen, använd alternativet -e (exakt).

För att illustrera detta kommer vi att använda apropos med grep som sökterm.

apropos grep

Det finns många resultat som returneras för detta, inklusive många där grep är inkorporerat i ett annat ord, som bzfgrep.

Låt oss försöka igen och använda alternativet -e (exakt).

apropos -e grep

Vi har ett enda resultat den här gången, för det vi faktiskt letade efter.

Matchar alla söktermer

Som vi såg tidigare om du anger mer än en sökterm kommer apropos att söka efter man-sidor som innehåller endera söktermen. Vi kan ändra det beteendet genom att använda alternativet -a (och). Detta gör att apropos endast väljer matchningar som har alla söktider i sig.

Låt oss prova kommandot utan alternativet -a så att vi kan se vilka resultat apropos ger.

apropos crontab cron

Resultaten inkluderar man-sidor som matchar den ena eller den andra av söktermerna.

Nu använder vi alternativet -a.

apropos -a crontab cron

Den här gången begränsas resultaten till de som innehåller båda söktermerna.

Ännu fler alternativ

Alla dessa kommandon har fler alternativ – några av dem många fler alternativ – och du uppmanas att läsa man-sidorna för kommandona som vi har diskuterat i den här artikeln.

Här är en snabb sammanfattning för varje kommando:

hitta: Ger en funktionsrik och detaljerad sökfunktion för att leta efter filer och kataloger.
lokalisera: Ger en snabb databasdriven sökning efter program och kommandon.
vilken: Söker i $PATH letar efter körbara filer
whereis: Söker i $PATH och letar efter körbara filer, man-sidor och källkodsfiler.
whatis: Söker mannens enradsbeskrivningar efter matchningar med söktermen.
apropos: Söker på man-sidan med mer trovärdighet än vad som är, efter matchningar med söktermen eller söktermerna.

Letar du efter mer Linux-terminalinformation? Här är 37 kommandon du bör känna till.