Mtime linux что это

Обновлено: 04.07.2024

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

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

Основная информация о Find

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

Утилита find предустановлена по умолчанию во всех Linux дистрибутивах, поэтому вам не нужно будет устанавливать никаких дополнительных пакетов. Это очень важная находка для тех, кто хочет использовать командную строку наиболее эффективно.

Команда find имеет такой синтаксис:

find [ папка] [ параметры] критерий шаблон [действие]

Папка - каталог в котором будем искать

Параметры - дополнительные параметры, например, глубина поиска, и т д

Критерий - по какому критерию будем искать: имя, дата создания, права, владелец и т д.

Шаблон - непосредственно значение по которому будем отбирать файлы.

Основные параметры команды find

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

  • -P - никогда не открывать символические ссылки.
  • -L - получает информацию о файлах по символическим ссылкам. Важно для дальнейшей обработки, чтобы обрабатывалась не ссылка, а сам файл.
  • -maxdepth - максимальная глубина поиска по подкаталогам, для поиска только в текущем каталоге установите 1.
  • -depth - искать сначала в текущем каталоге, а потом в подкаталогах.
  • -mount искать файлы только в этой файловой системе.
  • -version - показать версию утилиты find.
  • -print - выводить полные имена файлов.
  • -type f - искать только файлы.
  • -type d - поиск папки в Linux.

Критерии

Критериев у команды find в Linux очень много, и мы опять же рассмотрим только основные.

  • -name - поиск файлов по имени.
  • -perm - поиск файлов в Linux по режиму доступа.
  • -user - поиск файлов по владельцу.
  • -group - поиск по группе.
  • -mtime - поиск по времени модификации файла.
  • -atime - поиск файлов по дате последнего чтения.
  • -nogroup - поиск файлов, не принадлежащих ни одной группе.
  • -nouser - поиск файлов без владельцев.
  • -newer - найти файлы новее чем указанный.
  • -size - поиск файлов в Linux по их размеру.

Примеры использования

А теперь давайте рассмотрим примеры find, чтобы вы лучше поняли, как использовать эту утилиту.

1. Поиск всех файлов

Показать все файлы в текущей директории:


Все три команды покажут одинаковый результат. Точка здесь означает текущую папку. В место неё можно указать любую другую.

2. Поиск файлов в определенной папке

Показать все файлы в указанной директории:


Искать файлы по имени в текущей папке:


Поиск по имени в текущей папке:

find . -name "testfile*"

Не учитывать регистр при поиске по имени:

find . -iname "TeStFile*"


3. Ограничение глубины поиска

Поиска файлов по имени в Linux только в этой папке:

find . -maxdepth 1 -name "*.php"

4. Инвертирование шаблона

Найти файлы, которые не соответствуют шаблону:

find . -not -name "test*"

5. Несколько критериев

Поиск командой find в Linux по нескольким критериям, с оператором исключения:

find . -name "test" -not -name "*.php"

Найдет все файлы, начинающиеся на test, но без расширения php. А теперь рассмотрим оператор ИЛИ:

find -name "*.html" -o -name "*.php"

Эта команда найдёт как php, так и html файлы.

6. Тип файла

По умолчанию find ищет как каталоги, так и файлы. Если вам необходимо найти только каталоги используйте критерий type с параметром d. Например:

find . -type d -name "Загрузки"


Для поиска только файлов необходимо использовать параметр f:

find . -type f -name "Загрузки"


6. Несколько каталогов

Искать в двух каталогах одновременно:

find ./test ./test2 -type f -name "*.c"

7. Поиск скрытых файлов

Найти скрытые файлы только в текущей папке. Имена скрытых файлов в Linux начинаются с точки:

find . -maxdepth 1 -type f -name ".*"


8. Поиск по разрешениям

Найти файлы с определенной маской прав, например, 0664:

find . -type f -perm 0664

Права также можно задавать буквами для u (user) g (group) и o (other). Например, для того чтобы найти все файлы с установленным флагом Suid в каталоге /usr выполните:

sudo find /usr -type f -perm /u=s


