Поиск системных файлов linux

Содержание
  1. Как выполнить поиск файлов и папок в Linux
  2. Поиск файла по имени при помощи утилиты locate
  3. Поиск в Linux при помощи утилиты find
  4. Поиск файла по имени
  5. Поиск файла по дате
  6. Поиск файла по размеру
  7. Поиск папки
  8. Поиск текста в Linux при помощи утилиты grep
  9. Команда find: широкие возможности для поиска файлов в Linux
  10. Простой пример использования команды find
  11. Синтаксис команды find
  12. Опции
  13. Критерии поиска
  14. Примеры использования команды find с использованием критериев
  15. Операторы
  16. Примеры использования команды find с использованием операторов
  17. Действия над файлами
  18. Примеры использования команды find с использованием действий
  19. Заключение
  20. Найти команду в Linux (поиск файлов и каталогов)
  21. find командный синтаксис
  22. Найти файлы по имени
  23. Найти файлы по расширению
  24. Найти файлы по типу
  25. Найти файлы по размеру
  26. Найти файлы по дате изменения
  27. Найти файлы по разрешениям
  28. Найти файлы по владельцу
  29. Найти и удалить файлы
  30. Выводы

Как выполнить поиск файлов и папок в Linux

В качестве вступительного слова дадим некоторое описание того, как вообще можно совершать поиск в linux. Для этих целей есть множество программ, но некоторые из них уже стали классикой поиска в linux. Подчеркнем, в данной статье мы сконцентрируемся исключительно на linux. Это означает, что даже если вы встретите утилиты с теми же самыми названиями в Solaris или операционных системах на ядрах BSD, приведенные советы могут работать не всегда. Так же это относится к busybox, которая реализует лишь небольшую часть функциональности оригинальных утилит.

Итак встречайте героев сегодняшнего обзора: locate — предоставляет поиск по имени файла в заранее подготовленной базе данных, find — работает на реальной файловой системе и предоставляет невероятные возможности для поиска файлов и папок по различным параметрам. Также мы расскажем вскользь о grep — утилите для поиска текста в файлах.

Поиск файла по имени при помощи утилиты locate

Чтобы выполнить просто поиск файла по имени в Linux логичнее использовать команду locate — за счет заранее подготовленной базы она быстро выдаст нужный результат:

Если же вы получили сообщение о том, что команда не найдена, возможно её нужно установить. Для Debian-based дистрибутивов (Ubuntu, Mint) установить её можно командой:

# apt-get install mlocate

Пользователям RedHat, CentOS и Fedora стоит выполнить

# yum install mlocate

После установки нужно создать/обновить базу данных — файл, содержащий в себе «снимок» файловой системы, благодаря которому locate работает так быстро:

Т.е. вместо того, чтобы каждый раз проходиться по всей файловой системе, locate доверяет updatedb создать файл, содержащий в себе все имена и пути файловой системы, и выполняет поиск в нем. Важно поддерживать его актуальность, иначе вы можете случайно найти уже давно удаленные файлы, или не найти новые. Поэтому updatedb при инсталляции «вешается» на CRON и выполняется автоматически — вы можете в этом убедиться, посмотрев на файлы заданий CRON.

Поиск в Linux при помощи утилиты find

Куда более мощным и гибким инструментом для поиска файлов и папок в Linux выступает команда find. Её синтаксис упрощенно выглядит так:

find [path. ] [expression]

Поиск файла по имени

Чтобы выполнить в linux поиск файла по имени по всей файловой системе нужно ввести:

# find / -name myfilename

Учтите, что в данном случае поиск будет идти по имени файла в точности соответствующему заданному. Чтобы сымитировать поведение команды locate для find следует ввести:

# find / -name «*part_of_name*»

«*» означает любое количество любых символов. Это дает нам возможность также производить поиск файлов по расширению:

Поиск файла по дате

Вот пример того, как можно выполнить поиск в Linux файла по дате:

# find /home -mtime -5

Данная команды выведет все файлы из каталога /home, измененные не более 5-ти дней назад.

Поиск файла по размеру

А так, например, можно выполнит поиск файлов по размеру:

# find /home -size +1G

Данная команды выведет все файлы из каталога /home, имеющие размер более одного гигабайта. Очень удобно для поиска больших файлов в linux

Поиск папки

На самом деле поиск папки в linux ничем не отличается от поиска файла, так как папка — это файл. Однако find дает нам возможность указать тип. Например, чтобы явно выполнить поиск только папок, имена которых содержат слово, например, mysql, выполните

# find / -type d -name «*mysql*»

Здесь ключ «-type» указывает на тип. На текущий момент времени find поддерживает следующие типы:

  • b — блочное устройство
  • c — символьное устройство
  • d — папка (дирректория)
  • p — именнованный канал
  • f — обычный файл
  • l — символическая ссылка
  • s — сокет
  • D — дверь (только для Solaris)
