Uporaba ukaza Linux in Unix: poišči

Komandni ukazi Linux in Unix izvedejo iskanje datotek v hierarhiji imenikov.

Sintaksa za ukaz za iskanje :

najti [pot ...] [izraz]

Opis

Ta priročnik vsebuje dokumentacijo GNU različice iskanja . Ukaz poišče iskanje drevesa imenikov, ukoreninjenega na vsakem danem imenu datoteke, tako da oceni dani izraz iz leve proti desni v skladu s prednostnimi pravili (glej razdelek o operaterjih spodaj), dokler ni znan rezultat; z drugimi besedami, leva stran je napačna za in deluje, velja za ali in na kateri točki se premakne na naslednjo ime datoteke.

Prvi argument, ki se začne s:

se šteje za začetek izraza; vsi argumenti pred njim so poti za iskanje in vsi argumenti po njem so preostali izrazi. Če ni podana nobena pot, se uporabi trenutni imenik. Če ni podan noben izraz, se uporabi izraz -print .

Ukaz za iskanje prihaja s statusom 0, če so vse datoteke uspešno obdelane, večje od 0, če se pojavijo napake.

Izrazi

Izraz je sestavljen iz možnosti (ki vplivajo na celotno delovanje, ne pa na obdelavo določene datoteke in vedno vrnejo true), teste (ki vrnejo resnično ali napačno vrednost) in dejanja (ki imajo neželene učinke in vrnejo resnično ali lažna vrednost), ki jih vsi ločijo operaterji. Izraz - in se domneva, če je operator opuščen. Če izraz ne vsebuje nobenih drugih dejanj, razen -prune , se v vseh datotekah, za katere je izraz resničen, izvede -print .

Opcije

Vse možnosti se vedno vrnejo. Vedno začnejo veljati, namesto da se obdelujejo le, če je doseženo njihovo mesto v izrazu. Zato je zaradi jasnosti najbolje, da jih postavite na začetek izraza.

-dnevni začetek Izmerite čas (za -amin, -atime, -cmin, -ime, -mmin in -mtime ) od začetka danes kot pred 24 urami.
-Depot Vsako vsebino imenika obdelajte pred samim imenikom.
-sledi Dereference simbolne povezave. Implies-noleaf .
pomoč ali pomoč Natisnite povzetek uporabe ukazne vrstice iskanja in izhoda.
-maxdepth [število] Spustite se na največ število ravni (ne-negativno celo število) imenikov pod argumenti ukazne vrstice. Izraz -maxdepth 0 pomeni le uporabo preizkusov in dejanj v argumentih ukazne vrstice.
-mindepth [število] Ne uporabljajte nobenih preizkusov ali dejanj na ravni, ki je manjša od števila (ne-negativno celo število). Izraz -mindepth 1 pomeni obdelavo vseh datotek, razen argumentov ukazne vrstice.
-mount Ne spustite imenikov na druge datotečne sisteme. Nadomestno ime za -xdev , za združljivost z nekaterimi drugimi različicami iskanja .
-Noleaf Ne optimizirajte se s predpostavko, da imenik vsebuje dve manj poddirektorij kot število trdih povezav. *
- različica ali - različica Natisnite številko najdete in izstopite.
-xdev Ne spustite imenikov na druge datotečne sisteme.

* Ta možnost je potrebna, če iščete datotečne sisteme, ki ne sledijo konvenciji Unix directory-link, kot so datotečni sistemi CD-ROM ali MS-DOS ali točke priklopa AFS. Vsak imenik v običnem Unix datotečnem sistemu ima vsaj dve trdni povezavi: njegovo ime in njeno . (obdobje) vstopa. Poleg tega imajo poddirektorji (če obstajajo) vsak vnos, povezan s tem imenikom.

Ko iskanje pregleda imenik, potem ko je določil dve manj poddirektorij od števila povezav v imeniku, ve, da so ostali vnosi v imeniku ne-imeniki ( listne datoteke v dreju imenikov). Če je treba pregledati le imena datotek, jih ni treba objaviti; to omogoča znatno povečanje hitrosti iskanja.

Testi

Numerični argumenti so lahko določeni kot:

