Polecenie find systemu Linux to potężne narzędzie, które umożliwia administratorom systemu lokalizowanie plików i katalogów oraz zarządzanie nimi w oparciu o szeroki zakres kryteriów wyszukiwania. Może znajdować katalogi i pliki według ich nazwy, typu lub rozszerzenia, rozmiaru, uprawnień itp.
Oprócz lokalizowania plików i katalogów, połączenie polecenia find z innymi umożliwia podjęcie działań na wynikach. Dodanie opcji -exec umożliwia administratorom systemu uruchamianie zewnętrznych poleceń i wykonywanie działań, takich jak kopiowanie, przenoszenie, usuwanie lub zmiana uprawnień do plików spełniających określone kryteria, takie jak rozmiar, nazwa itp.
W tym artykule zaczniemy od wyjaśnienia podstawowych poleceń wyszukiwania systemu Linux z przykładami. To pokaże ci, jak znaleźć pliki i katalogi. Następnie pokażemy, jak używać opcji -exec do działania na plikach lub katalogach w oparciu o ich rozmiar, uprawnienia itp.
Ogólna składnia polecenia find to
find {path} {name -of-file or dir-to-search} {action-to-take}
Gdzie,
- ścieżka określa katalog.
- nazwa-pliku lub katalog-do-przeszukiwania : Nazwa pliku lub katalogu do wyszukania
- działania do podjęcia: takie jak kopiowanie, usuwanie, przenoszenie itp.
W tym samouczku wyjaśnimy, jak zlokalizować pliki i katalogi pasujące do określonych wzorców. Zobaczymy również, jak wykonywać działania na plikach lub katalogach, które lokalizuje polecenie find. Przewodnik jest oparty na Ubuntu, ale ma zastosowanie do większości dystrybucji i wersji Linuksa.
Znajdź pliki i katalogi
Znajdź określone pliki według nazwy lub rozszerzenia
Aby wyszukać określony plik, uruchom następujące polecenie z katalogu głównego (/). Polecenie zawiera dokładną nazwę szukanego pliku.
find . -name file22.txt
Wyjście
./test/file22.txt ./sales/file22.txt
Należy pamiętać, że wyniki obejmują ścieżkę. Jest to ważne, jeśli nie znasz katalogu, w którym znajduje się plik lub gdy znajduje się on w więcej niż jednym miejscu.
Możesz także wyszukać plik w innym katalogu, będąc nadal w bieżącej lokalizacji. W takim przypadku musisz podać ścieżkę do katalogu, w którym chcesz szukać.
find ./test -name file22.txt
Wyszukiwanie określonych plików w innym katalogu
W naszym przypadku będziemy szukać wszystkich zaczynających się od pliku z literami w katalogu test.
find ./test -name file*
Wyjście
./test/file22.txt ./test/file30.doc ./test/file1.txt ./test/file5,doc
Wyszukaj pliki według rozszerzenia
Aby znaleźć plik w systemie Linux z określonym rozszerzeniem, dodaj go do polecenia.
find . -name *.txt
Wyjście
./test/subtest/subfil.txt ./test/file22.txt ./test/file1.txt ./home1/files32.txt ./home2/file22.txt ./qa/tags.txt
Znajdź pliki i katalogi według nazwy
Użyj poniższego polecenia, aby wyszukać pliki i katalogi zaczynające się od liter qa. Na naszym komputerze mamy pliki qatree.txt i qa.txt oraz katalog o nazwie qa.
Jeśli uruchomimy polecenie;
find ./ -name "qa*"
Zwraca następujące dane wyjściowe
./test/qatree.pdf ./test/qa.txt ./home/qa
Polecenie zwraca zarówno pliki, jak i katalogi spełniające kryteria wyszukiwania. Aby znaleźć tylko pliki lub katalogi, musisz określić to w poleceniu.
Znajdź tylko pliki lub katalogi
Tylko w przypadku plików użyj przełącznika typu f.
Tylko pliki
find ./ -type f -name "qa*"
Wyjście
./test/qatree.pdf ./test/qa.txt
Tylko katalogi
Dodaj opcję typu d, aby zlokalizować tylko katalogi.
find ./ -type d -name "qa*"
Wyjście
./home/qa
Polecenie wyszukiwania bez uwzględniania wielkości liter
Wszystkie wyszukiwania z opcją -nazwa uwzględniają wielkość liter i nie dadzą wyników zawierających wielkie litery. Aby uzyskać wszystkie przypadki, użyj opcji -iname.
find ./ -iname "qa*"
Wyjście
./test/qatree.pdf ./test/qa.txt ./test/QAtest.txt ./home/qa
Wyszukaj plik z wielu katalogów
Aby znaleźć pliki w różnych katalogach, dodaj ich ścieżki w poleceniu. W naszym przypadku sprawdzimy katalogi test i numeric.
find ./test ./numeric -name file22.txt -type f
Wyjście
./test/file22.txt /root/numeric/file22.txt
Znajdź wiele plików z różnymi rozszerzeniami ze wszystkich katalogów
Możesz użyć polecenia find, aby zlokalizować wiele plików, które mają różne rozszerzenia, takie jak *.doc, *.txt *.pdf itp. Można to zrobić osobno, po jednym rozszerzeniu na raz lub za pomocą tylko jednego polecenia, które zawiera wszystkie żądane rozszerzenia.
odnaleźć . -type f ( -nazwa „*.txt” -o -nazwa „*.pdf” -o -nazwa „*.doc” )
wyjście
./test/subtest/subfil.txt ./test/qatree.pdf ./test/file22.txt ./test/qa.txt ./test/file30.doc ./books/acro.pdf ./data1/FILE22.txt ./docs/files32.txt
Znajdź pliki zawierające określony tekst
Czasami chcesz uzyskać dostęp do pliku zawierającego określony tekst, ale nie możesz przypomnieć sobie jego nazwy lub lokalizacji. To polecenie pozwala znaleźć wszystkie pliki zawierające tekst docelowy.
Aby wyszukać wszystkie pliki zawierające słowo hiperkonwergencja”, użyj;
find / -type f -exec grep -l -i "hyperconvergence" {} ;
Wyjście
/root/numeric/hci /root/HCIP
Opcja –i umożliwia poleceniu ignorowanie przypadków i znalezienie tekstu pisanego wielkimi literami lub bez, tj. hiperkonwergencja, hiperkonwergencja itp.
Aby wyszukać pliki w określonym katalogu, po prostu dodaj je do polecenia
find ./numeric -type f -exec grep -l -i "hyperconvergence" {} ;
Wyjście
./numeric/hci
Poznaj więcej przykładów poleceń grep.
Znajdź pliki i katalogi na podstawie rozmiaru
Możesz znaleźć wszystkie pliki lub katalogi, które są mniejsze, równe lub większe niż określony rozmiar, w określonym zakresie lub puste. Użyj odpowiedniego formatu rozmiaru w zależności od typu plików lub katalogów, których szukasz.
Opcje rozmiaru obejmują;
c – bajty
k – kilobajty
M – Megabajty
G – Gigabajty
Znajdź pliki o określonym rozmiarze – równym 30 MB
Aby wyszukać, znajdź wszystkie pliki 30 MB
find / -size 30M
Znajdź pliki większe niż określony rozmiar
find -size +2M
Wyjście
. /Downloads/ubuntu18043.iso ./.cache/pip/http/6/e/3/8/3/6e38383f41850c3e5705d48116bc52f81b92a80500f414305057 7a9c
Znajdź pliki mniejsze niż 10 MB w bieżącym katalogu
find . -type f -size -10M
Znajdź pliki o rozmiarze od 100 do 200 MB
Podczas wyszukiwania plików w określonym zakresie, na przykład między 100 a 200 MB
find / -size +100M -size -200M
Szukaj katalogów większych niż 20 KB
znajdź / -wpisz d -rozmiar +20k
Znajdź puste pliki i katalogi.
Akta
znajdź ./ -wpisz f -rozmiar 0
lub
find ./ -type f –empty
Katalogi
find ./ -type d –empty
Znajdź pliki według wieku lub czasu modyfikacji
Znajdź pliki starsze niż n dni
find /path/ -type f -name '*.txt' -mtime +8
Opcja -mtime +8 wyszuka pliki txt starsze niż 8 dni.
Według daty modyfikacji
Spowoduje to wyszukanie plików zmodyfikowanych w ciągu ostatnich 17 godzin
find . -mtime -17 -type f
Wyszukuje katalogi zmodyfikowane w ciągu ostatnich 10 dni
find . -mtime -10 -type d
Znajdź pliki na podstawie dostępu lub modyfikacji
Znajdź pliki na podstawie daty lub godziny dostępu. Pozwala to zobaczyć pliki, do których uzyskano lub nie uzyskano dostępu w określonym okresie.
Aby zobaczyć pliki, do których nie uzyskano dostępu w ciągu ostatnich 10 dni w katalogu domowym.
find /home -atime +10
Dostęp do plików dokładnie 10 dni temu
find /home -atime 10
Dostęp w ciągu ostatnich 10 dni
find /home -atime -10
Znajdź pliki zmodyfikowane w ciągu ostatnich n dni
Możesz także wyszukać pliki w katalogu /home zmodyfikowane w ciągu ostatnich 10 dni za pomocą polecenia;
find /home -mtime -10
Znajdź pliki zmodyfikowane w określonym okresie.
Na przykład wszystkie pliki zmodyfikowane od 6 do 15 dni temu w katalogu domowym.
find /home -type f -mtime +6 -mtime -15
Pliki i katalogi, do których uzyskano dostęp w ciągu ostatnich 10 minut
Aby znaleźć pliki, do których uzyskano dostęp w ciągu ostatnich 10 minut, użyj opcji -amin.
find . -amin -10 -type f
Wyjście
./.bash_history ./[email protected]:~#
Katalogi, do których uzyskano dostęp w ciągu ostatnich 10 minut
find . -amin -10 -type d
Znajdź pliki pasujące do określonych uprawnień
Składnia
$ find -perm mode
Gdzie tryb to zezwolenie, które jest albo numeryczne, takie jak 644, 655, 700, 777 itd., albo literowe, takie jak u=x, a=r+x itd.
Tryb można określić na trzy różne sposoby.
Znajdź pliki z pozwoleniem 777
find -perm 777
Wyjście
./file1
Znajdź pliki z co najmniej 766
znajdź -perm -766
Wyjście
./file2 ./file1
Polecenie wyszukuje wszystkie pliki, w których
- Właściciel pliku ma uprawnienia do odczytu/zapisu/wykonania.
- Grupa ma uprawnienia do odczytu/zapisu
- Inne mają uprawnienia do odczytu/zapisu
W związku z tym zwraca dwa pliki spełniające to kryterium – plik1 i plik2. Pliki nie muszą mieć dokładnie 766 uprawnień i mogą mieć dodatkowe o ile są długie, ale muszą mieć co najmniej określone.
Znajdź pliki do zapisu przez właściciela
Teraz użyjemy „/”, aby wyszukać pliki, które mogą być zapisywane przez ich właściciela, grupę lub inne osoby.
find -perm /222 . ./file2 ./file3 ./file1
Powyższe wyszukuje pliki, które mogą być zapisywane przez ich właściciela lub grupę.
Zwraca to pliki, które mogą być zapisywane przez jedną z nich, ale niekoniecznie przez obie. Aby zobaczyć pliki, w przypadku których oba mają uprawnienia do zapisu, użyj przedrostka –.
find -perm -220
Wyjście
./file2 ./file1
Znajdź pliki należące do użytkownika
Znajdź wszystkie pliki należące do Jacka
find /home -user jack
Wyjście
/home/jack /home/jack/examples.desktop /home/jack/.gnupg /home/jack/.gnupg/private-keys-v1.d /home/jack/ans.cgi
Znajdź określone pliki należące do użytkownika
Znajdź wszystkie pliki tekstowe należące do Jacka
find /home -user jack -iname "*.txt"
Wyjście
/home/jack/docs/file32.txt
Znajdź i wyświetl pliki i katalogi wraz z ich uprawnieniami
find -name "*.conf" | ls -l
Wyjście
total 120 drwxr-xr-x 2 root root 4096 Dec 31 13:19 backup2 drwxr-xr-x 2 root root 4096 Jan 4 11:57 Desktop drwxr-xr-x 2 root root 4096 Dec 31 11:50 Documents drwxr-xr-x 2 root root 4096 Dec 31 12:27 Downloads -rw-r--r-- 1 root root 0 Jan 4 12:02 file22.doc drwxr-xr-x 2 root root 4096 Jan 4 12:14 file23 -rw-r--r-- 1 root root 0 Jan 4 12:23 file23.txt
Znajdź i działaj na podstawie wyników
W tej sekcji przyjrzymy się, jak możesz działać na plikach, które pasują do wzorca określonego w poleceniu find.
Znajdź pliki i zmień uprawnienia
Znajdź i zmień uprawnienia niektórych typów plików. W naszym przypadku będziemy pracować z plikami PHP z różnymi uprawnieniami, jak pokazano poniżej.
[email protected]:~/ver$ ls -la total 8 drwxrwxr-x 2 jack jack 4096 Jan 3 14:11 . drwxr-xr-x 8 jack jack 4096 Jan 3 14:05 .. -rwxr-xr-x 1 jack jack 0 Jan 3 14:06 ans.php -rw-rw-r-- 1 jack jack 0 Jan 3 14:11 base.php -rwxr-xr-x 1 jack jack 0 Jan 3 14:06 query.php -rw-rw-r-- 1 jack jack 0 Jan 3 14:11 qust.php -rwxr-xr-x 1 jack jack 0 Jan 3 14:06 text.php -rw-rw-r-- 1 jack jack 0 Jan 3 14:11 vary.php
Poszukamy teraz wszystkich plików PHP (powyżej) i zamienimy ich uprawnienia na 755
find ver -name "*.php" -type f -exec chmod 755 {} ;
Polecenie szuka plików PHP w katalogu ver, a następnie ustawia ich uprawnienia na 755 (rwxr-xr-x)
Wyniki
[email protected]:~/ver$ ls -la total 8 drwxrwxr-x 2 jack jack 4096 Jan 3 14:11 . drwxr-xr-x 8 jack jack 4096 Jan 3 14:05 .. -rwxr-xr-x 1 jack jack 0 Jan 3 14:06 ans.php -rwxr-xr-x 1 jack jack 0 Jan 3 14:11 base.php -rwxr-xr-x 1 jack jack 0 Jan 3 14:06 query.php -rwxr-xr-x 1 jack jack 0 Jan 3 14:11 qust.php -rwxr-xr-x 1 jack jack 0 Jan 3 14:06 text.php -rwxr-xr-x 1 jack jack 0 Jan 3 14:11 vary.php
Znajdź i zmień uprawnienia do plików i katalogów
Znajdź pliki z 644 uprawnieniami i zmień je tak, aby miały 655 uprawnień
find . -type f -perm 644 -exec chmod 655 {} ;
Możesz także wyszukać katalogi z uprawnieniami 644 i zastąpić je 755.
find . -type d -perm 644
Wyjście
./docs
Folder dokumentów ma 644 uprawnienia
drwxrwxr-x 2 jack jack 4096 Jan 3 12:45 docs
Aby ustawić go na 755, uruchamiamy
find . -type d -perm 644 -exec chmod 755 {} ;
Teraz możemy sprawdzić ponownie, aby zobaczyć, co dokładnie 755
find . -type d -perm 755
Wyjście
.
./dokumenty
Z góry widzimy, że katalogi root i docs mają uprawnienia 755.
Polecenie Ls –la podaje następujące szczegóły
drwxr-xr-x 2 jack jack 4096 Jan 3 12:45 docs
Znajdź i skopiuj pliki lub katalogi
Znajdź i skopiuj określony plik do katalogu
Poniższe polecenie znajdzie plik file22.txt i skopiuje go do katalogu ~/tmp/images.
find -iname file22.txt -exec cp {} ~/tmp/images ;
Znajdź i skopiuj jeden typ plików do katalogu
Aby znaleźć pliki takie jak obrazy z rozszerzeniem jpg w bieżącym katalogu i skopiować je do innej lokalizacji, np. do folderu obrazów, użyj;
find -iname '*.jpg' -exec cp {} ~/tmp/images ;
Spowoduje to znalezienie i skopiowanie wszystkich plików jpg do folderu ~/tmp/images.
Znajdź i skopiuj jeden plik do wielu katalogów
Znajdź i skopiuj jeden do wielu katalogów.
find ~/tmp/dir1/ ~/tmp/dir2/ $HOME/3/ -maxdepth 0 -exec cp ~/numeric/hci {} ;
Spowoduje to znalezienie pliku hci i skopiowanie go do trzech katalogów /tmp/dir1/ /tmp/dir2/ i $HOME/3/
Znajdź i przenieś pliki do innego katalogu
Aby przenieść znany plik z katalogu do innego. Aby przenieść plik universal.php;
find ~/folder/ -type f -name universal.php -exec mv {} ~/numeric/ ;
Wyszukaj i przenieś pliki z określonym rozszerzeniem do innego folderu
find ~/numeric/ -type f -name '*.php' -exec mv {} ~/folder/ ;
Znajdź określone pliki i przejdź do określonego innego folderu
find -type f -name uni*.* -exec mv {} ~/unifiles/ ;
Polecenie szuka wszystkich plików, których nazwy zaczynają się od uni i mają dowolne rozszerzenie. Następnie przenosi je do katalogu /unifiles/
Znajdź i przenieś pliki na podstawie wieku
Znajdź i przenieś pliki starsze niż określone dni do innej lokalizacji, takiej jak archiwum.
find /path/ -type f -name '*.pdf' -mtime +20 -exec mv {} /backup1/ ;
Spowoduje to wyszukanie plików pdf starszych niż 20 dni i przeniesienie ich do katalogu backup1.
Znajdź i usuń pliki i katalogi
Składnia wyszukiwania i usuwania plików lub katalogów w bieżącym katalogu to
odnaleźć . -type f -name „plik do usunięcia” -exec rm -f {} ; aby usunąć tylko pliki lub
odnaleźć . -type d -name „katalog-do-usunięcia” -exec rm -rf {} ; usuwać tylko katalogi
Znajdź i usuń tylko określone pliki
Aby znaleźć i usunąć pliki zaczynające się od til, użyj;
find . -type f -name "til*" -exec rm {} ;
Aby znaleźć i usunąć katalogi zaczynające się od til
find . -type d -name "til*" -exec rm {} ;
Usuń zarówno pliki, jak i katalogi
find . -name "til*" -exec rm -rf {} ;
Spowoduje to usunięcie zarówno plików, jak i katalogów zaczynających się od liter til.
Usuń według rozszerzenia
Poniżej znajduje się sposób zlokalizowania i usunięcia wszystkich plików txt w bieżącym katalogu. Zamień txt na inne rozszerzenie, takie jak bak, pdf lub inne, które chcesz usunąć.
find . -type f -name "*.txt" -exec rm -f {} ;
Jeśli chcesz, aby system wyświetlał monit o potwierdzenie przed usunięciem każdego pliku, dodaj opcję -i jak poniżej.
find . -type f -name "*.txt" -exec rm -i {} ;
Wyjście
rm: remove regular empty file './File22.txt'? y rm: remove regular empty file './file22.txt'? y rm: remove regular empty file './file23.txt'?
Domyślnie opcja -rm nie usunie katalogów i należy użyć opcji –r, aby zapewnić usuwanie rekurencyjne. Zapewnia to usunięcie pustych katalogów i zawierających pliki. Opcja -f wymusza usunięcie i jest używana zarówno dla plików, jak i katalogów.
Znajdź i usuń pliki starsze niż n dni
Znajdź i usuń pliki kopii zapasowej starsze niż 20 dni z bieżącego katalogu.
find . -type f -name '*.bak' -mtime +20 -exec rm {} ;
Spowoduje to usunięcie wszystkich plików .bak starszych niż 20 dni.
Znajdź i usuń tylko katalogi
Aby usunąć katalog o nazwie dir22
find . -type d -name dir22 -exec rm -rf {} ;
Upewnij się, że wielkość liter nazwy katalogu jest zgodna lub użyj opcji -iname.
find . -type d -iname Dir22 -exec rm -rf {} ;
Usuwa zarówno Dir22, jak i dir22
Aby potwierdzić przed usunięciem, użyj opcji -i.
find . -type d -iname Dir22 -exec rm -rf -i {} ;
Wyjście
rm: usunąć katalog „./Dir22”? n
rm: usunąć katalog „./dir22”? y
W naszym przypadku wpisaliśmy n dla katalogu Dir22, który nie zostanie usunięty, oraz y dla katalogu Dir22, który zostanie teraz usunięty.
Znajdź i usuń puste pliki
Możesz użyć dowolnego z poniższych poleceń, aby zlokalizować puste pliki i usunąć je automatycznie.
find ./ -type f -size 0 -exec rm -f {} ;
lub
znajdź ./ -typ f -rozmiar 0 | xargs rm -f
lub
znajdź ./ -typ f -rozmiar 0 –usuń
Znajdź i usuń puste katalogi
Aby usunąć puste katalogi, użyjemy opcji d.
find ./ -type d -empty -exec rmdir {} ;
Inną alternatywą jest użycie usuwania zamiast usuwania.
find ./ -type d -empty -delete
Należy pamiętać, że usunięcie plików systemowych lub krytycznych z komputera może spowodować uszkodzenie systemu operacyjnego lub aplikacji lub doprowadzić do utraty ważnych danych.
Aby uniknąć przypadkowego usunięcia, najlepszą praktyką jest korzystanie z konta użytkownika innego niż root. Upewnij się również, że usuwasz właściwe pliki, które nie są przydatne, i że masz kopię zapasową wszystkich plików danych na wszelki wypadek.
Co dalej?
Śmiało i wypróbuj powyższe polecenia wyszukiwania systemu Linux w swoim laboratorium lub środowisku NIEPRODUKCYJNYM. Sprawdź, czy możesz użyć niektórych do zautomatyzowania czyszczenia systemu plików za pomocą Crontab. Aby opanować Linuksa, sprawdź to kurs online.