Как найти файл в linux
Для поиска файлов в Unix предназначены две команды — find и locate . Первая выполняет поиск непосредственно в момент запуска, а вторая делает поиск по списку файлов (базе данных), который обновляется обычно раз в сутки (в большинстве систем — поздно ночью или рано утром).
У обеих команд есть как достоинства, так и недостатки. Так, find выдает результаты по текущему, «мгновенному» состоянию диска, но, к примеру, поиск по всему диску может занимать очень много времени. Напротив, locate выполняет поиск очень быстро, но во-первых, в базе данных может быть несколько устаревшая информация, а во-вторых, база данных составляется «из-под» пользователя » nobody » и не содержит информации о тех директориях, которые для него закрыты.
Как find , так и locate позволяют указывать шаблон имени файла, содержащий специальные символы » * «, » ? » и т.д. Такие шаблоны надо заключать в кавычки, чтобы shell не пытался их интерпретировать.
Поиск по диску сейчас — find
Команда find ищет в указанных директориях и ниже файлы, отвечающие заданному критерию («test»). Причем критерием может быть не только имя файла, но и, к примеру, время модификации, размер или тип (файл/директория/линк и т.д). Критерии могут объединяться при помощи булевских операторов, так что можно найти, например, все файлы с расширением .txt размером не более 10К, модифицированные не позднее прошлого месяца.
Формат вызова find следующий:
Если не указывать директории, то будут найдены все отвечающие указанному критерию файлы в текущей директории и ниже. Если не указывать критерий, то будет выдан список всех файлов из указанных директорий. Если же не указывать ни то, ни другое, то будет выдан список всех файлов из текущей директории.
Директории в списке указываются через пробел. Имена критериев всегда начинаются с » — «, аналогично ключам.
Поиск файла по имени
Самое частое использование find — поиск файлов по имени. Для этого служит критерий » -name «, которому указывается шаблон имени. К примеру, чтобы найти на всем диске все файлы с расширением .txt , надо воспользоваться командой
GNU-версия find , используемая в Linux, понимает также критерий » -iname «, отличающийся тем, что маленькие и большие буквы не различаются. Так, команда
найдет все файлы с расширениями .exe , .EXE , .Exe и т.д.
Поиск с несколькими критериями
Если указать несколько критериев, то find найдет только файлы, соответствующие всем критериям сразу.
К примеру, критерий » -type » позволяет указать тип файла — обычный (» f «), директория (» d «) и т.д. Таким образом, чтобы найти в директории /etc все директории, имена которых начинаются на » cron «, надо сделать слежующее:
bobby:~% find /etc -name 'cron*' -type d find: /etc/X11/xdm/authdir: Permission denied /etc/cron.daily /etc/cron.hourly /etc/cron.monthly /etc/cron.weekly bobby:~% _
В то время как поиск просто по имени дал бы несколько лишних файлов:
bobby:~% find /etc -name 'cron*' find: /etc/X11/xdm/authdir: Permission denied /etc/rc.d/init.d/crond /etc/logrotate.d/cron /etc/cron.daily /etc/cron.hourly /etc/cron.monthly /etc/cron.weekly bobby:~% _
Исполнение команды с найденными файлами
Кроме критериев команде find можно указывать также действия («actions»). Если никакое действие не указано, то find по умолчанию добавляет » -print «, чтобы напечатать имя файла. Т.е. команда
реально работает как
Наиболее часто требуется действие » -exec «, позволяющее выполнить с найденным файлом некую команду, чаще всего — ls -l .
Пример (выдать «длинный» листинг всех файлов из директории /etc , в имени которых содержится » pass «):
bobby:~% find /etc -name '*pass*' -type f -exec ls -l '<>' ';' -rw-r--r-- 1 root root 1362 Apr 16 20:21 /etc/passwd -rwxr-xr-x 1 root root 97 Oct 13 1998 /etc/X11/wmconfig/u serpasswd find: /etc/X11/xdm/authdir: Permission denied -rw-r--r-- 1 root root 239 Apr 27 1998 /etc/pam.d/passwd -rw-r--r-- 1 root root 1362 Apr 16 20:10 /etc/passwd- -rw-r--r-- 1 root root 1363 Apr 16 20:20 /etc/passwd.OLD bobby:~% _
Необходимое пояснение: » -exec » воспринимает все, что стоит после него и до слова » ; «, как команду, которую надо выполнить. Причем сочетание символов » <> » заменяется на имя файла. Поскольку и » ; «, и » <> » являются специальными символами для shell, их надо «закавычить».
Поиск по списку файлов диска — locate
Команда locate ищет указанные имена в базе данных, содержащей список файлов. Формат вызова locate следующий:
bobby:~% locate Monitors /usr/X11R6/lib/X11/doc/Monitors /usr/X11R6/share/Xconfigurator/MonitorsDB bobby:~% _
При указании нескольких имен locate найдет файлы, соответствующие любому из имен:
bobby:~% locate xsnow xroach /etc/X11/wmconfig/xsnow /usr/share/icons/mini/mini-xsnow.xpm /usr/X11R6/bin/xsnow /usr/X11R6/include/X11/bitmaps/xsnow /usr/X11R6/man/man1/xsnow.1x /usr/X11R6/bin/xroach /usr/X11R6/man/man1/xroach.man /var/catman/X11R6/cat1/xroach.man.gz bobby:~% _
Если ИМЯ не содержит специальных символов шаблона, то locate находит все файлы, в любом месте полного имени которых (т.е. включая директорию) встречается указанная строка. Т.е. locate в этом случае работает просто как grep по списку файлов.
Если же ИМЯ содержит символы » * «, » ? » или » [] «, то locate находит только строки, которые точно соответствуют шаблону.
покажет все файлы из директории /usr/X11R6 , имя которых заканчивается на » jewel «, а именно программу xjewel , но не man-страницу по ней:
bobby:~% locate '/usr/X11R6/*jewel' /usr/X11R6/bin/xjewel bobby:~% _
Для того же, чтобы увидеть все файлы из /usr/X11R6 , в имени которых встречается » jewel «, надо в конце шаблона также поставить » * «:
bobby:~% locate '/usr/X11R6/*jewel*' /usr/X11R6/bin/xjewel /usr/X11R6/man/man1/xjewel.1x bobby:~% _
В любом случае символы » . » и » / » не являются особенными. Таким образом, шаблон » *et*pass* » найдет файл /etc/passwd .
| Предупреждение |
В Linux индексирование (т.е. создание базы данных) выполняется программой updatedb , которая автоматически запускается ежедневно при помощи Cron. В RedHat Linux это выполняется из файла /etc/cron.daily/updatedb.cron . Таким образом, чтобы заставить updatedb индексировать, к примеру, раздел, смонтированный в /home , надо просто добавить его (через пробел) в список разделов в ключе » —localpaths » (т.е. чтобы было что-то типа » —localpaths=’/ /home «).
Как найти файл в linux
Next: Средства управления файлами Up: Средства поиска файлов Previous: Поиск файлов с помощью Contents Index
Используйте утилиту find для поиска файлов в дереве каталогов по имени файла. Укажите имя дерева каталогов для поиска, а затем, с помощью опции `-name’ — имя нужного Вам файла.
Чтобы увидеть список всех файлов системы, которые называются `top’, наберите:
$ find / -name top [Enter]
Эта команда проведет поиск во всех каталогах, куда Вам разрешен доступ; если Вы не имеете прав прочесть содержимое каталога, find сообщить, что поиск в данном каталоге Вам запрещен.
Опция `-name’ различает прописные и строчные буквы; чтобы использовать поиск без этих различий, воспользуйтесь опцией `-iname’.
Чтобы увидеть список всех файлов системы, которые называются `top’, без учета регистра символов, наберите:
$ find / -iname top [Enter]
Эта команда найдет все файлы, название которых состоит из букв `top’ — включая `Top’, `top’, и `TOP’.
Для поиска файлов, имена которых совпадают с определенным образцом, удобно использовать метасимволы. Образцы имен нужно указывать в одинарных кавычках.
Чтобы получить список файлов системы, имена которых начинаются с букв `top’, введите:
$ find / -name ‘top*’ [Enter]
Чтобы получить список файлов системы, имена которых начинаются с букв `top’, за которыми следуют еще три символа, введите:
$ find / -name ‘top. ‘ [Enter]
Чтобы получить список файлов системы, имена которых начинаются с букв `top’, за которыми следуют пять и более символов, введите:
$ find / -name ‘top. *’ [Enter]
Чтобы увидеть все файлы с расширением `.tex’в Вашем рабочем каталоге, независимо от их написания, введите:
$ find ~ -iname ‘*.tex’ [Enter]
Чтобы увидеть все файлы в каталоге `/usr/share’, содержащие в имени слово `farm’, введите:
$ find /usr/share -name ‘*farm*’ [Enter]
Используйте `-regex’ вместо `-name’ для поиска файлов, имена которых удовлетворяют регулярному выражению, или образцу, описывающему несколько строк.
Чтобы увидеть все файлы в текущем каталоге, имена которых содержат строку `net’ или `comm’, наберите:
$ find . -regex '.*\(net\|comm\).*' [Enter]
Примечание: Опция `-regex’ совпадает с полным именем файла относительно указанного каталога, а не с отдельным именем файла.
Чтобы найти файлы определенного размера, используйте опцию `-size’, указав после нее требуемый размер файла. Размер файла может быть задан в трех различных формах: если перед ним указан знак плюс (`+’), ищутся все файлы, большие, чем указанный размер; если указан знак минус (`-‘), ищутся все файлы, меньшие, чем указанный размер; если префикс не указан, ищутся файлы точно указанного размера. (Единица измерения — блок 512 байт; символ `k’ после размера указывает килобайты, символ `b’ — байты.)
Чтобы вывести список файлов в каталоге `/usr/local’, размер которых больше 10,000 килобайт, введите:
$ find /usr/local -size +10000k [Enter]
Чтобы вывести список файлов в домашнем каталоге, размер которых меньше 300 байт, введите:
$ find ~ -size -300b [Enter]
Чтобы вывести список файлов системы, размер которых составляет 42 блока по 512 байт, наберите:
$ find / -size 42 [Enter]
Используйте опцию `-empty’ для поиска пустых файлов — т.е. файлов с размером 0 байт. Это полезно для поиска и удаления ненужных файлов.
Чтобы найти все пустые файлы в Вашем домашнем каталоге, введите:
$ find ~ -empty [Enter]
Чтобы найти файлы, модифицированные в определенное время, используйте команду find с опциями `-mtime’ или `-mmin’; аргумент опции `-mtime’ определяет количество прошедших суток (24 часа), а аргумент `-mmin’ — количество прошедших минут.
Чтобы вывести все файлы в каталоге `/usr/local’, модифицированные точно 24 часа назад, введите:
$ find /usr/local -mtime 1 [Enter]
Чтобы вывести все файлы в каталоге `/usr’, модифицированные 5 минут назад, введите:
$ find /usr -mmin 5 [Enter]
Если Вы хотите указать промежуток времени, поставьте перед числом либо знак плюс (`+’), определяя большее или равное аргументу время, или знак минус (`-‘), определяя время, меньшее или равное аргументу.
Чтобы вывести все файлы в каталоге `/usr/local’, модифицированные в течение последних 24 часов, введите:
$ find /usr/local -mtime -1 [Enter]
Опция `-daystart’ определяет отсчет времени с момента начала текущих суток.
Чтобы вывести все файлы в Вашем домашнем каталоге, модифицированные вчера, введите:
$ find ~ -mtime 1 -daystart [Enter]
Чтобы вывести все файлы в каталоге `/usr’, модифицированные в течение года, введите:
$ find /usr -mtime +356 -daystart [Enter]
Чтобы вывести все файлы в Вашем домашнем каталоге, модифицированные в период от 2 до 4 дней тому назад, наберите:
$ find ~ -mtime 2 -mtime -4 -daystart [Enter]
Чтобы найти файлы, которые новее некоторого файла, введите его имя в качестве аргумента опции `-newer’.
Чтобы вывести все файлы в каталоге `/etc’, которые новее файла `/etc/motd’, введите:
$ find /etc -newer /etc/motd [Enter]
Чтобы найти все файлы новее определенной даты, используйте следующий трюк: создайте временный файл в каталоге `/tmp’ и установите дату его модификации на требуемую с помощью touch, а затем поределите его как аргумент для `-newer’.
Чтобы вывести все файлы в Вашем домашнем каталоге, модифицированные после 4 мая текущего года, введите:
$ touch -t 05040000 /tmp/timestamp [Enter] $ find ~ -newer /tmp/timestamp [Enter]
Чтобы найти файлы, принадлежащие определенному пользователю, укажите имя пользователя в качестве агрумента опции `-user’. Например, для поиска всех файлов в каталоге `/usr/local/fonts’, принадлежащих пользователю warwick, наберите:
$ find /usr/local/fonts -user warwick [Enter]
Опция `-group’ подобным образом определяет файлы, принадлежащие некоторой группе пользователей.
Чтобы вывести список файлов в каталоге `/dev’, принадлежащих группе audio, введите:
$ find /dev -group audio [Enter]
Вы можете использовать команду find для выполнения других команд над найденными файлами, указав требуемые команды в качестве аргуентов опции `-exec’. Если Вы используететв команде строку `»’, эта строка в команде будет заменена именем текущего найденного файла. Окончание команды помечается строкой `’;».
Чтобы найти все файлы в каталоге ` /html/’ с расширением `.html’, и вывести строки из этих файлов, содержащие слово `organic’, введите:
$ find ~/html/ -name ‘*.html’ -exec grep organic ‘<>‘ ‘;’ [Enter]
Чтобы ввести подтверждение выполнения команды для файла, найденного find, используйте ключ `-ok’ вместо `-exec’.
Чтобы удалить из Вашего домашнего каталога файлы, доступ к которым осуществлялся более года назад, с подтверждением для каждого файла, введите:
$ find ~ -used +365 -ok rm ‘<>‘ ‘;’ [Enter]
Вы можете определить несколько опций find одновременно, чтобы найти файлы, удовлетворяющие сразу нескольким критериям.
Чтобы вывести список файлов в Вашем домашнем каталоге, имена которых начинаются со строки `top’, и которые новее файла `/etc/motd’, введите:
$ find ~ -name ‘top*’ -newer /etc/motd [Enter]
Чтобы сжать все файлы в Вашем домашнем каталоге, размер которых превышает 2 Mb, и которые еще не сжаты с помощью gzip (не имеют расширения `.gz’), введите:
$ find ~ -size +2000000c -regex ‘.*[^gz]’ -exec gzip ‘<>‘ ‘;’ [Enter]
Чтобы найти наибольший файл в каталоге, используйте команду ls с опцией `-S’, которая сортирует файлы в нисходящем порядке по размеру (обычно ls выводит список файлов по алфавиту). Добавьте опцию `-l’, чтобы вывести размер и другие атрибуты файла.Пример:
Чтобы вывести оглавление каталога, начав с файлов наименьшего размера, используйте ls с ключами `-S’ и `-r’, которые сортируют вывод в обратном порядке.Пример:
Чтобы вывести список каталогов, отсортированных по размеру — то есть размеру всех содержащихся в них файлов — используйте du и sort. Команда du выводит список каталогов в восходящем порядке, начиная с самого маленького; опция `-S’ помещает при выводе в первую колонку размер каталога в килобайтах. Укажите требуемое дерево каталогов в качестве аргумента du и перенаправьте вывод в команду sort с ключом `-n’, которая отсортирует список по числам.
Чтобы вывести список подкаталогов в текущем дереве каталогов, отсортированный по размеру, введите:
$ du -S . sort -n [Enter]|
Если Вам нужно, чтобы первыми были указаны самые большие каталоги, используйте ключ `-r’:
$ du -S . sort -nr [Enter]|
Чтобы быстро определить количество файлов в каталоге, используйте ls и перенаправьте вывод в команду `wc -l’, которая выволит количество строк, пришедших на ее вход.
Для вывода общего количества файлов в текущем каталоге введите:
$ ls | wc -l [RET] 19 $
Общее количество файлов — 19.
Поскольку ls по умолчанию не показывает скрытые файлы, приведенная выше команда не будет их учитывать. Опция `-A’ для ls позволит посчитать обычные и скрытые файлы:
$ ls -A | wc -l [RET] 81 $
Чтобы посчитать количество файлов во всем дереве каталогов, а не только в отдельном каталоге, используйте find вместо ls, и укажите специальный ключ для find — строку `
! -type d’, чтобы исключить вывод и подсчет каталогов.
Чтобы вывести количество файлов в дереве `/usr/share’, введите:
$ find /usr/share \! -type d wc -l [Enter]|
Чтобы вывести количество файлов и каталогов в дереве `/usr/share’, введите:
$ find /usr/share wc -l [Enter]|
Чтобы вывести количество каталогов в дереве `/usr/share’, введите:
$ find /usr/share \! -type f wc -l [Enter]|
Команда which позволяет Вам получить полный путь к приложению или другой команде, указав базовое имя файла в качестве опции. Это удобно, чтобы убедиться, что данное приложение или команда присутствуют в системе.
Чтобы определить, установлен ли в Вашей системе perl и где он расположен, введите:
$ which perl [RET] /usr/bin/perl
Next: Средства управления файлами Up: Средства поиска файлов Previous: Поиск файлов с помощью Contents Index Alex Otwagin 2002-12-16
Как найти файл в Linux? Руководство по команде find с примерами
![]()
Когда нужно найти какой-нибудь файл или папку в системе Linux в голову сразу приходит команда find. Она проста в использовании и имеет множество разных опций, которые позволяют оптимизировать поиск файлов. Далее приведём несколько примеров использования этой команды.
Поиск папок
Чтобы сделать поиск по папкам команде find нужно передать параметр type d. Таким образом мы скажем команде find вести поиск только по директориям:
$ find /path/to/search -type d -name "name-of-dir"

Поиск скрытых файлов
Так как скрытые файлы и директории в Linux начинаются с точки, то мы можем задать шаблон поиска так, чтобы команда рекурсивно выводила нам все скрытые файлы и директории. Для этого достаточно ввести следующую команду:
$ find /path/to/search -name ".*"
Поиск файлов по размерам
Команда find дает возможность вести поиск файлов размером больше, меньше или равным указанному значению. Чтобы найти файл размером больше 10Мб нужно ввести команду:
$ find /path/to/search -size +10M
Для поиска файлов размером меньше указанного значения или равного ему нужно ввести следующие команды:
$ find /path/to/search -size -10M $ find /path/to/search -size 10M
Также есть возможность искать файлы размер которых находится в указанном промежутке.
$ find /path/to/search -size +100M -size -1G
Поиск файлов по списку
Допустим нам нужно найти несколько файлов, указанные в списке, который хранится в виде файла с расширением .txt. Для этого мы можем воспользоваться комбинацией команд find и grep. Чтобы данная команда работала корректно, каждый шаблона поиска в списке должен начинаться с новой строки.
$ find /path/to/search | grep -f filelist.txt
Парметр f переданный команде grep означает файл и даёт нам возможность указать файл с шаблонами для поиска. В результате работы вышеуказанной команды система вернёт нам все файлы, название которых указаны в списке.
Найти файл, которого нет в списке
Так же в системе Linux есть возможность поиска, противоположная указанному выше. То есть мы можем искать файлы, которые не указаны в списке файлов. Для этого команде grep передадим параметр vf, что означает обратное сопоставление и вернет нам файлы, названий которых не найдёт в списке шаблонов.
$ find /path/to/search | grep -vf filelist.txt
Указываем максимальную глубину поиска
По умолчанию, команда find ищет файлы во всех директориях и поддиректориях. Допустим, если мы в качестве пути для поиска укажем корневую директорию «/», то система будет искать искомый файл по всему жесткому диску. Мы можем ограничить область поиска командой maxdepth указав ему насколько глубоко нужно искать файл.
$ find . -maxdepth 0 -name "myfile.txt"
Команды указанная выше говорит системе искать файл только в указанной директории. А следующая команда предписывает вести поиск в указанной директории и в одной поддиректори.
$ find . -maxdepth 1 -name "myfile.txt"
Поиск пустых файлов
Команда find также позволяет вести поиск по пустым файлам и директориям. Для этого команде добавляем флаг empty. Следующие две команды позволяют найти пустые файли и папки. Для поиска папок к строке поиске добавляет ключ d:
$ find /path/to/search -type f empty $ find /path/to/search -type d empty
Так же можно автоматически удалять найденные пустые файлы или папки. Следующая команда найдет и удалит все пустые файлы в указанной папке и всех подпапках:
$ find /path/to/search -type f -empty delete
Поиск самого большого файла или папки
Если нужно быстро определить какой файл или какая папка в системе занимает больше всего места, то команда find с соответствующими ключами позволит нам рекурсивно искать и сортировать файлы/папки по их размеру:
$ find /path/to/search -type f -printf "%s %p " | sort -n | tail -1
Заметьте, что при поиске мы прибегнули к двум другим удобным инструментам Linux: sort и tail. Sort отсортирует файл по их размеру, а tail покажет самый последний файл в списке, который и будет самым большим файлом/папкой. Мы можем изменить команду так, чтобы она выводила пять самых больших файлов для этого нужно воспользоваться следующей командой:
$ find /path/to/search -type f -printf "%s %p " | sort -n | tail -5Также можно вывести файлы с самым меньшим размером. Следующая команда позволит вывести пять самых маленьких по объёму файлов:
$ find /path/to/search -type f -printf "%s %p " | sort -n | head -5Чтобы найти самую большую папку по указанному пути нужно ввести команду указанную ниже:
$ find /path/to/search -type d -printf "%s %p " | sort -n | tail -1Поиск файлов с атрибутом setuid
Атрибут setuid файла позволяет обычному пользователю запускать файлы от имени root-а. Такие файлы тоже легко найти с помощью команды find и нескольких параметров. Команда имеет два параметра, которые позволяют искать файлы с конкретными правами: -user и perm. Чтобы найти файлы, который можно запускать от имени root-а можем прописать команду:
$ find /path/to/search -user root -perm /4000
На скриншоте мы добавили еще параметр exec чтобы ограничить вывод команды find. Полная команда выглядит так:
$ find /path/to/search -user root -perm /4000 -exec ls -l <> ;Мы можем заменить root любым другим пользователем или просто опустить этот параметр и найти все файлы с правами запуска от имени root-а:
$ find /path/to/search -perm /4000Поиск файлов с атрибутом sgid
Команда поиск файлов с атрибутом sgid почти такая же как и для SUID с той разницей, что вместо 4000 прописываем 2000:
$ find /path/to/search -perm /2000Так же можем найти файлы, которые имеют оба указанных атрибута:
$ find /path/to/search -perm /6000Исключение из вывода файлов и папок, к которым нет доступа
Чтобы вести поиск пользователь должен иметь доступ на чтение в указанной папке и подпапках. Если нет соответствующих прав, то мы получим ошибки как на скриншоте ниже.
![]()
Этот случай особо актуален при поиске в корневой директории. Согласитесь сильно засоряет вывод, но этого можно избежать если перенаправить вывод stderr в stdout и передать grep для обработки. Следующей командой мы выведем все результаты работы команды find кроме строк, содержащих слова "Permission denied"^
$ find / -name "myfile.txt" 2>%1 | grep -v "Permission denied"Поиск файлов изменённых за последние X дней
Чтобы найти файлы, которые были изменены за указанный период времени используется параметр mtime. Ниже приведены несколько примеров для поиска файлов, изменённых за последний 30 дней, больше 30 дней и меньше чем за 30 дней:
$ find /path/to/search -type f -mtime 30 $ find /path/to/search -type f -mtime +30< $ find /path/to/search -type f -mtime -30Чтобы вывести более детальную информацию о найденных файлах можно указать параметр exec:
$ find /path/to/search -type f -mtime -30 -exec ls -l <> ;Сортировка результатов по времени
При необходимости отсортировать результате по времени можно воспользоваться параметром printf и утилитой sort:
$ find /path/to/search -printf "%T+ %p " | sortПо умолчанию sort упорядочивает файлы от старых к новым. Чтобы указать обратный порядок сортировки достаточно добавить ключ r к команде sort:
$ find /path/to/search -printf "%T+ %p " | sort rРазница между locate и find
В системе Linux есть и другая команда, позволяющая вести поиск файлов locate. Но так как она не имеет таких параметров поиска, как find, она не очень гибка, но достаточно практична.
$ locate myfile.txtУтилита locate ведёт поиск по базе, которая содержит все имена файлов, находящихся в системе. Так как команда locate не ищет указанный файл по всей системе, то она намного эффективней утилиты find. Но с другой стороны база данных этой утилиты обновляется раз в день, что не позволяет найти файлы, созданные раньше, чем 24 часов. Базу данных можно вручную обновлять командой updatedb.
Команда locate особенно полезна если нужно вести поиск файла по всему жесткому диску, так как find в этом случае понадобиться больше времени, так как он проходится по всем директориям в реальном времени.
Если же поиск ведётся в папке, где мало файлов, то лучше пользоваться командой find.
Нагрузка CPU командой find
При поиске по большим каталогам команда find может требовать больше ресурсов. Это должно по своей сути позволять более важным системным процессам иметь приоритет, но если необходимо, чтобы команда find употребляла меньше ресурсов машины, можно использовать команду ionice или nice.
Просмотреть состояние процессора можно командой:
Чтобы понизить приоритет Ввода/Вывода для команды find, можно ввести следующую команду:
$ ionice -c3 -n7 find /path/to/search -name "myfile.txt"А чтобы понизить приоритет использования CPU, нужно ввести следующую команду:
$ nice -n 19 find /path/to/search -name "myfile.txt"Или можно эти две команды комбинировать, чтобы обеспечить низкий приоритет как для Ввода/Вывода, так и для CPU.
Поиск файлов в Linux или Изучаем команду find
Несомненно, при работе с Linux, иногда возникает необходимость поиска файлов с определенными характеристиками. Этими характеристиками могут быть размер или тип файла, права доступа и другое.
Наличие в Linux команды find, во многом помогает справиться с поиском файлов по различным критериям.
Сегодня мы разберем поиск файлов в Linux и приведем основные опции команды find, которые вы сможете применить в своей работе.
Формат команды find:
find путь -опции
где путь – это каталог, в котором произвести поиск. В качестве пути можно указывать следующие значения:
. – поиск в текущем каталоге;
/ – поиск от корневого каталога;
~ – поиск в домашнем каталоге.
Что до опций, то тут гораздо бОльший список, с которым крайне необходимо внимательно ознакомиться (это в будущем очень поможет!). Итак, основные опции команды find:
-name - поиск файлов по имени, используя приведенный шаблон;
-user - поиск файлов, принадлежащих указанному пользователю;
-group - поиск файлов, принадлежащих указанной группе;
-perm - поиск файлов с указанным режимом доступа;
-type - поиск файлов определенного типа. Типов тоже достаточно:
- b – специальный блочный файл;
- d – каталог;
- c – специальный символьный файл;
- f – обычный файл;
- l – символическая ссылка;
- p – именованный канал;
- s – сокет.
-size n - поиск файлов с размером n единиц;
-mtime -n +n – поиск файлов, содержание которых изменялось менее чем (-) или более чем (+) дней назад.
Рассмотрим некоторые примеры применения команды find:
Наиболее часто применяемой опцией является опция -name, которая производит поиск файлов по имени.
Примеры с опцией -name :
$ find /mnt/usb -name “*.mp3″ -print
произведет поиск всех файлов (об этом свидетельствует знак *), имеющих расширение .mp3 на USB-устройстве, смонтированном в каталог /mnt/usb.
$ find ~ -name “test*” -print
выведет на экран список файлов домашнего каталога, начинающихся на test.
Если вам надо найти файлы, начинающиеся с определенных букв (к примеру, от a до j), то здесь будет удобно применить регулярные выражения, которые крайне удобны в работе:
$ find / -name “[a-j]*” -print
Вышеуказанная команда позволит отыскать все файлы в системе, начинающиеся с букв от a до j.
Поиск файлов с определенными режимами доступа
Если потребуется найти файлы, имеющие определенные режимы доступа, вам поможет опция -perm, которая легко в этом поможет.
К примеру, выполним поиск файлов с режимом доступа 775 (владелец и группа имеют полные права и ограничение на запись имеют остальные пользователи), находящихся в текущем каталоге :
$ find . -perm 775 -print
Выполняя поиск при помощи find с опцией -perm можно использовать и другой способ – можно перед значением режима поставить дефис и тогда будет произведен поиск файлов, для которых установлены все указанные биты разрешений. Причем, остальные биты в этом случае игнорируются.
К примеру, найдем файлы, к которым пользователи группы имеют полный доступ:
$ find . -perm -070 -print
Вместо знака дефиса, можно указать знак плюса. В этом случае будет произведен поиск файлов, у которых установлен хотя бы один из указанных битов разрешений. Остальные биты при этом игнорируются.
Поиск файлов определенного пользователя или группы
Поиск файлов какого-либо определенного пользователя крайне прост в своей реализации. Для этого достаточно выполнить команду:
$ find / -user admin -print
Вышеуказанная команда произведет поиск файлов в системе, принадлежащих пользователю admin.
Для того, чтобы найти файлы, принадлежащие определенной группе (к примеру managers), выполним команду:
$ find / -group managers -print
Для поиска файлов несуществующих пользователей или групп можно воспользоваться опциями -nouser и -nogroup:
$ find / -nouser -print
$ find / -nogroup -print
Поиск файлов определенного типа
Одной из удобных возможностей команды find, является возможность поиска файлов определенного типа. Рассмотрим варианты использования опции -type:
Поиск символических ссылок в каталоге /etc:
$ find /etc -type l -print
Вывод на экран списка каталогов, присутствующих в каталоге /mnt/raid
$ find /mnt/raid -type d -print
Поиск файлов определенного размера
Опция -size позволяет произвести поиск файлов определенного размера и имеет следующий вид при выполнении:
$ find . -size 2000k -print
Вышеуказанная команда отыщет и отобразит на экране файлы размером 2 мегабайта, находящийся в текущем каталоге. Если, к примеру, необходимо найти файлы размером менее 500 килобайт, то вид команды будет следующий:
$ find . -size -500k -print
Если нужно найти файлы размером более 600 мегабайт, то применим команду:
$ find / -size +600M -print
Поиск файлов с использованием опции -mtime
Опция -mtime позволит вам найти файлы, изменявшиеся в какой-то срок времени.
К примеру, у нас встала задача поиска файлов, находящихся в каталоге /mnt/raid/upload , и изменявшихся за последние 5 дней. В этом нам поможет команда:
$ find /mnt/raid/upload -mtime +5 -print
Если нам необходимо обратное, к примеру, отыскать файлы, которые не изменялись неделю, применим команду:
$ find /mnt/raid/upload -7 -print
Команда find является крайне удобным инструментом для поиска файлов и может использоваться также и для поиска файлов на дисках NFS (сетевых файловых системах), но в этом случае необходимо учесть, что времени на поиск чего-либо на NFS уйдет гораздо больше, чем на локальных дисках.
В этой статье мы рассмотрели лишь основные опции команды find, которые помогут вам в вашей работе. Используйте то, что удобно и не переживайте по пустякам!
| Комментарии |
