Bestanden zoeken in Linux. Hoe te zoeken naar bestanden in Linux met behulp van de opdracht find Linux vind alle bestanden in een map

Heel vaak moet je dringend een bestand in het bestandssysteem vinden, maar je hebt geen idee waar het is. En als GUI-hulpprogramma's voor het vinden van een bestand moe zijn of je hebt helemaal geen GUI geïnstalleerd of je gebruikt het in principe niet, dan komen uitgebreide commando's voor het zoeken naar bestanden, mappen en delen van een bestand in linux naar de redden.

Zoek een bestand op naam in de database.
Het lokatie-commando kan worden gebruikt om naar bestand(en) te zoeken op een deel van de bestandsnaam. De opdracht scant de database met namen en geeft het pad naar het (de) gezochte bestand(en). We raden aan om de opdracht uit te voeren met de optie -i: lokaliseer -i voor een hoofdletterongevoelige zoekopdracht.
Voorbeeld:

[e-mail beveiligd]:~$ lokaliseren -i .ogg
/home/subsanek/onbekend - onbekend/01 - onbekend 1 - ???.ogg
/usr/local/Zend/ZendStudio-7.1.2/docs/PHPmanual/book.oggvorbis.html
/usr/local/Zend/ZendStudio-7.1.2/docs/PHPmanual/intro.oggvorbis.html
/usr/share/kde4/apps/bball/bounce.ogg
/usr/share/kde4/apps/klettres/en_GB/alpha/a.ogg
/usr/share/kde4/apps/klettres/en_GB/alpha/b.ogg
/usr/share/kde4/apps/klettres/en_GB/alpha/c.ogg
(afgekort)


-opdrachtoproep vond alle bestanden op het systeem met de extensie ogg.
lokaliseer zoekopdrachten naar bestanden heel snel, maar het is gewoon kijken naar een lijst met namen uit de database, en als het bestand recent is, is de kans groot dat het niet wordt gevonden.
Database-update.
U kunt de database van het lokatiecommando bijwerken met het commando (als root):
bijgewerktb
Leesbare uitvoer.
Vaak kan het lokatie-commando een resultaat van meerdere duizenden opleveren dat gewoon voor het scherm flitst en niets voor uw ogen doet, om dit te voorkomen, kunt u het resultaat van de uitvoer naar de container omleiden:
zoek -i .ogg | minder
U kunt ook opgeven hoeveel resultaten u wilt weergeven met de optie -n:
zoek -i .ogg -n 10
- geeft de eerste 10 resultaten weer.

Zoek naar bestanden met echte scan.
De opdracht find scant het bestandssysteem om een ​​bestand te vinden, wat deze tool langzaam maar efficiënt maakt.
Om op naam te zoeken, moet u de toets -name . opgeven
Voorbeeld:
zoek -naam bestandsnaam.txt
Zoek standaard zoekopdrachten recursief in de huidige directory.

Zoek tekst op tekstfragment.
Het legendarische grep-commando kan bijna elk doel dienen. Ik gebruik het niet alleen om de juiste bestanden in de bronmap te vinden. U kunt grep ook gebruiken om te zoeken naar reguliere expressies.
commando prototype:
grep "zoekpatroon" file_to_search
Voorbeeld:
grep -R "tekst" /
-command zoekt recursief in alle tekstbestanden van het systeem naar de woordtekst.
Grep heeft een indrukwekkend aantal opties die je misschien vaak nodig hebt:

[e-mail beveiligd]:~$ grep --help
Gebruik: grep [KEY]... PATROON [BESTAND]...
Zoek naar PATTERN in elk BESTAND of standaardinvoer.
PATTERN is standaard een eenvoudige reguliere expressie (BRE).
Voorbeeld: grep -i "hello world" menu.h main.c