Читайте также:  Как посмотреть текущего пользователя windows

Подробнее о различных параметрах поиска find вы можете почитать, введя команду

Поиск текста в Linux при помощи утилиты grep

Да, grep действительно очень хорош, когда речь заходит о поиске текста в файлах в linux по паттерну. Сразу оговоримся, что искать текст мы будем в файлах в формате plain text — чистый текст, таких как конфигурационные файлы, сценарии командного интерпретатора (bash. python, php. ) и др. Искать по файлам Word и Excel грепом эффективно вряд ли получится.

Итак, чтобы выполнить поиск строки по всем файлам в каталоге, например /etc следует ввести

# grep -lri root /etc/*

Такая команда выведет имена всех файлов, в которых удастся найти заветные 4 буквы «root». Здесь ключ «-l» заставляет grep выводить только имена файлов. Т.е. если вы хотите увидить ещё и ту саму строку, где удалось найти запрашиваемое слово, то «-l» стоит не указывать. Ключ «-r» выполняет поиск не только по /etc, но и по всем файлам во всех подпапках. И наконец ключ «-i» говорит не принимать во внимание регистр, т.е. grep будет искать не только слово «root», но и «ROOT», и «rOOt». Вы поняли

Конечно, вмемогущий grep поддерживает регулярные выражения. Чтобы выполнить, например, поиск строки, явно начинающийся всё с того же слова, введите

# grep -lri ^root /etc/*

Крышка в начале слова «root» обязывает grep выводит только те файлы, где слово «root» стоит в начале строки. И таких трюков достаточно много. Если вы еще не знакомы с regex, то стоит начать хотябы с википедии

Источник

Команда find: широкие возможности для поиска файлов в Linux

В Linux есть очень мощная и полезная команда для поиска файлов — команда find. Она обладает большим количеством возможностей для поиска файлов, однако, иногда вызывает сложности у новичков во многом из-за ее синтаксиса.

Простой пример использования команды find

Для начала рассмотрим простой пример использования команды find для поиска на компьютере файлов с именем config . Мы будем искать файлы config , начиная с корневого каталога / . Для этого вам нужно выполнять команду от имени пользователя root , чтобы иметь достаточно прав доступа, иначе получите сообщения «Permission denied». Итак, выполним команду:

Команда означает следующее: искать файлы с именем config (-name config), начиная с каталога / (первый параметр команды find ) и выводить имена файлов на экран (аргумент -print). Отмечу, что поиск рекурсивный, то есть при поиске просматриваются все вложенные директории. Как видите все просто. Теперь рассмотрим синтаксис команды и перейдем к обзору ее основных аргументов.

Синтаксис команды find

Общий синтаксис команды find , который вы можете найти в справочном руководстве, может показаться не совсем простым, поэтому я приведу более удобный для восприятия:

В качестве пути для поиска можно использовать как абсолютные, так и относительные пути, а также список путей, разделенных пробелом.

Опции

Опции команды find указываются, начиная с символа «-», за которым следует название опции. Рассмотрим основные опции.

-depth (или -d) Поиск в подкаталогах перед поиском в самом каталоге.
-L При поиске следовать по символическим ссылкам.
-maxdepth N При поиске проверять не более чем N вложенных уровней каталогов.
-mindepth N Не проверять вложенные каталоги уровня N и меньше.
-mount Не искать в каталогах других файловых систем.

Критерии поиска

У команды find может быть несколько критериев поиска (их также называют tests ). Каждый критерий представляет собой определенное условие проверки, которое возвращает либо true либо false . Это можно сравнить с условиями оператора if в программировании. В процессе обработки очередного файла команда find по очереди проверяет каждый критерий, и если очередной критерий возвращает false , тогда команда find переходит к следующему файлу. Критериев у команды find довольно много, мы рассмотрим только некоторые из них.

-atime N Последний раз к файлу обращались N дней назад.
-mtime N Последнее изменение файла было N дней назад.
-name шаблон Имя файла (шаблон имени) без указания пути. Рекомендуется всегда заключать шаблон в кавычки.
-newer другой_файл Файл был изменен позже, чем другой_файл .
-size [±] N [cwbkMG] Размер файла равен N блокам, если указано +N , тогда размер файла больше N , -N — меньше. Символ после N означает размер блока. b — 512 байт, с — байт, w — 2 байта, k — килобайт, M — мегабайт, G — гигабайт.
-type C Файл типа C . Наиболее часто используемые значения для С : d — каталог, f — файл.
-user Имя_пользователя Файл принадлежит пользователю с именем Имя_пользователя .
Читайте также:  Windows 2003 файл сервер

Примеры использования команды find с использованием критериев