Поиск файлов доступных владельцу только для чтения только в каталоге /etc:

find /etc -maxdepth 1 -perm /u=r


Найти только исполняемые файлы:

find /bin -maxdepth 2 -perm /a=x

9. Поиск файлов в группах и пользователях

Найти все файлы, принадлежащие пользователю:

find . -user sergiy

Поиск файлов в Linux принадлежащих группе:

find /var/www -group www-data


10. Поиск по дате модификации

Поиск файлов по дате в Linux осуществляется с помощью параметра mtime. Найти все файлы модифицированные 50 дней назад:

Поиск файлов в Linux открытых N дней назад:

Найти все файлы, модифицированные между 50 и 100 дней назад:

find / -mtime +50 -mtime -100

Найти файлы измененные в течении часа:

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

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

От пятидесяти до ста мегабайт:

find / -size +50M -size -100M

Найти самые маленькие файлы:

find . -type f -exec ls -s <> \; | sort -n -r | head -5

find . -type f -exec ls -s <> \; | sort -n | head -5

12. Поиск пустых файлов и папок

find /tmp -type f -empty


13. Действия с найденными файлами

Для выполнения произвольных команд для найденных файлов используется опция -exec. Например, для того чтобы найти все пустые папки и файлы, а затем выполнить ls для получения подробной информации о каждом файле используйте:

find . -empty -exec ls -ld <> \;


Удалить все текстовые файлы в tmp

find /tmp -type f -name "*.txt" -exec rm -f <> \;

Удалить все файлы больше 100 мегабайт:

find /home/bob/dir -type f -name *.log -size +100M -exec rm -f <> \;

Выводы

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

Favorite

Добавить в избранное

Главное меню » Операционная система Linux » Временные метки файлов в Linux: atime, mtime, ctime. Разъяснения

Временные метки файлов в Linux: atime, mtime, ctime. Разъяснения

Д авайте посмотрим, каковы различные типы временных меток файлов в Linux, как просмотреть временные метки для файла и как изменить метки времени.

В Linux каждый файл имеет некоторые временные метки, которые предоставляют некоторые важные аналитики о том, когда файл или его атрибуты были модифицированы или изменены. Давайте посмотрим на эти временные метки в деталях.

Что такое метки времени Linux?

Любой файл в Linux обычно имеет три временных метки:

atime

atime означает время доступа. Эта временная метка сообщает вам, когда был последний раз обращались к файлу. При доступе это означает, что если вы использовали cat, vim, less или какой-либо другой инструмент для чтения или отображения содержимого файла.

mtime

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

ctime

ctime означает время изменения статуса. Эта временная метка сообщает вам, когда был последний раз были изменены свойства и метаданные файла. Метаданные включают права доступа, права собственности, имя и местоположение файла.

Как просмотреть временные метки файла?

Вы можете использовать команду stat для просмотра всех временных меток файла. Использование команды stat очень просто. Вам просто нужно указать имя файла.

Результат будет таким:

Вы можете увидеть все три временных метки (доступ, модифицирование и изменение) в приведенном выше выводе. Все три временных метки здесь одинаковы, потому что мы просто создали этот пустой файл с командой touch.

Теперь давайте изменим эти временные метки.

Если мы используем команду less для чтения файла, это изменит только время доступа, потому что содержимое и метаданные файла остаются неизменными.

Теперь давайте изменим время модификации. Мы будем использовать команду cat для добавления нового текста в этот файл. Это предотвратит изменение времени доступа.

Вы заметили что-то странное? Вы изменили файл и ожидали изменения mtime, но также изменили время ctime.

Запомните, ctime всегда изменяет mtime, это потому, что пока время изменения находится под контролем пользователя, ctime контролируется системой. Он представляет собой, когда в последний раз были изменены блоки данных или метаданные файла. Если вы изменяете файл, блоки данных изменяются и, следовательно, ctime изменяется.

Вы можете изменить ctime только путем изменения прав доступа к файлам, используя CHMOD или же командой chgrp, но вы не можете модифицировать mtime без изменения ctime.

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

