Linux, как найти тип файла linux

Обновлено: 02.07.2024

Хотите узнать, как найти файл в Linux? Что ж, сюрприз, сюрприз, вам понадобится команда find в Linux, чтобы просмотреть ваш каталог или файловую систему. Команда Linux find может рекурсивно фильтровать объекты, используя простой условный механизм, а если вы используете флаг -exec, вы также сможете сразу найти файл в Linux. и обработайте его, не используя другую команду.

Найти файлы Linux по имени или расширению

Введите find в командной строке, чтобы отследить конкретный файл по его имени или расширению. Если вы хотите найти файлы *.err в каталоге /home/username/ и во всех подкаталогах, попробуйте следующее: найти /home/username/ -name "*.err"

Типичный Linux Поиск Команды и синтаксис

Выражения команды

найти выглядят следующим образом:

найти параметры команды начало/путь выражение

Атрибут options управляет поведением и методом оптимизации процесса find. Атрибут starting/path определяет каталог верхнего уровня, в котором команда find в Linux начинает процесс фильтрации. Атрибут выражение управляет оценками, которые просматривают дерево каталогов для создания выходных данных.

Давайте разберем команду поиска Linux, где нам нужен не просто поиск файла Linux по имени:

найти -O3 -L /var/www/ -name "*.html"

Это включает оптимизацию верхнего уровня (-O3) и позволяет find переходить по символическим ссылкам (-L). Команда find в Linux ищет во всей иерархии каталогов в /var/www/ файлы с расширением .html на конце.

Основные примеры

<р>1. найти . -назовите этот файл.txt

Если вам нужно знать, как найти в Linux файл с именем thisfile.txt, он будет искать его в текущем и подкаталогах.

<р>2. найти /home -name *.jpg

Ищите все файлы .jpg в каталоге /home и под ним.

<р>3. найти . -тип f -пусто

Найдите пустой файл в текущем каталоге.

<р>4. найти /home -user randomperson-mtime 6 -iname ".db"

Поиск всех файлов .db (без учета регистра), которые были изменены за последние 6 дней пользователем с именем randomperson.

Параметры и оптимизация команды Найти для Linux

find по умолчанию игнорирует символические ссылки (файлы ярлыков). Если вы хотите, чтобы команда найти переходила по символическим ссылкам и отображала их, просто добавьте к команде параметр -L, как мы сделали в этом примере.

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

-O2 выполняет фильтрацию по имени и типу файла, прежде чем перейти к более сложным фильтрам для поиска файла в Linux. Уровень -O3 переупорядочивает все тесты в соответствии с их относительной стоимостью и вероятностью успеха.

  • -O1 — (по умолчанию) сначала фильтруется по имени файла.
  • -O2 — сначала имя файла, затем тип файла
  • -O3 — разрешить поиску автоматически изменять порядок поиска в зависимости от эффективности использования ресурсов и вероятности успеха.
  • -maxdepth X — поиск в этом каталоге вместе со всеми подкаталогами до уровня X
  • -iname — поиск без учета регистра.
  • -not — выдавать только результаты, не соответствующие тестовому набору.
  • -type f — искать файлы
  • -type d — искать каталоги

Найти файлы по времени их изменения

Команда Linux find позволяет фильтровать иерархию каталогов на основе времени последнего изменения файла:

найти / -name "*jpg" -mtime 5

найти /home/randomuser/ -name "*jpg" -mtime 4

Первоначальная команда Linux find выводит список файлов во всей системе, которые заканчиваются символами jpg и которые были изменены за предыдущие 5 дней. Следующий фильтр отфильтровывает домашний каталог randomuser's на предмет файлов, имена которых заканчиваются на "conf" и которые были изменены за предыдущие 4 дня.

Используйте Grep для поиска файлов по содержимому

Команда find в Linux великолепна, но она может фильтровать дерево каталогов только по имени файла и метаданным. Для поиска файлов на основе того, что они содержат, вам понадобится такой инструмент, как grep. Взгляните:

найти . -type f -exec grep "forinstance" '<>' \; -печать

Это просматривает каждый объект в текущем дереве каталогов (.), который является файлом (-type f), а затем запускает grep «forinstance» для каждого совпадающего файла, а затем печатает их на экране (-print).Фигурные скобки (<>) — это заполнитель для тех результатов, которые соответствуют команде Linux find. Знак <> заключен в одинарные кавычки (‘), чтобы grep не получил искаженное имя файла. Команда -exec заканчивается точкой с запятой (;), которая также нуждается в escape-последовательности (\;), чтобы она не интерпретировалась оболочкой.

