Вы когда-нибудь теряли файл в Linux? Знаете, что он где-то есть, но где именно — непонятно?
Или вам нужно найти все файлы, содержащие определённый текст? Или все большие файлы, которые жрут место на диске?
В Linux для этого есть мощные инструменты: find, locate, grep. Но у новичков они вызывают ступор: «Какую команду использовать? Какие ключи? Почему не работает?»
Эта статья для тех, кто:
- только начинает работать с Linux (Ubuntu, Astra Linux, Debian)
- ищет файл и не знает, с чего начать
- хочет понять разницу между find, locate и grep
- нуждается в готовых примерах команд для копирования
Я объясню простым языком, без академической воды. С примерами из реальной практики. С командами, которые можно скопировать и запустить прямо сейчас.
Два типа поиска: динамический и статический
Прежде чем копать в команды, важно понять: поиск в Linux бывает двух типов.
Динамический поиск (поиск в реальном времени)
Что это: Система сканирует файловую систему прямо сейчас, в момент выполнения команды.
Команды:
ls— простой вывод списка файловfind— мощный поиск с фильтрамиtree— древовидная структура каталогов
Плюсы: Всегда актуальный результат (ищет по текущему состоянию системы).
Минусы: Медленно, особенно если ищете по всей системе (сканирует каждый каталог).
Статический поиск (поиск по базе данных)
Что это: Система использует заранее составленную базу данных файлов (индекс).
Команды:
locate— быстрый поиск по имени файлаCatfish— графическая утилита (аналог Spotlight в macOS)
Плюсы: Очень быстро (поиск по индексу, а не по диску).
Минусы: Может быть неактуальным, если база данных не обновлена.
Когда что использовать:
| Ситуация | Команда |
|---|---|
| Нужен точный, актуальный результат | find |
| Быстро найти файл по имени | locate |
| Найти текст внутри файлов | grep |
| Найти большие файлы | find -size |
Wildcards: маски файлов в Linux
Перед тем как начать искать, нужно понять wildcards (подстановочные знаки). Это маски, которые работают во всех командах Linux.
Основные wildcards
| Символ | Значение | Пример |
|---|---|---|
* |
Любое количество символов (включая 0) | *.txt — все файлы с расширением .txt |
? |
Ровно один любой символ | file?.txt — file1.txt, fileA.txt |
[abc] |
Один символ из перечисленных | [abc]*.txt — файлы, начинающиеся с a, b или c |
[!abc] |
Один символ, НЕ из перечисленных | [!a]*.txt — файлы, НЕ начинающиеся с a |
[0-9] |
Один символ из диапазона | file[0-9].txt — file0.txt до file9.txt |
Примеры масок с объяснением
Маска: *report*.txt
Что подходит:
- ✅
myreport.txt(звёздочка = «my», вторая звёздочка = пусто) - ✅
report32.txt(первая звёздочка = пусто, вторая = «32») - ❌
report.csv(расширение не .txt) - ❌
Report.txt(регистр учитывается!)
Маска: ???log*
Что подходит:
- ✅
syslog.txt(три символа «sys» + «log» + всё остальное) - ✅
errlog(три символа «err» + «log») - ❌
mylogfile(четыре символа перед «log») - ❌
2log.txt(меньше трёх символов)
Маска: dump[0-9][a-f].bin
Что подходит:
- ✅
dump3c.bin(цифра «3», буква из диапазона a-f) - ❌
dump32.bin(вторая цифра, а не буква) - ❌
dump.bin(нет двух символов)
Маска: *img[!0-9]*
Что подходит:
- ✅
myimg.png(после «img» идёт точка, не цифра) - ✅
img_test.jpg(после «img» идёт подчёркивание) - ❌
img32.png(после «img» идёт цифра «3»)
Команда ls: поиск файлов в текущей папке
Базовый синтаксис:
ls [маска]
Практические примеры
Пример 1: Найти все файлы, начинающиеся с «web»
ls web*
Результат: web-browser.png, web-cache.xml, webserver.conf
Пример 2: Файлы, начинающиеся с T, содержащие дефис, затем 3 символа
ls T*-???.png
Результат: Telegram-kde.png
Пример 3: Все файлы, начинающиеся с H или U
ls [HU]*
Результат: Hardware.txt, User.conf, USB-devices.log
Пример 4: Все файлы, НЕ начинающиеся с буквы A
# Для bash (большинство дистрибутивов) ls [!a]* # Для zsh (некоторые дистрибутивы) ls [^a]*
Важно: ls ищет только в текущей директории. Для поиска в подпапках используйте find.
Brace Expansion: фигурные скобки для вариантов
Что это: Способ перечислить несколько вариантов в одной команде.
Синтаксис:
команда {вариант1,вариант2,вариант3}
Пример 1: Создать несколько файлов сразу
touch file{1,2,3}.txt
# Создаст: file1.txt, file2.txt, file3.txt
Пример 2: Скопировать файлы в несколько папок
cp document.pdf {/tmp,/home/user/backup,/mnt/usb}
# Скопирует document.pdf в три папки
Пример 3: Диапазон чисел
touch file{1..10}.txt
# Создаст: file1.txt, file2.txt, ... file10.txt
Пример 4: Комбинация с wildcards
ls *.{txt,pdf,doc}
# Найдёт все файлы с расширениями txt, pdf, doc
Важно: Brace expansion — это фича shell (bash/zsh), а не часть wildcards. Работает не во всех командах.
Команда find: мощный поиск файлов в Linux
Базовый синтаксис:
find [путь] [условия] [действия]
Поиск по имени файла
Ключ: -name (с учётом регистра) или -iname (без учёта регистра)
Пример 1: Найти файл xorg.conf в корне системы
# С учётом регистра find / -name xorg.conf # Без учёта регистра (найдёт XORG.conf, Xorg.Conf и т.д.) find / -iname xorg.conf
Пример 2: Найти все файлы .txt в домашней папке
find ~ -name "*.txt"
Важно: Маску в кавычки! Иначе shell подставит файлы из текущей папки до выполнения find.
Пример 3: Найти файлы, начинающиеся с «log»
find /var/log -name "log*"
Решение проблемы с «Permission denied»
При поиске по всей системе часто появляется куча ошибок «Permission denied» (нет доступа).
Решение 1: Запустить от root
sudo find / -iname xorg.conf
Решение 2: Перенаправить ошибки в /dev/null
find / -iname xorg.conf 2>/dev/null
Что происходит:
2— номер потока stderr (поток ошибок)>— перенаправление/dev/null— «чёрная дыра» Linux (всё, что туда попадает, исчезает)
Результат: Ошибки не выводятся, видите только найденные файлы.
Поиск по типу файла
Ключ: -type
| Тип | Значение |
|---|---|
f |
Обычный файл |
d |
Директория (папка) |
l |
Символическая ссылка |
b |
Блочное устройство |
c |
Символьное устройство |
Пример: Найти только папки с именем «backup«
find / -type d -name "backup" 2>/dev/null
Поиск по размеру файла (большие файлы)
Ключ: -size
| Суффикс | Размер |
|---|---|
c |
Байты |
k |
Килобайты |
M |
Мегабайты |
G |
Гигабайты |
Пример 1: Найти файлы больше 100 МБ
find / -type f -size +100M 2>/dev/null
Пример 2: Найти файлы меньше 1 КБ
find ~ -type f -size -1k
Пример 3: Найти файлы ровно 512 байт
find /tmp -type f -size 512c
Практический кейс: Найти большие файлы, которые занимают место
# Найти 10 самых больших файлов в домашней папке
find ~ -type f -exec du -h {} + | sort -rh | head -10
Поиск по дате изменения
Ключи:
-mtime— дата изменения (в днях)-atime— дата последнего доступа-ctime— дата изменения метаданных
Пример 1: Файлы, изменённые за последние 7 дней
find /var/log -type f -mtime -7
Пример 2: Файлы, старше 30 дней
find /tmp -type f -mtime +30
Выполнение команд над найденными файлами
Ключ: -exec
Синтаксис:
find [путь] [условия] -exec команда {} \;
{} — заменяется на путь к найденному файлу
Пример 1: Удалить все файлы .tmp
find /tmp -name "*.tmp" -exec rm {} \;
Пример 2: Изменить права на все .sh файлы
find ~ -name "*.sh" -exec chmod +x {} \;
Пример 3: Показать размер каждого найденного файла
find /var -name "*.log" -exec ls -lh {} \;
Команда locate: быстрый поиск по базе данных
Базовый синтаксис:
locate [опции] шаблон
Установка locate
По умолчанию locate не установлен в большинстве дистрибутивов.
Ubuntu / Debian / Astra Linux:
sudo apt install mlocate
CentOS / RHEL / Fedora:
sudo yum install mlocate
Arch Linux:
sudo pacman -S mlocate
Создание базы данных
После установки нужно создать базу данных файлов:
sudo updatedb
Важно:
- Первый раз может занять несколько минут
- База данных НЕ обновляется автоматически (нужно периодически запускать
updatedb) - Можно автоматизировать через cron (рассмотрим в следующих статьях)
Основные опции locate
| Опция | Описание |
|---|---|
-i |
Игнорировать регистр (case-insensitive) |
-c |
Показать количество совпадений |
-r |
Использовать регулярные выражения |
-l N |
Показать только первые N результатов |
Практические примеры locate
Пример 1: Найти файл info.csv
locate info.csv
Пример 2: Найти xorg.conf (без учёта регистра)
locate -i xorg.conf
Найдёт: xorg.conf, XORG.CONF, Xorg.Conf
Пример 3: Найти все файлы, содержащие слово «zenmap»
locate -i zenmap
Результат:
/home/user/.local/share/zenmap/icon.png /usr/bin/zenmap /usr/lib/python3/dist-packages/zenmap /usr/share/applications/zenmap.desktop
Пример 4: Посчитать, сколько файлов содержат «log»
locate -c log
Результат: 1542 (количество найденных файлов)
Важные отличия locate от find
| Параметр | find | locate |
|---|---|---|
| Скорость | Медленно | Быстро |
| Актуальность | 100% актуально | Зависит от обновления БД |
| Wildcards | Поддерживает | НЕ поддерживает (*) |
| Фильтры | Размер, дата, тип | Только имя |
| Использование | Точный поиск | Быстрый поиск по имени |
(*) locate поддерживает регулярные выражения через -r, но НЕ поддерживает обычные wildcards (*,?,[]).
Команда grep: поиск текста в файлах
Базовый синтаксис:
grep [опции] "шаблон" файлы
Основные опции grep
| Опция | Описание |
|---|---|
-i |
Игнорировать регистр |
-r или -R |
Рекурсивный поиск в подпапках |
-n |
Показать номера строк |
-l |
Показать только имена файлов (не содержимое) |
-c |
Показать количество совпадений |
-v |
Инвертировать поиск (НЕ содержащие) |
-w |
Искать целое слово |
Практические примеры grep
Пример 1: Найти строку «error» в файле
grep "error" /var/log/syslog
Пример 2: Найти «error» без учёта регистра, с номерами строк
grep -in "error" /var/log/syslog
Результат:
15: ERROR: Failed to connect 42: Error loading module 98: System error occurred
Пример 3: Найти слово «test» во всех файлах текущей папки
grep "test" *
Пример 4: Рекурсивный поиск «TODO» во всех .py файлах
grep -r "TODO" --include="*.py" ~/projects
Пример 5: Найти IP-адреса в конфиге
grep -E "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}" /etc/network/interfaces
Пример 6: Найти файлы, НЕ содержащие «DEBUG»
grep -L "DEBUG" /var/log/*.log
Комбинация grep и find
Задача: Найти все файлы .conf, содержащие слово «server»
find /etc -name "*.conf" -exec grep -l "server" {} \;
Альтернатива (проще):
grep -r "server" /etc --include="*.conf"
Catfish: графический поиск для тех, кто не любит консоль
Что это: Графическая утилита для поиска файлов (аналог Spotlight в macOS).
Установка:
# Ubuntu / Debian / Astra Linux sudo apt install catfish # Fedora sudo dnf install catfish # Arch Linux sudo pacman -S catfish
Запуск:
catfish
Или через меню приложений: Поиск → Catfish
Особенности:
- ✅ Простой графический интерфейс
- ✅ Поддержка фильтров (размер, дата, тип)
- ✅ Интеграция с файловым менеджером
- ✅ Использует базу данных (быстро)
- ❌ Менее гибкий, чем команды в терминале
Частые ошибки при поиске файлов
Ошибка 1: Забыли кавычки в find
Неправильно:
find ~ -name *.txt
Что произойдёт: Shell подставит файлы из текущей папки ДО выполнения find. Результат будет неожиданным.
Правильно:
find ~ -name "*.txt"
Ошибка 2: locate не находит новый файл
Проблема: Создали файл, но locate его не видит.
Причина: База данных не обновлена.
Решение:
sudo updatedb locate новый_файл
Ошибка 3: grep не ищет в подпапках
Проблема: Команда grep "текст" * ищет только в текущей папке.
Решение: Добавить -r
grep -r "текст" /путь/к/папке
Ошибка 4: Permission denied засоряет вывод
Проблема: При поиске по всей системе куча ошибок доступа.
Решение: Перенаправить ошибки
find / -name "файл" 2>/dev/null
Ошибка 5: Путают [abc] и {a,b,c}
Wildcard: [abc] — один символ из перечисленных
ls [abc]*.txt # Найдёт: a123.txt, b456.txt, cfile.txt
Brace expansion: {a,b,c} — варианты слов
ls {apple,banana,cherry}.txt
# Найдёт: apple.txt, banana.txt, cherry.txt
Шпаргалка: какую команду использовать
| Задача | Команда |
|---|---|
| Быстро найти файл по имени | locate -i имя_файла |
| Найти файл с точным именем | find / -name "имя" 2>/dev/null |
| Найти большие файлы (>100МБ) | find / -type f -size +100M |
| Найти файлы старше 30 дней | find /tmp -mtime +30 |
| Найти текст в файлах | grep -r "текст" /путь |
| Найти строку в одном файле | grep "текст" файл |
| Найти файлы по маске в папке | ls *.txt |
| Графический поиск | catfish |
FAQ: Частые вопросы
В чём разница между find и locate?
find — ищет в реальном времени (медленно, но актуально).
locate — ищет по базе данных (быстро, но может быть неактуально).
Используйте locate для быстрого поиска по имени, find — для точного поиска с фильтрами.
Как найти файл в Astra Linux?
Astra Linux основан на Debian, поэтому все команды работают одинаково:
# Установить locate sudo apt install mlocate # Создать базу данных sudo updatedb # Искать locate имя_файла
Как искать без учёта регистра?
Используйте ключ -i (ignorecase):
# find find / -iname "файл" 2>/dev/null # locate locate -i файл # grep grep -i "текст" файл
Как найти все файлы с расширением .log?
# В текущей папке ls *.log # Во всей системе (find) find / -name "*.log" 2>/dev/null # Во всей системе (locate, быстрее) locate -i .log
Как найти самые большие файлы на диске?
# Найти файлы больше 1ГБ
find / -type f -size +1G 2>/dev/null
# Топ-10 самых больших файлов
find / -type f -exec du -h {} + 2>/dev/null | sort -rh | head -10
Почему locate не находит только что созданный файл?
База данных не обновлена. Выполните:
sudo updatedb
Как искать текст во всех файлах в папке?
# Рекурсивно во всех файлах grep -r "искомый_текст" /путь/к/папке # Только в файлах .txt grep -r "текст" /путь --include="*.txt" # С номерами строк grep -rn "текст" /путь
Заключение
Поиск файлов в Linux — это не сложно, когда понимаешь инструменты.
Три кита поиска:
- find — мощный, гибкий, медленный (используйте для точного поиска)
- locate — быстрый, простой, может быть неактуальным (используйте для быстрого поиска по имени)
- grep — поиск текста внутри файлов (незаменим для поиска по содержимому)
Золотые правила:
- ✅ Используйте кавычки в масках для
find - ✅ Обновляйте базу
locateпосле изменений в системе - ✅ Перенаправляйте ошибки в
/dev/nullдля чистого вывода - ✅ Комбинируйте команды для сложных задач
Универсальный алгоритм поиска:
# 1. Быстрый поиск по имени locate -i имя_файла # 2. Если не нашли или нужны фильтры find / -name "имя" 2>/dev/null # 3. Если ищете текст внутри файлов grep -r "текст" /путь # 4. Если лень работать в консоли catfish
Сохраните эту статью в закладки. В следующий раз, когда потеряете файл в Linux, вы будете знать, что делать.
Практикуйтесь, экспериментируйте, и скоро эти команды станут частью вашей мышечной памяти. Удачи!