Een type reguliere expressie selecteren en interpreteren:
-E, --extended-regexp PATTERN - uitgebreide reguliere expressie (ERE)
-F, --fixed-regexp PATTERN - strings met vaste lengte gescheiden
nieuwe regel karakter
-G, --basic-regexp PATTERN - eenvoudige reguliere expressie (BRE)
-P, --perl-regexp PATTERN - Perl reguliere expressies
-e, --regexp=PATTERN gebruik PATTERN voor zoeken
-f, --file=FILE neemt PATTERN uit FILE
-i, --ignore-case negeer verschil in hoofdletters
-w, --word-regexp PATROON moet overeenkomen met alle woorden
-x, --line-regexp PATTERN moet overeenkomen met de hele regel
-z, --null-gegevensreeksen worden gescheiden door een null-byte, niet
lijn terminator

Aanvullend:
-s, --no-messages onderdrukken foutmeldingen
-v, --revert-match selecteer niet-overeenkomende regels
-V, --versie versie-informatie weergeven en afsluiten
--help help tonen en afsluiten
--mmap gebruik geheugentoewijzing (mmap) waar mogelijk

Uitgangsbeheer:
-m, --max-count=NUM stop na gespecificeerde NUM overeenkomsten
-b, --byte-offset afdrukoffset in
bytes
-n, --regelnummer print regelnummer samen met uitvoerregels
--regelgebufferde spoelbuffer na elke regel
-H, --with-filename print bestandsnaam voor elke match
-h, --no-bestandsnaam start de uitvoer niet vanaf bestandsnaam
--label=LABEL output LABEL als bestandsnaam voor
standaard invoer
-o, --only-matching laat alleen het deel van de string zien dat overeenkomt met PATTERN
-q, --stil, --stil alle normale uitvoer onderdrukken
--binary-files=TYPE overweeg binair bestand TYPE:
binair, tekst of zonder overeenkomst.
-a, --text hetzelfde als --binary-files=text
-Ik hetzelfde als --binary-files=without-match
-d, --directories=ACTIE hoe om te gaan met mappen
ACTIE kan worden gelezen (gelezen),
recursief (recursief) of overslaan (overslaan).
-D, --devices=ACTIE hoe om te gaan met apparaten, FIFO's en sockets
ACTIE kan "gelezen" of "overslaan" zijn
-R, -r, --recursief hetzelfde als --directories=recurse
--include=F_PATTERN verwerk alleen bestanden die overeenkomen met F_PATTERN
--exclude=F_PATTERN sla bestanden en mappen over,
overeenkomend met F_TEMPLATE
--exclude-from=BESTAND sla bestanden over die overeenkomen met patroon
bestanden van FILE
--exclude-dir=PATTERN-mappen die overeenkomen met PATTERN,
zal worden overgeslagen
-L, --files-without-match print alleen BESTANDSnamen zonder matches
-l, --files-with-matches print alleen BESTANDSnamen met matches
-c, --count print alleen het aantal overeenkomsten
regels per BESTAND
-T, --initial-tab tab-align (indien nodig)
-Z, --null print byte 0 na BESTANDSnaam

Contextbeheer:
-B, --before-context=NUM print het AANTAL regels van de vorige context
-A, --after-context=NUM print NUM regels van volgende context
-C, --context[=NUM] print NUM contextregels,
--kleur[=WANNEER],
--color[=WHEN] gebruik markeringen om overeenkomsten te onderscheiden
lijnen; WANNEER kan altijd (altijd) zijn,
nooit (nooit), of automatisch (automatisch)
--kleur, --kleur gebruik markeringen om overeenkomende lijnen te onderscheiden
-U, --binary verwijder geen CR-tekens aan het einde van een regel (MSDOS)
-u, --unix-byte-offsets output offset alsof er geen CR's (MSDOS) zijn

Grep -E moet worden uitgevoerd in plaats van egrep. grep -F wordt aangenomen in plaats van fgrep.
Hardlopen als egrep of fgrep kan het beste worden vermeden.
Als FILE niet is opgegeven, of als FILE - is, wordt de standaardinvoer gelezen.
Als er minder dan twee bestanden zijn opgegeven, wordt uitgegaan van -h. Wanneer gevonden
overeenkomt, is de programma-exitcode 0, en 1 als dat niet het geval is.
fouten, of als de optie -q niet is opgegeven, is de afsluitcode 2.