+ n Za več kot n.
-n Za manj kot n.
n Za točno n.
-amin n Datoteka je bila nazadnje dostopna pred nimi minutami.
- drugo [datoteka] Datoteka je bila nazadnje dostopna, kot je bila datoteka spremenjena. -anjo je pod vplivom -follow samo, če se pojavijo -prihajajo -no v ukazni vrstici.
-time n Datoteka je bila nazadnje dostopna n * pred 24 urami.
-cmin n Status datoteke je bil nazadnje spremenjen pred nekaj minutami.
-cnewer [datoteka] Stanje datoteke je bilo nedavno spremenjeno, kot je bila datoteka spremenjena.
- cnewer je prizadet le -follow samo, če se prikaže - sledi v ukazni vrstici.
-ctime n Status datoteke je bil nazadnje spremenjen n * pred 24 urami.
-prazno Datoteka je prazna in je redna datoteka ali imenik.
-Lesno Vedno je napačen.
-fstype [tip] Datoteka je v datotečnem sistemu določene vrste. Veljavni tipi datotečnih sistemov se razlikujejo med različnimi različicami Unixa; nepopoln seznam tipov datotečnih sistemov, ki so sprejeti na neki različici Unix-a ali drugega, so: ufs, 4.2, 4.3, nfs, tmp, mfs, S51K, S52K. Če želite videti vrste vaših datotečnih sistemov, uporabite -printf z direktivo% F.
-gid n ID številske skupine datoteke je n .
-group [gname] Datoteka pripada skupini gname (dovoljena je dovoljena številska skupina).
-ilname [vzorec] Kot -lname, vendar je tekma neobčutljiva.
-inoma [vzorec] Like -name , vendar je tekma neobčutljiva. Na primer, vzorci fo * in F? se ujemajo z imeni datotek Foo , FOO , foo , fOo itd.
-inum n Datoteka ima inod številko n .
-ipat [vzorec] Kot -path , toda tekma je neobčutljiva.
-iregex [vzorec] Kot -regex, vendar je tekma neobčutljiva.
-povezave n Datoteka ima n povezav.
-lname [vzorec] Datoteka je simbolična povezava, katere vsebina se ujema z vzorcem lupine. Metakarakteri ne obravnavajo / ali . posebej.
-mmin n Podatki datoteke so bili nazadnje spremenjeni pred več minutami.
-mtime n Podatki datoteke so bili nazadnje spremenjeni n * pred 24 urami.
-name [vzorec] Ime baze datoteke (pot z odstranjenimi vodilnimi imeniki) se ujema z vzorcem lupine. Metakarakteri ( * ,? In [] ) se ne ujemajo s . na začetku osnovnega imena. Če želite prezreti imenik in datoteke pod njim, uporabite -prune ; glej primer v opisu -path .
-newer [datoteka] Datoteka je bila nedavno spremenjena kot datoteka . Izraz -newer je odvisen od -sledi le, če je -prihaja pred -novo v ukazni vrstici.
-Ne Noben uporabnik ne ustreza številčnemu ID-ju datoteke datoteke.
-nogroup Nobena skupina ne ustreza številski ID-ji datoteke datoteke.
-pad [vzorec] Ime datoteke se ujema z vzorec vzorca lupine. Metakarakteri ne obravnavajo / ali . posebej; tako, na primer, najdejo. -path "./sr*sc natisne vnos za imenik z imenom ./src/misc (če obstaja). Če želite prezreti celotno drevo imenikov, uporabite -prune in ne preverite vse datoteke v drevesu. Na primer, če preskočite imenik src / emacs in vse datoteke in imenike pod njim in natisnete imena drugih najdenih datotek, naredite nekaj takega: našli. -path './src/emacs' -prune -o -print
-perm [način] Datotečni dovoljeni bitji so točno [način] (osmiški ali simbolični). Simbolni načini uporabljajo način 0 kot izhodišče.
-perm -mode Za datoteko so nastavljeni vsi bitovi za dovoljenje [način] .
-perm + način Za datoteko so nastavljeni katerikoli od dovoljenih bitov [način] .
-regex [vzorec] Ime datoteke se ujema z vzorcem regularnega izraza. To je ujemanje na celotni poti, ne iskanje. Na primer, če želite ujemati datoteko z imenom ./fubar3, lahko uporabite regularni izraz . * Bar. ali . * b. * 3 , ne pa b. * r3 .
- velikost n [bckw] Datoteka uporablja n enot prostora. Enote so privzeto blokirane 512-bajtnih blokov ali če b sledi n , bajtov, če c sledi n , kilobajtov, če k sledi n , ali 2-bajtnih besed, če w sledi n . Velikost ne šteje posrednih blokov, ampak šteje število blokov v redkih datotekah, ki niso dejansko dodeljene.
-prav Vedno res.
tip c Datoteka je tipa c :
b Block (pufer) poseben
c Znak (neuporaben) poseben
d Imenik
str Imenovana cev (FIFO)
f Redna datoteka
l Simbolna povezava
s Socket
D vrata (Solaris)
-uid n Številčni ID datoteke datoteke je n .
uporabljeno n Datoteka je bila nazadnje dostopna n dni po tem, ko je bil njen status nazadnje spremenjen.
- obžalujem Datoteka je v lasti uporabnika uname (dovoljen je številski uporabniški ID).
-stik c Enako kot tip, razen če je datoteka simbolična povezava. Za simbolične povezave: če -follow ni podan, velja, če je datoteka povezava do datoteke vrste c ; če je podano, velja, če je c l. Z drugimi besedami, za simbolične povezave,
-stype preveri vrsto datoteke, ki ga -type ne preveri.

