A Linux és a Unix parancs használata: find

A Linux és a Unix parancs megtalálja a fájlok keresését a könyvtár hierarchiában.

A Find parancs szintaxisa:

megtalálja [útvonal ...] [kifejezés]

Leírás

Ez a kézikönyv oldal a találatok GNU verzióját dokumentálja. A parancs megtalálja az egyes adott fájlneveken gyökerező könyvtárfát az adott kifejezés balról jobbra történő értékelésekor, a precedens szabályainak megfelelően (lásd az alábbi operátorok részt), amíg az eredményt nem ismerjük; Más szavakkal, a bal oldali oldal hamis és működik, igaz, vagy arra a pillanatra, hogy a keresés a következő fájlnévre ugrik.

Az első argumentum, amely a következővel kezdődik:

a kifejezés kezdetének tekintendő; minden argumentum, mielőtt elérné a keresési útvonalakat, és az utána következő érvek a kifejezés többi része. Ha nincs megadva útvonal, akkor az aktuális könyvtárat használjuk. Ha nincs kifejezés, akkor a kifejezés -printet használjuk.

A Find parancs kilép a 0-as állapotból, ha minden fájl sikeresen feldolgozva van, nagyobb, mint 0, ha hiba történik.

kifejezések

A kifejezés olyan opciókból áll (amelyek az egész műveletet befolyásolják, nem pedig egy adott fájl feldolgozását, és mindig mindig visszaadnak), a tesztek (amelyek visszaadják az igaz vagy hamis értéket) és az akciókat (amelyeknek mellékhatásai vannak és visszatérnek egy valódi vagy hamis érték), mindegyiket operátorok választják el. A kifejezés - és feltételezzük, hogy az operátor el van hagyva. Ha a kifejezés nem tartalmaz olyan műveleteket, mint a -prune , akkor a -print minden olyan fájlra kerül, amelyre a kifejezés igaz.

Lehetőségek

Valamennyi lehetőség mindig igaz. Mindig hatással vannak, és nem csak feldolgozásra kerülnek, amikor a kifejezés helyét elérik. Ezért az egyértelműség kedvéért célszerű a kifejezés elején elhelyezni őket.

-daystart Az idő mérése (az -amin, az -ime, a -cmin, a -ctime, a -min és a -mtime ) a mai nap kezdetén, nem pedig 24 órával ezelőtt.
-mélység Minden könyvtár tartalmának feldolgozása a könyvtár előtt.
-kövesse Dereferencia szimbolikus linkek. A következőket jelenti: -noleaf .
-help vagy -segít Nyomtassa ki a keresés és a kilépés parancssori használatának összefoglalóját.
-maxdepth [szám] Legfeljebb a parancssori argumentumok alatti könyvtárak szintjének (nem negatív egészének) lejtése. A -maxdepth 0 kifejezés csak a teszteket és műveleteket alkalmazza a parancssori argumentumokra.
-mindepth [szám] Ne alkalmazzon semmilyen tesztet vagy műveletet a számnál kisebb szinteken (nem negatív egész szám). Az " indefinite" kifejezés az összes fájlt feldolgozza, kivéve a parancssori argumentumokat.
-hegy Ne engedje le a könyvtárakat más fájlrendszereken. Az -xdev alternatív neve, a kompatibilitás a találatok más verzióival.
-noleaf Ne optimizálja úgy, hogy a könyvtárak 2 kisebb alkönyvtárat tartalmaznak, mint a keményláncok száma. *
-verzió vagy -verzió Nyomtassa ki a találati verziószámot és lépjen ki.
-xdev Ne engedje le a könyvtárakat más fájlrendszereken.

