Skip to main content

Korzystanie z odnajdywania poleceń systemu Linux i Unix

LinuxAdministrator - find, locate, sort, znaki specjalne #006 #Linuxadministrator #bash #linux (Czerwiec 2026)

LinuxAdministrator - find, locate, sort, znaki specjalne #006 #Linuxadministrator #bash #linux (Czerwiec 2026)
Anonim

Komenda Linux i Unix odnaleźć wykonuje wyszukiwanie plików w hierarchii katalogów.

Składnia dla odnaleźć dowództwo:

znajdź ścieżka … wyrażenie

Opis

Ta strona podręcznika dokumentuje wersję GNU odnaleźć . Komenda odnaleźć przeszukuje drzewo katalogów zakorzenione przy każdej podanej nazwie pliku, oceniając podane wyrażenie od lewej do prawej, zgodnie z regułami pierwszeństwa (patrz sekcja dotycząca Operatorów poniżej), aż do uzyskania wyniku; innymi słowy, lewa strona jest fałszywa dla i operacje, prawda dla lub , w którym momencie odnaleźć przechodzi do następnej nazwy pliku.

Pierwszy argument zaczynający się od:

  • -
  • ( lub),
  • !

jest uważane za początek wyrażenia; wszelkie argumenty przed nim są ścieżkami wyszukiwania, a wszelkie argumenty po nim są resztą wyrażenia. Jeśli nie podano ścieżek, używany jest katalog bieżący. Jeśli nie podano wyrażenia, wyrażenie -wydrukować jest używany.

The odnaleźć komenda kończy działanie ze statusem 0, jeśli wszystkie pliki są pomyślnie przetwarzane, większe niż 0, jeśli wystąpią błędy.

Wyrażenia

Wyrażenie składa się z opcji (które wpływają na ogólną operację, a nie na przetwarzanie określonego pliku i zawsze zwracają wartość true), testów (które zwracają wartość true lub false) i działań (które mają skutki uboczne i zwracają wartość true lub wartość false), wszystkie rozdzielone przez operatorów. Ekspresja -i zakłada się, że operator jest pominięty. Jeśli wyrażenie nie zawiera żadnych działań innych niż -suszona śliwka , następnie -wydrukować jest wykonywane dla wszystkich plików, dla których wyrażenie jest prawdziwe.

Opcje

Wszystkie opcje zawsze zwracają true. Zawsze działają, a nie są przetwarzane dopiero po osiągnięciu ich miejsca w wyrażeniu. Dlatego dla jasności najlepiej umieścić je na początku wyrażenia.

-dzień Zmierz czasy (dla -amin, -atime, -min, -ctime, -mmin, i -mtime ) od początku dnia, a nie od 24 godzin.
-głębokość Przetwarzaj zawartość każdego katalogu przed samym katalogiem.
-śledzić Usuń linki symboliczne. Implies -noleaf .
-Wsparcie lub --Wsparcie Wydrukuj podsumowanie użycia wiersza poleceń odnaleźć i wyjść.
-maksymalna głębokość numer Zyskuje na większej liczbie poziomów (nieujemną liczbę całkowitą) katalogów pod argumentami wiersza poleceń. Ekspresja -maxdepth 0 oznacza tylko zastosowanie testów i akcji do argumentów wiersza poleceń.
-mindepth liczba Nie stosuj żadnych testów ani działań na poziomach niższych niż liczba (nieujemna liczba całkowita). Ekspresja -mindepth 1 oznacza przetwarzanie wszystkich plików z wyjątkiem argumentów wiersza poleceń.
-uchwyt Nie opuszczaj katalogów na innych systemach plików. Alternatywna nazwa dla -xdev , dla kompatybilności z niektórymi innymi wersjami odnaleźć .
-noleaf Nie optymalizuj, zakładając, że katalogi zawierają o 2 mniej podkatalogów niż ich twarde łącze. *
-wersja lub --wersja Wydrukuj odnaleźć numer wersji i zakończ.
-xdev Nie opuszczaj katalogów na innych systemach plików.