Найти в текущем каталоге обычные файлы (не каталоги), имя которых начинается с символа «

Найти в текущем каталоге файлы, измененные позже, чем файл file.bak .

Операторы

Критерии можно объединять, используя операторы. Ниже приведены операторы в порядке убывания их приоритета.

Короткая форма оператора Длинная форма Описание
! критерий -not Отрицание (возвращает true , если критерий false )
критерий1 -a критерий2 -and Оператор И ( true , если критерий1 и критерий2 true )
критерий1 -o критерий2 -or Оператор ИЛИ ( true , если критерий1 или критерий2 true )

В общем случае при использовании операторов критерии проверяются в порядке их приоритета. Изменить порядок можно с помощью скобок. Скобки нужно выделять с помощью обратного слеша.

Примеры использования команды find с использованием операторов

Найти в текущем каталоге файлы, начинающиеся с символа «

» или c «temp» и являющиеся именно обычными файлами (-type f ), а не каталогами.

Найти в текущем каталоге (не обрабатывая подкаталоги — -maxdeph 1) обычные файлы (-file f) размером больше 600 мегабайт и менее 1 гигабайта (-size) или файлы имя которых заканчивающиется на «.mpeg» (-name).

Действия над файлами

Когда выполняется команда find , вы можете выполнять различные действия над найденными файлами. Рассмотрим основные из них.

-exec команда \; Выполнить команду. Обратите внимание, что после команды ставится обратный слеш и точка с запятой.
-execdir команда \; То же самое что и exec, но команда вызывается из подкаталога, содержащего текущий файл.
-ok команда \; То же самое, что и exec, но перед обработкой очередного файла будет выводится запрос на выполнение команды.
-okdir команда \; То же что ok для execdir.
-print Вывод имени файла на экран.
-ls Выполнение команды ls -dils над текущим файлом.

В выполняемых командах вы можете использовать параметр <> в качестве аргумента, который заменяется путем к текущему файлу.

Примеры использования команды find с использованием действий

Найти в текущем каталоге обычные файлы размером больше 1000 байт и выполнить над ними команду ls -dils (действие ls).

Найти в текущем каталоге обычные файлы, начинающиеся с символа тильда «

», и для каждого файла выдавать запрос на его удаление (на выполнение команды rm ).

Заключение

В заметке мы рассмотрели очень важную и полезную Linux команду find , которая предоставляет практически неограниченные возможности для поиска файлов по многим критериям и шаблонам. А с использованием команд (действий) вы можете искать файлы и выполнять над ними любые операции.

Источник

Найти команду в Linux (поиск файлов и каталогов)

Команда find — один из самых мощных инструментов в арсенале системных администраторов Linux. Он ищет файлы и каталоги в иерархии каталогов на основе заданного пользователем выражения и может выполнять указанное пользователем действие для каждого совпадающего файла.

Вы можете использовать команду find для поиска файлов и каталогов на основе их разрешений, типа, даты, владельца, размера и т. Д. Его также можно комбинировать с другими инструментами, такими как grep или sed .

find командный синтаксис

Общий синтаксис команды find следующий:

  • Атрибут options управляет обработкой символических ссылок, параметрами отладки и методом оптимизации.
  • Атрибут path. определяет начальный каталог или каталоги, в которых find будет искать файлы.
  • Атрибут expression состоит из параметров, шаблонов поиска и действий, разделенных операторами.

Для поиска файлов в каталоге пользователь, вызывающий команду find должен иметь разрешения на чтение в этом каталоге.

Давайте посмотрим на следующий пример:

  • Параметр -L (параметры) указывает команде find переходить по символическим ссылкам.
  • /var/www (путь…) указывает каталог, в котором будет производиться поиск.
  • (Выражение) -name «*.js указывает find искать файлы, заканчивающиеся на .js (файлы JavaScript).

Найти файлы по имени

Поиск файлов по имени, вероятно, является наиболее частым применением команды find . Чтобы найти файл по имени, используйте параметр -name за которым следует имя файла, который вы ищете.

Например, чтобы найти файл с именем document.pdf в каталоге /home/linuxize , вы должны использовать следующую команду:

Чтобы запустить поиск без -iname регистра, измените параметр -name на -iname :

Приведенная выше команда будет соответствовать «Document.pdf», «DOCUMENT.pdf» и т. Д.

Найти файлы по расширению

Поиск файлов по расширению аналогичен поиску файлов по имени. Например, чтобы найти все файлы, заканчивающиеся на .log.gz внутри .log.gz /var/log/nginx , вы должны ввести:

Важно отметить, что вы должны либо заключить шаблон в кавычки, либо экранировать символ звездочки * обратной косой чертой чтобы он не интерпретировался оболочкой при использовании подстановочного знака.