* Ez az opció akkor szükséges, ha olyan fájlrendszereket keres, amelyek nem követik a Unix könyvtár-link konvenciót, például a CD-ROM vagy MS-DOS fájlrendszereket vagy az AFS kötet-csatolási pontokat. Minden normál Unix fájlrendszeren található könyvtár legalább 2 kemény hivatkozást tartalmaz: a neve és a neve . (periódus) bejegyzést. Továbbá, annak alkönyvtárai (ha vannak ilyenek) mindegyike rendelkezik egy .. bejegyzéssel, amely ehhez a könyvtárhoz kapcsolódik.

Amikor egy könyvtár megvizsgálja a könyvtárat, miután két kisebb alkönyvtárba rendelt, mint a könyvtár hivatkozási számát, tudja, hogy a könyvtár többi bejegyzése nem könyvtárak ( levélfájlok a könyvtárfában). Ha csak a fájlok nevét kell megvizsgálni, nincs szükség statisztikákra; ez jelentősen növeli a keresési sebességet.

vizsgálatok

A numerikus argumentumok meghatározhatók:

+ n Több mint n.
-n Kevesebb mint n.
n Pontosan n.
-amin n A fájlt legutóbb elérte n perc.
-anewer [fájl] A fájlt legutóbb a legutóbb használták, mint a fájl módosítása. - az új változatot csak akkor követi, ha - a követés előbb - újból a parancssorban van.
-matime n A fájl legutóbb n * 24 órával ezelőtt érkezett.
-cmin n A fájl állapotát az utolsó perc elteltével módosították.
-cnewer [fájl] A fájl állapota legutóbb megváltozott, mint a fájl módosítása.
- a cnewer -et csak akkor követi, ha a -window -cnewer lesz a parancssorban.
-negyed n A fájl állapota utolsó módosítása n * 24 órája.
-üres A fájl üres és rendszeres fájl vagy könyvtár.
-hamis Mindig hamis.
-fstype [típus] A fájl meghatározott típusú fájlrendszeren van. Az érvényes fájlrendszer típusai különböznek a Unix különböző verziói között; a Unix valamelyik verzióján elfogadott fájlrendszertípusok hiányos listája: ufs, 4.2, 4.3, nfs, tmp, mfs, S51K, S52K. Használhatja a -printf-t a% F direktíva segítségével, hogy megtekinthesse a fájlrendszerek típusát.
-gid n A fájl numerikus csoportazonosítója n .
-group [gname] A fájl a gname csoporthoz tartozik (engedélyezett numerikus csoport azonosítója).
-név [minta] Mint a -lname, de a meccsen a kis-és nagybetűk nem érzékenyek.
-iname [minta] Mint -name , de a meccsen az eset nem érzékeny. Például a * és F * mintázatok illeszkedjen a Foo , FOO , foo , fOo fájlnevekhez .
-inum n A fájl rendelkezik inode számmal n .
-apat [minta] Mint a path , de a meccs a kisbetűk érzéketlen.
-iregex [minta] Mint a -regex, de a meccsen az eset nem érzékeny.
-links n A fájlnak n kapcsolata van.
-neve [minta] A fájl egy szimbolikus link, amelynek tartalma egyezik a shell mintával. A metakarakterek nem kezelik / . különösen.
-mmin n A fájl adatai utolsó perccel ezelőtt módosultak.
-mtime n A fájl adatai utolsó módosítása n * 24 órával ezelőtt történt.
-name [minta] A fájlnév alapja (az eltávolított vezető könyvtárak elérési útvonala) illeszkedik a shell mintához. A metakarakterek ( * , ? , És [] ) nem felelnek meg a . az alapnév kezdetén. Ha figyelmen kívül hagyja a könyvtárat és a benne lévő fájlokat, használja a -prune parancsot ; nézze meg a példát a -path leírásban.
-newer [fájl] A fájlt nemrégiben módosították, mint a fájl . Az "új csatorna" kifejezést csak akkor követi, ha a -window -newer lesz a parancssorban.
-nouser Egyetlen felhasználó sem felel meg a fájl számszerû felhasználói azonosítójának.
-nogroup Nincs olyan csoport, amely megfelel a fájl numerikus csoportazonosítójának.
-path [minta] A fájlnév illeszkedik a shell minta mintához . A metakarakterek nem kezelik / . különösen; így például megtalálni. A "-path" ./sr*sc egy bejegyzést ír ki a ./src/misc nevű könyvtárba (ha van ilyen). Ha figyelmen kívül hagyja az egész könyvtárfát, használja a -prune parancsot, nem pedig minden fájlt a fában. Például, ha kihagyja a könyvtár src / emacs és az összes fájlt és könyvtárat, és kinyomtatja a talált fájlok nevét, tegyen valami ilyesmit: find. -path './src/emacs' -prune -o -print
-perm [mód] A fájl engedélyezési bitjei pontosan [mód] (oktális vagy szimbolikusak). A szimbolikus módok az 0-as módot használják kiindulási pontként.
-perm módban A fájl összes engedélyezési bitje [mód] van beállítva.
-perm + mód Bármely engedélyezési bit [mód] van beállítva a fájlhoz.
-regex [minta] A fájlnév megfelel a szabályos kifejezésmintának. Ez egyezés az egész úton, nem pedig keresés. Például a ./fubar3 nevű fájlhoz való illesztéshez használhatja a szabályos kifejezést *. vagy . * b. * 3 , de nem b. * r3 .
-size n [bckw] A fájl n darab egységet használ. Az egységek alapértelmezésben 512 byte-os blokkok vagy ha b követi n , bájt, ha c követi n , kilobájt, ha k követi n , vagy 2 bájtos szavakat, ha w követi. A méret nem számít közvetett blokkokat, de a kevés formátumú fájlok blokkolását nem számolják el.
-igaz Mindig igaz.
c A fájl típusa c :
b Blokk (pufferelt) speciális
c Karakter (nem pufferelt) különleges
d Könyvtár
p Nevezett cső (FIFO)
f Rendszeres fájl
l Szimbolikus kapcsolat
s Foglalat
D ajtó (Solaris)
-vagy n A fájl numerikus felhasználói azonosítója n .
-használta n A fájlt legutóbb n nappal a statisztikájának legutóbbi módosítása után lehet elérni.
-használó egyént A fájl tulajdonosa a felhasználó uname (numerikus felhasználói azonosító engedélyezett).
-xtype c Ugyanaz, mint a- típusú, hacsak a fájl nem szimbolikus link. Szimbolikus hivatkozások esetén: ha a -follow nem adódott , akkor igaz, ha a fájl egy c típusú fájlhoz kapcsolódik; ha - a követés adódik, akkor igaz, ha c l. Más szavakkal, szimbolikus linkek esetén,
A -xtype ellenőrzi annak a fájlnak a típusát, amelyet a típus nem ellenőriz.