Akcije

-exec ukaz ;

Izvedi ukaz ; true, če se vrne 0 status. Vsi argumenti, ki jih najdemo, so argumenti za ukaz, dokler argument, sestavljen iz `; ' se srečuje. Niz `{} 'nadomesti trenutno ime datoteke, ki se obdeluje povsod, kjer se pojavi v argumentih ukaza, ne le v argumentih, kjer je sam, kot v nekaterih različicah najdbe . Obe konstrukti bo morda treba ubežati (z `\ ') ali jih citirati, da jih zaščiti pred razširitvijo z lupino. Ukaz je izveden v začetnem imeniku.

-fls datoteka

Prav; kot -ls, ampak pišete v datoteko kot -print.

-print datoteka

Prav; natisnite celotno ime datoteke v datoteko s podatki . Če datoteka ne deluje, ko je iskanje izvedeno, se ustvari; če obstaja, je skrajšana. Datoteke "` / dev / stdout "in" / dev / stderr "se obravnavajo posebej; se nanašajo na standardni izhod in standardni izhod napake.

-print0 datoteka

Prav; kot -print0, ampak piši v datoteko kot -print.

-fprintf format datoteke

Prav; kot -printf, ampak piši v datoteko, kot je -print.

-ok ukaz ;

Like -exec, ampak najprej vprašajte uporabnika (na standardnem vhodu); če se odgovor ne začne z znakom "y" ali "Y", ne zaženite ukaza in vrnite false.

-print

Prav; natisnite celotno ime datoteke na standardni izhod, ki mu sledi nova linija.

-print0

Prav; na standardnem izhodu natisnite celotno ime datoteke, ki ji sledi ničelni znak. To omogoča imena datotek, ki vsebujejo nove vrstice, ki jih pravilno razlagajo programi, ki obdelujejo najdbo .

-printf format

Prav; format tiskanja na standardnem izhodu, interpretacija `` pobegov in `% 'direktiv. Širina polja in natančnosti se lahko določijo kot pri funkciji `printf 'C. Za razliko od -print, -printf na koncu niza ne dodaja nove vrstice. Pobegi in direktive so:

\ a

Alarmni zvonec.

\ b

Backspace.

\ c

Takoj zaustavite tiskanje iz te oblike in izpustite izhod.

\ f

Feed feed.

\ n

Newline.

\ r

Vrnitev prevozov.

\ t

Horizontalni jeziček.

\ v

Vertikalni jeziček.

\\