Помните: ctime всегда будет изменен путем изменения mtime.

Каково использование временных меток файлов?

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

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

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

Как узнать, когда был изначально создан файл?

Вы заметили последнюю строку вывода команды stat? В нем указывается «Birth». Вы можете догадаться, что это представляет собой timestmap, когда файл был «рожден» (или был создан, чтобы быть более точным).

Читать Как исключить определенный размер файлов от копирования в Linux

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Favorite

Добавить в избранное

Главное меню » Операционная система Linux » Все, что вам нужно знать об inode в Linux

(2 оценок, среднее: 5,00 из 5)
У нас к вам странный вопрос. Ваша система когда-нибудь жаловалась на то, что у вас не осталось свободного места, хотя у вас явно все еще было достаточно? Это случается, когда оставалось много GB, но система Linux жаловалась, что места не осталось. Тогда узнали об inodes.

Краткое резюме

Inodes хранит метаданные для каждого файла в вашей системе в виде таблицы, обычно расположенной в начале раздела. Они хранят всю информацию, кроме имени файла и данных.

Каждый файл в данном каталоге является записью с именем файла и номером индекса. Вся остальная информация о файле извлекается из таблицы индексов путем ссылки на номер индекса.

Номера inodes уникальны на уровне раздела. Каждый раздел как собственная таблица индексов.

Если у вас закончились inode, вы не можете создавать новые файлы, даже если у вас есть свободное место на данном разделе.

Что такое inode в Linux?

Inode означает индексный узел. Хотя история не совсем уверена в этом, это самое логичное и лучшее предположение, которое они придумали. Раньше было написан I-node, но дефис со временем потерялся.

Inodes хранит метаданные о файле, к которому он относится. Эти метаданные содержат всю информацию об указанном файле.

  • Размер.
  • Разрешение.
  • Владелец/группа.
  • Расположение жесткого диска.
  • Дата/время.
  • Любая другая необходимая информация.

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

Для каждого файла в каталоге есть запись, содержащая имя файла и номер индекса, связанный с ним.

Inodes являются уникальными на уровне разделов. Вы можете иметь два файла с одинаковым номером inode, если они находятся в другом разделе. Информация inodes хранится в виде таблицы в виде структуры в стратегических частях каждого раздела. Часто встречается в начале.

Как проверить inode в Linux?

Вы можете легко перечислить номер inode с помощью следующей команды:

Все, что вам нужно знать об inode в Linux

На следующих рисунках показан корневой каталог с соответствующими номерами inodes.

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

Большинство настроек по умолчанию при создании файловой системы создает 1 inode на каждые 2 Кбайт пространства. Это дает множество inodes для большинства систем. Скорее всего, вам не хватит места, прежде чем закончатся inode. При необходимости вы можете указать, сколько inodes создавать при создании файловой системы.

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

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

В некоторых файловых системах в Linux, таких как Btrfs, JFS, XFS, реализованы динамические inode. Они могут увеличить количество доступных inode, если это необходимо.

Как работает inode?

Когда запускаете команду ls « ls -li /», имя файла и номер inode хранилось в каталоге /. Оставшаяся информация пользователя, группы, прав доступа к файлу , размера и т. д. была получена из таблицы индексов с использованием номера индекса.

Вы можете вывести информацию об индексах для каждой файловой системы с помощью этой команды:

Все, что вам нужно знать об inode в Linux

Inodes & мягкая/жесткая связь

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

Все, что вам нужно знать об inode в Linux

Список номеров inode дает нам следующую информацию:

Вы можете видеть, что « file1 ″ и« hlink1 »имеют одинаковый номер inod. По правде говоря, жесткие ссылки возможны из-за inode. Жесткая ссылка не создает новый файл. Он предоставляет только новое имя для тех же данных.

В старых версиях Linux можно было жестко связать каталог. Было даже возможно, чтобы данный каталог был его собственным родителем. Это стало возможным благодаря реализации inode. Теперь это ограничено, чтобы пользователи не могли создавать очень запутанную структуру каталогов.