До того, как был реализован -exec, xargs использовался бы для создания того же типа вывода:

найти . тип f-print | xargs grep "для примера"

Мониторинг серверов и сайтов

Как найти и обработать файлы с помощью команды Найти в Linux

Параметр -exec запускает команды для каждого объекта, который соответствует выражению find. Посмотрим, как это выглядит:

Это фильтрует все объекты в текущем дереве каталогов (.) для файлов с именем rc.conf и запускает команду chmod o+r для изменения прав доступа к файлам результатов, которые возвращает find.

Корневой каталог Linux — это место, где выполняются команды, запускаемые -exec. Используйте -execdir для выполнения нужной команды в каталоге, где находится совпадение, поскольку при определенных обстоятельствах это может быть более безопасным и повысить производительность.

Параметры -exec или -execdir будут продолжать работать сами по себе, но если вы хотите видеть подсказки перед тем, как они что-либо сделают, замените -exec -ok или -execdir для -okdir.

Как управлять файлами с помощью Plesk?

Допустим, у вас есть веб-сайт, который полностью готов к работе на вашем ноутбуке/настольном компьютере, и вы хотите использовать диспетчер файлов, чтобы загрузить его на сервер Plesk в Linux:

Как редактировать файлы в файловом менеджере

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

  • Редактор HTML или редактор типа "что видишь, то и получаешь". Это хороший вариант, поскольку он добавляет HTML-теги за вас. Если вы не очень хорошо разбираетесь в HTML, этот вариант может оказаться полезным.
  • Редактор кода. Когда вы открываете файлы HTML с помощью этого, вам будет представлен текст, в котором выделен синтаксис HTML. Если вам удобно добавлять HTML-теги самостоятельно, вам подойдет редактор кода.
  • Текстовый редактор. Файлы HTML открываются как обычный текст.

Возможно, ваш администратор Plesk уже настроил расширение Rich Editor, и в этом случае вы можете использовать его для редактирования HTML-файлов. Rich Editor работает по принципу "что видишь, то и получаешь", как и редактор кода, хотя он лучше оснащен такими функциями, как, например, проверка орфографии.

Вот как использовать диспетчер файлов для редактирования файла:

  1. Наведите курсор на файл, и соответствующая ему строка будет выделена.
  2. Откройте контекстное меню файла, щелкнув его.
  3. Нажмите «Редактировать в … редакторе» (это зависит от выбранного вами редактора).

Как изменить разрешения с помощью файлового менеджера

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

Для этого найдите элемент, для которого вы хотите ограничить доступ в Интернет, например:

  1. Наведите на него курсор и подождите, пока не появится выделение, как в предыдущем примере.
  2. Нажмите на файл, чтобы открыть его контекстное меню, и повторите то же самое в разделе "Изменить разрешения".
  3. Внесите изменения и нажмите "ОК". Если вы хотите узнать больше о том, как просматривать и изменять разрешения, см. раздел Настройка разрешений доступа к файлам и каталогам.

Подход File Manager по умолчанию заключается в изменении разрешений нерекурсивным образом, поэтому на вложенные файлы и каталоги не влияют измененные разрешения каталогов более высокого уровня, которым они принадлежат. В Plesk для Linux вы можете заставить Файловый менеджер изменять разрешения рекурсивным образом, предполагая, что ваш администратор Plesk настроил расширение Permissions Recursive и что вы понимаете восьмеричное представление прав доступа к файлам.

Чтобы включить рекурсивное редактирование прав доступа:

  1. Наведите курсор на каталог и дождитесь выделения.
  2. Нажмите, чтобы открыть его контекстное меню, а затем снова выберите Рекурсивный набор разрешений.
  3. Теперь вы можете редактировать их. «Разрешения для папки» говорят о каталоге более высокого уровня и любых связанных с ним подкаталогах. В данном случае «Разрешения на доступ к файлам» применяются к подфайлам.
  4. После внесения изменений в права доступа нажмите "ОК".

Поиск файлов в диспетчере файлов

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

В Linux все рассматривается как файл. В UNIX семь стандартных типов файлов: обычные, каталоги, символические ссылки, специальные FIFO, специальные блочные, специальные символы и сокеты. В Linux/UNIX нам приходится иметь дело с файлами разных типов, чтобы эффективно управлять ими.

  1. Обычные файлы
  2. Файлы каталога
  3. Специальные файлы

