Командата намиране на Linux е мощен инструмент, който позволява на системните администратори да намират и управляват файлове и директории въз основа на широк набор от критерии за търсене. Може да намира директории и файлове по тяхното име, тип или разширение, размер, разрешения и т.н.
Освен локализирането на файлове и директории, комбинирането на командата find с други ви позволява да предприемете действие върху резултатите. Добавянето на опцията -exec позволява на системните администратори да изпълняват външни команди и да извършват действия като копиране, преместване, изтриване или промяна на разрешенията на файловете, отговарящи на зададените критерии като размер, име и др.
В тази статия ще започнем с обяснение на основните команди за намиране на Linux с примери. Това ще ви покаже как да намирате файлове и директории. След това ще ви покажем как да използвате опцията -exec, за да действате върху файловете или директориите въз основа на техния размер, разрешения и т.н.
Общият синтаксис за командата find е
find {path} {name -of-file or dir-to-search} {action-to-take}
Където,
- пътят указва директорията.
- име на файл или директория за търсене : Име на файла или директорията, които да търсите
- действие за предприемане: като копиране, изтриване, преместване и др.
В този урок ще обясним как да намирате файлове и директории, съответстващи на определени шаблони. Ще видим също как да извършваме действия върху файловете или директориите, които намира командата find. Ръководството е базирано на Ubuntu, но е приложимо за повечето дистрибуции и версии на Linux.
Съдържание
Намерете файлове и директории
Намерете конкретни файлове по име или разширение
За да потърсите конкретен файл, изпълнете следната команда от root (/). Командата съдържа точното име на файла, който търсите.
find . -name file22.txt
Изход
./test/file22.txt ./sales/file22.txt
Моля, имайте предвид, че резултатите включват пътя. Това е важно, ако не знаете директорията, където се намира файлът, или когато е на повече от едно място.
Можете също да търсите файла в друга директория, докато все още сте в текущото местоположение. В този случай трябва да предоставите пътя за директорията, в която искате да търсите.
find ./test -name file22.txt
Търсене на конкретни файлове в друга директория
В нашия случай ще търсим всички, които започват с файла с букви в тестовата директория.
find ./test -name file*
Изход
./test/file22.txt ./test/file30.doc ./test/file1.txt ./test/file5,doc
Търсене на файлове по разширение
За да намерите файл в Linux с определено разширение, добавете го към командата.
find . -name *.txt
Изход
./test/subtest/subfil.txt ./test/file22.txt ./test/file1.txt ./home1/files32.txt ./home2/file22.txt ./qa/tags.txt
Намерете файлове и директории по име
Използвайте командата по-долу, за да търсите файлове и директории, започващи с буквите qa. В нашия компютър имаме файловете qatree.txt и qa.txt, както и директория с името qa.
Ако изпълним командата;
find ./ -name "qa*"
Той връща следния изход
./test/qatree.pdf ./test/qa.txt ./home/qa
Командата връща както файловете, така и директориите, отговарящи на критериите за търсене. За да намерите само файлове или директории, трябва да посочите това в командата.
Намерете само файлове или директории
Само за файлове използвайте превключвателя тип f.
Само файлове
find ./ -type f -name "qa*"
Изход
./test/qatree.pdf ./test/qa.txt
Само директории
Добавете опцията тип d, за да намерите само директории.
find ./ -type d -name "qa*"
Изход
./home/qa
Команда за намиране без значение на главни и малки букви
Всички търсения с превключвател -name са чувствителни към малки и големи букви и няма да дадат резултати с главни букви. За да получите всички случаи, използвайте опцията -iname.
find ./ -iname "qa*"
Изход
./test/qatree.pdf ./test/qa.txt ./test/QAtest.txt ./home/qa
Търсене на файл от множество директории
За да намерите файловете в различни директории, добавете техните пътища в командата. В нашия случай ще проверим в тестовите и цифровите директории.
find ./test ./numeric -name file22.txt -type f
Изход
./test/file22.txt /root/numeric/file22.txt
Намерете множество файлове с различни разширения от всички директории
Можете да използвате командата за намиране, за да намерите множество файлове, които споделят различни разширения като *.doc, *.txt *.pdf и т.н. Това може да се направи поотделно, едно разширение наведнъж или като се използва само една команда, която включва всички желаните разширения.
намирам . -type f ( -name “*.txt” -o -name “*.pdf” -o -name “*.doc”)
изход
./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
Намерете файлове, съдържащи определен текст
Понякога искате да получите достъп до файл, съдържащ определен текст, но не можете да си спомните неговото име или местоположение. Тази команда ви позволява да намерите всички файлове, съдържащи вашия целеви текст.
За да потърсите всички файлове, съдържащи думата хиперконвергенция”, използвайте;
find / -type f -exec grep -l -i "hyperconvergence" {} ;
Изход
/root/numeric/hci /root/HCIP
Опцията –i позволява на командата да игнорира регистъра и ще намери текста, независимо дали е с главни букви или не, т.е. хиперконвергенция, хиперконвергенция и т.н.
За да търсите файловете в определена директория, просто ги добавете към командата
find ./numeric -type f -exec grep -l -i "hyperconvergence" {} ;
Изход
./numeric/hci
Разгледайте още примери за команда grep.
Намерете файлове и директории въз основа на размера
Можете да намерите всички файлове или директории, които са по-малки, равни или по-големи от определен размер, в рамките на определен диапазон или празни. Използвайте подходящ формат за размер в зависимост от типа файлове или директории, които търсите.
Опциите за размер включват;
c – байтове
k – килобайта
M – мегабайти
G – гигабайти
Намерете файлове с определен размер – равен на 30 MB
За да търсите, намерете всички 30MB файлове
find / -size 30M
Намерете файлове, по-големи от определен размер
find -size +2M
Изход
. /Downloads/ubuntu18043.iso ./.cache/pip/http/6/e/3/8/3/6e38383f41850c3e5705d48116bc52f81b92a80500f414305057 7a9c
Намерете файлове под 10MB в текущата директория
find . -type f -size -10M
Намерете файлове с размери между 100-200 MB
Когато търсите файлове в определен диапазон, например между 100 и 200 MB
find / -size +100M -size -200M
Търсете директории, по-големи от 20kb
намери / -тип d -размер +20k
Намерете празни файлове и директории.
файлове
намери ./ -тип f -размер 0
или
find ./ -type f –empty
Справочници
find ./ -type d –empty
Намерете файлове по възраст или време на модификация
Намерете файлове, по-стари от n дни
find /path/ -type f -name '*.txt' -mtime +8
-mtime +8 ще търси txt файлове, които са по-стари от 8 дни.
По дата на промяна
Това ще търси файлове, модифицирани през последните 17 часа
find . -mtime -17 -type f
Търси директории, променени през последните 10 дни
find . -mtime -10 -type d
Намерете файлове въз основа на достъп или модификация
Намерете файлове въз основа на дата или час на достъп. Това ви позволява да видите файлове, които са или не са били достъпвани в рамките на определен период.
За да видите файлове, които не са били достъпвани през последните 10 дни в началната директория.
find /home -atime +10
Файловете са достъпни точно преди 10 дни
find /home -atime 10
Достъп през последните 10 дни
find /home -atime -10
Намерете файлове, променени през последните n дни
Можете също така да търсите файловете в директорията /home, променени през последните 10 дни, като използвате командата;
find /home -mtime -10
Намерете файлове, променени в рамките на определен период.
Например всички файлове, модифицирани преди 6 и 15 дни в началната директория.
find /home -type f -mtime +6 -mtime -15
Достъп до файлове и директории през последните 10 минути
За да намерите файловете, достъпни през последните 10 минути, използвайте опцията -amin.
find . -amin -10 -type f
Изход
./.bash_history ./[email protected]:~#
Директории, достъпени през последните 10 минути
find . -amin -10 -type d
Намерете файлове, отговарящи на конкретни разрешения
Синтаксис
$ find -perm mode
Където режимът е разрешението, което е или числово като 644, 655, 700, 777 и т.н., или букви като u=x, a=r+x и т.н.
Можете да зададете режима по следните три различни начина.
Намерете файлове с разрешение 777
find -perm 777
Изход
./file1
Намерете файлове с поне 766
намери -perm -766
Изход
./file2 ./file1
Командата търси всички файлове, в които
- Собственикът на файла има разрешения за четене/запис/изпълнение.
- Групата има разрешения за четене/запис
- Други имат разрешение за четене/запис
Като такъв той връща два файла, които отговарят на този критерий – file1 и file2. Не е необходимо файловете да имат точните разрешения 766 и могат да имат допълнителни такива, но трябва да имат поне посочените.
Намерете файлове, които могат да се записват от собственика
Сега ще използваме „/“, за да търсим файлове, които могат да бъдат записвани от техния собственик, група или други.
find -perm /222 . ./file2 ./file3 ./file1
Горното търси файлове, които могат да се записват от техния собственик или група.
Това връща файлове, които могат да се записват от единия, но не непременно и от двата. За да видите файлове, където и двата имат разрешения за запис, използвайте префикса –.
find -perm -220
Изход
./file2 ./file1
Намерете файлове, притежавани от потребител
Намерете всички файлове, притежавани от Джак
find /home -user jack
Изход
/home/jack /home/jack/examples.desktop /home/jack/.gnupg /home/jack/.gnupg/private-keys-v1.d /home/jack/ans.cgi
Намерете конкретни файлове, притежавани от потребител
Намерете всички текстови файлове, притежавани от Джак
find /home -user jack -iname "*.txt"
Изход
/home/jack/docs/file32.txt
Намерете и избройте файлове и директории заедно с техните разрешения
find -name "*.conf" | ls -l
Изход
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
Намерете и действайте според резултатите
В този раздел ще разгледаме как можете да действате върху файловете, които отговарят на шаблона, зададен в командата за намиране.
Намерете файлове и променете разрешенията
Намиране и промяна на разрешения за определени типове файлове. В нашия случай ще работим с PHP файлове с различни разрешения, както е показано по-долу.
[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
Сега ще потърсим всички PHP файлове (по-горе) и ще заменим разрешенията им със 755
find ver -name "*.php" -type f -exec chmod 755 {} ;
Командата търси PHP файлове в директорията ver и след това задава тяхното разрешение на 755 (rwxr-xr-x)
Резултати
[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
Намерете и променете разрешенията за файлове и директории
Намерете файлове с 644 разрешения и ги променете, за да имат 655 разрешения
find . -type f -perm 644 -exec chmod 655 {} ;
Можете също да търсите директории с 644 разрешения и да замените това със 755.
find . -type d -perm 644
Изход
./docs
Папката с документи има 644 разрешения
drwxrwxr-x 2 jack jack 4096 Jan 3 12:45 docs
За да го настроим на 755, стартираме
find . -type d -perm 644 -exec chmod 755 {} ;
Сега можем да проверим отново, за да видим какво точно е 755
find . -type d -perm 755
Изход
.
./docs
Отгоре можем да видим, че директориите root и docs имат 755 разрешения.
Командата Ls –la дава следните подробности
drwxr-xr-x 2 jack jack 4096 Jan 3 12:45 docs
Намерете и копирайте файлове или директории
Намерете и копирайте конкретен файл в директория
Командата по-долу ще намери файла file22.txt и ще го копира в директорията ~/tmp/images.
find -iname file22.txt -exec cp {} ~/tmp/images ;
Намерете и копирайте един тип файлове в директория
За да намерите файлове като изображения с разширение jpg в текущата директория и да ги копирате на друго място като папка с изображения, използвайте;
find -iname '*.jpg' -exec cp {} ~/tmp/images ;
Това ще намери и копира всички jpg файлове в папката ~/tmp/images.
Намерете и копирайте един файл в много директории
Намерете и копирайте една в няколко директории.
find ~/tmp/dir1/ ~/tmp/dir2/ $HOME/3/ -maxdepth 0 -exec cp ~/numeric/hci {} ;
Това ще намери файла hci файл и ще го копира в трите директории на /tmp/dir1/ /tmp/dir2/ и $HOME/3/
Намерете и преместете файлове в друга директория
За да преместите познат файл от директория в друга. За да преместите файла universal.php;
find ~/folder/ -type f -name universal.php -exec mv {} ~/numeric/ ;
Търсете и премествайте файлове с определено разширение в друга папка
find ~/numeric/ -type f -name '*.php' -exec mv {} ~/folder/ ;
Намерете определени файлове и преместете в конкретна различна папка
find -type f -name uni*.* -exec mv {} ~/unifiles/ ;
Командата търси всички файлове с имена, започващи с uni и имащи разширение. След това ги премества в директорията /unifiles/
Намерете и преместете файлове според възрастта
Намерете и преместете файлове, по-стари от посочените дни, на друго място, като например архив.
find /path/ -type f -name '*.pdf' -mtime +20 -exec mv {} /backup1/ ;
Това ще търси pdf файлове, по-стари от 20 дни, и ще ги премести в директорията backup1.
Намерете и изтрийте файлове и директории
Синтаксисът за намиране и премахване на файлове или директории в текущата директория е
намирам . -type f -name “файл за изтриване” -exec rm -f {} ; за изтриване само на файлове или
намирам . -type d -name “dir-to-delete” -exec rm -rf {} ; само за изтриване на директории
Намерете и изтрийте само определени файлове
За да намерите и изтриете файлове, започващи с til, използвайте;
find . -type f -name "til*" -exec rm {} ;
За намиране и изтриване на директории, започващи с til
find . -type d -name "til*" -exec rm {} ;
Премахнете файловете и директориите
find . -name "til*" -exec rm -rf {} ;
Това ще премахне както файлове, така и директории, започващи с буквите til.
Изтриване чрез разширение
По-долу е описано как можете да намерите и изтриете всички txt файлове в текущата директория. Заменете txt с друго разширение като bak, pdf или всяко друго, което искате да премахнете.
find . -type f -name "*.txt" -exec rm -f {} ;
В случай, че искате системата да ви подкани да потвърдите, преди да изтриете всеки файл, добавете опцията -i, както е показано по-долу.
find . -type f -name "*.txt" -exec rm -i {} ;
Изход
rm: remove regular empty file './File22.txt'? y rm: remove regular empty file './file22.txt'? y rm: remove regular empty file './file23.txt'?
По подразбиране -rm няма да премахне директориите и трябва да използвате опцията –r, за да осигурите рекурсивно премахване. Това гарантира изтриването на празни директории и тези, съдържащи файлове. Опцията -f принуждава премахването и се използва както за файловете, така и за директориите.
Намерете и изтрийте файлове, по-стари от n дни
Намерете и изтрийте архивни файлове, по-стари от 20 дни, от текущата директория.
find . -type f -name '*.bak' -mtime +20 -exec rm {} ;
Това ще изтрие всички .bak файлове, по-стари от 20 дни.
Намиране и изтриване само на директории
За да изтриете директория, наречена dir22
find . -type d -name dir22 -exec rm -rf {} ;
Уверете се, че главните букви в името на директорията съответстват или използвайте опцията -iname.
find . -type d -iname Dir22 -exec rm -rf {} ;
Премахва както Dir22, така и dir22
За да потвърдите преди изтриване, използвайте опцията -i.
find . -type d -iname Dir22 -exec rm -rf -i {} ;
Изход
rm: премахване на директория ‘./Dir22’? н
rm: премахване на директория ‘./dir22’? г
В нашия случай въведохме n за директория Dir22, която няма да бъде изтрита, и y за директория 22, която сега ще бъде премахната.
Намерете и премахнете празни файлове
Можете да използвате някоя от следните команди, за да намерите празни файлове и да ги изтриете автоматично.
find ./ -type f -size 0 -exec rm -f {} ;
или
намери ./ -тип f -размер 0 | xargs rm -f
или
намери ./ -тип f -размер 0 –изтриване
Намерете и премахнете празни директории
За премахване на празни директории ще използваме опцията d.
find ./ -type d -empty -exec rmdir {} ;
Друга алтернатива е да използвате изтриване вместо премахване.
find ./ -type d -empty -delete
Моля, обърнете внимание, че изтриването на системни или критични файлове от вашия компютър може да повреди операционната система или приложенията или да доведе до загуба на вашите важни данни.
За да избегнете случайни изтривания, най-добрата практика е да използвате не-root потребителски акаунт. Освен това се уверете, че изтривате правилните файлове, които не са полезни, и че имате резервно копие на всичките си файлове с данни за всеки случай.
Какво следва?
Продължете и опитайте горните команди за намиране на Linux във вашата лаборатория или НЕПРОИЗВОДСТВЕНА среда. Вижте дали можете да използвате някои за автоматизиране на почистването на файловата система с Crontab. И за да овладеете Linux, вижте това онлайн курс.