* Ta opcja jest potrzebna podczas wyszukiwania systemów plików, które nie są zgodne z konwencją Unix Directory-link, na przykład systemami plików CD-ROM lub MS-DOS lub punktami podłączenia woluminu AFS. Każdy katalog na normalnym systemie plików Unix ma co najmniej 2 twarde linki: jego nazwę i nazwę. (okres) wejście. Dodatkowo, każdy z jego podkatalogów (jeśli taki istnieje). wpis związany z tym katalogiem.

Gdy odnaleźć sprawdza katalog po tym, jak ustawił dwa mniejsze podkatalogi niż liczba linków do katalogu, wie, że pozostałe wpisy w katalogu są nie-katalogami ( liść pliki w drzewie katalogów). Jeśli tylko nazwy plików muszą zostać sprawdzone, nie ma potrzeby ich tworzenia; to daje znaczny wzrost prędkości wyszukiwania.

Testy

Argumenty liczbowe można określić jako:

+ n Dla więcej niż n.
-n Za mniej niż n.
n Dokładnie n.
-aminę n Plik był ostatnio dostępny n minuty temu.
-anewer plik Plik był ostatnio dostępny częściej niż plik został zmodyfikowany. -anewer jest zależny od -follow tylko jeśli -follow jest przed -a w linii poleceń.
-atime n Plik był ostatnio dostępny n * 24 godziny temu.
-min n Status pliku został ostatnio zmieniony n minuty temu.
-cnewer plik Status pliku został ostatnio zmieniony ostatnio, gdy plik został zmodyfikowany.- cnewer dotyczy: -śledzić tylko, jeżeli -śledzić nadchodzi wcześniej -dwóch w linii poleceń.
-ctime n Status pliku został ostatnio zmieniony n * 24 godziny temu.
-pusty Plik jest pusty i jest zwykłym plikiem lub katalogiem.
-fałszywy Zawsze fałszywe.
-fstype typ Plik znajduje się na systemie plików określonego typu. Prawidłowe typy systemów plików różnią się między różnymi wersjami Uniksa; niepełna lista typów systemów plików, które są akceptowane w niektórych wersjach Uniksa lub innych to: ufs, 4.2, 4.3, nfs, tmp, mfs, S51K, S52K. Możesz użyć -printf z dyrektywą% F, aby zobaczyć typy twoich systemów plików.
-gid n Numeryczny identyfikator grupy pliku n .
-group gname Plik należy do grupy gname (dozwolony numeryczny identyfikator grupy).
-ilname wzór Podobnie jak -lname, ale dopasowanie nie uwzględnia wielkości liter.
-iname pattern Lubić -imię , ale dopasowanie jest niewrażliwe na wielkość liter. Na przykład wzorce fo * i FA?? dopasuj nazwy plików bla , BLA , bla , bla itp.
-num n Plik ma numer i-węzła n .
-ipath pattern Lubić -ścieżka , ale dopasowanie jest niewrażliwe na wielkość liter.
-iregex wzór Podobnie jak -regex, ale dopasowanie nie uwzględnia wielkości liter.
-links n Plik ma n spinki do mankietów.
-lname wzór Plik jest dowiązaniem symbolicznym, którego zawartość pasuje do wzorca powłoki. Metaznaky nie traktują / lub . specjalnie.
-minmin n Dane pliku zostały ostatnio zmodyfikowane n minuty temu.
-mtime n Dane pliku zostały ostatnio zmodyfikowane n * 24 godziny temu.
-name wzór Baza nazwy pliku (ścieżka z usuniętymi wiodącymi katalogami) pasuje do wzorca powłoki. Metaznaky (*, ?, i ) nie pasują do a . na początku nazwy podstawowej. Aby zignorować katalog i pliki znajdujące się pod nim, użyj -suszona śliwka ; zobacz przykład w opisie -ścieżka .
-newer plik Plik został zmodyfikowany później niż plik . Ekspresja -nowszy dotyczy: -śledzić tylko, jeżeli -śledzić nadchodzi wcześniej -nowszy w linii poleceń.
-Nouser Żaden użytkownik nie odpowiada numerycznemu identyfikatorowi użytkownika pliku.
-nogroup Żadna grupa nie odpowiada numerycznemu identyfikatorowi grupy pliku.
-path wzór Nazwa pliku pasuje do wzorca powłoki wzór . Metaznaky nie traktują / lub . specjalnie; więc na przykładodnaleźć . -path './sr*sc wypisze wpis dla katalogu o nazwie ./src/misc (jeśli taki istnieje). Aby zignorować całe drzewo katalogów, użyj -suszona śliwka zamiast sprawdzać każdy plik w drzewie. Na przykład, aby pominąć katalog src / emacs i wszystkie znajdujące się pod nim pliki i katalogi oraz wydrukować nazwy innych znalezionych plików, wykonaj coś takiego:odnaleźć . -path './src/emacs' -prune -o -print
-perm mode Bity praw do pliku są dokładnie takie tryb (ósemkowe lub symboliczne). Tryby symboliczne wykorzystują tryb 0 jako punkt wyjścia.
-perm -mode Wszystkie bity uprawnień tryb są ustawione dla pliku.
-perm + tryb Dowolny bit uprawnień tryb są ustawione dla pliku.
-regex wzór Nazwa pliku pasuje do wyrażenia regularnego wzór . To jest dopasowanie na całej ścieżce, a nie wyszukiwanie. Na przykład, aby dopasować plik o nazwie ./fubar3, możesz użyć wyrażenia regularnego .*bar. lub . * b. * 3, ale nie b. * r3.
-size n bckw Używa pliku n jednostki przestrzeni. Jednostki są blokami 512-bajtowymi domyślnie lub jeśli b następuje n , bajty, jeśli c następuje n , kilobajty, jeśli k następuje n lub 2-bajtowe słowa, jeśli w następuje n . Rozmiar nie liczy pośrednich bloków, ale zlicza bloki w plikach rzadkich, które nie są faktycznie przydzielane.
-prawdziwe Zawsze prawda.
typ c Plik jest typu do :
b Blokuj (buforuj) specjalny
do Znak specjalny (niebuforowany)
re Informator
str Rura nazwana (FIFO)
fa Zwykły plik
l Link symboliczny
s Gniazdo elektryczne
re drzwi (Solaris)
-uid n Numeryczny identyfikator użytkownika pliku n .
-używane n Plik był ostatnio dostępny n dni po ostatniej zmianie statusu.
-user uname Plik jest własnością użytkownika uname (dozwolony numeryczny identyfikator użytkownika).
-xtype c Taki sam jak -rodzaj chyba że plik jest dowiązaniem symbolicznym. W przypadku dowiązań symbolicznych: jeśli -śledzić nie został podany, true, jeśli plik jest linkiem do pliku typu do ; Jeśli -śledzić została podana, prawda, jeśli do jest l. Innymi słowy, w przypadku dowiązań symbolicznych -xtype sprawdza typ pliku, który -rodzaj nie sprawdza.