Самый простой способ узнать тип файла в любой операционной системе – посмотреть на его расширение, такое как .txt, .sh, .py и т. д. Если у файла нет расширения, в Linux можно использовать файл полезность. В этой статье мы продемонстрируем примеры файловых команд для определения типа файла в Linux.

Чтобы узнать типы файлов, мы можем использовать команду file.

Синтаксис: файл [OPTION…] [FILE…]

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

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

Мы можем передать список файлов в одном файле и указать с помощью параметра -f, как показано ниже:

Используя параметр -s, мы можем прочитать специальный файл блока или символа.

При использовании параметра -b имена файлов не добавляются к строкам вывода

При использовании параметра -F в качестве разделителя будет использоваться строка вместо «:».

Использование параметра -L будет следовать символическим ссылкам (по умолчанию, если установлено POSIXLY_CORRECT):

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

Для получения дополнительной информации и вариантов использования вы можете использовать следующую команду:

Мы также можем использовать команду ls для определения типа файла.

Синтаксис:

Типы файлов и объяснение

Обычные файлы

Обычные файлы — это обычные файлы в системе, содержащие программы, тексты или данные. Он используется для хранения такой информации, как текст или изображения. Эти файлы расположены в каталоге/папке. Обычные файлы содержат все читаемые файлы, такие как текстовые файлы, файлы Docx, программные файлы и т. д., двоичные файлы, файлы изображений, такие как JPG, PNG, SVG и т. д., сжатые файлы, такие как ZIP, RAR и т. д.

Пример:

Или мы можем использовать команду «file *», чтобы узнать тип файла

Файлы каталога

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

Мы можем узнать файл каталога с помощью следующей команды:

Мы также можем использовать команду файла *

Специальные файлы

1. Блокировать файлы:

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

Мы можем узнать файл блокировки с помощью следующей команды:

Мы также можем использовать команду файла:

2. Файлы символьных устройств:

Символьный файл — это аппаратный файл, который считывает/записывает данные в файле посимвольно. Эти файлы обеспечивают последовательный поток ввода или вывода и обеспечивают прямой доступ к аппаратным устройствам. Терминал, последовательные порты и т. д. являются примерами файлов этого типа.

Мы можем найти файлы символьных устройств следующим образом:

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

3. Файлы каналов:

Другое название канала — «именованный» канал, который иногда называют FIFO. FIFO расшифровывается как «First In, First Out» и относится к свойству того, что порядок входящих байтов такой же, как и исходящих. «Имя» именованного канала на самом деле является именем файла в файловой системе. Этот файл отправляет данные от одного процесса к другому, чтобы процесс-получатель считывал данные в порядке поступления.

Мы можем узнать файл канала с помощью следующей команды:

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

4. Файлы ссылок на символы:

Файл символьной ссылки — это тип файла в Linux, который указывает на другой файл или папку на вашем устройстве. Файлы символьных ссылок также называются Symlink и похожи на ярлыки в Windows.

Мы можем найти файл ссылки на символ с помощью следующей команды:

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

5. Файлы сокетов:

Сокет — это специальный файл, который используется для передачи информации между приложениями и обеспечивает связь между двумя процессами. Мы можем создать файл сокета, используя системный вызов socket(). Файл сокета находится в /dev корневой папки, или вы можете использовать команду find / -type s для поиска файлов сокета.

Найти тип любого файла или группы файлов с помощью команды «файл»

  • Университет Буффало
  • Университет Денвера
  • Пенсильванский университет

Бывший автор Lifewire Юрген Хаас – разработчик программного обеспечения, специалист по данным и поклонник операционной системы Linux.

Крис Селф (Chris Selph) — сертифицированный CompTIA преподаватель технологии и профессиональный преподаватель информационных технологий. Он также работает администратором сети и сервера и выполняет обслуживание и ремонт компьютеров для многочисленных клиентов.

Что нужно знать

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

Linux не использует расширения файлов; скорее, тип файла является частью имени файла. В этой статье объясняется, как узнать истинный тип файла в Linux.

Как использовать команду «файл»

Команда file имеет следующую форму:

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

Вывод примерно такой:

touch.svg: изображение масштабируемой векторной графики SVG

Разные типы файлов дают разные результаты, например:

  • Тип файла ODS: электронная таблица OpenDocument
  • Тип файла PDF: PDF-документ, версия 1.4
  • Тип файла CSV: текст ASCII, очень длинные строки, с индикаторами строки CRLF.

Обработка нескольких файлов

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