Читайте также:  Appdata roaming microsoft windows libraries

Чтобы найти все файлы , которые не соответствуют регулярному выражению *.log.gz вы можете использовать -not вариант. Например, чтобы найти все файлы, которые не заканчиваются на *.log.gz вы должны использовать:

Найти файлы по типу

Иногда вам может потребоваться поиск определенных типов файлов, таких как обычные файлы, каталоги или символические ссылки. В Linux все является файлом.

Для поиска файлов по их типу используйте параметр -type и один из следующих дескрипторов, чтобы указать тип файла:

  • f : обычный файл
  • d : каталог
  • l : символическая ссылка
  • c : символьные устройства
  • b : блочные устройства
  • p : именованный канал (FIFO)
  • s : сокет

Например, чтобы найти все каталоги в текущем рабочем каталоге , вы должны использовать:

Типичным примером может быть рекурсивное изменение разрешений файлов веб-сайтов на 644 и разрешений каталогов на 755 с помощью команды chmod :

Найти файлы по размеру

Чтобы найти файлы по размеру файла, передайте параметр -size вместе с критериями размера. Вы можете использовать следующие суффиксы, чтобы указать размер файла:

  • b : блоки по 512 байт (по умолчанию)
  • c : байты
  • w : двухбайтовые слова
  • k : килобайты
  • M : мегабайты
  • G : гигабайты

Следующая команда найдет все файлы размером ровно 1024 байта внутри каталога /tmp :

Команда find также позволяет вам искать файлы, которые больше или меньше указанного размера.

В следующем примере мы ищем все файлы 1MB менее 1 1MB внутри текущего рабочего каталога. Обратите внимание на минус — символ перед значением размера:

Если вы хотите искать файлы размером более 1 1MB , вам нужно использовать символ плюс + :

Вы даже можете искать файлы в пределах диапазона размеров. Следующая команда найдет все файлы 2MB от 1 до 2MB :

Найти файлы по дате изменения

Команда find также может искать файлы на основе их последнего изменения, доступа или времени изменения.

То же, что и при поиске по размеру, используйте символы плюс и минус для «больше чем» или «меньше чем».

Допустим, несколько дней назад вы изменили один из файлов конфигурации dovecot, но забыли, какой именно. Вы можете легко отфильтровать все файлы в /etc/dovecot/conf.d который заканчивается на .conf и был изменен за последние пять дней:

Вот еще один пример фильтрации файлов по дате модификации с использованием опции -daystart . Приведенная ниже команда перечислит все файлы в каталоге /home которые были изменены 30 или более дней назад:

Найти файлы по разрешениям

Параметр -perm позволяет вам искать файлы на основе прав доступа к файлам.

Например, чтобы найти все файлы с разрешениями ровно 775 внутри каталога /var/www/html , вы должны использовать:

Вы можете поставить перед числовым режимом знак минус — или косую черту / .

Когда в качестве префикса используется косая черта / , то по крайней мере одна категория (пользователь, группа или другие) должна иметь по крайней мере соответствующие биты, установленные для соответствия файлу.

Рассмотрим следующий пример команды:

Приведенная выше команда будет соответствовать всем файлам с разрешениями на чтение, установленными для пользователя, группы или других.

Если в качестве префикса используется минус — , то для соответствия файла необходимо установить хотя бы указанные биты. Следующая команда будет искать файлы, которые имеют права на чтение и запись для владельца и группы и доступны для чтения другим пользователям:

Найти файлы по владельцу

Чтобы найти файлы, принадлежащие определенному пользователю или группе, используйте параметры -user и -group .

Например, чтобы найти все файлы и каталоги, принадлежащие пользователю linuxize , вы должны запустить:

Вот реальный пример. Допустим, вы хотите найти все файлы, принадлежащие пользователю www-data и изменить владельца совпадающих файлов с www-data на nginx :

Найти и удалить файлы

Чтобы удалить все совпадающие файлы, добавьте параметр -delete в конец выражения соответствия.

Убедитесь, что вы используете эту опцию, только если уверены, что результат соответствует файлам, которые вы хотите удалить. Перед использованием опции -delete всегда рекомендуется распечатать совпадающие файлы.

Например, чтобы удалить все файлы, заканчивающиеся на .temp из /var/log/ , вы должны использовать:

Когда дело доходит до каталогов, find может удалять только пустые каталоги, как и rmdir .

Выводы

Мы показали вам, как использовать команду find с различными параметрами и критериями.

Эта статья должна дать вам фундаментальное представление о том, как находить файлы в ваших системах Linux. Вы также можете посетить страницу руководства find и прочитать обо всех других мощных параметрах команды find .

Если у вас есть вопросы или замечания, пожалуйста, оставьте комментарий ниже.

Источник

Оцените статью