Поиск файлов в Linux: шпаргалка по find, locate и grep

Полное руководство по поиску файлов в Linux. Команды find, locate, grep для поиска по имени, содержимому, размеру. Wildcards, регулярные выражения, практические примеры для Astra Linux и других дистрибутивов

Вы когда-нибудь теряли файл в Linux? Знаете, что он где-то есть, но где именно — непонятно?

Или вам нужно найти все файлы, содержащие определённый текст? Или все большие файлы, которые жрут место на диске?

В Linux для этого есть мощные инструменты: find, locate, grep. Но у новичков они вызывают ступор: «Какую команду использовать? Какие ключи? Почему не работает?»

Эта статья для тех, кто:

  • только начинает работать с Linux (Ubuntu, Astra Linux, Debian)
  • ищет файл и не знает, с чего начать
  • хочет понять разницу между find, locate и grep
  • нуждается в готовых примерах команд для копирования

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

Два типа поиска: динамический и статический

Прежде чем копать в команды, важно понять: поиск в Linux бывает двух типов.

Динамический поиск (поиск в реальном времени)

Что это: Система сканирует файловую систему прямо сейчас, в момент выполнения команды.

Команды:

  • ls — простой вывод списка файлов
  • find — мощный поиск с фильтрами
  • tree — древовидная структура каталогов

Плюсы: Всегда актуальный результат (ищет по текущему состоянию системы).

Минусы: Медленно, особенно если ищете по всей системе (сканирует каждый каталог).

Статический поиск (поиск по базе данных)

Что это: Система использует заранее составленную базу данных файлов (индекс).

Команды:

Плюсы: Очень быстро (поиск по индексу, а не по диску).

Минусы: Может быть неактуальным, если база данных не обновлена.

Когда что использовать:

Ситуация Команда
Нужен точный, актуальный результат 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 — это не сложно, когда понимаешь инструменты.

Три кита поиска:

  1. find — мощный, гибкий, медленный (используйте для точного поиска)
  2. locate — быстрый, простой, может быть неактуальным (используйте для быстрого поиска по имени)
  3. grep — поиск текста внутри файлов (незаменим для поиска по содержимому)

Золотые правила:

  • ✅ Используйте кавычки в масках для find
  • ✅ Обновляйте базу locate после изменений в системе
  • ✅ Перенаправляйте ошибки в /dev/null для чистого вывода
  • ✅ Комбинируйте команды для сложных задач

Универсальный алгоритм поиска:

# 1. Быстрый поиск по имени
locate -i имя_файла

# 2. Если не нашли или нужны фильтры
find / -name "имя" 2>/dev/null

# 3. Если ищете текст внутри файлов
grep -r "текст" /путь

# 4. Если лень работать в консоли
catfish

Сохраните эту статью в закладки. В следующий раз, когда потеряете файл в Linux, вы будете знать, что делать.

Практикуйтесь, экспериментируйте, и скоро эти команды станут частью вашей мышечной памяти. Удачи!

over_dude
Author: over_dude

Поделитесь:

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Прокрутить вверх