działania

-exec dowództwo ;

Wykonać dowództwo ; true, jeśli zwracany jest status 0. Wszystkie następujące argumenty doodnaleźć są traktowane jako argumenty do polecenia aż do argumentu składającego się z `; ' napotkano. Ciąg `{} 'jest zastępowany przez bieżącą nazwę pliku przetwarzaną wszędzie, gdzie występuje w argumentach polecenia, a nie tylko w argumentach, w których jest on sam, jak w niektórych wersjachodnaleźć. Obie te konstrukcje mogą wymagać zmiany znaczenia (z ` ') lub cytowania, aby chronić je przed rozszerzeniem przez powłokę. Polecenie jest wykonywane w katalogu początkowym.

-fls plik

Prawdziwe; jak -ls, ale napisz do plik jak -fprint.

-fprint plik

Prawdziwe; wydrukuj pełną nazwę pliku w pliku plik . Jeśli plik nie istnieje, kiedyodnaleźć jest uruchamiany, jest tworzony; jeśli istnieje, jest obcięty. Nazwy plików `` / dev / stdout '' i `` / dev / stderr '' są obsługiwane specjalnie; odnoszą się one odpowiednio do standardowego wyjścia i standardowego wyjścia błędu.

-fprint0 plik

Prawdziwe; jak -print0, ale napisz do plik jak -fprint.

