polecenie find
jest potężnym narzędziem, 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 znaleźć katalogi i pliki według ich nazwy, typu lub rozszerzenia, rozmiaru, uprawnień itp.
oprócz lokalizacji plików i katalogów, połączenie poleceniafind
z innymi umożliwia podjęcie działań na wynikach., Dodanie opcji -exec
umożliwia sysadmins uruchamianie zewnętrznych poleceń i wykonywanie czynności takich jak kopiowanie, przenoszenie, usuwanie lub zmiana uprawnień plików spełniających określone kryteria, takie jak rozmiar, Nazwa itp.
w tym artykule zaczniemy od wyjaśnienia podstawowych poleceń wyszukiwania Linuksa za pomocą przykładów. To pokaże Ci, jak znaleźć pliki i katalogi. Następnie pokażemy Ci, jak używać opcji -exec
, aby działać 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,
w tym samouczku wyjaśnimy, jak zlokalizować pliki i katalogi pasujące do określonych wzorców. Zobaczymy również, jak wykonywać akcje na plikach lub katalogach, które lokalizuje Komenda 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ę pliku, którego szukasz.
find . -name file22.txt
Wyjście
./test/file22.txt./sales/file22.txt
należy pamiętać, że Wyniki zawierają ścieżkę. Jest to ważne, jeśli nie znasz katalogu, w którym znajduje się plik, lub jeśli znajduje się on w więcej niż jednym miejscu.
Możesz również wyszukać plik w innym katalogu, pozostając w bieżącej lokalizacji. W takim przypadku musisz podać ścieżkę do katalogu, w którym chcesz wyszukiwać.,
find ./test -name file22.txt
szukanie konkretnych plików w innym katalogu
w naszym przypadku będziemy szukać wszystkich tych, które zaczynają się od Pliku liter w katalogu testowym.
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 Linuksie 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 literqa
. W 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 wyjście
./test/qatree.pdf./test/qa.txt./home/qa
Komenda zwraca zarówno pliki, jak i katalogi pasujące do kryteriów wyszukiwania. Aby znaleźć tylko pliki lub katalogi, musisz to określić w poleceniu.
Znajdź tylko pliki lub katalogi
tylko w przypadku plików użyj przełącznikatype f
.
tylko pliki
find ./ -type f -name "qa*"
Wyjście
./test/qatree.pdf./test/qa.txt
tylko katalogi
Dodaj opcjętype d
aby zlokalizować tylko katalogi.,
find ./ -type d -name "qa*"
Wyjście
./home/qa
niewrażliwe na wielkość liter polecenie Znajdź
wszystkie wyszukiwania z-name
Przełącznik są wrażliwe na wielkość liter i nie daje wyników z dużymi literami. 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 w katalogach 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 Znajdź, aby zlokalizować wiele plików, które mają różne rozszerzenia, takie jak *.doc
, *.txt
*.pdf
itd. Można to zrobić osobno, po jednym rozszerzeniu na raz lub używając tylko jednego polecenia zawierającego wszystkie pożądane rozszerzenia.,
find . -type f ( -name "*.txt" -o -name "*.pdf" -o -name "*.doc" )
wyjście
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 pozwala poleceniu ignorować przypadki i znajdzie tekst pisany wielkimi literami lub nie, np. hiperkonwergencja , Hiperkonwergencja, itd.,
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
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.,pliki nd o określonym rozmiarze – równe 30MB
aby wyszukać Znajdź wszystkie pliki 30MB
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 mniej niż 10MB w bieżącym katalogu
find . -type f -size -10M
Znajdź pliki o rozmiarach od 100 do 200Mb
szukając plików w określonym zakresie, np. od 100 do 200 MB
find / -size +100M -size -200M
poszukaj katalogów większych niż 20KB
find / -type d -size +20k
znajdź puste pliki i katalogi.,
pliki
find ./ -type f -size 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
-mtime +8
będzie szukał txt
plików starszych niż 8 dni.,
według daty modyfikacji
To będzie szukać plików zmodyfikowanych w ciągu ostatnich 17 godzin
find . -mtime -17 -type f
Szuka katalogów zmodyfikowanych 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. Umożliwia to wyświetlenie plików, do których dostęp był lub nie był dostępny w określonym czasie.
aby zobaczyć pliki, które nie były dostępne w ciągu ostatnich 10 dni w katalogu domowym.,
find /home -atime +10
pliki dostępne dokładnie 10 dni temu
find /home -atime 10
dostępne w ciągu ostatnich 10 dni
find /home -atime -10
Znajdź pliki zmodyfikowane w ciągu ostatnich n dni
Możesz również 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 czasie.
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 dostępne w ciągu ostatnich 10 minut
aby znaleźć pliki dostępne w ciągu ostatnich 10 minut, użyj opcji-amin.
find . -amin -10 -type f
Wyjście
./.bash_history./.profileroot@ubuntu1804:~#
katalogi dostępne 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 jest uprawnieniem, które jest albo Numeryczne, takie jak 644, 655, 700, 777
, itd, lub litery, takie jak u=x, a=r+x,
itd.,
tryb można określić na trzy różne sposoby.
- bez prefiksu, gdy chcesz znaleźć pliki o dokładnie określonych uprawnieniach.
- z „
-
” dla plików z co najmniej określonym uprawnieniem. Zwraca pliki z podanymi i dodatkowymi wyższymi uprawnieniami. - użycie ”
/
” wymaga podania właściciela lub grupy z uprawnieniami do pliku.,
Znajdź pliki z uprawnieniem 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
- inni 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ładnych uprawnień766
i mogą mieć dodatkowe uprawnienia tak długie, ale muszą mieć przynajmniej określone uprawnienia.
Znajdź pliki zapisywalne przez właściciela
będziemy teraz używać „/
„, aby wyszukać pliki zapisywalne przez ich właściciela, grupę lub innych.
find -perm /222../file2./file3./file1
powyższe wyszukiwanie plików, które mogą być zapisywane przez ich właściciela lub grupę.
zwraca pliki, które są zapisywalne przez jeden z nich, ale niekoniecznie przez oba. Aby zobaczyć pliki, w których oba mają uprawnienia do zapisu, użyj prefiksu–.,
./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 własność 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
znajdź i działaj na wynikach
w tej sekcji przyjrzymy się, jak możesz działać na plikach, które pasują do wzorca określonego w komendzie znajdź.,
Znajdź pliki i zmień uprawnienia
znajdź i zmień uprawnienia niektórych typów plików. W naszym przypadku będziemy pracować z plikami PHP o różnych uprawnieniach, jak pokazano poniżej.,
będziemy teraz szukać wszystkich plików PHP (powyżej) i zastąpić ich uprawnienia 755
find ver -name "*.php" -type f -exec chmod 755 {} ;
polecenie szuka plików PHP w katalogu ver
I ustawia ich uprawnienia na 755
(rwxr-xr-x
)
wyniki
znajdź i zmień uprawnienia plików i katalogów
znajdź pliki z uprawnieniami 644 i zmień je na 655
find . -type f -perm 644 -exec chmod 655 {} ;
Możesz również szukać katalogów z uprawnieniami 644 i zastąpić je 755.,
find . -type d -perm 644
Wyjście
./docs
folder docs 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, co dokładnie 755
find . -type d -perm 755
wyjście
.
./docs
z góry widać, że katalogi root i docs mają uprawnienia 755.,
Ls –la
polecenie 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.tx
T i skopiuj 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 rozszerzeniemjpg
w bieżącym katalogu i skopiuj je do innej lokalizacji, takiej jak folder obrazów, użyj;
find -iname '*.jpg' -exec cp {} ~/tmp/images ;
To znajdzie i skopiuje wszystkie pliki JPG do folderu~/tmp/images
.
znajdź i skopiuj jeden plik do wielu katalogów
znajdź i skopiuj jeden plik do wielu katalogów.,
find ~/tmp/dir1/ ~/tmp/dir2/ $HOME/3/ -maxdepth 0 -exec cp ~/numeric/hci {} ;
spowoduje to znalezienie pliku hci file 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 przenieś do określonego innego folderu
find -type f -name uni*.* -exec mv {} ~/unifiles/ ;
polecenie wyszukuje wszystkie pliki o nazwach zaczynających się od uni
i posiadające jakiekolwiek 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.,pliki i katalogi
składnia wyszukiwania i usuwania plików lub katalogów w bieżącym katalogu to
find . -type f -name "file to delete" -exec rm -f {} ;
usuwanie tylko plików lub
usuwanie tylko katalogów
Wyszukiwanie i usuwanie tylko określonych plików
wyszukiwanie i usuwanie plików zaczynających 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ń przez rozszerzenie
Poniżej znajduje się sposób na zlokalizowanie i usunięcie wszystkich plikówtxt
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 zapytał cię o potwierdzenie przed usunięciem KAŻDEGO pliku, Dodaj opcję-i, jak poniżej.,
find . -type f -name "*.txt" -exec rm -i {} ;
Wyjście
domyślnie-rm
nie usunie katalogów i musisz użyć opcji–r
, aby zapewnić rekurencyjne usunięcie. Zapewnia to usuwanie pustych katalogów i tych 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 zapasowych 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 pasujesz do nazwy katalogu lub użyj opcji -iname
.
find . -type d -iname Dir22 -exec rm -rf {} ;
usuwa zarówno Dir22
oraz dir22
aby potwierdzić przed usunięciem, użyj opcji-i.
find . -type d -iname Dir22 -exec rm -rf -i {} ;
Wyjście
rm: remove directory'./ Dir22, n
rm: remove directory”./ dir22 y
w naszym przypadku wpisaliśmy n
dla katalogu Dir22
, który nie zostanie usunięty, a 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ź ./ – type f-size 0 / xargs rm-F
lub
find .,/ – type f-size 0-delete
znajdź i Usuń puste katalogi
aby usunąć puste katalogi użyjemy opcjid
.
find ./ -type d -empty -exec rmdir {} ;
inną alternatywą jest użycie delete zamiast remove.
find ./ -type d -empty -delete
należy pamiętać, że usunięcie systemu lub krytycznych plików z komputera może uszkodzić system operacyjny lub Aplikacje lub doprowadzić do utraty ważnych danych.
aby uniknąć przypadkowego usunięcia, najlepiej jest użyć konta użytkownika niebędącego rootem., Upewnij się również, że usuwasz odpowiednie pliki, które nie są przydatne i że na wszelki wypadek masz kopię zapasową wszystkich plików danych.
co dalej?
wypróbuj powyższe polecenia Znajdź Linuksa w środowisku laboratoryjnym lub nie produkcyjnym. Sprawdź, czy możesz użyć niektórych do zautomatyzowania czyszczenia systemu plików za pomocą Crontab. Aby opanować Linuksa, sprawdź ten kurs online.