Vandaag gaan we enkele van de meest populaire manieren bekijken om bestanden in Linux te vinden met behulp van de terminal.

1) vind: Om bestanden te zoeken vanaf de opdrachtregel, kunt u de opdracht "vinden" gebruiken. Deze opdracht heeft de volgende syntaxis:

zoek pad criteria actie

pad - Sectie voor het specificeren van de zoekdirectory. Als er niets is opgegeven, gaat de zoekopdracht door de huidige directory.

"criteria" - Zoek opties.

actie - Opties die de zoekstatus beïnvloeden of beheren, zoals:

2) lokaliseren: Team "bevind zich" dit is een alternatief voor de opdracht "find -name". De opdracht find zoekt naar bestanden in het geselecteerde deel van het bestandssysteem en het proces is mogelijk niet erg snel. Aan de andere kant zoekt het location-commando bestanden op in de speciaal voor dit doel gemaakte database /var/lib/locatedb, wat veel sneller is. Gebruik het commando . om de database bij te werken bijgewerktb.

3) waarbij:waar is" geeft de locatie van de code (optie -b), man-pagina's (optie -m) en bronbestanden (optie -s) voor de opgegeven opdracht. Als er geen opties zijn opgegeven, wordt alle beschikbare informatie weergegeven. Deze opdracht is sneller dan " vinden" maar minder compleet.

4) welke: team " die" zoekt naar alle paden die worden vermeld in de variabele PATH voor de opgegeven opdracht.

5) typ:

Laat zien hoe de namen worden geïnterpreteerd als ze worden aangeroepen zonder opties

wanneer gebruikt als een opdrachtnaam. Als de optie wordt gebruikt -een, team type geeft een lijst van alle mappen waar een uitvoerbaar bestand is met

bijbehorende naam. De lijst bevat ook aliassen en functies,

tenzij een optie is opgegeven -P. NAAR

er wordt niet naar de opdracht hash verwezen als de optie is opgegeven -een. Team type retourneert 0,

als ten minste één van de argumenten wordt gevonden, en 1 anders.

bewaker

