В качестве вступительного слова дадим некоторое описание того, как вообще можно совершать поиск в linux. Для этих целей есть множество программ, но некоторые из них уже стали классикой поиска в linux. Подчеркнем, в данной статье мы сконцентрируемся исключительно на linux. Это означает, что даже если вы встретите утилиты с теми же самыми названиями в Solaris или операционных системах на ядрах BSD, приведенные советы могут работать не всегда. Так же это относится к busybox, которая реализует лишь небольшую часть функциональности оригинальных утилит.
Поиск файла по имени при помощи утилиты locate
Если же вы получили сообщение о том, что команда не найдена, возможно её нужно установить. Для Debian-based дистрибутивов (Ubuntu, Mint) установить её можно командой:
# apt-get install mlocate
Пользователям RedHat, CentOS и Fedora стоит выполнить
# yum install mlocate
Поиск в Linux при помощи утилиты find
Куда более мощным и гибким инструментом для поиска файлов и папок в Linux выступает команда find. Её синтаксис упрощенно выглядит так:
find [path. ] [expression]
Поиск файла по имени
Чтобы выполнить в linux поиск файла по имени по всей файловой системе нужно ввести:
Учтите, что в данном случае поиск будет идти по имени файла в точности соответствующему заданному. Чтобы сымитировать поведение команды locate для find следует ввести:
«*» означает любое количество любых символов. Это дает нам возможность также производить поиск файлов по расширению:
Поиск файла по дате
Вот пример того, как можно выполнить поиск в Linux файла по дате:
Данная команды выведет все файлы из каталога /home, измененные не более 5-ти дней назад.
Поиск файла по размеру
А так, например, можно выполнит поиск файлов по размеру:
Данная команды выведет все файлы из каталога /home, имеющие размер более одного гигабайта. Очень удобно для поиска больших файлов в linux
Поиск папки
Здесь ключ «-type» указывает на тип. На текущий момент времени find поддерживает следующие типы:
Подробнее о различных параметрах поиска find вы можете почитать, введя команду
Поиск текста в Linux при помощи утилиты grep
Итак, чтобы выполнить поиск строки по всем файлам в каталоге, например /etc следует ввести
Такая команда выведет имена всех файлов, в которых удастся найти заветные 4 буквы «root». Здесь ключ «-l» заставляет grep выводить только имена файлов. Т.е. если вы хотите увидить ещё и ту саму строку, где удалось найти запрашиваемое слово, то «-l» стоит не указывать. Ключ «-r» выполняет поиск не только по /etc, но и по всем файлам во всех подпапках. И наконец ключ «-i» говорит не принимать во внимание регистр, т.е. grep будет искать не только слово «root», но и «ROOT», и «rOOt». Вы поняли
Конечно, вмемогущий grep поддерживает регулярные выражения. Чтобы выполнить, например, поиск строки, явно начинающийся всё с того же слова, введите
Крышка в начале слова «root» обязывает grep выводит только те файлы, где слово «root» стоит в начале строки. И таких трюков достаточно много. Если вы еще не знакомы с regex, то стоит начать хотябы с википедии
Утилита find представляет универсальный и функциональный способ для поиска в Linux. Данная статья является шпаргалкой с описанием и примерами ее использования.
Общий синтаксис
— путь к корневому каталогу, откуда начинать поиск. Например, find /home/user — искать в соответствующем каталоге. Для текущего каталога нужно использовать точку «.».
— набор правил, по которым выполнять поиск.
* по умолчанию, поиск рекурсивный. Для поиска в конкретном каталоге можно использовать опцию maxdepth.
Описание опций
Опция
Описание
-name
Поиск по имени.
-iname
Регистронезависимый поиск по имени.
-type
Тип объекта поиска. Возможные варианты:
Также доступны логические операторы:
Полный набор актуальных опций можно получить командой man find.
Примеры использования find
Поиск файла по имени
1. Простой поиск по имени:
* в данном примере будет выполнен поиск файла с именем file.txt по всей файловой системе, начинающейся с корня /.
2. Поиск файла по части имени:
* данной командой будет выполнен поиск всех папок или файлов в корневой директории /, заканчивающихся на .tmp
3. Несколько условий.
а) Логическое И. Например, файлы, которые начинаются на sess_ и заканчиваются на cd:
б) Логическое ИЛИ. Например, файлы, которые начинаются на sess_ или заканчиваются на cd:
в) Более компактный вид имеют регулярные выражения, например:
* где в первом поиске применяется выражение, аналогичное примеру а), а во втором — б).
* в данном примере мы воспользовались логическим оператором !.
Поиск по дате
1. Поиск файлов, которые менялись определенное количество дней назад:
* данная команда найдет файлы, которые менялись более 60 дней назад.
* покажет все файлы, которые менялись, начиная с 02.11.2019 00:00.
* найдет все файлы, которые менялись в промежутке между 31.10.2019 и 01.11.2019 (включительно).
* все файлы, к которым обращались с 08.10.2019.
* все файлы, к которым обращались в октябре.
* все файлы, созданные с 07 сентября 2019 года.
* файлы, созданные с 07.09.2019 00:00:00 по 09.09.2019 07:50
По типу
Искать в текущей директории и всех ее подпапках только файлы:
* f — искать только файлы.
Поиск по правам доступа
1. Ищем все справами на чтение и запись:
2. Находим файлы, доступ к которым имеет только владелец:
Поиск файла по содержимому
* в данном примере выполнен рекурсивный поиск всех файлов в директории / и выведен список тех, в которых содержится строка content.
С сортировкой по дате модификации
* команда найдет все файлы в каталоге /data, добавит к имени дату модификации и отсортирует данные по имени. В итоге получаем, что файлы будут идти в порядке их изменения.
Лимит на количество выводимых результатов
Самый распространенный пример — вывести один файл, который последний раз был модифицирован. Берем пример с сортировкой и добавляем следующее:
Поиск с действием (exec)
1. Найти только файлы, которые начинаются на sess_ и удалить их:
* -print использовать не обязательно, но он покажет все, что будет удаляться, поэтому данную опцию удобно использовать, когда команда выполняется вручную.
2. Переименовать найденные файлы:
3. Вывести на экран количество найденных файлов и папок, которые заканчиваются на .tmp:
* в данном примере мы ищем все каталоги (type d) в директории /home/user и ставим для них права 2700.
5. Передать найденные файлы конвееру (pipe):
* в данном примере мы использовали find для поиска строки test в файлах, которые находятся в каталоге /etc, и название которых заканчивается на .conf. Для этого мы передали список найденных файлов команде grep, которая уже и выполнила поиск по содержимому данных файлов.
6. Произвести замену в файлах с помощью команды sed:
* находим все файлы в каталоге /opt/project и меняем их содержимое с test на production.
Чистка по расписанию
Команду find удобно использовать для автоматического удаления устаревших файлов.
Открываем на редактирование задания cron:
* в данном примере мы удаляем все файлы и папки из каталога /tmp, которые старше 14 дней. Задание запускается каждый день в 00:00. * полный путь к исполняемому файлу find смотрим командой which find — в разных UNIX системах он может располагаться в разных местах.
Команда find в Linux – мощный инструмент сисадмина
Иногда критически важно быстро найти нужный файл или информацию в системе. Порой можно ограничиться стандартами функциями поиска, которыми сейчас обладает любой файловый менеджер, но с возможностями терминала им не сравниться.
Команда find – это невероятно мощный инструмент, позволяющий искать файлы не только по названию, но и по:
Данная команда будет очень полезна системным администраторам для:
Команда find в Linux производит поиск файлов и папок на основе заданных вами критериев и позволяет выполнять действия с результатами поиска.
Синтаксис команды find:
Поиск по имени
Следующая команда ищет файл s.txt в текущем каталоге:
В данном случае критерий -name учитывает только символы нижнего регистра и файл S.txt не появиться в результатах поиска. Чтобы убрать чувствительность к регистру необходимо использовать –iname.
Можно использовать название каталога для поиска. Например, чтобы с помощью команды find найти все png изображения в каталоге home:
Если выдает слишком много ошибок в отказе разрешения, тогда можно добавить в конец команды – 2> /dev/null. Таким образом сообщения об ошибках будут перенаправляться по пути dev/null, что обеспечит более чистую выдачу.
Поиск по типу файла
Критерий -type позволяет искать файлы по типу, которые бывают следующих видов:
Например, указав критерий -type d будут перечислены только каталоги:
Поиск по размеру файла
Допустим, что вам необходимо найти все большие файлы. Для таких ситуаций подойдет критерий -size.
В данном случае поиск выведет все файлы более 1 Гб (+1G).
Единицы измерения файлов:
Поиск пустых файлов и каталогов
Критерий -empty позволяет найти пустые файлы и каталоги.
Поиск времени изменения
Критерий -cmin позволяет искать файлы и каталоги по времени изменения. Для поиска всех файлов, измененных за последний час (менее 60 мин), нужно использовать -60:
Таким образом можно найти все файлы в текущем каталоге, которые были созданы или изменены в течение часа (менее 60 минут).
Для поиска файлов, которые наоборот были изменены в любое время кроме последнего часа необходимо использовать +60.
Поиск по времени доступа
Критерий -atime позволяет искать файлы по времени последнего доступа.
Таким образом можно найти файлы, к которым не обращались последние полгода (180 дней).
Поиск по имени пользователя
Опция –user username дает возможность поиска всех файлов и каталогов, принадлежащих конкретному пользователю:
Таким образом можно найти все файлы пользователя tisha в каталоге home, а 2>/dev/null сделает выдачу чистой без ошибок в отказе доступа.
Поиск по набору разрешений
Критерий -perm – ищет файлы по определенному набору разрешений.
Поиск файлов с разрешениями 777.
Операторы
Для объединения нескольких критериев в одну команду поиска можно применять операторы:
Например, чтобы найти файлы размером более 1 Гбайта пользователя tisha необходимо ввести следующую команду:
Если файлы могут принадлежать не только пользователю tisha, но и пользователю pokeristo, а также быть размером более 1 Гбайта.
Перед скобками нужно поставить обратный слеш «\».
Действия
К команде find можно добавить действия, которые будут произведены с результатами поиска.
-delete
Полезен, когда необходимо найти и удалить все пустые файлы, например:
Перед удалением лучше лишний раз себя подстраховать. Для этого можно запустить команду с действием по умолчанию -print.
Данное действие является особенным и позволяет выполнить команду по вашему усмотрению в результатах поиска.
С помощью –exec можно написать альтернативу команде –delete и применить ее к результатам поиска:
Другой пример использования действия -exec:
Заключение
Команду find можно использовать для поиска:
С полученными результатами можно сразу выполнять различные действия, такие как:
Команда find может сильно облегчить жизнь системному администратору, а лучший способ овладеть ей – больше практиковаться.
Практические примеры использования команды find в Linux
Команда find в Linux являет одной из самых важной и часто используемых утилит командной строки в Unix подобных операционных системах. Команда find используется для поиска и определения расположения файлов и директорий на основе заданных условий. Эти условия задаются в качестве аргументов при запуске find и охватывают все возможные характеристики файла: имя, права доступа, владелец, группа, размер, время доступа/изменения/создания, тип файла, расширение и прочее. Причём эти все эти характеристики можно комбинировать в любых сочетаниях, а вывод команды find может быть настроен очень гибко.
Для первоначального знакомства с командой find рекомендуется статья:
В качестве справочного материала по всем возможностям find рекомендуется:
Если вам просто нужно найти файл по имени, то обратите внимание на команду locate — вполне возможно, её окажется вполне достаточно под ваши нужды:
Что касается данной статьи, которую вы читаете, то здесь собраны практические повседневные примеры, накопленные на базе опыта работы с find.
Команды в этой статье сгруппированы по нескольким разделам — от самых базовых до более продвинутых):
Часть 1: Простые команды find для поиска файлов по именам
Поиск файлов по имени в текущей директории
Найти все файлы, чьё имя zalinux.txt в текущей рабочей директории:
Поиск файлов в домашней директории
Найти все папки в директории /home с именем zalinux.txt:
Поиск файлов по имени без учёта регистра
Найти в директории /home все файлы с именем zalinux.txt чьё имя написано как заглавными, так прописными буквами.
Найти директории по имени
Найти все директории, чьё имя Zalinux в директории / (корневой директории).
Поиск PHP файлов по имени
Найти в текущей рабочей директории все файлы php чьё имя zalinux.php.
Найти все PHP файлы в директории
Найти все php файлы в директории.
Часть 2: Поиск файлов на основе их прав доступа (разрешений)
Найти все файлы с правами доступа 777
Найти все файлы, чьи права доступа равны 777 (право на чтение, запись и выполнение пользователем, группой и кем угодно.
Найти все файлы без прав доступа 777
Найти все файлы, разрешение на доступ к которым не равен 777.
Поиск SGID файлов с доступом 644
Найти все файлы с битом SGID чьи права доступа установлены на 644.
Поиск файлов со Sticky Bit с правами доступа 551
Найти все файлы с включённым Sticky Bit права доступа к которым равны 551.
Поиск SUID файлов
Найти все файлы с установленным SUID.
Найти SGID файлы
Найти все файлы у которых установлен SGID:
Найти только файлы с разрешением на чтение
Найти все файлы, к которым есть права на чтение:
Найти только файлы с разрешением на запись
Найти все файлы, к которым есть права на запись:
Обратите внимание, что в этой и в других командах из данного раздела права на доступ к файлу берутся не относительно текущего пользователя, а относительно владельца. То есть если мы ищем файлы с правами на запись, то имеются ввиду не право текущего пользователя записать в файл, а право владельца записать в файл.
Тем не менее если изменить пользователя, от чьего имени запускается команда, то результаты могут быть совсем другими. К примеру, подсчитаем количество файлов в директории /etc/ на которые есть право записи у владельца, но запустим команду от текущего пользователя и от суперпользователя (с sudo):
Результаты получились различными только из-за того, что у обычного пользователя не хватило прав «заглянуть» в некоторые подпапки и часть файлов не была проверена на соответствие условиям. При использовании sudo были проверены абсолютно все файлы и поэтому результатов получилось больше.
Поиск файлов на которые есть права на запись у кого угодно
Следующая команда ищет файлы с правом на запись у всех. Добавлено уточнение — искать только файлы, это сделано чтобы пропустить символические ссылки:
Также обратите внимание, как обозначено право на запись — используется плюс. Это означает, что могут присутствовать и другие права (например, на чтение и выполнение).
Следовать символическим ссылкам и не выводить сообщения об ошибках
При попытке доступа к файлам и папкам на которые недостаточно прав, выводятся сообщения о том, что доступ отклонён. Чтобы этого избежать, используйте после команды конструкцию 2>/dev/null
Если папка для поиска содержит символические ссылки, то по умолчанию команда find не следует им, что команда find переходила по символическим ссылкам, используйте опцию -L
Следующая команда найдёт в папке /tmp все файлы на которые у кого угодно есть права чтения, при встрече символических ссылок она будет переходить по ним, в случае возникновения проблем с доступом, сообщения об ошибках выводиться не будут:
Найти исполнимые файлы
Найти все исполнимые файлы.
Найти все файлы с доступом 777 и изменить их разрешения (chmod) на 644
Найти все файлы с разрешениями равным 777 и использовать команду chmod для установки разрешений на 644:
Найти директории с разрешением 777 и изменить их разрешения (chmod) на 755
Найти все файлы с разрешениями равным 777 и использовать команду chmod для установки разрешений на 755:
Поиск и удаление единичного файла
Найти единичный файл с именем hackware.txt и удалить его:
Поиск и удаление нескольких файлов
Поиск всех пустых файлов
Для поиска всех пустых файлов по конкретному пути:
Поиск всех пустых директорий
Найти все пустые директории по указанному пути:
Найти все скрытые файлы
Для поиска всех скрытых файлов используйте следующую команду:
Часть 3: Поиск файлов на основе их владельцев и групп
Найти файл на основе имени пользователя
Найти все или один файл с именем hackware.txt в / (корневой) директории принадлежащие пользователю root:
Найти все файлы принадлежащие пользователю
Найти все файлы принадлежащие пользователю mial в директории /home:
Найти все файлы принадлежащие группе
Для поиска всех файлов, принадлежащих группе Developer в директории /home:
Найти определённые файлы, принадлежащие пользователю
Часть 4: Поиск файлов и директорий по времени и дате
Найти файлы, которые были изменены определённое время назад
Чтобы найти все файлы, которые были изменены ровно 50 дней назад:
Найти файлы, к которым был получен доступ определённое время назад
Чтобы найти все файлы, к которым был получен доступ ровно 50 дней назад:
Найти файлы, изменённые в заданном диапазоне дней
Чтобы найти все файлы, которые были модифицированы более 50 дней назад и менее 100 дней назад:
Поиск файлов, чьи свойства недавно менялись
Чтобы найти файлы, свойства которых (права доступа, владелец, группа) были изменены за последний час:
Поиск недавно модифицированных файлов
Чтобы найти файлы, которые были модифицированы за последний час:
Поиск файлов к которым недавно выполнялся доступ
Чтобы найти все файлы, доступ к которым был сделан за последний час:
Часть 5: Поиск файлов и директорий на основе размера
Поиск файлов определённого размера
Чтобы найти все файлы размером ровно 50MB используйте:
Поиск файлов размера в определённом диапазоне
Чтобы найти все файлы, чем размер более 50MB и менее 100MB:
Поиск и удаление файлов определённого размера
Чтобы найти все файлы размером ровно 100MB и удалить их, используйте следующую команду:
Поиск файлов с определённым расширением и определённым размером и их удаление
Часть 6: Поиск нескольких имён файлов (расширений)
Этот раздел посвящён ситуациям, когда нужно одной командой выполнить поиск файлов по нескольким именам или нескольким расширениям.
Объяснение предыдущей команды:
В результате получается следующее:
Если бы скобки не использовались, то по правилам приоритета логических операций получилось бы следующее:
Файловые расширения, поскольку они содержат символы с особым значением для оболочки, нужно поместить в кавычки. По этой же причине нужно экранировать скобки с помощью обратного слэша (\).
Как можно понять из приведённых выше команд, добавляя опцию -o («ИЛИ») можно указать любое количество условий. Помните, что логическая операция «ИЛИ» имеет меньший приоритет перед операцией «И». Для операции «И» не требуется специальная опция (хотя она есть), поскольку она подразумевается по умолчанию.
Каждый пользователь желает быстро и без особых затруднений находить требуемую информацию. Существует большое количество типов файловых менеджеров, которые имеют отличную функциональность. Одним из самых лучших является терминал Linux. Он отличается высокой эффективностью и хорошей гибкостью.
С помощью терминала Linux можно без особого труда найти требуемые файлы не только по имени, но и по дате их обновления. Для поиска еще можно указать содержимое и различные регулярные выражения. Терминалом очень удобно пользоваться, так как с найденными данными сразу же можно осуществлять определенные действия.
Синтаксис
«find»- это одна из самых популярных и особенно важных утилит, которая устанавливается в операционной системе Линукс. Такая команда дает возможность быстро находить различные файлы и каталоги путем использования специальных условий. Она ищет требуемые данные по разрешению, собственнику, группе, объему, типу и иным условиям.
Данная утилита установлена «по умолчанию» в каждом дистрибутиве ОС Linux. Пользователю нет необходимости монтировать на ПК какие-либо дополнительные пакеты. Такая особенность позволяет максимально эффективно пользоваться командными строками.
ВАЖНО! Критерии можно объединять используя операторы.
Примеры
Утилита, которая имеется практически во всех версиях Линукс, дает возможность быстро найти требуемую информацию. Для этих целей предварительно вводятся критерии поиска. Пользоваться командой можно по-разному, так как у нее много опций. Рассмотрим примеры.
Список папок и файлов директории
Чтобы вывести все списки файлов, потребуется набрать название команды без параметров.
Для обнаружения файлов в конкретной директории требуется в терминале набрать название утилиты и путь. Например /var/log
Искать в домашнем каталоге пользователя
Чтобы найти именно те файлы, которые относятся к определённому пользователю, нужно ввести команду
Дата модификации
Чтобы найти документы по дате, необходимо использовать критерии «mtime, atime».
Найдем все файлы в каталоге /home, которые открывались 120 дней назад.
Почти тоже самое будет, если нужно найти документы, которые изменялись 120 дней назад.
Поиск файла в директории с помощью критерия «по имени»
Чтобы найти файл по имени в требуемой директории необходимо использовать опцию «-name».
Она в считанные секунды найдет файл «test.log». Одновременно с этим, будут показаны все данные, имеющие расширение «.log».
Поиск файлов определённого размера
Поиск файлов определённом диапазоне размеров
Если пользователь знает ориентировочный размер документа, критерий также можно указать во время поиска.
Действие
Выполним команду ls в каталоге run, для документов, которые изменялись 150 дней назад. Будем использовать действие «ls».
Запустим утилиту ls, в каталоге home, для файлов больше 5000 байт.
Поиск документов в нескольких директориях
Чтобы выполнить такой поиск, необходимо вводить пути директорий через пробел. Например /var /home.
Она дает возможность найти файл с именем «file.txt» в директориях формата «/var» и «/home».
Без учета регистра, используя критерий «по имени»
Найдем документ test.txt без учета регистра в каталоге /home. Для этого, будем использовать «iname».
В итоге на экране вашего монитора появятся файлы, имеющие название «test.txt». Их может быть более двух.
Поиск файлов, которые отличаются от упомянутых
Зачастую пользователю нужно найти определенные данные, которые отличаются от определённого типа файлов. Для этих целей необходимо использовать оператор «-not» для отрицания.
По большому количеству критериев
Во время установки параметров поиска можно вводить несколько признаков. К примеру, если требуется найти файлы, имеющие расширение «.txt» и «.html», нужно ввести команду
Использование оператора
Допускается одновременное совмещение нескольких критериев. Система обнаружит информацию, которая будет удовлетворять одному из условий. Для этих целей потребуется использование одного из операторов or (или), and (и), not (отрицание не).
Права доступа
Почти тоже самое будет для папок с правами 777.
Поиск документов, у которых есть право на исполнение.
Найдем файлы в каталоге run, у которых есть право читать.
Ищем все скрытые файлы
Для обнаружения скрытых файлов в директории необходимо ввести:
Поиск всех файлов группы
Чтобы найти файлы, которые относятся к определённой группе, необходимо указать аргумент «group».
Существует множество способов применения find. Выше описаны лишь некоторые примеры, которые демонстрируют широкую функциональность утилиты.