-fprintf plik format

Prawdziwe; jak -printf, ale napisz do plik jak -fprint.

-dobrze dowództwo ;

Podobnie jak -exec, ale najpierw zapytaj użytkownika (na standardowe wejście); jeśli odpowiedź nie zaczyna się od "y" lub "Y", nie uruchamiaj polecenia i zwróć false.

-wydrukować

Prawdziwe; wydrukuj pełną nazwę pliku na standardowym wyjściu, a następnie znak nowej linii.

-print0

Prawdziwe; wydrukuj pełną nazwę pliku na standardowym wyjściu, a następnie znak null.Dzięki temu nazwy plików, które zawierają znaki nowej linii, mogą być poprawnie interpretowane przez programy, które je przetwarzająodnaleźć wydajność.

-printf format

Prawdziwe; wydrukować format na standardowym wyjściu, interpretując "" instrukcje i "%" dyrektyw. Szerokości pól i dokładności można określić tak, jak przy funkcji C printf. W przeciwieństwie do -print, -printf nie dodaje nowego wiersza na końcu łańcucha. Ucieczki i dyrektywy są następujące:

za

Dzwonek alarmowy.



Backspace.

do

Natychmiast przestań drukować z tego formatu i przepłucz wydruki.

fa

Formuj kanał.

n

Nowa linia.

r

Powrót karetki.

t

Zakładka pozioma.

v

Pionowa zakładka.

\

Dosłowny ukośnik odwrotny ("").

NNN

Znak, którego kod ASCII to NNN (ósemkowy).

Znak ` ', po którym następuje dowolna inna postać, traktowany jest jak zwykły znak, więc oba są drukowane.

%%

Dosłowny znak procentu.

%za

Ostatni czas dostępu do pliku w formacie zwróconym przez funkcję C `ctime '.

%ZA k

Ostatni czas dostępu do pliku w formacie określonym przez k , który jest albo `@ ', albo dyrektywą dla funkcji C` strftime'. Możliwe wartości dla k są wymienione poniżej; niektóre z nich mogą nie być dostępne we wszystkich systemach ze względu na różnice w "strftime" między systemami.

@

sekundy od 1 stycznia 1970 roku, 00:00 czasu GMT.

Pola czasu:

H

godzina (00..23)

ja

godzina (01..12)

k

godzina (0..23)

l

godzina (1..12)

M

minuta (00..59)

str

locale AM ​​lub PM

r

czas, 12 godzin (hh: mm: ss AP M)

S

drugi (00..61)

T

czas, 24 godziny (hh: mm: ss)

X

reprezentacja czasu locale (H: M: S)

Z

strefa czasowa (np. EDT) lub nic, jeśli nie można określić strefy czasowej

Pola dat:

za

skrócona nazwa dnia tygodnia (Sun..Sat)

ZA

nazwa pełnego dnia tygodnia, zmienna długość (niedziela, sobota)

b

nazwa skróconego miesiąca (Jan..Dec)

b

nazwa miesiąca, zmienna długość (styczeń, grudzień)

do

data i czas lokalu (Sat Nov 04 12:02:33 EST 1989)

re

dzień miesiąca (01..31)

re

data (mm / dd / rr)

h

tak samo jak b

jot

dzień roku (001..366)

m

miesiąc (01..12)

U

tydzień numer roku z niedzielą jako pierwszym dniem tygodnia (00..53)

w

dzień tygodnia (0..6)

W

tydzień numer roku z poniedziałkiem jako pierwszym dniem tygodnia (00. 53)

x

lokalizacja daty (mm / dd / rr)

y