Explo.ru - alles over toerisme en recreatie: hete reizen en reizen naar Turkije, Egypte,

    Zoek het bestand op naam. Zo'n eenvoudige zoekopdracht wordt uitgevoerd met behulp van het zoekprogramma. De onderstaande opdracht zoekt naar een bestand in de huidige map en al zijn submappen.

    find -iname "bestandsnaam"

    • Typ -iname in plaats van -name om hoofdletters te negeren in de ingevoerde bestandsnaam. Het -name commando is hoofdlettergevoelig.
  1. Begin met zoeken in de hoofdmap. Om een ​​systeembrede zoekopdracht te starten, voegt u de / modifier toe aan de zoekopdracht. In dit geval zoekt de opdracht find naar het bestand in alle mappen, te beginnen bij de root.

    find / -iname "bestandsnaam"

    • U kunt beginnen met zoeken in een specifieke directory; vervang hiervoor / door een mappad, bijvoorbeeld /home/max .
    • Kan worden gebruikt. in plaats van / om alleen naar het bestand te zoeken in de huidige map en zijn submappen.
  2. Gebruik het jokerteken .* om bestanden te vinden waarvan de naam overeenkomt met een deel van de zoekopdracht. U kunt het jokerteken * gebruiken om een ​​bestand te vinden waarvan de volledige naam niet bekend is, of om alle bestanden met een specifieke extensie te vinden.

    zoek /home/max -iname "*.conf"

    • Deze opdracht vindt alle .conf-bestanden in de Max-map van de gebruiker (en zijn submappen).
    • Gebruik deze opdracht om alle bestanden te vinden waarvan de namen overeenkomen met een deel van de zoekopdracht. Als uw computer bijvoorbeeld veel WikiHow-gerelateerde bestanden heeft, zoekt u naar alle bestanden door "*wiki*" te typen.
  3. Maak het gemakkelijker om uw zoekresultaten te beheren. Als er te veel zoekresultaten zijn, is het moeilijk om het gewenste bestand ertussen te vinden. Gebruik het symbool | zodat zoekresultaten worden gefilterd door de opdracht less. Dit maakt het gemakkelijker om zoekresultaten te bekijken en te filteren.

    zoek /home/max -iname "*.conf" | minder

    Zoek specifieke items. Gebruik modifiers om alleen bepaalde items in zoekresultaten weer te geven. U kunt zoeken naar gewone bestanden (f), mappen (d), symbolische koppelingen (l), teken-I/O-apparaten (c) en blokapparaten (b).

    find / -type f -iname "bestandsnaam"

  4. Filter uw zoekresultaten op bestandsgrootte. Als uw computer veel bestanden met vergelijkbare namen heeft, maar u weet hoe groot het bestand is dat u zoekt, filter dan uw zoekresultaten op bestandsgrootte.

    find / -size +50M -iname "bestandsnaam"

    • Met deze opdracht worden alle bestanden gevonden die groter zijn dan 50 MB. Gebruik de + of - modifier om een ​​toename of afname in grootte aan te geven. Als er geen + of - modifier is, zal de opdracht bestanden vinden die exact overeenkomen met de opgegeven grootte.
    • Zoekresultaten kunnen worden gefilterd op bytes (c), kilobytes (k), megabytes (M), gigabytes (G) of blokken van 512 bytes (b). Merk op dat de bovenstaande modifiers hoofdlettergevoelig zijn.
  5. Gebruik logische operatoren (booleaanse operatoren) om zoekfilters te combineren. U kunt de operatoren -en , -or , -not gebruiken om verschillende zoekopdrachten in één enkele zoekopdracht te combineren.

    find /travelphotos -type f -size +200k -not -iname "*2015*"

    • Met deze opdracht worden bestanden in de map "Reisfoto's" gevonden die groter zijn dan 200 KB en die het nummer 2015 niet in hun naam hebben.

Het komt voor dat u weet dat een bestand of map bestaat, maar u niet weet hoe u deze kunt vinden. Er zijn verschillende commando's om je hierbij te helpen: find , locate en which .

4.10.1. zoek commando

De opdracht find heeft de volgende indeling:

Vind pad pattern_to_search

Als je geen pad specificeert, zal find beginnen te zoeken naar het gegeven patroon in de huidige directory en verder gaan door alle subdirectories die het bevat.

Het find-commando heeft veel opties, die te vinden zijn in de man-pagina (typ man find op de commandoregel). De meest gebruikte optie is -name , die zoekt naar alle bestanden en mappen die een bepaalde lettercombinatie in de naam bevatten.

vinden. -naam tes

Dit commando zoekt in de huidige directory naar alle bestanden die "tes" in de naam bevatten.

4.10.2. lokaliseren commando

Met deze opdracht kunt u alle bestanden of mappen zien waarvan de naam het gezochte patroon bevat. Als u bijvoorbeeld wilt zoeken naar een bestand met het woord hond in de naam, voert u het volgende in:

hond lokaliseren

De opdracht location gebruikt een database om bestanden of mappen te lokaliseren die het woord dog in hun naam bevatten. De zoekresultaten kunnen een bestand met de naam dog bevatten, een bestand met de naam bulldog.txt, een map met de naam /dogs/, enzovoort. Voor meer informatie over het lokatiecommando, zie de man-pagina (typ man lokatie op de commandoregel).

Op voorwaarde dat de database up-to-date is, is het lokaliseren commando erg snel bij het zoeken. De database van het find-commando wordt elke nacht bijgewerkt met behulp van de cron-service.

cron is een klein programma dat op de achtergrond draait en met regelmatige tussenpozen verschillende taken uitvoert (zoals het bijwerken van de database van het lokaliseren commando). Om toegang te krijgen tot de cron-handleiding, typt u man cron op de opdrachtregel.

cron werkt periodiek de slocate-database bij, die wordt gebruikt om bestanden of mappen te lokaliseren. Schakelen tussen besturingssystemen en het afsluiten van de machine aan het eind van de dag voorkomt dat cron de database automatisch bijwerkt.

