Команда file в linux

Обновлено: 03.07.2024

Из данной главы вы узнаете о том, как определять тип файлов, создавать, удалять, копировать и перемещать файлы с помощью таких утилит, как file , touch , rm , cp , mv и rename .

Все имена файлов регистрозависимы

Имена файлов в Linux (или в любой системе Unix) являются регистрозависимыми. Это означает, что имена FILE1 и file1 не являются равноценными, а путь к файлу /etc/hosts отличен от пути к файлу /etc/Hosts (последнего файла не должно существовать в файловой системе типичного компьютера, работающего под управлением Linux).

В данном примере продемонстрировано различие между двумя файлами, причем имя первого файла начинается с заглавной буквы W , а второго - с прописной буквы w .

Все является файлом

Любая директория на самом деле является файлом (с регистрозависмым именем!), хотя этот файл и имеет специальный тип. Каждый терминал (например, /dev/pts/4 ), любой жесткий диск или раздел на нем (например, /dev/sdb1 ) и любой процесс представлены где-либо в рамках файловой системы с помощью файла . После изучения данной главы у вас не останется сомнений в том, что в Linux все является файлом .

Утилита file

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

Утилита file использует файл со списком "магических последовательностей байт", содержащий шаблоны для распознавания типов данных. Файл со списком "магических последовательностей байт" расположен по пути /usr/share/file/magic . Используйте команду man 5 magic в случае необходимости получения дополнительной информации о нем.

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

Утилита touch

Создание пустого файла

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

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

Команда touch -t

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

Удаление файлов навсегда

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

Команда rm -i

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

Команда rm -rf

По умолчанию с помощью команды rm -r невозможно удалить непустые директории. Однако, утилита rm принимает параметры, которые позволят вам удалять любую директорию. Команда rm -rf известна благодаря тому, что она позволяет удалять все элементы файловой системы (конечно же, в том случае, если вы имеете достаточные права для выполнения этой операции). В том случае, если вы вошли в систему, воспользовавшись учетной записью пользователя root, следует проявить особую осторожность при использовании команды rm -rf (параметр f расшифровывается как force (принудительное выполнение операции), а параметр r - как recursive (рекурсивный обход директорий)), так как в случае работы с учетной записью пользователя root, упомянутые ограничения прав не будут распространяться на вас. Вы сможете в буквальном смысле удалить все файлы вашей системы по неосторожности.

Утилита cp

Копирование отдельных файлов

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

Копирование файлов в другую директорию

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

Команда cp -r

Для копирования директорий целиком следует использовать команду cp -r (параметр -r позволяет осуществлять рекурсивное копирование всех файлов из всех поддиректорий).

Копирование множества файлов в директорию

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

Команда cp -i

Для предотвращения перезаписи существующих файлов в ходе использования утилиты cp следует использовать параметр -i (для активации интерактивного режима копирования).

Утилита mv

Переименование файлов с помощью утилиты mv

Утилита mv используется для переименования файлов или для перемещения файлов в другие директории.

В том случае, если вам необходимо переименовать один файл, утилита mv является предпочтительным инструментом.

Переименование директорий с помощью утилиты mv

Эта же утилита mv может быть использована и для переименования директорий.

Команда mv -i

Утилита mv поддерживает параметр -i по аналогии с утилитами cp и rm .

В примере ниже показано, как при использовании команды mv -i запрашивается подтверждение перезаписи существующего файла.

Утилита rename

Об утилите rename

Утилита rename является одним из редких случаев, когда в рамках книги "Фундаментальные основы Linux" приходится делать разделение между дистрибутивами Linux. Практически каждая из описанных в данной книге утилит работает практически на каждом компьютере под управлением Linux. Но реализации утилиты rename в различных дистрибутивах отличаются.

Следует пытаться использовать утилиту mv всегда, когда вам необходимо переименовать несколько файлов.

Утилита rename в дистрибутиве Debian/Ubuntu

Утилита rename в дистрибутиве Debian имеет сложный синтаксис (используются регулярные выражения) для единовременного переименования множества файлов.

Ниже приведен пример использования утилиты rename , с помощью которой у всех файлов с расширением .txt производится замена расширения на .jpg. Во втором примере производится замена всех (первых) вхождений слов "file" на "document" во всех файлах с расширением .jpg.

Утилита rename в дистрибутиве CentOS/RHEL/Fedora