ostatnie dwie cyfry roku (00..99)

Y

rok (1970 …)

%b

Rozmiar pliku w blokach 512-bajtowych (zaokrąglony w górę).

%do

Ostatni czas zmiany statusu pliku w formacie zwróconym przez funkcję C `ctime '.

%DO k

Ostatni czas zmiany statusu pliku w formacie określonym przez k , który jest taki sam jak dla% A.

%re

Głębokość pliku w drzewie katalogów; 0 oznacza, że ​​plik jest argumentem wiersza poleceń.

%fa

Nazwa pliku z usuniętymi katalogami wiodącymi (tylko ostatni element).

%FA

Typ systemu plików, w którym plik jest włączony; tej wartości można użyć w opcji -fstype.

%sol

Nazwa grupy pliku lub numeryczny identyfikator grupy, jeśli grupa nie ma nazwy.

%SOL

Numeryczny identyfikator grupy pliku.

% h

Główny katalog nazwy pliku (wszystkie oprócz ostatniego elementu).

% H

Argument linii poleceń, pod którym plik został znaleziony.

%ja

Numer i-węzła pliku (w systemie dziesiętnym).

% k

Rozmiar pliku w blokach 1K (zaokrąglony w górę).

% l

Obiekt dowiązania symbolicznego (pusty ciąg znaków, jeśli plik nie jest dowiązaniem symbolicznym).

% m

Bity uprawnień pliku (w formacie ósemkowym).

% n

Liczba twardych linków do pliku.

% p

Nazwa pliku.

% P

Nazwa pliku z nazwą argumentu wiersza poleceń, pod którym został usunięty.

% s

Rozmiar pliku w bajtach.

% t

Czas ostatniej modyfikacji pliku w formacie zwracanym przez funkcję C `ctime '.

% T k

Czas ostatniej modyfikacji pliku w formacie określonym przez k , który jest taki sam jak dla% A.

% u

Nazwa użytkownika pliku lub numeryczny identyfikator użytkownika, jeśli użytkownik nie ma nazwy.

% U

Numeryczny identyfikator użytkownika pliku.

Znak "%", a następnie dowolny inny znak jest odrzucany (ale drukowany jest inny znak).

-suszona śliwka

Jeśli -depth nie jest podane, prawda; nie opuszczaj bieżącego katalogu.Jeśli podano -depth, false; bez efektu.

-ls

Prawdziwe; wylistuj bieżący plik w formacie `ls-dils 'na standardowym wyjściu. Liczby bloków są blokami 1K, chyba że ustawiona jest zmienna środowiskowa POSIXLY_CORRECT, w którym to przypadku używane są bloki 512-bajtowe.

Operatorzy

Wymienione w kolejności malejącego pierwszeństwa:

( expr )

Wymuś pierwszeństwo.

! expr

Prawda, jeśli expr to fałsz.

-nie expr

Taki sam jak ! expr .

expr1 wyrażenie 2

I (domyślnie); expr2 nie jest oceniany, jeśli expr1 to fałsz.

expr1 -za expr2

Taki sam jak expr1 wyrażenie 2 .

expr1 -i expr2

Taki sam jak expr1 wyrażenie 2 .

expr1 -o expr2

Lub; expr2 nie jest oceniany, jeśli expr1 jest prawdziwy.

expr1 -lub expr2

Taki sam jak expr1 -o expr2 .

expr1 , expr2

Lista; obie expr1 i expr2 są zawsze oceniane. Wartość expr1 jest odrzucany; wartość listy jest wartością expr2 .

Przykłady

znajdź / home -user joe

Znajdź każdy plik w katalogu / home należącym do użytkownika joe.

znajdź / usr -name * stat

Znajdź każdy plik w katalogu / usr kończącym się na ".stat".

znajdź / var / spool -mtime +60

Znajdź każdy plik w katalogu / var / spool, który został zmodyfikowany ponad 60 dni temu.

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

Znajdź pliki o nazwachrdzeń w lub poniżej katalogu/ tmp i usuń je.Zauważ, że zadziała to niepoprawnie, jeśli istnieją nazwy plików zawierające znaki nowej linii, pojedyncze lub podwójne cudzysłowy lub spacje.

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

Znajdź pliki o nazwachrdzeń w lub poniżej katalogu/ tmp i usuń je, przetwarzając nazwy plików w taki sposób, aby pliki lub katalogi zawierające pojedyncze lub podwójne cudzysłowy, spacje lub znaki nowej linii były poprawnie obsługiwane. The-imię test przychodzi przed-rodzaj przetestuj, aby uniknąć konieczności dzwonieniastat (2) na każdym pliku.

odnaleźć . -type f -exec plik '{}' ;

Uruchamia `plik 'na każdym pliku w bieżącym katalogu lub pod nim. Zauważ, że nawiasy klamrowe są ujęte w pojedyncze cudzysłowy, aby chronić je przed interpretacją jako interpunkcja skryptu powłoki. Średnik jest podobnie chroniony za pomocą odwrotnego ukośnika, chociaż ";" mógł być również użyty w tym przypadku.

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