Другие значения inode

Работа inode также объясняет, почему невозможно создать жесткую ссылку на другую файловую систему. Разрешение такой задачи откроет возможность наличия конфликтующих номеров inods. Мягкая ссылка, с другой стороны, может быть создана в другой файловой системе.

Поскольку жесткая ссылка имеет тот же номер inode, что и исходный файл, вы можете удалить исходный файл, и данные по-прежнему доступны через жесткую ссылку. Все, что вы сделали в этом случае, это удалите одно из имен, указывающих на этот номер inode. Данные, связанные с этим номером inode, будут оставаться доступными до тех пор, пока не будут удалены все связанные с ним имена.

Inode также являются важной причиной, по которой система Linux может обновляться без перезагрузки. Это связано с тем, что один процесс может использовать файл библиотеки, в то время как другой процесс заменяет этот файл новой версией. Поэтому создаем новый индекс для нового файла. Уже запущенный процесс будет продолжать использовать старый файл, в то время как каждый новый вызов приведет к использованию новой версии.

В некоторых файловых системах, таких как ext4, есть опция inline_data. Когда он включен, он позволяет операционной системе хранить данные таким образом. Из-за ограничения размера вставка работает только для очень маленьких файлов. Ext2 и более поздние версии часто сохраняют информацию о мягких ссылках таким образом. То есть если размер не более 60 байт.

Заключение

Надеюсь, вам понравилась эта статья, и вы узнали что-то новое и важное об inode в Linux. Подпишитесь на наш сайт, чтобы узнать больше информации о Linux.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Часто в процессе работы возникает необходимость осуществить поиск файлов с определенными характеристиками, такими как права доступа, размер, тип и т.д. Команда find представляет собой универсальный инструмент поиска: она позволяет искать файлы и каталоги, просматривать все каталоги в системе или только текущий каталог.

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

• параметры команды find ;

• примеры использования различных опций команды find ;

• примеры совместного использования команд xargs и find .

Возможности команды find обширны, велик и список предлагаемых опций. В настоящей главе описаны наиболее важные из них. Команда find может проводить поиск даже на дисках NFS (Network File System — сетевая файловая система), конечно, при наличии соответствующих разрешений. В подобных случаях команда обычно выполняется в фоновом режиме, поскольку просмотр дерева каталога требует значительных затрат времени. Общий формат команды find таков:

find путевое_имя -опции

2.1. Опции команды find

Остановимся на описании основных опций команды find .

-name Поиск файлов, имена которых соответствуют заданному шаблону

-print Запись полных имен найденных файлов в стандартный поток вывода

-perm Поиск файлов, для которых установлен указанный режим доступа

-prune Применяется для того, чтобы команда find не выполняла рекурсивный поиск по уже найденному путевому имени; если указана опция -depth , опция -prune игнорируется

-user Поиск файлов, принадлежащих указанному пользователю

-group Поиск файлов, которые принадлежат данной группе

-mtime -n +n Поиск файлов, содержимое которых модифицировалось менее чем (-) или более чем (+) n дней назад; имеются также опции -atime и -ctime , которые позволяют осуществлять поиск файлов соответственно по дате последнего чтения и дате последнего изменения атрибутов файла

-nogroup Поиск файлов, принадлежащих несуществующей группе, для которой, иначе говоря, отсутствует запись в файле /etc/groups

-nouser Поиск файлов, принадлежащих несуществующему пользователю, для которого, другими словами, отсутствует запись в файле /etc/passwd

-newer файл Поиск файлов, которые созданы позднее, чем указанный файл

-type Поиск файлов определенного типа, а именно: b — специальный блочный файл; d — каталог; с — специальный символьный файл; p — именованный канал; l — символическая ссылка; s — сокет; f — обычный файл

-size n Поиск файлов, размер которых составляет n единиц; возможны следующие единицы измерения: b— блок размером 512 байт (установка по умолчанию); с — байт; k — килобайт (1024 байта); w — двухбайтовое слово