В Red Hat Enterprise Linux синтаксис утилиты rename немного отличается. В первом примере, представленном ниже, осуществляется переименование всех файлов с расширением .conf (*.conf) путем замены всех вхождений .conf на .backup. Во втором примере производится переименование всех файлов (*) путем замены всех вхождений one на ONE.

Практическое задание: работа с файлами

1. Выведите список файлов директории /bin.

2. Выведите информацию о типах файлов /bin/cat, /etc/passwd и /usr/bin/passwd.

3b. Выведите информацию о типах файлов wolf.jpg и LinuxFun.pdf.

3c. Переименуйте файл wolf.jpg в wolf.pdf (с помощью команды mv).

3d. Выведите информацию о типах файлов wolf.pdf и LinuxFun.pdf.

4. Создайте директорию

/touched и перейдите в нее.

5. Создайте файлы today.txt и yesterday.txt в директории touched.

6. Измените дату создания файла yesterday.txt таким образом, чтобы она совпадала с датой прошлого дня.

7. Создайте копию файла yesterday.txt с именем copy.yesterday.txt.

8. Переименуйте файл copy.yesterday.txt в kim.

9. Создайте директорию с именем

/testbackup и скопируйте все файлы из директории

10. Используйте одну команду для удаления директории

/testbackup и всех файлов из нее.

11. Создайте директорию

/etcbackup и скопируйте файлы с расширением .conf (*.conf) из директории /etc в нее. Проверьте, был ли осуществлен обход всех поддиректорий директории /etc?

12. Используйте утилиту rename для переименования всех файлов с расширением .conf (*.conf) таким образом, чтобы расширения всех этих файлов изменились на .backup. (Если у вас есть возможность работы более чем со одним дистрибутивом, попробуйте выполнить эту операцию во всех этих дистрибутивах!).

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

1. Выведите список файлов директории /bin.

2. Выведите информацию о типах файлов /bin/cat, /etc/passwd и /usr/bin/passwd.

3b. Выведите информацию о типах файлов wolf.jpg и LinuxFun.pdf.

3c. Переименуйте файл wolf.jpg в wolf.pdf (с помощью команды mv).

3d. Выведите информацию о типах файлов wolf.pdf и LinuxFun.pdf.

4. Создайте директорию

/touched и перейдите в нее.

5. Создайте файлы today.txt и yesterday.txt в директории touched.

6. Измените дату создания файла yesterday.txt таким образом, чтобы она совпадала с датой прошлого дня.

7. Создайте копию файла yesterday.txt с именем copy.yesterday.txt.

8. Переименуйте файл copy.yesterday.txt в kim.

9. Создайте директорию с именем

/testbackup и скопируйте все файлы из директории

10. Используйте одну команду для удаления директории

/testbackup и всех файлов из нее.

11. Создайте директорию

/etcbackup и скопируйте файлы с расширением .conf (*.conf) из директории /etc в нее. Проверьте, был ли осуществлен обход всех поддиректорий директории /etc?

Будут скопированы исключительно файлы с расширением .conf (*.conf), находящиеся непосредственно в директории /etc/.

12. Используйте утилиту rename для переименования всех файлов с расширением .conf (*.conf) таким образом, чтобы расширения всех этих файлов изменились на .backup. (Если у вас есть возможность работы более чем со одним дистрибутивом, попробуйте выполнить эту операцию во всех этих дистрибутивах!).

Команда file предназначена для задействования одноименной утилиты, осуществляющей определение типов переданных элементов файловой системы (файлов, директорий, ссылок, именованных каналов и сокетов). Данная утилита исследует содержимое файлов, а не ограничивается проверкой их расширений.

Если говорить конкретно, утилита выполняет до трех проверок каждого из указанных пользователем элементов файловой системы. Первая проверка заключается в использовании системного вызова stat(), позволяющего получить доступ к содержимому структуры inode элемента файловой системы. Системный вызов обрабатывается ядром операционной системы и позволяет выяснить, является ли элемент файловой системы обычным файлом, директорией, символьной или жесткой ссылкой, именованным каналом или сокетом.

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

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

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

Обычно утилита используется без каких-либо параметров, вместо имен файлов могут использоваться шаблоны. Параметр -k позволяет принудительно выполнить все проверки для получения максимального объема информации об объектах файловой системы. Параметр -b позволяет не выводить имена исследуемых объектов файловой системы, что полезно в случае сбора статистики о типах файлов. Параметр -F позволяет указать символ-разделитель имени файла и строки с информацией о его типе. Параметр -f предназначен для передачи утилите имени текстового файла в строках которого приводятся имена объектов файловой системы, которые необходимо исследовать. Если вам нужны MIME-типы файлов, а не описания их типов, вы можете воспользоваться параметром -i. Для того, чтобы не обновлять метку времени доступа к объектам файловой системы может использоваться параметр -p. Для исследования содержимого сжатых файлов может использоваться параметр -z.

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

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

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

Исследование типов файлов из директории

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

Исследование типов файлов из архива

Утилита может выводить информацию о типе первого файла из архива в случае использования параметра -z:

Как узнать тип файла без расширения или с неправильным расширением

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

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

Использование очень простое — укажите одно или несколько имён файлов, то есть:

Чтобы узнать тип файла без расширения, имеющего имя «file1» нужно выполнить команду:

Вначале идёт имя файла, а затем через двоеточия показывается информация о нём. В этом примере это JPEG, то есть изображение. Также для данного файла частично показана метаинформация.

Если вы не хотите, чтобы вначале показывалось имя файла, то используйте опцию -b:

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

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


Можно указать имена всех файлов или использовать * (звёздочка) чтобы проверить все файлы в текущей директории:


Удалось определить тип каждого файла:

Как по типу файла узнать расширение

Чтобы узнать правильное расширение для файла определённого типа используйте опцию --extension:


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

Программа file считывает данные из файла и, следовательно, меняет дату последнего доступа к нему. Опция -p, --preserve-date в системах, поддерживающих utime или utimes, попытается сохранить время доступа к анализируемым файлам, чтобы сделать вид, что файл никогда их не читался.

Как узнать файловую систему диска

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

Опция -L, --dereference заставляет следовать по символическим ссылкам, как опция с подобным именем в ls (в системах, которые поддерживают символические ссылки). Это значение по умолчанию, если определена переменная среды POSIXLY_CORRECT.

Обычно file пытается только прочитать и определить тип файлов, переданных в качестве аргументов, о которых stat сообщает как обычные файлы. Это предотвращает проблемы, поскольку чтение специальных файлов может иметь специфические последствия. Указание опции -s, --special-files заставляет файл также читать файлы, которые являются специальными блочными или символьными файлами. Это полезно для определения типов файловой системы данных в необработанных разделах диска, которые являются специальными блочными файлами. Эта опция также заставляет файл игнорировать размер файла, сообщаемый stat, поскольку в некоторых системах он сообщает нулевой размер для необработанных разделов диска.

Следующая информация выведет данные о файловой системе диска /dev/sda:


Как следует из вывода, это файловая система ext4. Также показаны некоторые её характеристики и поддерживаемые возможности.

Без опции -s, то есть командой

мы получили бы следующий результат:

Как в file заглянуть во внутрь сжатых файлов

С помощью опции -z, --uncompress можно попытаться заглянуть во внутрь сжатых файлов. Опция не всегда работает и иногда из-за неё работа file завершается ошибкой.

Команда file используется для определения типа файла. Тип .file может быть читаемым человеком (например, «текст ASCII») или MIME-типом (например, «text / plain; charset = us-ascii»). Эта команда проверяет каждый аргумент в попытке классифицировать его.

Он имеет три набора тестов следующим образом:

  • Тест файловой системы: Этот тест основан на результате, который возвращается из системного вызова stat . Программа проверяет это, если файл пуст или это какой-то особый файл. Этот тест приводит к печати типа файла.
  • магический тест: эти тесты используются для проверки файлов с данными в определенных фиксированных форматах.
  • языковой тест: этот тест ищет определенные строки, которые могут появляться в любом месте в первых нескольких блоках файла.

Синтаксис:

Пример: команда отображает тип файла


Параметры:

    -b, –brief: используется для отображения только типа файла в кратком режиме.

Синтаксис:

Пример:


Здесь мы видим этот тип файла без имени файла.


Вывод показывает все файлы в домашнем каталоге

Синтаксис:

Пример:


Вывод показывает все файлы в определенном каталоге.

Синтаксис:

Пример:


Вывод показывает диапазон файлов.

Пример:


Синтаксис:


Синтаксис:

Пример:


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