Przemierzaj system plików tylko raz, wyświetlając pliki i katalogi setuid/root/suid.txt i duże pliki do/root/big.txt.

znajdź $ HOME -mtime 0

Wyszukaj pliki w swoim katalogu domowym, które zostały zmodyfikowane w ciągu ostatnich dwudziestu czterech godzin. To polecenie działa w ten sposób, ponieważ czas od ostatniego zmodyfikowania pliku jest dzielony przez 24 godziny, a pozostała część jest odrzucana. Oznacza to, że pasuje-mtime

0, plik będzie musiał mieć modyfikację w przeszłości, czyli mniej niż 24 godziny temu.

odnaleźć . -pozycja 664

Wyszukaj pliki, które mają uprawnienia do odczytu i zapisu dla właściciela i grupy, ale które inni użytkownicy mogą czytać, ale nie mogą pisać. Pliki, które spełniają te kryteria, ale mają ustawione inne bity uprawnień (na przykład jeśli ktoś może wykonać plik) nie zostaną dopasowane.

odnaleźć . -perm -664

Wyszukaj pliki, które mają uprawnienia do odczytu i zapisu dla ich właściciela i grupy, i które inni użytkownicy mogą czytać, bez względu na obecność dodatkowych bitów uprawnień (na przykład wykonywalnego bitu). Spowoduje to dopasowanie pliku, który ma na przykład tryb 0777.

odnaleźć . -perm / 222

Wyszukaj pliki, które mogą być zapisywane przez kogoś (ich właściciela, ich grupę lub kogokolwiek innego).

odnaleźć . -perm / 220 odnaleźć . -perm / u + w, g + w odnaleźć . -perm / u = w, g = w

Wszystkie trzy polecenia wykonują tę samą operację, ale pierwsza z nich wykorzystuje ósemkową reprezentację trybu plików, a pozostałe dwie - symboliczną. Wszystkie te polecenia szukają plików, które mogą być zapisywane przez właściciela lub ich grupę. Pliki nie muszą być zapisywalne zarówno przez właściciela, jak i grupę do dopasowania; Albo zrobi.

odnaleźć . -perm -220 odnaleźć . -perm -g + w, u + w

Oba te polecenia robią to samo; wyszukaj pliki, które mogą być zapisywane zarówno przez ich właściciela, jak i grupę.

odnaleźć . -perm -444 -perm / 222! -perm / 111 odnaleźć . -perm -a + r -perm / a + w! -perm / a + x

Te dwa polecenia szukają plików, które są czytelne dla wszystkich (-perm -444 lub -perm -a + r), mają przynajmniej ustawiony bit zapisu (-perm / 222 lub -perm / a + w), ale nie są wykonywalne dla każdego (odpowiednio! -perm / 111 i! -perm / a + x)

Ważny: Użyj mężczyzna dowództwo ( % mężczyzna ), aby zobaczyć, jak polecenie jest używane na danym komputerze.