ИТ База знаний
Полезно
— Узнать IP — адрес компьютера в интернете
— Онлайн генератор устойчивых паролей
— Онлайн калькулятор подсетей
— Калькулятор инсталляции IP — АТС Asterisk
— Руководство администратора FreePBX на русском языке
— Руководство администратора Cisco UCM/CME на русском языке
— Руководство администратора по Linux/Unix
Навигация
Серверные решения
Телефония
FreePBX и Asterisk
Настройка программных телефонов
Корпоративные сети
Протоколы и стандарты
Популярное и похожее
15 примеров команды PING для диагностики сети
15 примеров CURL в Linux
Руководство по команде grep в Linux
Как сменить mac – адрес в Linux
Как пользоваться vim в Linux
Руководство по OpenSSL: SSL-сертификаты, ключи и CSR
Нужно знать: утилита lsof в Linux
Grandstream HT-818
Еженедельный дайджест
Как найти файл в Linux? Руководство по команде find с примерами
Никто не спрячется
Когда нужно найти какой-нибудь файл или папку в системе Linux в голову сразу приходит команда find. Она проста в использовании и имеет множество разных опций, которые позволяют оптимизировать поиск файлов. Далее приведём несколько примеров использования этой команды.
Поиск папок
Чтобы сделать поиск по папкам команде find нужно передать параметр type d. Таким образом мы скажем команде find вести поиск только по директориям:

Поиск скрытых файлов
Так как скрытые файлы и директории в Linux начинаются с точки, то мы можем задать шаблон поиска так, чтобы команда рекурсивно выводила нам все скрытые файлы и директории. Для этого достаточно ввести следующую команду:
Поиск файлов по размерам
Команда find дает возможность вести поиск файлов размером больше, меньше или равным указанному значению. Чтобы найти файл размером больше 10Мб нужно ввести команду:
Для поиска файлов размером меньше указанного значения или равного ему нужно ввести следующие команды:
Также есть возможность искать файлы размер которых находится в указанном промежутке.
Поиск файлов по списку
Допустим нам нужно найти несколько файлов, указанные в списке, который хранится в виде файла с расширением .txt. Для этого мы можем воспользоваться комбинацией команд find и grep. Чтобы данная команда работала корректно, каждый шаблона поиска в списке должен начинаться с новой строки.
Парметр f переданный команде grep означает файл и даёт нам возможность указать файл с шаблонами для поиска. В результате работы вышеуказанной команды система вернёт нам все файлы, название которых указаны в списке.
Найти файл, которого нет в списке
Так же в системе Linux есть возможность поиска, противоположная указанному выше. То есть мы можем искать файлы, которые не указаны в списке файлов. Для этого команде grep передадим параметр vf, что означает обратное сопоставление и вернет нам файлы, названий которых не найдёт в списке шаблонов.
Указываем максимальную глубину поиска
По умолчанию, команда find ищет файлы во всех директориях и поддиректориях. Допустим, если мы в качестве пути для поиска укажем корневую директорию «/», то система будет искать искомый файл по всему жесткому диску. Мы можем ограничить область поиска командой maxdepth указав ему насколько глубоко нужно искать файл.
Команды указанная выше говорит системе искать файл только в указанной директории. А следующая команда предписывает вести поиск в указанной директории и в одной поддиректори.
Поиск пустых файлов
Команда find также позволяет вести поиск по пустым файлам и директориям. Для этого команде добавляем флаг empty. Следующие две команды позволяют найти пустые файли и папки. Для поиска папок к строке поиске добавляет ключ d:
Так же можно автоматически удалять найденные пустые файлы или папки. Следующая команда найдет и удалит все пустые файлы в указанной папке и всех подпапках:
Поиск самого большого файла или папки
Если нужно быстро определить какой файл или какая папка в системе занимает больше всего места, то команда find с соответствующими ключами позволит нам рекурсивно искать и сортировать файлы/папки по их размеру:
Заметьте, что при поиске мы прибегнули к двум другим удобным инструментам Linux: sort и tail. Sort отсортирует файл по их размеру, а tail покажет самый последний файл в списке, который и будет самым большим файлом/папкой. Мы можем изменить команду так, чтобы она выводила пять самых больших файлов для этого нужно воспользоваться следующей командой:
Также можно вывести файлы с самым меньшим размером. Следующая команда позволит вывести пять самых маленьких по объёму файлов:
Чтобы найти самую большую папку по указанному пути нужно ввести команду указанную ниже:
Поиск файлов с атрибутом setuid
Атрибут setuid файла позволяет обычному пользователю запускать файлы от имени root-а. Такие файлы тоже легко найти с помощью команды find и нескольких параметров. Команда имеет два параметра, которые позволяют искать файлы с конкретными правами: -user и perm. Чтобы найти файлы, который можно запускать от имени root-а можем прописать команду:

На скриншоте мы добавили еще параметр exec чтобы ограничить вывод команды find. Полная команда выглядит так:
Мы можем заменить root любым другим пользователем или просто опустить этот параметр и найти все файлы с правами запуска от имени root-а:
Поиск файлов с атрибутом sgid
Команда поиск файлов с атрибутом sgid почти такая же как и для SUID с той разницей, что вместо 4000 прописываем 2000:
Так же можем найти файлы, которые имеют оба указанных атрибута:
Исключение из вывода файлов и папок, к которым нет доступа
Чтобы вести поиск пользователь должен иметь доступ на чтение в указанной папке и подпапках. Если нет соответствующих прав, то мы получим ошибки как на скриншоте ниже.

Этот случай особо актуален при поиске в корневой директории. Согласитесь сильно засоряет вывод, но этого можно избежать если перенаправить вывод stderr в stdout и передать grep для обработки. Следующей командой мы выведем все результаты работы команды find кроме строк, содержащих слова «Permission denied»^
Поиск файлов изменённых за последние X дней
Чтобы найти файлы, которые были изменены за указанный период времени используется параметр mtime. Ниже приведены несколько примеров для поиска файлов, изменённых за последний 30 дней, больше 30 дней и меньше чем за 30 дней:
Чтобы вывести более детальную информацию о найденных файлах можно указать параметр exec:
Сортировка результатов по времени
При необходимости отсортировать результате по времени можно воспользоваться параметром printf и утилитой sort:
По умолчанию sort упорядочивает файлы от старых к новым. Чтобы указать обратный порядок сортировки достаточно добавить ключ r к команде sort:
Разница между locate и find
В системе Linux есть и другая команда, позволяющая вести поиск файлов locate. Но так как она не имеет таких параметров поиска, как find, она не очень гибка, но достаточно практична.
Утилита locate ведёт поиск по базе, которая содержит все имена файлов, находящихся в системе. Так как команда locate не ищет указанный файл по всей системе, то она намного эффективней утилиты find. Но с другой стороны база данных этой утилиты обновляется раз в день, что не позволяет найти файлы, созданные раньше, чем 24 часов. Базу данных можно вручную обновлять командой updatedb.
Команда locate особенно полезна если нужно вести поиск файла по всему жесткому диску, так как find в этом случае понадобиться больше времени, так как он проходится по всем директориям в реальном времени.
Если же поиск ведётся в папке, где мало файлов, то лучше пользоваться командой find.
Нагрузка CPU командой find
При поиске по большим каталогам команда find может требовать больше ресурсов. Это должно по своей сути позволять более важным системным процессам иметь приоритет, но если необходимо, чтобы команда find употребляла меньше ресурсов машины, можно использовать команду ionice или nice.
Просмотреть состояние процессора можно командой:
Чтобы понизить приоритет Ввода/Вывода для команды find, можно ввести следующую команду:
А чтобы понизить приоритет использования CPU, нужно ввести следующую команду:
Или можно эти две команды комбинировать, чтобы обеспечить низкий приоритет как для Ввода/Вывода, так и для CPU.
Было полезно?
Почему?
😪 Мы тщательно прорабатываем каждый фидбек и отвечаем по итогам анализа. Напишите, пожалуйста, как мы сможем улучшить эту статью.
😍 Полезные IT – статьи от экспертов раз в неделю у вас в почте. Укажите свою дату рождения и мы не забудем поздравить вас.
Поиск файла в Linux
В операционных системах семейства Linux все объекты ОС: и данные, и управляющие элементы — являются файлами в файловой системе. Поэтому поиск файлов становится очень важной задачей. И если опытные пользователи уже знают, что и где находится, то для новичков будет очень полезным узнать, как найти местоположение того или иного файла, будь то программа, изображение или документ.
В Linux существует множество способов поиска, как в графическом интерфейсе, так и через командную строку. В сегодняшней статье мы разберём, как выполнять поиск файла в Linux с помощью всех этих средств. Но начнём с программ, у которых есть графический интерфейс.
Поиск файла в Linux через графический интерфейс
1. Главное меню системы
Главное меню операционной системы позволяет, как правило, не только запускать программы, но и искать их, а также искать файлы. Такая возможность есть как в Gnome, так и в KDE. В главном меню Gnome вы можете ввести нужную фразу для поиска:
Но у такого поиска есть значительный недостаток. Он рассчитан больше на поиск программ, а не на поиск файлов, поэтому ищет только в домашней папке и не углубляется далеко в файловую систему.
2. Файловые менеджеры
Большинство файловых менеджеров тоже предоставляют возможности поиска файлов, в том числе Dolphin и Nautilus. Здесь вы можете выбрать папку, в которой будет выполняться поиск, а также настроить дополнительные параметры поиска. В Nautilus для запуска поиска вам достаточно нажать кнопку со значком лупы, а потом ввести данные в строку поиска. Например, найдём все фото, сделанные 18 ноября.
Открыв стрелочку дополнительных параметров можно выбрать период, за который был создан интересующий нас документ, а также тип документа.
В качестве поискового запроса можно использовать символы подстановки: ? и *. Но для более точного поиска придётся использовать сторонние программы.
3. Gnome Search
Утилита Gnome Search по умолчанию поставляется не всегда, но вы можете установить её из центра приложений или через официальные репозитории. Она предоставляет такие же возможности, как и файловый менеджер, плюс здесь можно искать по содержимому файлов, что иногда очень удобно.
4. SearchMonkey
Следующая программа в нашем списке — SearchMonkey. Она позволяет искать файлы по регулярным выражениям. Здесь тоже можно выполнять поиск файла, как по имени, так и по содержимому фала, можно выбрать диапазон дат и так далее. Но основное преимущество этой программы — возможность везде использовать регулярные выражения.
5. Recoll
Если вам приходится работать с большой библиотекой текстовой информации и искать данные по содержимому файла, то вам будет полезна утилита Recoll. Это полноценный поисковый движок для поиска документов. Установить программу можно из официальных репозиториев:
sudo apt install recoll
Сразу же после запуска она предложит вам создать индекс документов, которые есть в вашем домашнем каталоге.
И только после создания индекса вы сможете выполнять по нему поиск. Далее, вам будет достаточно ввести запрос, например Wi-Fi, и вы увидите все файлы, которые содержат это слово с примерами вхождений, отсортированные по релевантности:
Для работы с большим количеством текстовых данных это может быть очень удобно. Программа понимает множество офисных форматов, среди которых pdf, djvu, doc, docx, odf, а также умеет находить такие файлы в архивах.
Поиск файлов в Linux через терминал
Если графические утилиты рассчитаны на работу обычного пользователя и поиск в домашней папке, то консольные программы предоставляют более гибкие возможности поиск для всех файлов, включая системные и виртуальные.
1. find
Самая часто используемая команда поиска файла в Linux на данный момент — это find. Она имеет множество возможностей: вы можете искать файлы по имени, дате изменения, создания, использовать регулярные выражения и маски, выполнять определённые действия для найденных файлов, настраивать глубину поиска и многое другое. Например, найдем все файлы, которые начинаются на «Снимок» в папке
/Изображения -iname «Снимок*»
Более подробную информацию об этой команде читайте в статье команда find.
2. locate
Команда locate считается устаревшей и уже была удалена из многих дистрибутивов. Она выполняет поиск не в реальном времени, как find, а по ранее созданной базе файлов, но она делает только поиск файла по имени Linux. Вы вводите слово, которое вас интересует, и утилита выдаёт все известные ей файлы, имя которых содержит такое слово. Возможно использовать регулярные выражения. Например, найдем все файлы, в имени которых содержится passwd:
Обратите внимание, что если файл был добавлен после создания базы, то он найден не будет.
3. grep
Утилита grep позволяет не только фильтровать вывод других команд, но и искать по содержимому файловой системы. Для этого достаточно использовать опцию -r и указать папку, в которой надо искать текст. Например, найдём все файлы в /etc/, которые содержат строчку error_reporting:
sudo grep -r «error_reporting» /etc/
С помощью grep очень удобно искать, где находится нужная конфигурация или же проверять, не содержат ли файлы с кодом чего-нибудь подозрительного. Подробнее про использование grep читайте в статье поиск текста в файлах Linux.
4. whereis
Утилита whereis достаточно простая и решает только одну задачу. Она показывает, где находится исполняемый файл, переданной ей программы. Например, если мы хотим узнать, где лежит grep, достаточно выполнить:
Выводы
В этой статье мы разобрали, как выполнить поиск файла в Linux различными способами, начиная от графического интерфейса и заканчивая терминалом. Как видите, здесь есть множество вариантов, которые позволят вам решить любые задачи по поиску файлов. Возможно, вам также будет интересна статья о том, как узнать pid процесса в Linux, который использует файл, порт или изменяет данные.
Нет похожих записей
Оцените статью:
Об авторе
Основатель и администратор сайта losst.ru, увлекаюсь открытым программным обеспечением и операционной системой Linux. В качестве основной ОС сейчас использую Ubuntu. Кроме Linux интересуюсь всем, что связано с информационными технологиями и современной наукой.
16 комментариев
Поправка. Опция -r в grep это рекурсивный поиск. А поиском по содержимому grep занимается и без опций.
Я — программист (-хренов). Пишу проги для микроконтроллеров и для компа. Очень часто после компиляции проекта, состоящего из многих файлов, компилятор выдаёт ошибки. Иногда приходится искать по проекту использование (вызовы) той или иной функции или какие-то другие вещи. Поэтому я интенсивно пользуюсь утилитой grep.
Набрать четыре буквы и к ним еще несколько параметров — это не такая уж большая работа и не такая катастрофическая потеря времени. По сути (умеючи) всё осуществляется одним взмахом руки над клавиатурой.
grep -n lcd_init *.c # Поиск в исходных файлах проекта, где вызывается инициализация дисплея. Дополнительно к указании имени файла, опция -n также выводит номер строки.
grep -nr post_message *.[ch] # Поиск по всему проекту и его директориям (-r — флаг рекурсивности просмотра поддиректориев) во всех исходных и хэдерных файлах.
grep -ni led *.c # опция -i заставляет игнорировать регистр буква искомого слова. В результате будут найдены все led, Led, LED, LED_ON, LED_OFF и так далее.
Кроме того, вывод команды grep можно «подкрасить». У меня Debian. А у него в домашнем директории пользователя в файле .bashrc имеется 82-ая строка вот с таким содержанием:
alias grep=’grep —color=auto’
Эту строку нужно раскомментировать и перезапустить сессию пользователя.
(Можно очень много интересного написать по работе в Линуксе и можно дать много полезных советов. Линукс огромен, как вселенная! Обилие информации не приводит к увеличению скорости освоения. Вы же не наедаетесь за один раз и на всю неделю. Вы едите каждый день, но по немного. Вы каждую неделю тренируетесь в спортзале или выполняете какие-то силовые нагрузки периодически. Но вы не рвете жо и не губите своё здоровье, как «последний раз». Так и с освоением Линукса — не нужны не авралы, а нужно методичное освоение. Мудрость гласит — «Нет! Мы медленно спустимся в долину и возьмём всё стадо.» Успехов вам!)
Тогда уж alias добавить в /etc/bash.bashrc, чтоб и для root-а было цветно 😉
А зоодно обратите внимание, сколько раз Вы ткнули в буковку «n», не проще так: alias grep=’grep —color=auto -n’
1. А зачем? У root-а совсем иные задачи. Я под root-ом не имею привычки работать над проектами. Root предназначен совсем-совсем для иных целей. Это ж не Винда!
2. Ага. Можно и так. Вроде даже когда-то так тоже делал. А в целом, на брать дополнительно пару символов «-n» абсолютно не напрягает (руки-то не на мышке, а на клаве). Ну и есть волшебная клавиша «Tab», и история команд.
В общем, кому как нравится. Мне нравится так, и кроме того, я уже привык делать именно так. Никого не агитирую делать именно так, как я делаю. Просто предложил свой способ. А каждый сам найдёт для себя единственный удобный для него способ. Ага.
Ну, раз уж про цвет, то ещё чуток offtop-а: gcc у меня тоже цветной 😉 более удобочитаемый вывод 🙂
P.S.: прошу прощения за описочку: зоодно -> заодно 🙂
Ага. Я тоже «подкрасил».
Вот только все возможности в одну статью сваливать я подумал, что это не хорошо. Ну раз уж Вы затронули и этот вопрос, то добавлю.
Строки 86-87 в том же файле:
# colored GCC warnings and errors
export GCC_COLORS=’error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01′
Согласен — дело вкуса, но можно и разнообразить: export GCC_COLORS=’error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01;34:quote=33′
Иногда приходится искать по проекту использование (вызовы) той или иной функции или какие-то другие вещи. Поэтому я интенсивно пользуюсь утилитой grep.
Это потому, Александр Антонович, что вам не хватает внутренней дисциплины и привычки комментировать свой код. Определили функцию в каком-то файле, сделали вызов функции в другом файле, напишите в файле с определением функции соответствующий комментарий с адресом файла, где есть вызов, комментарии для этого и нужны, чтобы потом не делать судорожные поиски и не блукать в трёх соснах под солнцем, но во тьме. Вы даже представить себе не можете, как облегчите свою жизнь в будущем, потратив 3 секунды на полезный комментарий. :))) При этом приставка к слову «программист», которой вы себя обзываете, сама отпадёт. Ни можно так про себя! ;)) Вас молодёжь читает. Пример ещё брать будет.
Ну и для описанного вами случая некоторые программистские IDE имеют соответствующие специализированные инструменты для поиска по проекту. Иногда это бывает удобней чем grep, хотя grep могуч конечно.
Всё, что Вы говорите — всё верно!
К сожалению, мои проекты довольно-таки большие. Проект, над которым я сейчас тружусь, насчитывают нескольку десятков файлов, в общей сложности чуть менее 10 тысяч строк. Хозяйство очень большое. Кроме того, это — разработка. Постоянно что-то меняется, постоянно что-то куда-то переносится.
Ну, например, в схеме используется LCD (OLED) индикатор, микросхема Zig-Bee и вокодер. У всех у них интерфейс SPI. Но у микроконтроллера, который заложен в изделии, только два SPI. Выход простой — нужно просто объединить два устройства на одном интерфейсе. Я посчитал, что радиоканал из них самый быстрый, и посадил его на один SPI, а LCD и вокодер завёл на другой SPI.
Оказалось, не угадал!
Оказалось, что Zig-Bee может ждать дольше обработки (после того, как микроконтроллер (МК) получит от неё прерывание), чем вокодер. Ну, LCD — это товарищ вообще не принципиальный, но у него тоже есть неприятное свойство. Он — графический. А это значит, что вывод информации для подновления изображения на нём потребует значительно больше времени, чем если бы он был символьным. Ну, в общем, вывод небольшого кусочка может занять 1-2 миллисекунды. Если МК начал работать с LCD, то ему не желательно прерваться на обработку вокодера, так как придётся заново выводить этот кусок изображения. С другой стороны, для вокодера 1-2 мс — это существенное время, которое может нарушить его работу.
В общем, пришлось перемещать LCD от вокодера на радиоканал.
Простой (казалось бы!) вопрос — в каком файле (модуле) должна осуществляться инициализация интерфейса SPI? Ну тот SPI, который работает на одно устройство, — там понятно — там можно проинициализировать его и в самом модуле устройства (в драйвере этого устройства). Например, радиоканал сидел на отдельном SPI, значит, можно SPI можно не выделять в отдельный файл, а объединить его с драйвером радиоканала. А, вот, что делать с вокодером и LCD?
Пришлось создавать три модуля драйверов: один для LCD, другой — для вокодера, третий — для их совместно используемого SPI.
Но это ещё ягодки! Потом, когда поднялся вопрос экономии питания, посыпались ягодки. Оказалось, что вокодер даже в режиме сна жрёт довольно-таки много. Пришлось отказаться от этого режима, а тупо отрубать ему питание. Получилось. Но возникла другая проблема.
По логике работы устройства возникают ситуации, когда LCD работает с выключенным вокодером. Но вокодер (собака!), будучи вообще обесточенным, умудряется получить питание и работать через сигнальные цепи, которые являются общими для LCD и вокодера.
Всё бы ничего, но оказалось, что и радиоканал тоже способен нормально запитываться от сигнальных цепей. По идее нужно менять МК на другой, у которого три SPI.
Добряк, я не прошу Вас вникать в описанную проблему. Я это всё не поленился написать для Вас, что бы развеять Ваше чувство, что чужую будку, руками разведу. Пожалуйста, не судите людей по себе. Проекты (программы) бывают чрезвычайно разные. Со стороны всегда кажется — что там тупить-то!