Dobesedna poševnica (`\ ').

\ NNN

Znak, katerega ASCII koda je NNN (oktalna).

Znak "\", ki mu sledi kateri koli drug znak, se obravnava kot navaden znak, zato sta oba natisnjena.

%%

Znak dobesednega odstotka.

% a

Zadnji dostop datoteke datoteke v obliki, ki jo vrne funkcija C `ctime '.

% A k

Zadnji čas dostopa datoteke v obliki, ki jo določa k , ki je bodisi `@ 'bodisi direktiva za funkcijo C` strftime'. Možne vrednosti za k so navedene spodaj; nekateri od njih morda niso na voljo na vseh sistemih, zaradi razlik v "strftime" med sistemi.

@

sekund od 1. januarja 1970, 00:00 GMT.

Časovna polja:

H

uro (00..23)

jaz

uro (01..12)

k

uro (0..23)

l

uro (1..12)

M

minuta (00..59)

str

lokalno AM ali PM

r

čas, 12-urno (hh: mm: ss [AP] M)

S

drugo (00..61)

T

čas, 24-urno (hh: mm: ss)

X

predstavitev časa v locale (H: M: S)

Z

časovni pas (npr. EDT) ali nič, če časovni pas ni določljiv

Polja za datum:

a

skrajšano ime dneva v danem jeziku (Sun..Sat)

A

lokalno ime dneva v tednu, spremenljiva dolžina (nedelja..saturday)

b

skrajšano ime meseca (Jan..Dec)

B

polno ime meseca, spremenljiva dolžina (januar ..december)

c

datum in ura lokalnega datuma (sob. nov. 04. 12:02:33 EST 1989)

d

dan v mesecu (01..31)

D

datum (mm / dd / yy)

h

enako kot b

j

dan leta (001..366)

m

mesec (01..12)

U

tedensko število leta z nedeljo kot prvi dan v tednu (00..53)

w

dan v tednu (0..6)

W

tedensko število let z ponedeljkom kot prvi dan v tednu (00..53)

x

predstavitev datuma v locale (mm / dd / yy)

y

zadnji dve števki leta (00..99)

Y

leto (1970 ...)

% b

Velikost datoteke v 512-bajtnih blokih (zaokroženo).

% c

Zadnji čas spremembe statusa datoteke v obliki, ki jo vrne funkcija C `ctime '.

% C k

Zadnji čas spremembe statusa datoteke v obliki, ki jo določa k , kar je enako kot za% A.

% d

Globina datoteke v drevesu imenikov; 0 pomeni, da je datoteka argument za ukazno vrstico.

% f

Ime datoteke z odstranjenimi vodilnimi imeniki (samo zadnji element).

% F

Vrsta datotečnega sistema, v katerem je datoteka vključena; ta vrednost se lahko uporabi za -fstype.

% g

Ime skupine skupine ali številka ID skupine, če skupina nima imena.

% G

ID številske skupine datoteke.

% h

Vodilni imeniki imena datoteke (vsi, razen zadnjega elementa).

% H

Argument ukazne vrstice, pod katero je bila najdena datoteka.

%jaz

Številka inode datoteke (v decimalkah).

% k

Velikost datoteke v 1K blokih (zaokroženo).

% l

Objekt simbolne povezave (prazen niz, če datoteka ni simbolična povezava).

% m

Datoteki dovolilnic (v osmih).

% n

Število trdih povezav do datoteke.

% p

Ime datoteke.

% P

Ime datoteke z imenom argumenta ukazne vrstice, na podlagi katere je bilo odstranjeno.

% s

Velikost datoteke v bajtih.

% t

Zadnji čas spremembe datoteke v obliki, ki jo vrne funkcija C `ctime '.

% T k

Zadnji čas spremembe datoteke v obliki, ki jo določa k , kar je enako kot za% A.

% u

Uporabniško ime datoteke ali številčni ID uporabnika, če uporabnik nima imena.

% U

Številčni ID uporabnika datoteke.

Znak »%«, ki mu sledi katerikoli drug znak, je zavržen (vendar je natisnjen drugi znak).

-prena

Če -depth ni podan, res; ne spustite trenutnega imenika.
Če je podan, je napačen; brez učinka.

-Lj

Prav; navesti trenutno datoteko v formatu "ls -dils" na standardni izhod. Število blokov je 1K blokov, razen če je nastavljena spremenljivka okolja POSIXLY_CORRECT, v tem primeru se uporabijo 512-bajtni bloki.

Operaterji

Seznam vrstnega reda, ki se zmanjšuje:

( expr )

Prednost sile.

! expr

Res je, če je expr napačen.

-not izt

Enako kot ! expr .

expr1 expr2

In (implicitno); expr2 ni ovrednoten, če je expr1 napačen.

expr1 -a expr2

Enako kot expr1 expr2 .

expr1- in expr2

Enako kot expr1 expr2 .

expr1 -o expr2

Ali; expr2 ni ovrednoten, če je expr1 resničen.

expr1- ali expr2

Enako kot expr1 -o expr2 .

expr1 , expr2

Seznam; oba expr1 in expr2 sta vedno ovrednoteni. Vrednost expr1 se zavrže; vrednost seznama je vrednost expr2 .

Primeri

najde / home-uporabnik joe

Poiščite vse datoteke pod imenikom / domom v lasti uporabnika joe.

našli / usr -name * stat

Poiščite vse datoteke pod imeniku / usr, ki se konča v ».stat«.

našli / var / spool -mtime +60

Poiščite vsako datoteko pod imenom / var / spool, ki je bila spremenjena pred več kot 60 dnevi.

find / tmp -name core -type f -print | xargs / bin / rm -f

Poiščite datoteke z imenom jedro v imeniku / tmp ali pod njim in jih izbrišite. Upoštevajte, da bo to storilo nepravilno, če obstajajo imena datotek, ki vsebujejo nove vrstice, enojne ali dvojne narekovaje ali presledke.

find / tmp -name jedro-tip f -print0 | xargs -0 / bin / rm -f

Poiščite datoteke, imenovane jedro, v imeniku / tmp ali pod njim in jih izbrišite, obdelajte imena datotek tako, da so imena datotek ali imenikov, ki vsebujejo enojne ali dvojne narekovaje, presledke ali nove linije, pravilno obdelana. Preizkus -name prihaja pred preskusom tipa, da se prepreči, da bi morali v vsaki datoteki klicati stat (2) .

najti . -type f -exec datoteka '{}' \;

Zažene datoteko v vsaki datoteki v trenutnem imeniku ali pod njim. Upoštevajte, da so obloge priložene z enojnimi oznakami, da jih zaščitite pred tolmačenjem kot ločila med ukazno vrstico. Točka podpičja je podobno zaščitena z uporabo poševnice, čeprav ";" bi se lahko uporabili tudi v tem primeru.

najdi / \ (-perm -4000 -printf / root / suid.txt '% # m% u% p \ n' \), \ \ (-size + 100M -printf /root/big.txt '% -10s% p \ n '\)

Preusmerite datotečni sistem samo enkrat, tako da v datoteke /root/suid.txt in velike datoteke v datoteko /root/big.txt dodate setuidne datoteke in imenike.

Poišči $ HOME -mtime 0

Poiščite datoteke v domačem imeniku, ki so bili spremenjeni v zadnjih 24 urah. Ta ukaz deluje tako, ker je čas, odkar je bila vsaka datoteka nazadnje spremenjena, razdeljena za 24 ur, preostanek pa je zavržen. To pomeni, da se ujemajo -mtime

0 , bo morala datoteka imeti v preteklosti spremembo, ki je manj kot 24 ur nazaj.

najti . -perm 664

Poiščite datoteke, ki so prebrale in pisale dovoljenje za njihovega lastnika in skupine, vendar lahko drugi uporabniki preberejo, vendar ne pišejo. Datoteke, ki izpolnjujejo ta merila, imajo pa druge nastavljene bite (na primer, če lahko nekdo izvrši datoteko), ne bodo ujemali.

najti . -perm -664

Poiščite datoteke, ki so prebrale in pisale dovoljenje za lastnika in skupino ter katere druge uporabnike lahko preberejo, ne glede na prisotnost kakršnih koli dodatnih dovolilnic (na primer izvršljivega bitja). To se bo ujemalo z datoteko, ki ima na primer način 0777.

najti . -perm / 222

Poiščite datoteke, ki jih je mogoče zapisati nekdo (njihov lastnik ali njihova skupina ali kateri koli drugi).

najti . -perm / 220 najde. -perm / u + w, g + w najde. -perm / u = w, g = w

Vsi trije ukazi naredijo isto stvar, prvi pa uporablja osmiško predstavitev datoteke, drugi dve pa simbolično obliko. Ti ukazi vse iščejo datoteke, ki jih lahko zapisuje njihov lastnik ali njihova skupina. Datoteke ni treba zapisovati tako lastnika kot skupine, ki se ujema z njimi; bodisi bo.

najti . -perm -220 najdem. -perm -g + w, u + w

Oba ukaza naredita isto stvar; poiščite datoteke, ki jih lahko zapisujejo njihovi lastniki in njihova skupina.

najti . -perm -444 -perm / 222! -perm / 111 najde. -perm -a + r -perm / a + w! -perm / a + x

Ti dve ukazi iščejo datoteke, ki jih je mogoče beriti za vsakega (-perm -444 ali -perm -a + r), imajo vsaj nastavljene bitne nastavitve (-perm / 222 ali -perm / a + w), vendar niso izvedljive za vsakogar (! -perm / 111 in! -perm / a + x)

Pomembno: Uporabite ukaz man ( % man ), da vidite, kako se na vašem računalniku uporablja ukaz.