Например, откройте файл с именем testfiles с помощью редактора nano и добавьте в него следующие строки:

  • /etc/пароль
  • /etc/pam.conf
  • /etc/opt

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

файл -f тестовые файлы

Вывод будет примерно таким:

  • /etc/passwd: текст ASCII
  • /etc/pam.conf: текст ASCII
  • /etc/opt: каталог

Еще один способ — запустить команду file один раз, но с указанием нескольких целей. Например:

файл /etc/passwd /etc/pam.conf /etc/opt

Вывод будет примерно таким:

  • /etc/passwd: текст ASCII
  • /etc/pam.conf: текст ASCII
  • /etc/opt: каталог

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

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

Результаты могут быть, например, "Рабочий стол", "Документы" и "Загрузки".

Сжатые файлы

Когда вы запускаете команду file для сжатого файла, вы видите что-то вроде этого:

  • file.zip: данные ZIP-архива, версия не ниже 2.0 для извлечения

Хотя этот результат говорит о том, что файл является архивным, вы не знаете его содержимого. Загляните внутрь zip-файла, чтобы увидеть типы файлов в сжатом файле. Следующая команда запускает команду file для файлов внутри ZIP-файла:

файл -z имя файла

Теперь на выходе отображаются типы файлов в архиве.

Как работает команда «файл»

Команда file запускает три набора тестов для файла:

  • Тесты файловой системы
  • Магические тесты
  • Языковые тесты

Первый набор тестов, возвращающий правильный ответ, предлагает тип файла для печати.

Тесты файловой системы проверяют результат системного вызова stat. Программа проверяет, является ли файл пустым и является ли он специальным файлом. Если тип файла найден в системном заголовочном файле, он возвращается как допустимый тип файла.

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

  • /etc/магия
  • /usr/share/misc/magic.mgc
  • /usr/share/misc/магия

Заключительные тесты — это языковые тесты. Файл проверяется на предмет того, является ли он текстовым. Проверяя первые несколько байтов файла, тест определяет, является ли файл форматом ASCII, UTF-8, UTF-16 или другим форматом, который идентифицирует файл как текстовый файл. Когда набор символов выведен, файл тестируется на разных языках.

Я знаю, что могу найти файлы с помощью find : find . -type f -name 'восход солнца' . Пример результата:

Я также знаю, что могу определить тип файла: файл восход солнца. Пример результата:

Но как найти файлы по типу файла?

Например, my-find . -type f -name 'sunrise' -filetype=bash-script :

Нет опции --filetype для команды find или чего-то еще, что бы сообщало вам тип файла. Единственное, что вы можете сделать, это использовать --exec file <> \; а затем передать его в grep Bourne, если вы искали сценарии bash, или в grep Perl, если вы искали сценарии Perl или что-то в этом роде.

5 ответов 5

"Типы файлов" в системе Unix — это обычные файлы, каталоги, именованные каналы, специальные символьные файлы, символические ссылки и т. д. Это типы файлов, которые find может фильтровать с помощью параметра -type.

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

Распространенный способ маркировки различных типов файлов данных — по их MIME-типу, и файл может определить MIME-тип файла.

Использование file с find для определения MIME-типа обычных файлов и его использование только для поиска сценариев оболочки:

Добавьте -name Sunrise перед -exec, если вы хотите обнаруживать только скрипты с таким именем.

Приведенная выше команда find найдет все обычные файлы в текущем каталоге или ниже него и для каждого такого файла вызовет короткий встроенный сценарий оболочки. Этот сценарий запускает file -bi для найденного файла и завершает работу с нулевым статусом выхода, если выходные данные этой команды содержат строку /x-shellscript . Если вывод не содержит этой строки, он завершается с ненулевым статусом выхода, что приводит к немедленному продолжению поиска со следующим файлом. Если было обнаружено, что файл является сценарием оболочки, команда find продолжит вывод пути к файлу (-print в конце, который также можно заменить каким-либо другим действием).

Команда file -bi выводит MIME-тип файла. Для сценария оболочки в Linux (и большинстве других систем) это будет что-то вроде

в то время как в системах с немного более старой версией файловой утилиты это может быть

Общим битом является подстрока /x-shellscript.

Обратите внимание, что в macOS вам придется использовать file -bI вместо file -bi по причинам (параметр -i делает совсем другое). В остальном вывод в macOS похож на вывод в системе Linux.

Хотите ли вы выполнить какое-либо пользовательское действие над каждым найденным скриптом оболочки, вы можете сделать это с другим -exec вместо -print в командах поиска выше, но это также можно сделать

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