- Поиск файлов в Linux или Изучаем команду find
- IT-поддержка
- Как определить тип файла файла с помощью Linux
- Найдите тип файла любого файла или группы файлов с помощью команды FILE
- Как работает команда File
- Как использовать команду «Файл»
- Настройте вывод из команды File
- Обработка нескольких файлов
- Сжатые файлы
- Найти команду в Linux (поиск файлов и каталогов)
- find командный синтаксис
- Найти файлы по имени
- Найти файлы по расширению
- Найти файлы по типу
- Найти файлы по размеру
- Найти файлы по дате изменения
- Найти файлы по разрешениям
- Найти файлы по владельцу
- Найти и удалить файлы
- Выводы
Поиск файлов в Linux или Изучаем команду find
Автор: Нагибин Владимир . Дата статьи: 26.03.2010 г.
Несомненно, при работе с Linux, иногда возникает необходимость поиска файлов с определенными характеристиками. Этими характеристиками могут быть размер или тип файла, права доступа и другое.
Наличие в Linux команды find, во многом помогает справиться с поиском файлов по различным критериям.
Сегодня мы разберем поиск файлов в Linux и приведем основные опции команды find, которые вы сможете применить в своей работе.
Формат команды find:
find путь -опции
где путь — это каталог, в котором произвести поиск. В качестве пути можно указывать следующие значения:
. — поиск в текущем каталоге;
/ — поиск от корневого каталога;
— поиск в домашнем каталоге.
Что до опций, то тут гораздо бОльший список, с которым крайне необходимо внимательно ознакомиться (это в будущем очень поможет!). Итак, основные опции команды find:
-name — поиск файлов по имени, используя приведенный шаблон;
-user — поиск файлов, принадлежащих указанному пользователю;
-group — поиск файлов, принадлежащих указанной группе;
-perm — поиск файлов с указанным режимом доступа;
-type — поиск файлов определенного типа. Типов тоже достаточно:
- b — специальный блочный файл;
- d — каталог;
- c — специальный символьный файл;
- f — обычный файл;
- l — символическая ссылка;
- p — именованный канал;
- s — сокет.
-size n — поиск файлов с размером n единиц;
-mtime -n n — поиск файлов, содержание которых изменялось менее чем (-) или более чем ( ) дней назад.
Рассмотрим некоторые примеры применения команды find:
Наиболее часто применяемой опцией является опция -name, которая производит поиск файлов по имени.
Примеры с опцией -name :
$ find /mnt/usb -name «*.mp3» -print
произведет поиск всех файлов (об этом свидетельствует знак *), имеющих расширение .mp3 на USB-устройстве, смонтированном в каталог /mnt/usb.
выведет на экран список файлов домашнего каталога, начинающихся на test.
Если вам надо найти файлы, начинающиеся с определенных букв (к примеру, от a до j), то здесь будет удобно применить регулярные выражения, которые крайне удобны в работе:
$ find / -name «[a-j]*» -print
Вышеуказанная команда позволит отыскать все файлы в системе, начинающиеся с букв от a до j.
Поиск файлов с определенными режимами доступа
Если потребуется найти файлы, имеющие определенные режимы доступа, вам поможет опция -perm, которая легко в этом поможет.
К примеру, выполним поиск файлов с режимом доступа 775 (владелец и группа имеют полные права и ограничение на запись имеют остальные пользователи), находящихся в текущем каталоге :
$ find . -perm 775 -print
Выполняя поиск при помощи find с опцией -perm можно использовать и другой способ — можно перед значением режима поставить дефис и тогда будет произведен поиск файлов, для которых установлены все указанные биты разрешений. Причем, остальные биты в этом случае игнорируются.
К примеру, найдем файлы, к которым пользователи группы имеют полный доступ:
$ find . -perm -070 -print
Вместо знака дефиса, можно указать знак плюса. В этом случае будет произведен поиск файлов, у которых установлен хотя бы один из указанных битов разрешений. Остальные биты при этом игнорируются.
Поиск файлов определенного пользователя или группы
Поиск файлов какого-либо определенного пользователя крайне прост в своей реализации. Для этого достаточно выполнить команду:
$ find / -user admin -print
Вышеуказанная команда произведет поиск файлов в системе, принадлежащих пользователю admin.
Для того, чтобы найти файлы, принадлежащие определенной группе (к примеру managers), выполним команду:
$ find / -group managers -print
Для поиска файлов несуществующих пользователей или групп можно воспользоваться опциями -nouser и -nogroup:
$ find / -nouser -print
$ find / -nogroup -print
Поиск файлов определенного типа
Одной из удобных возможностей команды find, является возможность поиска файлов определенного типа. Рассмотрим варианты использования опции -type:
Поиск символических ссылок в каталоге /etc:
$ find /etc -type l -print
Вывод на экран списка каталогов, присутствующих в каталоге /mnt/raid
$ find /mnt/raid -type d -print
Поиск файлов определенного размера
Опция -size позволяет произвести поиск файлов определенного размера и имеет следующий вид при выполнении:
$ find . -size 2000k -print
Вышеуказанная команда отыщет и отобразит на экране файлы размером 2 мегабайта, находящийся в текущем каталоге. Если, к примеру, необходимо найти файлы размером менее 500 килобайт, то вид команды будет следующий:
$ find . -size -500k -print
Если нужно найти файлы размером более 600 мегабайт, то применим команду:
$ find / -size 600M -print
Поиск файлов с использованием опции -mtime
Опция -mtime позволит вам найти файлы, изменявшиеся в какой-то срок времени.
К примеру, у нас встала задача поиска файлов, находящихся в каталоге /mnt/raid/upload , и изменявшихся за последние 5 дней. В этом нам поможет команда:
$ find /mnt/raid/upload -mtime -5 -print
Если нам необходимо обратное, к примеру, отыскать файлы, которые не изменялись неделю, применим команду:
$ find /mnt/raid/upload -7 -print
Команда find является крайне удобным инструментом для поиска файлов и может использоваться также и для поиска файлов на дисках NFS (сетевых файловых системах), но в этом случае необходимо учесть, что времени на поиск чего-либо на NFS уйдет гораздо больше, чем на локальных дисках.
В этой статье мы рассмотрели лишь основные опции команды find, которые помогут вам в вашей работе. Используйте то, что удобно и не переживайте по пустякам!
IT-поддержка
Оказываем квалифицированную помощь в поддержке Вашей IT-инфраструктуры
Источник
Как определить тип файла файла с помощью Linux
Найдите тип файла любого файла или группы файлов с помощью команды FILE
Большинство людей смотрят на расширение файла, а затем угадывают тип файла с этим расширением. Например, когда вы видите файл с расширением gif, jpg, bmp или png, вы думаете о файле изображения, а когда вы видите файл с расширением zip, вы предполагаете, что файл был сжат с помощью утилиты сжатия zip ,
В действительности, файл может иметь одно расширение, но быть чем-то совершенно другим. В Linux вы узнаете истинный тип файла с помощью команды file .
Как работает команда File
Команда file выполняет три набора тестов для файла:
- Тесты файловой системы
- Магические тесты
- Языковые тесты
Первый набор тестов для возврата правильного ответа приводит к печати типа файла.
Тесты файловой системы проверяют отдачу от системного вызова stat. Программа проверяет, является ли файл пустым и является ли он специальным файлом. Если тип файла найден в системном заголовочном файле, он возвращается как допустимый тип файла.
Магические тесты проверяют содержимое файла и, в частности, несколько байтов в начале, которые помогают определить тип файла. Различные файлы используются, чтобы помочь сопоставить файл с его типом файла, и они хранятся в:
Переопределите эти файлы, поместив файл в вашу домашнюю папку с именем $ HOME/.magic.mgc или $ HOME/.magic.
Финальные тесты – языковые тесты. Файл проверяется, чтобы увидеть, является ли он текстовым файлом. Тестируя первые несколько байтов файла, тест может определить, является ли файл ASCII, UTF-8, UTF-16 или другим форматом, который идентифицирует файл как текстовый файл. Когда выводится набор символов, файл проверяется на разных языках.
Если ни один из тестов не работает, выводом являются данные.
Как использовать команду «Файл»
Команда file может быть использована следующим образом:
Например, представьте, что у вас есть файл с именем file1, и вы запускаете следующую команду:
Вывод примерно такой:
Выходные данные определяют, что file1 – это файл изображения или, точнее, файл переносимой сетевой графики (PNG).
Различные типы файлов дают разные результаты:
- Тип файла ODS : электронная таблица OpenDocument
- Тип файла PDF : документ PDF, версия 1.4
- Тип файла CSV : текст ASCII, с очень длинными строками, с индикаторами строк CRLF
Настройте вывод из команды File
По умолчанию команда file предоставляет имя файла и все детали над файлом. Если вы хотите, чтобы только детали без имени файла повторялись, используйте следующий переключатель:
Вывод примерно такой:
Вы также можете изменить разделитель между именем файла и типом. По умолчанию в качестве разделителя используется двоеточие, но вы можете изменить его на что угодно, например на символ канала, следующим образом:
Вывод примерно такой:
Обработка нескольких файлов
По умолчанию вы используете команду file для одного файла. Однако вы можете указать имя файла, которое содержит список файлов, которые будут обработаны командой file.
Например, откройте файл с именем testfiles с помощью редактора nano и добавьте в него следующие строки:
Сохраните файл и выполните следующую команду:
Результат будет примерно таким:
- /etc/passwd: текст ASCII
- /etc/pam.conf: текст ASCII
- /etc/opt: каталог
Сжатые файлы
По умолчанию, когда вы запускаете команду file для сжатого файла, вы видите что-то вроде этого:
Хотя это говорит о том, что файл является архивом, вы не знаете его содержимого. Вы можете заглянуть внутрь zip-файла, чтобы увидеть типы файлов в сжатом файле. Следующая команда запускает команду file для файлов внутри ZIP-файла:
Вывод теперь показывает типы файлов файлов в архиве.
Большинство людей используют команду file, чтобы найти основной тип файла.Чтобы узнать больше о возможностях, которые предлагает команда file, введите в окне терминала следующее:
Эта команда открывает документацию по программному обеспечению Linux, включенную в систему.
Источник
Найти команду в Linux (поиск файлов и каталогов)
Команда find — один из самых мощных инструментов в арсенале системных администраторов Linux. Он ищет файлы и каталоги в иерархии каталогов на основе заданного пользователем выражения и может выполнять указанное пользователем действие для каждого совпадающего файла.
Вы можете использовать команду find для поиска файлов и каталогов на основе их разрешений, типа, даты, владельца, размера и т. Д. Его также можно комбинировать с другими инструментами, такими как grep или sed .
find командный синтаксис
Общий синтаксис команды find следующий:
- Атрибут options управляет обработкой символических ссылок, параметрами отладки и методом оптимизации.
- Атрибут path. определяет начальный каталог или каталоги, в которых find будет искать файлы.
- Атрибут expression состоит из параметров, шаблонов поиска и действий, разделенных операторами.
Для поиска файлов в каталоге пользователь, вызывающий команду find должен иметь разрешения на чтение в этом каталоге.
Давайте посмотрим на следующий пример:
- Параметр -L (параметры) указывает команде find переходить по символическим ссылкам.
- /var/www (путь…) указывает каталог, в котором будет производиться поиск.
- (Выражение) -name «*.js указывает find искать файлы, заканчивающиеся на .js (файлы JavaScript).
Найти файлы по имени
Поиск файлов по имени, вероятно, является наиболее частым применением команды find . Чтобы найти файл по имени, используйте параметр -name за которым следует имя файла, который вы ищете.
Например, чтобы найти файл с именем document.pdf в каталоге /home/linuxize , вы должны использовать следующую команду:
Чтобы запустить поиск без -iname регистра, измените параметр -name на -iname :
Приведенная выше команда будет соответствовать «Document.pdf», «DOCUMENT.pdf» и т. Д.
Найти файлы по расширению
Поиск файлов по расширению аналогичен поиску файлов по имени. Например, чтобы найти все файлы, заканчивающиеся на .log.gz внутри .log.gz /var/log/nginx , вы должны ввести:
Важно отметить, что вы должны либо заключить шаблон в кавычки, либо экранировать символ звездочки * обратной косой чертой чтобы он не интерпретировался оболочкой при использовании подстановочного знака.
Чтобы найти все файлы , которые не соответствуют регулярному выражению *.log.gz вы можете использовать -not вариант. Например, чтобы найти все файлы, которые не заканчиваются на *.log.gz вы должны использовать:
Найти файлы по типу
Иногда вам может потребоваться поиск определенных типов файлов, таких как обычные файлы, каталоги или символические ссылки. В Linux все является файлом.
Для поиска файлов по их типу используйте параметр -type и один из следующих дескрипторов, чтобы указать тип файла:
- f : обычный файл
- d : каталог
- l : символическая ссылка
- c : символьные устройства
- b : блочные устройства
- p : именованный канал (FIFO)
- s : сокет
Например, чтобы найти все каталоги в текущем рабочем каталоге , вы должны использовать:
Типичным примером может быть рекурсивное изменение разрешений файлов веб-сайтов на 644 и разрешений каталогов на 755 с помощью команды chmod :
Найти файлы по размеру
Чтобы найти файлы по размеру файла, передайте параметр -size вместе с критериями размера. Вы можете использовать следующие суффиксы, чтобы указать размер файла:
- b : блоки по 512 байт (по умолчанию)
- c : байты
- w : двухбайтовые слова
- k : килобайты
- M : мегабайты
- G : гигабайты
Следующая команда найдет все файлы размером ровно 1024 байта внутри каталога /tmp :
Команда find также позволяет вам искать файлы, которые больше или меньше указанного размера.
В следующем примере мы ищем все файлы 1MB менее 1 1MB внутри текущего рабочего каталога. Обратите внимание на минус — символ перед значением размера:
Если вы хотите искать файлы размером более 1 1MB , вам нужно использовать символ плюс + :
Вы даже можете искать файлы в пределах диапазона размеров. Следующая команда найдет все файлы 2MB от 1 до 2MB :
Найти файлы по дате изменения
Команда find также может искать файлы на основе их последнего изменения, доступа или времени изменения.
То же, что и при поиске по размеру, используйте символы плюс и минус для «больше чем» или «меньше чем».
Допустим, несколько дней назад вы изменили один из файлов конфигурации dovecot, но забыли, какой именно. Вы можете легко отфильтровать все файлы в /etc/dovecot/conf.d который заканчивается на .conf и был изменен за последние пять дней:
Вот еще один пример фильтрации файлов по дате модификации с использованием опции -daystart . Приведенная ниже команда перечислит все файлы в каталоге /home которые были изменены 30 или более дней назад:
Найти файлы по разрешениям
Параметр -perm позволяет вам искать файлы на основе прав доступа к файлам.
Например, чтобы найти все файлы с разрешениями ровно 775 внутри каталога /var/www/html , вы должны использовать:
Вы можете поставить перед числовым режимом знак минус — или косую черту / .
Когда в качестве префикса используется косая черта / , то по крайней мере одна категория (пользователь, группа или другие) должна иметь по крайней мере соответствующие биты, установленные для соответствия файлу.
Рассмотрим следующий пример команды:
Приведенная выше команда будет соответствовать всем файлам с разрешениями на чтение, установленными для пользователя, группы или других.
Если в качестве префикса используется минус — , то для соответствия файла необходимо установить хотя бы указанные биты. Следующая команда будет искать файлы, которые имеют права на чтение и запись для владельца и группы и доступны для чтения другим пользователям:
Найти файлы по владельцу
Чтобы найти файлы, принадлежащие определенному пользователю или группе, используйте параметры -user и -group .
Например, чтобы найти все файлы и каталоги, принадлежащие пользователю linuxize , вы должны запустить:
Вот реальный пример. Допустим, вы хотите найти все файлы, принадлежащие пользователю www-data и изменить владельца совпадающих файлов с www-data на nginx :
Найти и удалить файлы
Чтобы удалить все совпадающие файлы, добавьте параметр -delete в конец выражения соответствия.
Убедитесь, что вы используете эту опцию, только если уверены, что результат соответствует файлам, которые вы хотите удалить. Перед использованием опции -delete всегда рекомендуется распечатать совпадающие файлы.
Например, чтобы удалить все файлы, заканчивающиеся на .temp из /var/log/ , вы должны использовать:
Когда дело доходит до каталогов, find может удалять только пустые каталоги, как и rmdir .
Выводы
Мы показали вам, как использовать команду find с различными параметрами и критериями.
Эта статья должна дать вам фундаментальное представление о том, как находить файлы в ваших системах Linux. Вы также можете посетить страницу руководства find и прочитать обо всех других мощных параметрах команды find .
Если у вас есть вопросы или замечания, пожалуйста, оставьте комментарий ниже.
Источник