Команда find в Linux: поиск файлов

LinuxLinuxBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

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


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/FileandDirectoryManagementGroup(["File and Directory Management"]) linux/FileandDirectoryManagementGroup -.-> linux/cd("Directory Changing") linux/FileandDirectoryManagementGroup -.-> linux/find("File Searching") subgraph Lab Skills linux/cd -.-> lab-219191{{"Команда find в Linux: поиск файлов"}} linux/find -.-> lab-219191{{"Команда find в Linux: поиск файлов"}} end

Начало работы с командой find

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

Сначала перейдем в штаб-квартиру нашего расследования. В Linux для перехода между каталогами используется команда cd. Введите следующую команду и нажмите Enter:

cd /home/labex/project

Эта команда перемещает вас в каталог /home/labex/project, который станет нашим рабочим каталогом для данной лабораторной работы. Если вы захотите узнать, где вы находитесь в любой момент времени, вы можете использовать команду pwd для вывода текущего рабочего каталога.

Теперь используем команду find для поиска файла с именем "clue.txt":

find. -name "clue.txt"

Разберем эту команду на составляющие:

  • find - это команда, которую мы используем.
  • . сообщает команде find начинать поиск с текущего каталога.
  • -name "clue.txt" сообщает команде find искать файл с точным именем "clue.txt".

После выполнения этой команды вы должны увидеть такой вывод:

./evidence/clue.txt

Этот вывод говорит нам, что файл с именем "clue.txt" был найден в подкаталоге "evidence" текущего расположения. Символы ./ в начале пути означают "начиная с текущего каталога".

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

Поиск нескольких типов файлов

По мере углубления в расследование нам нужно найти несколько типов файлов- улики. На этом этапе мы научимся использовать команду find с подстановочными знаками для поиска файлов с разными расширениями.

Используем команду find для поиска файлов с расширениями.txt и.log:

find. -name "*.txt" -o -name "*.log"

Разберем эту новую, более сложную команду:

  • find. - то же, что и раньше, сообщает команде find начинать поиск с текущего каталога.
  • -name "*.txt" ищет любой файл, оканчивающийся на.txt.
  • -o означает "или" в синтаксисе команды find.
  • -name "*.log" ищет любой файл, оканчивающийся на.log.

Знак * - это подстановочный символ, который соответствует любому количеству символов. Таким образом, *.txt соответствует любому файлу, оканчивающемуся на.txt, независимо от того, что стоит перед этим расширением. Это очень полезно, когда вы не уверены в точном имени файла, но знаете его расширение.

После выполнения этой команды вы должны увидеть вывод, похожий на следующий:

./evidence/clue.txt
./evidence/new_lead.txt
./logs/system.log
./logs/recent_activity.log
./notes/interview.txt

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

Если вы видите другие файлы или меньшее количество файлов, не беспокойтесь. Главное, чтобы в выводе были как.txt, так и.log файлы. Фактические файлы могут отличаться в зависимости от вашей конкретной настройки.

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

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

Найдем все файлы размером более 1 мегабайта:

find. -type f -size +1M

Разберем эту команду:

  • find. - знакомая нам точка начала.
  • -type f сообщает команде find искать только обычные файлы (не каталоги или другие специальные типы).
  • -size +1M указывает, что мы ищем файлы размером более 1 мегабайта.

Знак + перед 1M означает "больше чем". Если бы мы хотели найти файлы размером ровно 1 мегабайт, мы бы использовали 1M, а для файлов размером менее 1 мегабайта - -1M. Вы также можете использовать другие единицы измерения размера, например, k для килобайтов или G для гигабайтов.

После выполнения этой команды вы должны увидеть такой вывод:

./evidence/large_file.dat

Этот вывод показывает, что в нашем каталоге расследования есть один файл размером более 1 мегабайта. Расширение .dat часто указывает на файл с данными, который может иметь важное значение в нашем расследовании.

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

Поиск недавно измененных файлов

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

Найдем файлы, которые были изменены за последние 24 часа:

find. -type f -mtime -1

Разберем эту команду:

  • find. и -type f мы уже встречали ранее.
  • -mtime -1 - это новое. Он сообщает команде find искать файлы, измененные менее 1 дня назад.

Опция -mtime измеряет время в 24 - часовом интервале. -1 означает "менее 1 дня назад". Если бы мы хотели найти файлы, измененные ровно 1 день назад, мы бы использовали -mtime 1, а для файлов, измененных более 1 дня назад, -mtime +1.

После выполнения этой команды вы можете увидеть вывод, похожий на следующий:

./evidence/clue.txt
./evidence/large_file.dat
./evidence/new_lead.txt
./logs/system.log
./logs/recent_activity.log
./notes/interview.txt

Этот вывод показывает файлы, которые были изменены за последние 24 часа. Это могут быть наши самые актуальные подсказки! Каждый из этих файлов может содержать недавнюю информацию, важную для нашего расследования.

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

Выполнение команд на найденных файлах

Теперь объединим наши детективные навыки с некоторым судебно-техническим анализом. Мы будем использовать команду find для поиска всех файлов с расширением.txt, а затем команду cat для отображения их содержимого. Это похоже на быстрый просмотр всех текстовых документов, которые мы нашли, в поисках улики.

Вот команда:

find. -name "*.txt" -exec cat {} \;

Эта команда выглядит сложной, поэтому разберем ее на составляющие:

  • find. -name "*.txt" мы уже видели ранее - она находит все файлы с расширением.txt.
  • -exec cat {} \; - это новое. Она сообщает команде find выполнить команду cat для каждого найденного файла.
    • cat - это команда, которая отображает содержимое файла.
    • {} - это заполнитель, который find заменяет на каждое найденное имя файла.
    • \; отмечает конец команды -exec.

После выполнения этой команды вы должны увидеть содержимое всех файлов с расширением.txt, что-то вроде этого:

The suspect was last seen wearing a red hat.
New lead: Check the security camera footage from the back alley.
Witness reported hearing a loud noise at approximately 10 PM.

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

Если вы удивляетесь, почему мы используем \; в конце, это чтобы сообщить команде find, где заканчивается команда для -exec. Без него find не знал бы, хотим ли мы сделать что-то еще с файлами.

Итог

Поздравляем, детектив! В этом практическом занятии вы освоили команду find, мощный инструмент в вашем арсенале Linux. Вы научились:

  1. Искать файлы по имени.
  2. Найти несколько типов файлов с использованием подстановочных знаков.
  3. Найти файлы по размеру.
  4. Определить недавно измененные файлы.
  5. Выполнять команды на найденных файлах.

Эти навыки будут полезны вам при управлении файлами, устранении неполадок в системе и, конечно, при расследовании цифровых загадок!

Дополнительные параметры команды find, которые не были рассмотрены в этом практическом занятии, включают:

  • -user: Найти файлы, принадлежащие определенному пользователю.
  • -group: Найти файлы, принадлежащие определенной группе.
  • -perm: Найти файлы с определенными правами доступа.
  • -maxdepth: Ограничить глубину обхода каталогов.
  • -mindepth: Начать поиск с минимальной глубины.
  • -empty: Найти пустые файлы или каталоги.
  • -newer: Найти файлы, более новые, чем указанный файл.

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