Om de database handmatig bij te werken, logt u in als root (door su - te typen bij de opdrachtprompt en het wachtwoord van root'a in te voeren) en typt u updatedb bij de opdrachtprompt.

Na een tijdje zal de slocate-database die wordt gebruikt door de locatie-opdracht worden bijgewerkt.

Wanneer u klaar bent met het werk waarvoor u root moet zijn, typt u exit op de opdrachtregel - u keert terug naar uw sessie.

U kent dit probleem waarschijnlijk wel: er is een bestand en u weet niet meer waar u het hebt geplaatst.

In dit geval is de opdracht find handig. Hoe te gebruiken? Natuurlijk komt dit hulpprogramma met een grote man-pagina, maar we zullen enkele typische gevallen bekijken. Blader door de directorystructuur, te beginnen met de huidige, en zoek het bestand lostfile.txt:

Als u door een grote directorystructuur zoekt, kan de opdracht find vrij traag zijn. Soms is het handiger om het lokaliseer commando te gebruiken. Het zoekt het bestand niet rechtstreeks in het bestandssysteem, maar kijkt door de database. Deze methode is veel sneller, maar de database kan verouderd raken. Bij sommige distributies wordt deze database elke nacht bijgewerkt. U kunt de opdracht updatedb van tijd tot tijd handmatig uitvoeren om deze bij te werken. zoek naar substrings:

Het aantal toegestane spelfouten hangt af van de lengte van de bestandsnaam, maar kan worden ingesteld met de optie -t. Om maximaal 2 fouten toe te staan ​​en een serviceteken te gebruiken, typt u gewoon:

Overzicht mappenboom

Soms is het nodig om een ​​overzicht van een mappenboom te krijgen. U heeft bijvoorbeeld een nieuwe cd-rom ontvangen en wilt weten wat erop staat. Je kunt gewoon ls-R gebruiken. Persoonlijk geef ik voor de leesbaarheid de voorkeur aan een van de volgende methoden. Boom (sunsite.unc.edu/pub/Linux/utils/file/tree-1.2.tgz) geeft een mappenboom weer als een diagram.

Of gebruik de goede oude vondst. In de Gnu-versie van find , die meestal met Linux wordt geleverd, is het mogelijk om het uitvoerformaat te wijzigen om bijvoorbeeld de bestandsnaam en -grootte weer te geven:

Je kunt een kleine perl-routine gebruiken die werkt met het ls-commando om dit soort dingen te doen. Het kan hier worden gedownload: lsperl.gz . Er zijn veel andere hulpprogramma's voor het bladeren in de mappenboom, maar in de meeste gevallen zijn deze voldoende.

Zoek bestanden op inhoud (zoek naar tekstreeksen in bestanden).

De standaardhulpprogramma's voor het vinden van tekstreeksen in bestanden zijn grep / egrep voor het zoeken naar normale uitdrukkingen en fgrep voor het zoeken naar letterlijke tekenreeksen. Om naar een uitdrukking te zoeken in alle bestanden in de huidige map, typt u gewoon:

Als je het moeilijk vindt om deze lange commando's te onthouden, gebruik dan een klein script dat je hier kunt downloaden: grepfind.gz . Het script verwijdert ook niet-afdrukbare tekens uit de zoekreeks, zodat u niet per ongeluk een binair bestand krijgt als resultaat van de zoekopdracht van egrep.

Een zeer interessant zoekprogramma is agrep. Agrep werkt in principe als egrep , maar stelt u in staat te zoeken op basis van spelfouten. Als u naar een uitdrukking wilt zoeken en maximaal 2 spelfouten wilt toestaan, typt u:

Daarna kunt u zoeken naar een tekenreeks in alle bestanden die eerder waren geïndexeerd

glimp -i -2 "zoekexpressie"

glimp laat ook spelfouten toe (net als agrep) en -2 geeft aan dat twee fouten zijn toegestaan. glimp is beschikbaar op