Hozzászólások

-exec parancs ;

Parancs végrehajtása; igaz, ha a 0 állapot visszakerül. Az összes következő argumentumot a parancsnak kell argumentálnia, amíg egy argumentumot nem tartalmaz: ";" találkozik. A {{} karakterláncot az aktuális fájlnév váltja fel, amelyet mindenhol a parancs argumentumaiban jelenítenek meg, nem csak az érvekben, ahol egyedül van, mint a találatok egyes verzióiban. Mindkét konstrukciót meg kell szüntetni ('\') vagy idézőjelekkel, hogy megóvja őket a héj kiterjesztésétől. A parancs a kezdő könyvtárban fut.

-fls fájl

Igaz; mint a -ls, de írni a fájlt, mint a -fprint.

-fprint fájl

Igaz; nyomtassa ki a teljes fájlnevet a fájl fájlba . Ha a fájl nem létezik, amikor a keresés meg van futtatva, létrejön; ha létezik, akkor csonka. A `` / dev / stdout '' és `` / dev / stderr '' fájlneveket speciálisan kezelik; ezek a szabványos kimenetre és a standard hiba kimenetre vonatkoznak.

-fprint0 fájl

Igaz; mint a -print0, de a fájllal, mint a -fprint.

-fprintf fájlformátum

Igaz; mint a -printf, de a fájlhoz írjuk a -fprint-et.

-ok parancs ;

Mint -exec, de először kérdezze meg a felhasználót (a standard bemeneten); ha a válasz nem kezdődik "y" vagy "Y" -al, akkor ne futtassa a parancsot, és adja vissza a false értéket.

-nyomtatás

Igaz; nyomtassa ki a teljes fájlnevet a szabvány kimeneten, majd kövesse az új sor.

-print0

Igaz; nyomtassa ki a teljes fájlnevet a szabványos kimeneten, majd egy null karaktert. Ez lehetővé teszi az új sorokat tartalmazó fájlneveket, hogy a találatok feldolgozását végző programok megfelelően értelmezzék azokat.

-printf formátumban

Igaz; nyomtatási formátum a szabványos kimeneten, a `\ 'escape és a`%' direktívák értelmezése. A mezők szélessége és pontossága megadható a `printf 'C függvénynek megfelelően. A -print-vel ellentétben a -printf nem ad új sort a string végére. Az elkerülések és az irányelvek a következők:

\ a

Vészcsengő.

\ b

Backspace.

\ c

Állítsa le azonnal a nyomtatást ebből a formátumból és öblítse ki a kimenetet.

\ f

Form feed.

\ n

Új sor.

\ r

Kocsi vissza.

\ t

Vízszintes fül.

\ v

Függőleges lap.

\\

Szó szerinti visszafordulás (`\ ').

\ NNN

Az a karakter, amelynek ASCII kódja NNN (oktális).

A `\ 'karaktert, amelyet bármelyik karakter követ, rendes karakterként kezelik, így mindkettő nyomtatódik.

%%

Szóbeli százaléka.

% a

A fájl utolsó hozzáférési ideje a C `ctime 'függvény által visszaadott formátumban.

% A k

A fájl legutóbbi hozzáférési ideje a k által megadott formában, ami vagy a "@" vagy a C `strftime" függvényre vonatkozó irányelv. A k lehetséges értékeit alább soroljuk fel; egyes esetekben előfordulhat, hogy nem minden rendszerben rendelkezésre állnak, mivel a rendszerek közötti "strftime" különbségek miatt.

@

másodperc óta 1970. január 1., 00:00 GMT.

Időmezők:

H

óra (00..23)

én

óra (01..12)

k

óra (0..23)

l

óra (1..12)

M

perc (00..59)

p

locale AM ​​vagy PM

r

idő, 12 óra (hh: mm: ss [AP] M)

S

második (00..61)

T

idő, 24 óra (hh: mm: ss)

x

locale időbeli ábrázolása (H: M: S)

Z

időzónát (pl. EDT), vagy semmit, ha nincs meghatározható időzóna

Dátummezők:

egy

locale rövidített hétköznapja (Sun..Sat)

A

locale teljes naptári neve, változó hossza (vasárnap ... szombat)

b

locale rövidített neve (Jan..Dec)

B

locale teljes havi neve, változó hossza (január ... december)

c

locale dátum és idő (szo. nov. 04 12:02:33 EST 1989)

d

nap a hónapban (01..31)

D

dátum (mm / dd / év)

h

ugyanaz, mint a b

j

nap (001..366)

m

hó (01..12)

U

hetes évszám vasárnap a hét első napján (00..53)

w

a hét napja (0..6)

W

heti évszám hétfővel a hét első napján (00..53)

x

locale dátumának ábrázolása (mm / dd / yy)

y

az év utolsó két számjegye (00..99)

Y

év (1970 ...)

b%

A fájl mérete 512 byte-os blokkokban (felfelé kerekítve).

% c

A fájl utolsó állapotváltozási ideje a C `ctime 'függvény által visszaadott formátumban.

% C k

A fájl utolsó állapotváltozási ideje a k által megadott formában, ami megegyezik a% A értékével.

% d

A fájl mélysége a könyvtárfában; 0 azt jelenti, hogy a fájl parancssori argumentum.

% f

A fájl neve bármelyik vezető könyvtárral eltávolítva (csak az utolsó elem).

% F

A fájlrendszer típusa, amelyen a fájl be van kapcsolva; ez az érték használható -fstype-hez.

% g

A fájl csoportjának neve vagy numerikus csoport azonosítója, ha a csoportnak nincs neve.

% G

A fájl numerikus csoportazonosítója.

% h

A fájlnevek vezető könyvtárai (az összes, csak az utolsó elem).

% H

Parancssor argumentum, amelyen a fájl megtalálható.

%én

A fájl inode száma (decimális).

% k

A fájlméret 1K blokkban (felfelé kerekítve).

% l

A szimbolikus link objektuma (üres karakterlánc, ha a fájl nem szimbolikus link).

% m

A fájl engedélyezési bitjei (oktálisan).

% N

A fájlokhoz való kemény hivatkozások száma.

% p

A fájl neve.

% P

A fájl neve annak a parancssori argumentumnak a nevével, amelyen megtalálta.

% s

A fájl mérete bájtban.

% t

A fájl utolsó módosítási ideje a C `ctime 'függvény által visszaadott formátumban.

% T k

A fájl utolsó módosítási ideje a k által megadott formában, ami ugyanaz, mint a% A esetében.

% u

A fájl felhasználói neve vagy numerikus felhasználói azonosítója, ha a felhasználónak nincs neve.

% U

A fájl számszerű felhasználói azonosítója.

A "%" karakter, amelyet bármely más karakter követ, elvetik (de a másik karakter nyomtatódik).

-aszalt szilva

Ha -depth nem adódik, igaz; ne engedje le az aktuális könyvtárat.
Ha a -depth, hamis; hatástalan.

-ls

Igaz; az aktuális fájl az "ls -dils" formátumban jelenik meg a szabványos kimeneten. A blokkszámlálás 1K blokk, kivéve, ha a POSIXLY_CORRECT környezeti változó be van állítva, ebben az esetben 512 bájtos blokkok használatosak.

Az üzemeltetők

A csökkenő sorrend sorrendjében felsorolva:

( expr )

Erővel elsőbbséget.

! expr

Igaz, ha az expr hamis.

-nem expr

Ugyanaz, mint a ! expr .

expr1 expr2

És (hallani); Az expr2 értéket nem értékeljük, ha az expr1 hamis.

expr1 -a expr2

Ugyanaz, mint az expr1 expr2 .

expr1 és expr2

Ugyanaz, mint az expr1 expr2 .

expr1- o expr2

Vagy; Az expr2 értékét nem értékeljük ki, ha az expr1 igaz.

expr1 vagy expr2

Ugyanaz, mint az expr1- o expr2 .

expr1 , expr2

Lista; mind az expr1, mind az expr2 értékeket mindig értékeljük. Az expr1 értékét elvetjük; a lista értéke az expr2 értéke.

Példák

find / home -használó joe

Keressen minden fájlt a felhasználó joe tulajdonában lévő könyvtárban / házban.

find / usr -name * stat

Keressen minden fájlt a / usr könyvtár alatt a ".stat" -ban.

találja a / var / spool -mtime +60-at

Keressen minden fájlt a / var / spool könyvtár alatt, amelyet több mint 60 napja módosított.

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

Keresse meg a / tmp könyvtárban elnevezett fájlokat, és törölje őket. Ne feledje, hogy ez helytelenül működik, ha vannak olyan új fájlnevek, egysoros vagy kettős idézőjelek vagy szóközöket tartalmazó fájlnevek.

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

Keresse meg a / tmp könyvtárban található vagy az alatt található fájlokat, és törölje őket, feldolgozza a fájlneveket oly módon, hogy az egyes vagy kettős idézőjeleket, szóközöket vagy új sorokat tartalmazó fájl- vagy könyvtárneveket megfelelően kezeljék. A -name teszt a típusú teszt előtt jön, hogy elkerülje a stat (2) minden állományban történő hívását.

megtalálja . -type f -exec fájl '{}' \;

Fájlokat futtat minden aktuális könyvtárban vagy alatt. Vegyük észre, hogy a zárójelek egyenkénti pontozási jelekkel vannak ellátva, hogy megvédjék őket az értelmezéstől a shell parancs írásjeleként. A pontosvesszőt ugyanúgy védik a visszafordulás használata, bár ";" ebben az esetben is lehetett volna használni.

/ \ (-méret + 100M -fprintf /root/big.txt '% -10s% \ "% d% p \ n ')

A fájlrendszert csak egyszer nyithatja meg, felsorolva a setuid fájlokat és könyvtárakat a /root/suid.txt fájlba és a nagy fájlokat a /root/big.txt fájlba .

találja meg a $ HOME -mtime 0 értéket

Keressen olyan fájlokat a saját könyvtárában, amelyek az elmúlt 24 órában módosultak. Ez a parancs azért működik, mert az egyes fájlok legutóbbi módosítása óta eltelt idő 24 órával van elosztva, és a fennmaradó részeket elvetik. Ez azt jelenti, hogy megfeleljen a -mtime

0 , a fájlnak módosítania kell a múltban, ami kevesebb, mint 24 órája.

megtalálja . -perm 664

Olyan fájlokat keres, amelyek olvasó és író engedélyt kaptak tulajdonosuk és csoportjuk számára, de amelyeket más felhasználók olvashatnak, de nem írnak. Azok a fájlok, amelyek megfelelnek ezeknek a kritériumoknak, de más jogosultsági biteket tartalmaznak (például ha valaki végrehajthatja a fájlt), nem illeszkednek egymáshoz.

megtalálja . -perm -664

Olyan fájlokat kereshet, amelyek olvasó és író engedélyt kapnak tulajdonosa és csoportja számára, és amelyeket más felhasználók is olvashatnak, tekintet nélkül az extra engedélyezési bitek (például a végrehajtható bit) jelenlétére. Ez megegyezik például a 0777-es módú fájlokkal.

megtalálja . -perm / 222

Keressen olyan fájlokat, amelyeket valaki (tulajdonosa, csoportja vagy bárkinek) írhat.

megtalálja . -perm / 220 talál. -perm / u + w, g + w talál. -perm / u = w, g = w

Mindhárom parancs ugyanazt teszi, de az első a fájl mód oktális ábrázolását használja, a másik kettő a szimbolikus formát használja. Ezek a parancsok olyan fájlokat keresnek, amelyeket tulajdonosuk vagy csoportjuk írhat. A fájlok nem kell mind a tulajdonos, mind a csoport számára írhatóak; vagy fog tenni.

megtalálja . -perm -220 talál. -perm -g + w, u + w

Mindkét parancs ugyanazt teszi; olyan fájlok keresésére, amelyeket tulajdonosa és csoportja írhat.

megtalálja . -perm -444 -perm / 222! -perm / 111 talál. -perm -a + r -perm / a + w! -perm / a + x

Ez a két parancs mindkettő számára olvasandó fájlokat (-perc -444 vagy -perm -a + r) tartalmaz, legalább írási bit-készleten (-perm / 222 vagy -perm / a + w), de nem végrehajtható bárki számára (! -perm / 111 és! -perm / a + x)

Fontos: Az ember paranccsal ( % man ) tekintse meg, hogyan használják a parancsot az adott számítógépen.