-depth При поиске файлов сначала просматривается содержимое текущего каталога и лишь затем проверяется запись, соответствующая самому каталогу

-f stype Поиск файлов, которые находятся в файловой системе определенного типа; обычно соответствующие сведения хранятся в файле /etc/fstab, который содержит данные о файловых системах, используемых на локальном компьютере

-mount Поиск файлов только в текущей файловой системе; аналогом этой опции является опция -xdev -exec Выполнение команды интерпретатора shell для всех обнаруженных файлов; выполняемые команды имеют формат команда < >;

(обратите внимание на наличие пробела между символами <> и 😉

-ок Аналогична опции -exec , но перед выполнением команды отображается запрос

2.1.1. Опция -name

При работе с командой find чаще всего используется опция -name . После нее в кавычках должен быть указан шаблон имени файла.
Если необходимо найти все файлы с расширением .txt в вашем начальном каталоге, укажите символ в качестве путевого имени. Имя начального каталога будет извлечено из переменной $HOME.

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

Для нахождения в текущем каталоге всех файлов, в именах которых встречается хотя бы один символ в верхнем регистре, введите следующую команду:

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

Опция является обозначением операции логического ИЛИ. В случае ее применения помимо файлов с обычными именами будут найдены файлы, имена которых начинаются с точки.

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

Ниже показано, как найти все файлы, в именах которых сначала следуют символы нижнего регистра, а за ними — две цифры и расширение .txt (например, ах37.xt):

2.1.2. Опция -perm

Опция -perm позволяет находить файлы с заданным режимом доступа. Например, для поиска файлов с режимом доступа 755 (их может просматривать и выполнять любой пользователь, но только владелец имеет право осуществлять запись) следует воспользоваться такой командой:

$ find . -perm 755 -print

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

$ find . -perm -007 -print

2.1.3. Опция -prune

Когда вы не хотите вести поиск в том или ином каталоге, воспользуйтесь опцией -prune . Она служит указанием остановить поиск на текущем путевом имени. Если путевое имя указывает на каталог, команда find не будет заходить в него. При наличии опции -depth опция -prune игнорируется.

Следующая команда проводит поиск в текущем каталоге, не заходя в подкаталог /bin:

Чтобы найти файлы, принадлежащие определенному пользователю, укажите в команде find опцию -user , а также имя пользователя. Например, поиск в начальном каталоге файлов, принадлежащих пользователю dave, осуществляется посредством такой команды:

-user dave -print

Поиск в каталоге /etc файлов, принадлежащих пользователю uucp, выполняет следующая команда:

$ find /etc -uaer uucp -print

Благодаря опции -nouser возможен поиск файлов, принадлежащих несуществующим пользователям. При ее использовании производится поиск файлов, для владельцев которых нет записи в файле /etc/passwd. Конкретное имя пользователя указывать не нужно: команда find выполняет всю необходимую работу сама. Чтобы найти все файлы, которые принадлежат несуществующим пользователям и находятся в каталоге /home, задайте вот такую команду:

$ find /home -nouaer -print

2.1.5. Опции -group и -nogroup

Опции -group и -nogroup аналогичны опциям -user-nouser/apps всех файлов, которыми владеют пользователи группы accts:

$ find /арра -group accta -print

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

$ find / -nogroup -print

2.1.6. Опция -mtime

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

$ find / -mtime -5 -print

Ниже приведена команда, выполняющая поиск в каталоге /var/adm файлов, которые обновлялись в течение последних трех дней:

$ find /var/adm -mtime +3 -print

2.1.7. Опция -newer

Если необходимо найти файлы, доступ к которым осуществлялся в промежутке времени между обновлениями двух заданных файлов, воспользуйтесь опцией -newer . Общий формат ее применения таков:

-newer старый_файл ! -newer новый_файл

Предположим, у нас есть два файла, которые обновлялись с интервалом немногим более двух дней:

-rwxr-xr-x 1 root root 92 Apr 18 11:18 age.awk
-rwxrwxr-x 1 root root 1054 Apr 20 19:37 belts.awk

Для нахождения всех файлов, которые обновлялись позже, чем age.awk, но раньше, чем belts.awk, выполните следующую команду (применение опции -exec описано чуть ниже):

$ find . -newer age.awk ! -newer belts.awk -exec Is -1 <> ;
-rwxrwxr-x 1 root root 62 Apr 18 11:32 ./who.awk
-rwxrwxr-x 1 root root 49 Apr 18 12:05 ./group.awk
-rw-r—r— 1 root root 201 Apr 20 19:30 ./grade2.txt
-rwxrwxr-x 1 root root 1054 Apr 20 19:37 ./belts.awk

Но как быть, если необходимо найти файлы, созданные, скажем, в течение последних двух часов, а у вас нет файла, сформированного ровно два часа назад, с которым можно было бы сравнивать? Создайте такой файл! Для этой цели предназначена команда touch -t , которая создает файл с заданной временной меткой в формате ММДЦччмм (месяц-день-часы-минуты). Например:

$ touch -t 05042140 dstamp
$ ls -1 dstamp
-rw-r—r— 1 dave admin 0 May 4 21:40 dstamp

В результате будет получен файл, дата создания которого — 4 мая, время создания —21:40 (предполагается, что текущее время — 23:40). Теперь можно применить команду find с опцией -newer для нахождения всех файлов, которые обновлялись в течение последних двух часов:

$ find . -newer datamp -print

2.1.8. Опция -type

Операционные системы UNIX и Linux поддерживают различные типы файлов. Поиск файлов нужного типа осуществляется посредством команды, find с опцией -type . Например, для нахождения всех подкаталогов в каталоге /etc воспользуйтесь такой командой:

$ find /etc -type d -print

Чтобы получить список всех файлов, но не каталогов, выполните следующую команду:

$ find . ! -type d -print

Ниже приведена команда, которая предназначена для поиска всех символических ссылок в каталоге /etc.

$ find /etc -type 1 -print

2.1.9. Опция -size

В процессе поиска размер файла указывается с помощью опции -size N , где N — размер файла в блоках по 512 байтов. Возможные аргументы имеют следующие значения: +N — поиск файлов, размер которых больше заданного, -N — меньше заданного, N — равен заданному. Если в аргументе дополнительно указан символ с, то размер считается заданным в байтах, а не в блоках, а если символ k — в килобайтах. Для поиска файлов, размер которых превышает 1 Мб, предназначена команда

$ find . -aize -flOOOk -print

Следующая команда выполняет поиск в каталоге /home/apache файлов, размер которых в точности равен 100 байтам:

$ find /home/apache -sixe 100с -print

Произвести поиск файлов, размер которых превышает 10 блоков (5120 байтов), позволяет приведенная ниже команда:

$ find . -size +10 -print

2.1.10. Опция Опция -depth

Опция -depth позволяет организовать поиск таким образом, что сначала проверяются все файлы текущего каталога (и рекурсивно все его подкаталоги) и только в конце — запись самого каталога. Эта опция широко применяется при создании списка файлов, помещаемых в архив на магнитной ленте с помощью команды cpio или tar , так как в этом случае сначала записывается на ленту образ каталога и лишь после этого задаются права доступа к нему. Это позволяет пользователю архивировать те каталоги, для которых у него нет разрешения на запись.
Следующая команда выводит список всех файлов и подкаталогов текущего каталога:

Вот как могут выглядеть результаты ее работы:

./.Xdefaults ./.bash_logout ./.bash_profile ./.bashrc ./.bash_nistory ./file ./Dir/filel ./Dir/file2 ./Dir/file3 ./Dir/Subdir/file4 ./Dir/Subdir ./Dir

2.1.11. Опция -mount

Поиск файлов только в текущей файловой системе, исключая другие смонтированные файловые системы, обеспечивает опция -mount команды find . В следующем примере осуществляется поиск всех файлов с расширением .хс в текущем разделе диска:

2.1.12. Поиск файлов с последующей архивацией командой cpio

Команда cpio применяется главным образом для записи файлов на магнитную ленту и чтения их с ленты. Очень часто она используется совместно с командой find , по каналу принимая от нее список файлов.

Вот как выполняется запись на магнитную ленту содержимого каталогов /etc, /home и /apps:

$ cd /
$ find etc home appa -depth -print | cpio -ov > dev/rmtO

Опция команды cpio задает режим записи файлов на ленту. Опция -v (verbose — словесный режим) является указанием команде cpio сообщать о каждом обрабатываемом файле.

2.1.13. Опции -exec и -ok

Предположим, вы нашли нужные файлы и хотите выполнить по отношению к ним определенные действия. В этом случае вам понадобится опция -exec (некоторые системы позволяют с помощью опции -exec выполнять только команды ls или ls -1 ). Многие пользователи применяют опцию -exec для нахождения старых файлов, подлежащих удалению. Я рекомендую вместо команды rm выполнить сначала команду ls , чтобы убедиться в том, что команда find нашла именно те файлы, которые нужно удалить.

После опции -exec следует указать выполняемую команду, а затем ввести фигурные скобки, пробел, обратную косую черту и, наконец, точку с запятой. Рассмотрим пример:

$ find . -type f -exec Xa -1 (> ;
-rwxr-xr-x 10 root wheel 1222 Jan 4 1993 ./sbin/C80
-rwxr-xr-x 10 root wheel 1222 Jan 4 1993 ./sbin/Normal
-rwxr-xr-x 10 root wheel 1222 Jan 4 1993 ./sbin/Rewid

Здесь выполняется поиск обычных файлов, список которых отображается на экране с помощью команды ls -1.

Чтобы найти файлы, которые не обновлялись в каталоге /logs в течение последних пяти дней, и удалить их, выполните следующую команду:

$ find /log» -type f -mtime +5 -exec rm <> ;

Следует соблюдать осторожность при перемещении и удалении файлов. Пользуйтесь опцией -ok , которая позволяет выполнять команды mv и rm в безопасном режиме (перед обработкой очередного файла выдается запрос на подтверждение). В следующем примере команда find находит файлы с расширением .log, и если какой-то файл создан более пяти дней назад, она удаляет его, но сначала просит вас подтвердить эту операцию:

Для удаления файла введите у, а для предотвращения этого действия — n.

2.1.14. Дополнительные примеры использования команды find

Рассмотрим еще несколько примеров, иллюстрирующих применение команды find . Ниже показано, как найти все файлы в своем начальном каталоге:

Найти все файлы, для которых установлен бит SUID, позволяет следующая команда:

$ find . -type f -perm +4000 -print

Чтобы получить список пустых файлов, воспользуйтесь такой командой:

$ find / -type f -size 0 -exec Is -1 <> ;

В одной из моих систем каждый день создается системный журнал аудита. К имени журнального файла добавляется номер, что позволяет сразу определить, какой файл создан позже, а какой — раньше. Например, версии файла admin.log нумеруются последовательно: admin.log.001, admin.log.002 и т.д. Ниже приведена команда find , которая удаляет все файлы admin.log, созданные более семи дней назад:

2.2. Команда xargs

Рассмотрим пример, в котором команда find возвращает список всех файлов, имеющихся в системе, а команда xargs выполняет для них команду file , проверяющую тип каждого файла:

$ find / -type f -print I xarge.file
/etc/protocols: English text /etc/securetty: ASCII text

Ниже приведен пример, демонстрирующий поиск файлов дампа, имена которых команда echo помещает в файл /tmp/core.log.

$ find / -name core -print | xarge echo > /tmp/core.log

В следующем примере в каталоге /apps/audit выполняется поиск всех файлов, к которым другие пользователи имеют полный доступ. Команда chmod удаляет для них разрешение на запись:

$ find /appe/audit -perm -7 -print | xarge chmod o-w

2.3. Заключение

Команда find представляет собой прекрасный инструмент поиска различных файлов по самым разнообразным критериям. Благодаря опции -exec , а также команде xargs найденные файлы могут быть обработаны практически любой системной командой.

Читайте также: