Ús del comandament Linux i Unix: cerqueu-ho

La comanda Linux i Unix executa una recerca de fitxers en una jerarquia de directoris.

Sintaxi per a la comanda de cerca:

trobeu [ruta ...] [expressió]

Descripció

Aquesta pàgina de manual documenta la versió GNU de la cerca . La comanda troba que l'arbre de directoris està arrelat a cada nom del fitxer determinat, avaluant l'expressió donada d'esquerra a dreta, d'acord amb les regles de precedència (vegeu la secció sobre operadors a continuació), fins que es conegui el resultat; en altres paraules, el costat esquerre és fals per a i operacions, cert per o , en quin punt es troba al següent nom del fitxer.

El primer argument que comença amb:

es pren com a principi de l'expressió; Alguns arguments abans que siguin rutes per buscar, i qualsevol argument després que sigui la resta de l'expressió. Si no es donen cap ruta, s'utilitza el directori actual. Si no s'indica cap expressió, s'utilitza l'expressió -print .

L'ordre Find conté l'estat 0 si tots els fitxers es processen amb èxit, més de 0 si es produeixen errors.

Expressions

L'expressió es compon d'opcions (que afecten l'operació global en lloc del processament d'un fitxer específic, i sempre tornen cert), les proves (que retornen un valor vertader o fals) i les accions (que tenen efectes secundaris i retornen un veritable o valor fals), tots separats pels operadors. L'expressió -i se suposa on s'omet l'operador. Si l'expressió no conté cap acció diferent de -prune , llavors -print es realitza en tots els fitxers per als quals l'expressió és certa.

Opcions

Totes les opcions sempre es tornen certes. Sempre tenen efecte, en comptes de processar-se només quan s'aconsegueix el seu lloc en l'expressió. Per tant, per a la claredat, és millor posar-los al principi de l'expressió.

-daystart Temps de mesura (per -amin, -time, -cmin, -ctime, -mmin i -mtime ) des del començament d'avui en lloc de fa 24 hores.
-de profunditat Processeu els continguts de cada directori abans del directori en qüestió.
-follow Enllaços simbòlics de dret. Implica -només .
-help o --help Imprimiu un resum de l'ús de la línia de comandaments de la cerca i la sortida.
-maxdepth [número] Descendeix com a màxim el nombre de nivells (un enter no negatiu) de directoris sota els arguments de la línia de comandaments. L'expressió -maxdepth 0 significa que només s'apliquen les proves i les accions als arguments de la línia d'ordres.
-filtre [nombre] No aplique cap prova o acció a nivells inferiors al nombre (un enter no negatiu). L'expressió- depth 1 significa processar tots els fitxers, excepte els arguments de la línia d'ordres.
-munt No baixeu directoris en altres sistemes de fitxers. Un nom alternatiu per -xdev , per a la compatibilitat amb algunes altres versions de la cerca .
-sobretot No optimitzeu assumint que els directoris contenen 2 menys subdirectoris que el seu recompte d'enllaç dur. *
-versió o --versió Imprimiu el número de la versió de cerca i surti.
-xdev No baixeu directoris en altres sistemes de fitxers.

* Aquesta opció és necessària quan busqueu sistemes de fitxers que no segueixin la convenció d'enllaços del directori Unix, com ara el CD-ROM o els sistemes de fitxers MS-DOS o els punts de muntatge del volum AFS. Cada directori en un sistema de fitxers Unix normal té almenys 2 enllaços durs: el seu nom i el seu . entrada (període). A més, els seus subdirectoris (si n'hi ha) tenen una entrada ... enllaçada a aquest directori.

Quan es troba examina un directori, després d'haver format dos menys subdirectoris que el recompte d'enllaços del directori, sap que la resta de les entrades del directori no són directoris (fitxers de fulles de l'arbre de directoris). Si només cal examinar els noms dels fitxers, no hi ha cap necessitat d'esborrar-los; això dóna un augment significatiu de la velocitat de cerca.

Proves

Els arguments numèrics es poden especificar com:

+ n Per major que n.
-n Per menys de n.
n Per exactament n.
-amin n El fitxer s'ha accedit per última vegada fa n minuts.
-el nou [fitxer] S'ha accedit recentment al fitxer més recentment que s'ha modificat el fitxer . -L'usuari es veu afectat per -follow només si -seguit arriba abans -un nou a la línia d'ordres.
-tema n S'ha accedit recentment al fitxer n * fa 24 hores.
-cmin n L'estat de l'arxiu es va canviar per última vegada fa n minuts.
-cnewer [file] L'estat de l'arxiu es va canviar per darrer cop més recent que el fitxer modificat.
- El cnewer es veurà afectat per -follow només si -seguit arriba abans- el nou en la línia d'ordres.
-temporada n L'estat de l'arxiu va ser canviat per última vegada n * fa 24 hores.
-buit El fitxer està buit i és un fitxer normal o un directori.
-fals Sempre fals.
-fstype [type] El fitxer està en un sistema de fitxers de tipus específic. Els tipus de sistema de fitxers vàlids varien entre les diferents versions d'Unix; una llista incompleta de tipus de sistema de fitxers que s'accepten en alguna versió d'Unix o una altra és: ufs, 4.2, 4.3, nfs, tmp, mfs, S51K, S52K. Podeu utilitzar -printf amb la directiva% F per veure els tipus dels vostres sistemes de fitxers.
-gid n L'identificador del grup numèric del fitxer és n .
-grupo [gname] El fitxer pertany al grup gname (es permet l'identificador del grup numèric).
- nom [patró] Igual que el nom, però la coincidència és insensible a majúscules i minúscules.
-iname [patró] Igual -nom , però la coincidència és insensible a majúscules i minúscules. Per exemple, els patrons de * i F? coincideix amb els noms dels fitxers Foo , FOO , foo , fOo , etc.
-inum n El fitxer té el número d'inode n .
-patlla [patró] Igual que la ruta , però la coincidència és insensible a majúscules i minúscules.
-irgex [patró] Igual que -regex, però la coincidència és insensible a majúscules i minúscules.
enllaços n El fitxer té enllaços n .
-lum [patró] El fitxer és un enllaç simbòlic el contingut del qual coincideix amb el patró de shell. Els metacaracteres no es tracten / o . especialment.
-mmin n Les dades del fitxer van ser modificades per última vegada fa n minuts.
-temps n Les dades del fitxer van ser modificades per última vegada n * fa 24 hores.
-name [patró] La base del nom del fitxer (la ruta d'accés amb els directoris principals eliminats) coincideix amb el patró de shell. Els caràcters ( * , ? , I [] ) no coincideixen amb a . al principi del nom base. Per ignorar un directori i els fitxers sota d'ell, utilitzeu -prune ; vegeu un exemple a la descripció de- path .
-newer [file] S'ha modificat el fitxer més recentment que el fitxer . L'expressió -newer és afectada per -follow només si -follow és abans -newer en la línia d'ordres.
-nouser Cap usuari correspon a l'identificador numèric d'usuari del fitxer.
-nogrup Cap grup correspon a l'ID del grup numèric del fitxer.
-path [patró] El nom del fitxer coincideix amb el patró del patró de shell Els metacaracteres no es tracten / o . especialment; així que, per exemple, trobeu-ho. -path './srSsc imprimirà una entrada per a un directori anomenat ./src/misc (si n'hi ha). Per ignorar tot un arbre de directoris, utilitzeu -pruneu-ho en comptes de comprovar tots els fitxers de l'arbre. Per exemple, ometeu el directori src / emacs i tots els fitxers i directoris que hi ha sota, i imprimiu els noms dels altres fitxers trobats, feu alguna cosa així: find. -path './src/emacs' -prune-o -print
-perma [mode] Els bits de permisos de l'arxiu són exactament [mode] (octals o simbòlics). Els modes simbòlics utilitzen el mode 0 com a punt de partida.
-perm-mode Tots els bits de permís [mode] s'estableixen per al fitxer.
-perm + mode Qualsevol dels bits de permís [mode] s'estableixen per al fitxer.
-regex [patró] El nom del fitxer coincideix amb el patró d' expressió regular. Aquesta és una coincidència en tot el camí, no una recerca. Per exemple, per coincidir amb un fitxer anomenat ./fubar3, podeu utilitzar l'expressió regular . * Bar. o . * b. * 3 , però no b. * r3 .
mida n [bckw] El fitxer utilitza n unitats d'espai. Les unitats són blocs de 512 bytes per defecte o si b segueix n , bytes si c segueix n , kilobytes si k segueix n , o 2 bytes si w segueix n . La mida no conté blocs indirectes, però sí compta amb blocs en fitxers dispersos que no són realment assignats.
-true Sempre cert.
tipus c El fitxer és de tipus c :
b Bloqueja (amort.) Especial
c Caràcter (sense marcar) especial
d Directori
p Canonada amb nom (FIFO)
f Fitxer regular
l Enllaç simbòlic
s Endoll
D porta (Solaris)
-Niu n L'identificador numèric d'usuari del fitxer és n .
-used n El fitxer va ser accés per última vegada n dies després que el seu estat es va canviar per última vegada.
-usuari uname El fitxer pertany a uname de l' usuari (es permet l'identificador numèric d'usuari).
-xippe c Igual que tipus, tret que el fitxer sigui un enllaç simbòlic. Per a enllaços simbòlics: si -follow no s'ha donat, és veritat si el fitxer és un enllaç a un fitxer de tipus c ; si -follow ha estat donat, veritable si c és l. En altres paraules, per a enllaços simbòlics,
-xtype comprova el tipus de fitxer que -type no comprova.

Accions

-exec comanda ;

Executeu la comanda ; true si es retorna l'estat 0. Tots els següents arguments per trobar són considerats arguments al comandament fins que un argument que consisteix en `; ' es troba. La cadena '{)' se substitueix pel nom del fitxer actual que es processa a tot arreu que es produeix en els arguments a la comanda, no només en arguments on està sol, com en algunes versions de find . Ambdues construccions poden haver de ser escapades (amb un `\ ') o citats per protegir-los de l'expansió pel shell. La comanda s'executa al directori inicial.

-fls fitxer

Cert; com -ls, però escriu a l' arxiu com -fprint.

arxiu de fotografia

Cert; imprimeix el nom del fitxer complet en el fitxer . Si el fitxer no existeix quan s'executa, es crea; si existeix, es trunca. Els noms de fitxer `` / dev / stdout '' i `` / dev / stderr '' es manegen especialment; es refereixen a la sortida estàndard i sortida d'error estàndard, respectivament.

-fprint0

Cert; com -print0 però escriu a fitxer com -print.

-fprintf format de fitxer

Cert; com -printf però escriu a fitxer com -print.

-comanda;

M'agrada -exec però pregunteu a l'usuari primer (a l'entrada estàndard); si la resposta no comença amb `y 'o' Y ', no executeu l'ordre i torneu a false.

-imprimir

Cert; imprimiu el nom del fitxer complet a la sortida estàndard, seguit d'una línia nova.

-print0

Cert; imprimiu el nom del fitxer complet a la sortida estàndard, seguit d'un caràcter nul. Això permet que els noms dels fitxers que continguin línies noves siguin interpretats correctament per programes que processin la sortida de cerca.

-printf format

Cert; imprimeix el format a la sortida estàndard, interpretant `\ 'escapes i directives`%'. Els amplats i les precisions del camp es poden especificar com amb la funció `printf 'C. A diferència de -print, -printf no afegeix una línia nova al final de la cadena. Les fugides i les directrius són:

\ a

Campana d'alarma

\ b

Retrocés.

\ c

Deixeu d'imprimir d'aquest format immediatament i elimineu la sortida.

\ f

Feed de formulari.

\ n

Newline.

\ r

Retorn de carro.

\ t

Pestanya horitzontal.

\ v

Pesta vertical.

\\

Una barra invertida literal (`\ ').

\ NNN

El caràcter el codi ASCII del qual és NNN (octal).

Un caràcter `\ 'seguit de qualsevol altre caràcter es tracta com un caràcter normal, de manera que tots dos estan impresos.

%%

Un signe de percentatge literal.

% a

El darrer accés del fitxer al format retornat per la funció C `ctime '.

% A k

El darrer accés del fitxer en el format especificat per k , que és "@" o una directiva per a la funció C `strftime '. Els valors possibles per k es detallen a continuació; Alguns d'ells poden no estar disponibles en tots els sistemes, a causa de les diferències en `strftime 'entre els sistemes.

@

segons des del 1 de gener de 1970, 00:00 GMT.

Camps de temps:

H

hora (00.23)

Jo

hora (01.12)

k

hora (0,23)

l

hora (1,12)

M

minut (00..59)

p

locale's AM o PM

r

hora, 12 hores (hh: mm: ss [AP] M)

S

segon (00..61)

T

temps, 24 hores (hh: mm: ss)

X

representació horària del local (H: M: S)

Z

zona horària (per exemple, EDT), o res si no hi ha zona horària determinable

Camps de data:

a

nom del lloc de setmana abreujat de la localitat (Sun .. Sat)

A

nom del lloc de setmana complet de la localitat, longitud variable (diumenge ... dissabte)

b

nom del mes abreujat de la localitat (gener.dec)

B

nom del mes complet de la localitat, longitud variable (gener de desembre)

c

data i hora de la localització (dissabte 04 04 12:02:33 EST 1989)

d

dia del mes (01.31)

D

data (mm / dd / any)

h

igual que b

j

dia de l'any (001..366)

m

mes (01.12)

U

setmana de l'any amb el diumenge com a primer dia de la setmana (00..53)

w

dia de la setmana (0.6)

W

setmana de l'any amb el dilluns com a primer dia de la setmana (00..53)

x

representació de la data del local (mm / dd / ai)

y

dos últims dígits de l'any (00..99)

Jo

any (1970 ...)

% b

Mida del fitxer en blocs de 512 bytes (arrodonits).

% c

El darrer estat del fitxer canvia el temps en el format retornat per la funció C `ctime '.

% C k

El darrer estat del fitxer canvia el temps en el format especificat per k , que és el mateix que en% A.

% d

La profunditat del fitxer a l'arbre del directori; 0 significa que el fitxer és un argument de la línia d'ordres.

% f

S'ha eliminat el nom del fitxer amb els directoris principals (només l'últim element).

% F

Tipus del sistema de fitxers el fitxer està activat; aquest valor es pot utilitzar per a -fstype.

% g

Nom del grup del fitxer o ID del grup numèric si el grup no té nom.

% G

ID del grup numèric del fitxer.

% h

Principals directoris del nom del fitxer (tot menys l'últim element).

% H

Argument de la línia de comandaments sota el qual s'ha trobat el fitxer.

% i

Número d'inode del fitxer (en decimal).

% k

Mida d'arxiu en blocs de 1K (arrodonits).

% l

Objecte de l'enllaç simbòlic (cadena buida si el fitxer no és un enllaç simbòlic).

% m

Bits de permisos del fitxer (en octal).

% n

Nombre d'enllaços durs a l'arxiu.

% p

Nom del fitxer.

% P

S'ha eliminat el nom del fitxer amb el nom de l'argument de la línia d'ordres en què es va trobar.

% s

Mida del fitxer en bytes.

% t

El darrer temps de modificació del fitxer en el format retornat per la funció C `ctime '.

% T k

El darrer temps de modificació del fitxer en el format especificat per k , que és el mateix que en% A.

% u

Nom d'usuari del fitxer o ID d'usuari numèric si l'usuari no té nom.

% U

Identificador numèric d'usuari del fitxer.

S'ha descartat un caràcter «%» seguit de qualsevol altre caràcter (però s'imprimeix l'altre caràcter).

-prune

Si no es dóna el pes, és veritat; no baixis el directori actual.
Si es dóna el pes, false; cap efecte.

-ls

Cert; llista el fitxer actual en format `ls -dils 'en la sortida estàndard. Els recomptes de blocs són de blocs 1K, tret que s'estableixi la variable d'entorn POSIXLY_CORRECT, en aquest cas s'utilitzen blocs de 512 bytes.

Operadors

Ordenats per ordre de prioritat decreixent:

( expr )

Força precedència.

! expr

És cert si expr és fals.

-no expr

El mateix que ! expr .

expr1 expr2

I (implícit); expr2 no s'avalua si expr1 és fals.

expr1 -a expr2

Igual que expr1 expr2 .

expr1 -i expr2

Igual que expr1 expr2 .

expr1 -o expr2

O; expr2 no s'avalua si expr1 és cert.

expr1 -o expr2

Igual que expr1 -o expr2 .

expr1 , expr2

Llista; tant expr1 com expr2 sempre s'avaluen. El valor de expr1 es descarta; el valor de la llista és el valor de expr2 .

Exemples

trobar / home -user joe

Trobeu tots els fitxers sota el directori / domicili propietat de l'usuari joe.

find / usr -name * stat

Cerqueu tots els fitxers sota el directori / usr que finalitzi a ".stat".

find / var / spool -mtime +60

Trobeu cada fitxer sota el directori / var / spool que s'ha modificat fa més de 60 dies.

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

Cerqueu fitxers anomenats nucli dins o per sota del directori / tmp i suprimiu-los. Tingueu en compte que això funcionarà de manera incorrecta si hi ha fitxers que continguin línies noves, cometes o espais individuals o dobles.

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

Busqueu els fitxers anomenats nucli dins o a sota del directori / tmp i suprimiu-los, processant els noms dels fitxers de manera que els fitxers o noms de directoris que continguin cometes individuals o dobles, espais o línies noves siguin manejades correctament. La prova -name prové abans de la prova de tipus per evitar haver de trucar a stat (2) en cada fitxer.

trobar -type f -exec file '()' \;

Executa `fitxer 'a tots els fitxers a sota del directori actual o a sota. Tingueu en compte que els claudàtors estan tancats en marques de cometes úniques per protegir-les de la interpretació com a puntuació de la seqüència del shell. El punt i coma també està protegit per l'ús d'una barra invertida, encara que ';' podria haver estat utilitzat en aquest cas també.

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

Recórrer el sistema de fitxers només una vegada, llistant fitxers setuid i directoris a /root/suid.txt i fitxers grans a /root/big.txt .

troba $ HOME-hora 0

Cerqueu fitxers al vostre directori personal que s'han modificat en les darreres vint-i-quatre hores. Aquesta comanda funciona d'aquesta manera perquè el temps transcorregut des de la data de l'última modificació de l'arxiu es divideix en 24 hores i es descarta qualsevol resta. Això vol dir que coincidir amb el temps

0 , un fitxer haurà de tenir una modificació en el passat que fa menys de 24 hores.

trobar -perm 664

Busqueu fitxers que tinguin permís de lectura i escriptura per al seu propietari i grup, però que altres usuaris poden llegir però no escriure. Els fitxers que compleixin aquests criteris però que tinguin altres bits de permisos establerts (per exemple, si algú pot executar el fitxer) no es combinaran.

trobar -perm -664

Busqueu fitxers que tinguin permís de lectura i escriptura per al seu propietari i grup, i quins altres usuaris poden llegir, sense tenir en compte la presència de bits de permisos addicionals (per exemple, el bit executable). Això coincideix amb un fitxer que té la manera 0777, per exemple.

trobar -perm / 222

Cerqueu fitxers que algú pugui escriure (el seu propietari, el seu grup o qualsevol altra persona).

trobar -perm / 220 trobar. -perm / u + w, g + w find. -perm / u = w, g = w

Tots tres d'aquests comandaments fan el mateix, però el primer utilitza la representació octal del mode d'arxiu i els altres dos fan servir la forma simbòlica. Aquests comandaments busquen tots els fitxers que puguin escriure el seu propietari o el seu grup. Els fitxers no han de ser escrits tant pel propietari com pel grup que cal combinar; ho farà.

trobar -perm -220 trobar. -perm -g + w, u + w

Ambdós comandaments fan el mateix; cerqueu fitxers que puguin escriure tant el propietari com el grup.

trobar -perm -444 -perm / 222! -perm / 111 troba. -perm -a + r -perm / a + w! -perm / a + x

Aquestes dues ordres busquen fitxers que es poden llegir per a tothom (-perm -444 o -perm -a + r), almenys teniu un bit set (-perm / 222 o -perm / a + w), però no són executables per a qualsevol (! -perm / 111 i! -perm / a + x respectivament)

Important: utilitzeu l'ordre man ( % home ) per veure com s'utilitza una comanda a l'ordinador en particular.