- Команда file в Linux
- Синтаксис и опции file
- Примеры использования file
- Выводы
- Файлы в Linux
- Узнать расположение файла
- Создать файл
- Создать сразу несколько файлов
- Как очистить файл в linux
- noclobber: Запрет перезаписи файла
- Как удалить файл в linux
- Информация о файле
- Узнать количество строк в файле linux
- Объединение файлов
- echo
- Создать файл определённого размера
- Узнать кодировку файла
- Смена кодировки
- Изменить владельца файла
- Обрезать mp3
Команда file в Linux
Команда file — одна из самых полезных, поскольку позволяет узнать тип данных, которые на самом деле содержатся внутри документа. Если у вас есть какой-либо файл, взятый из ненадёжного источника, не поленитесь проверить его с помощью этой команды, прежде чем нажать кнопку Открыть. Возможно, такая предосторожность покажется лишней, но она оградит вас от «встречи» с нежелательным контентом.
В большинстве дистрибутивов Linux утилита file (работу которой и запускает одноимённая команда) входит в стандартный набор программного обеспечения.
Синтаксис и опции file
Синтаксис команды file достаточно простой. Записывать её в эмуляторе терминала или консоли следует так:
file опции название_документа
Что же касается опций, то их у этой команды несколько десятков. Мы рассмотрим лишь основные:
- -b, —brief — запрет на демонстрацию имен и адресов файлов в выводе команды;
- -i, —mime — определение MIME-типа документа по его заголовку;
- —mime-type, —mime-encoding — определение конкретного элемента MIME;
- -f, —files-from — анализ документов, адреса которых указаны в простом текстовом файле;
- -l, —list — список паттернов и их длина;
- -s, —special-files — предотвращение проблем, которые могут возникнуть при чтении утилитой специальных файлов;
- -P — анализ определенной части файла, которая обозначается различными параметрами;
- -r, —raw — отказ от вывода /ooo вместо непечатных символов;
- -z — анализ содержимого сжатых документов.
Для того, чтобы ознакомиться с полным списком опций, выполните в терминале команду:
Примеры использования file
Если вам нужно всего лишь посмотреть тип файла, использовать опции не обязательно. Достаточно прописать имя команды, а также название файла и путь к нему, при условии, что он находится не в корневой папке:
Случается, что нужно проверить не один, а несколько файлов. Чтобы не выполнять команду много раз подряд, перечисляйте названия всех файлов через пробел:
file /home/main-user/losst/test-file1.zip /home/main-user/losst/test-file2.tiff
Как видно на примере, картинки с расширениями gif и tiff в действительности оказались текстовыми документами, а архив с расширением zip — PDF документом. Кстати, команда file даёт возможность не только проверить, является ли архив архивом, но и заглянуть внутрь, чтобы узнать, что в нём содержится. Для этой цели используется опция -z:
file -z /home/main-user/losst/testarchive.zip
Как вы успели заметить, команда, возвращая ответ, постоянно выводит названия файлов, что в некоторых случаях бывает удобно, но зачастую только усложняет чтение результатов. Отключить эту функцию легко — воспользуйтесь опцией -b:
file -b /home/main-user/losst/test-file.gif /home/main-user/losst/test-file1.zip /home/main-user/losst/test-file2.tiff
Иногда нужно узнать не просто тип файла, а его MIME-тип. В таком случае на помощь приходит опция -i:
file -i -b /home/main-user/losst/fileA.sbin /home/main-user/losst/fileG.aspx /home/main-user/losst/fileH.lua
Нередко по каким-либо причинам утилита не может найти указанный файл: например, вы ошиблись буквой в его названии или неверно указали папку, в которой он находится. Тогда вывод информации об этом файле предваряет фраза cannot open. Впрочем, есть возможность видоизменить результат, добавив в него сообщение об ошибке. Для этого используйте опцию -E.
Сравните вывод команды с опцией -E и без неё:
file -E -b /home/main-user/losst/test-file1.zip /home/main-user/losst/test-file4.raw /home/main-user/losst/test-file.gif
file -b /home/main-user/losst/test-file1.zip /home/main-user/losst/test-file4.raw /home/main-user/losst/test-file.gif
Еще один способ работы с утилитой file — запись названий и адресов документов в простой текстовый файл. Применяя этот способ на практике, не забывайте добавлять к команде опцию —files-from, после которой указывайте имя файла, содержащего список документов, и путь к нему.
file —files-from /home/main-user/losst/list_of_files.txt
Выводы
Команда file помогает избежать ситуаций, когда вам приходится открывать подозрительные файлы, не будучи уверенными в их содержимом. Также вы можете использовать её для проверки содержимого нескольких архивов, если есть необходимость найти потерявшийся в большом массиве файлов документ, но нет желания просматривать все архивы вручную.
Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.
Файлы в Linux
В Linux всё является файлами и tty терминалы не исключение.
crw—w—-. 1 andrei tty 136, 1 Nov 19 12:43 /dev/pts/1
Первый символ — это тип файла.
Доступно семь типов файлов: обычные, директории, символьные, блоки, сокеты, именованые каналы, символьные ссылки
— : regular file
d : directory
c : character device file
b : block device file
s : local socket file
p : named pipe
l : symbolic link
Тип c означает character. То есть этот файл может принимать и показывать символы
drwxr-xr-x. 118 root root 8192 Jul 13 13:37 /etc
Видно, что тип файла d. То есть directory
Для просмотра дисков/блоков выполните
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 8G 0 disk ├─sda1 8:1 0 1G 0 part /boot └─sda2 8:2 0 7G 0 part ├─centos-root 253:0 0 6.2G 0 lvm / └─centos-swap 253:1 0 820M 0 lvm [SWAP] sr0 11:0 1 57.7M 0 rom /run/media/andrei/VBox_GAs_6.1.10
brw-rw—-. 1 root disk 8, 0 Jul 13 13:37 /dev/sda brw-rw—-. 1 root disk 8, 1 Jul 13 13:37 /dev/sda1 brw-rw—-. 1 root disk 8, 2 Jul 13 13:37 /dev/sda2
Можно убедитсья, что тип файлов b. То есть block
? означает что должен быть один любой символ.
brw-rw—-. 1 root disk 8, 1 Jul 13 13:37 /dev/sda1 brw-rw—-. 1 root disk 8, 2 Jul 13 13:37 /dev/sda2
[12] означает что должен быть либо символ 1 либо символ 2
brw-rw—-. 1 root disk 8, 1 Jul 13 13:37 /dev/sda1 brw-rw—-. 1 root disk 8, 2 Jul 13 13:37 /dev/sda2
Когда вы хотите узнать версию системы вы можете выполнить
lrwxrwxrwx. 1 root root Jul 13 13:37 /etc/system-release -> centos-release
Тип файла l означает link то есть это не настоящий файл, а ссылка
ls -l /etc/system-release /etc/centos-release /etc/redhat-release
-rw-r—r—. 1 root root 37 Oct 23 17:53 /etc/centos-release lrwxrwxrwx. 1 root root Jul 13 13:37 /etc/redhat-release -> centos-release lrwxrwxrwx. 1 root root Jul 13 13:37 /etc/system-release -> centos-release
/etc/centos-release — это настоящий (regular) файл а остальные — ссылки на него.
Если бы вы пользовались redhat то настоящим был бы redhat-release
Ещё один способ получить информацию о версии — выполнить lsb_release -d где -d означает description
Description: CentOS Linux release 7.9.2009 (Core)
Узнать расположение файла
Узнать где находится файл lsb_release можно командой which lsb_release. Чтобы сразу получить дополнительную информацию выполните
-rwxr-xr-x. 1 root root 15929 Mar 27 2015 /usr/bin/lsb_release*
Опция -F означает показать тип файлов. Поэтому нам удалось увидеть * после lsb_release. * означает, что файл исполняемый.
Чтобы узнать откуда взялся файл можно воспользоваться командой rpm с опциями q (query) и f (file)
Чтобы скопировать файл в интерактивном режиме воспользуйтесь командой cp с опцией i (interactive)
interactive означает, что если файл с таким имененм существует, вас спросят прежде чем затирать его
cp -i /etc/hosts .
cp -i /etc/hosts .
Чтобы создать директорию сразу же с поддиректорией внутри воспользуйтесь командлой mkdir с опцией p (parent)
mkdir -p sites/heiheiru
ls -l sites
total 0
drwxrwxr-x. 2 andrei andrei 6 Nov 19 13:40 heiheiru
Создать файл
Можно сделать это с помощью echo
echo «» newfile
echo -n newfile
Либо с помощью >, но этот вариант мне не нравится, так как на моей Ubuntu приходится делать CTRL + C
touch -d ’15 July 1975′ newfile
stat newfile
File: newfile Size: 0 Blocks: 0 IO Block: 4096 regular empty file Device: fd00h/64768d Inode: 1851125 Links: 1 Access: (0644/-rw-r—r—) Uid: (26167/avorotyn) Gid: ( 2999/sshusers) Access: 1975-07-15 00:00:00.000000000 +0200 Modify: 1975-07-15 00:00:00.000000000 +0200 Change: 2022-06-15 10:05:27.686885410 +0300 Birth: —
Создать сразу несколько файлов
Если файлов нужно немного — можно просто перечислить их через пробел
Чтобы создать одновременно несколько файлов с именами идущими по порядку выполните touch с <>
Этим способом можно создать много файлов одной короткой командой.
touch files/file
ls -l files
-rw-rw-r—. 1 andrei andrei 0 Jul 13 13:37 file1 -rw-rw-r—. 1 andrei andrei 0 Jul 13 13:37 file2 -rw-rw-r—. 1 andrei andrei 0 Jul 13 13:37 file3 -rw-rw-r—. 1 andrei andrei 0 Jul 13 13:37 file4 -rw-rw-r—. 1 andrei andrei 0 Jul 13 13:37 file5
Чтобы скопировать директорию files в директорию sites со всем содержимым выполните
cp -R files sites
ls -l sites/files/
total 0 -rw-rw-r—. 1 andrei andrei 0 Jul 13 13:37 file1 -rw-rw-r—. 1 andrei andrei 0 Jul 13 13:37 file2 -rw-rw-r—. 1 andrei andrei 0 Jul 13 13:37 file3 -rw-rw-r—. 1 andrei andrei 0 Jul 13 13:37 file4 -rw-rw-r—. 1 andrei andrei 0 Jul 13 13:37 file5
Директория files была скопирована в директорию sites, то есть теперь у sites есть поддиректория files.
Если у вас установлена утилита tree вы можете наглядно изучить вложенность. Если нет — выполните сперва
sites └── files ├── file1 ├── file2 ├── file3 ├── file4 └── file5 1 directory, 5 files
Создать ссылку можно командой ln, символьную ссылку ln -s
Как очистить файл в linux
Чтобы удалить содержимое файла используйте
noclobber: Запрет перезаписи файла
С помощью noclobber можно запретить перезапись существующих файлов.
echo «ABC» > sample
cat sample
echo «DEF» > sample
cat sample
set -o noclobber
set -o | grep noclobber
Обойти запрет можно добавив | после >
echo «GHI» >| sample
cat sample
Отключить запрет на перезапись
Как удалить файл в linux
Информация о файле
Чтобы получить информацию о свойствах файла используйте команду stat
File: newfile Size: 0 Blocks: 0 IO Block: 4096 regular empty file Device: fd00h/64768d Inode: 1851125 Links: 1 Access: (0644/-rw-r—r—) Uid: (26167/avorotyn) Gid: ( 2999/sshusers) Access: 2022-06-15 09:53:28.402613374 +0300 Modify: 2022-06-15 09:53:28.402613374 +0300 Change: 2022-06-15 09:53:28.402613374 +0300 Birth: —
Узнать количество строк в файле linux
Чтобы подсчитать сколько всего строк в файле today.log используйте
Объединение файлов
Для объединения файла one с файлом two достаточно выполнить
Объединить можно сразу несклько файлов.
Рассмотрим три файла one , two , three следующего содержания
Объединим их и проверим результат — он появится в консоли как и в случае двух файлов
Cool bookstore: Book24
Best hotels: Booking.com
Official Samsung Store: Samsung
Теперь объедими файлы в один новый файл big
cat one two three > big
vi big
Cool bookstore: Book24 Best hotels: Booking.com Official Samsung Store: Samsung
К новому файлу big мы можем дописать в конец файл one
Cool bookstore: Book24
Best hotels: Booking.com
Official Samsung Store: Samsung
Cool bookstore: Book24
echo
Те же действия можно выполнить с помощью команды echo
Создать файл определённого размера
Создадим файл 10M.txt размером в 10 Mb
truncate -s 10M /usr/share/10M.txt
Узнать кодировку файла
Предположим вы только что создали файл one.txt
Чтобы узнать его кодировку выполните
one.txt: inode/x-empty; charset=binary
Напишите, что-то в файле и снова проверьте кодировку
echo heihei.ru < one.txt
file -i one.txt
one.txt: text/plain; charset=us-ascii
Убедитесь, что команда file -i опеределила разные кодировки binary и us-ascii
У вас может быть не us-ascii а другой вариант
Добавим в файл кириллические символы
one.txt: text/plain; charset=utf-8
Смена кодировки
Предположим у вас есть файл файл.html в неправильной кодировке.
Менять кодировку файлов можно следующим способом:
iconv options -f from-encoding -t to-encoding inputfile(s) -o outputfile
cat файл.html | iconv -f cp1251 -t utf-8 > новый.html
В одну сторону. Потом открываем, редактируем, закрываем.
cat новый.html | iconv -f utf-8 -t cp1251 > файл.html
Конвертировать UTF-8 файл в SHIFT-JIS файл
iconv -f UTF-8 -t SHIFT-JIS utf-8-file > shift-jis-file
file -i shift-jis-file
shift-jis-file: text/plain; charset=unknown-8bit
touch sample echo «Привет» > sample file -i sample
sample: text/plain; charset=utf-8
iconv -f UTF-8 -t Windows-1251 sample > windows-1251-file
file -i windows-1251-file
windows-1251-file: text/plain; charset=iso-8859-1
Как вариант можно использовать convmv
Если у вас возникли проблемы с кодировкой на сайте советую прочитать статью «Сайт в неверной кодировке»
Изменить владельца файла
Допустим у вас есть файл one владельцами которого являются пользователь user и группа group
-rwx——. 1 user group 21012480 Dec 1 16:49 one
Чтобы изменить владельцев на andrei и heihei выполните
-rwx——. 1 andrei heihei 21012480 Dec 1 16:49 one
Разделы про поиск и сравнение файлов теперь в отдельных статьях.
В статье /dev/urandom можно узнать о том как создать файл со случайным именем
Обрезать mp3
ffmpeg -i original.mp3 -vn -acodec copy -ss 00:00:00 -to 00:30:00 part_01.mp3