Команда isoinfo позволяет задействовать одноименную утилиту, предназначенную для вывода информации о файловой системе ISO9660, которая присутствует на оптическом диске в указанном приводе или в файле образа оптического диска (ISO-файле). Данная утилита поставляется в комплекте с утилитами для записи оптических дисков wodim. Она работает с файловой системой ISO9660 с расширениями Joliet, Rock Ridge и El Torito и позволяет получить информацию о файловой системе, извлечь список ее файлов, а также прочитать содержимое любых из этих файлов без монтирования.
В соответствии со стандартом ISO9660, файловая система оптического накопителя должна содержать файлы с именами в формате 8.3 из латинских символов в верхнем регистре, цифр и символов подчеркивания (то есть, каждый из файлов должен явно идентифицироваться с помощью имени длиной не более 8 символов без пробелов, символа точки и расширения длиной не более трех символов; каждая из директорий — с помощью имени длиной не более 8 латинских символов без пробелов и точек) и иметь не более 8 уровней вложенности директорий. Исходя из этого, при выводе списка файлов файловой системы, вы столкнетесь с урезанными именами. Расширение Joliet предложено компанией Microsoft, позволяет давать файлам имена длиной до 64 символов в кодировке UCS-2 и поддерживается всеми актуальными операционными системами. Расширение Rock Ridge предназначено для POSIX-совместимых операционных систем и позволяет давать файлам произвольные имена длиной до 255 символов, иметь произвольное количество уровней вложенности директорий, сохранять права доступа к файлам, идентификаторы их владельцев и групп владельцев, количество жестких ссылок и метки времени создания и последнего доступа, а также добавляет поддержку специальных типов файлов — разреженных файлов, символьных ссылок, файлов устройств, файлов сокетов и файлов именованных каналов. Данная информация сохраняется в специальных скрытых директориях, а само расширение поддерживается всеми актуальными операционными системами, в том числе, Linux. С помощью рассматриваемой утилиты вы сможете получить информацию о наличии обоих расширений в файловой системе. Кроме того, вы сможете указать кодировку символов в случае использования расширения Joliet. Также вы сможете получать содержимое произвольных файлов файловой системы посредством стандартного потока вывода.
Базовый синтаксис команды выглядит следующим образом:
$ isoinfo [параметры] -i имя-iso-файла
В первую очередь следует отметить, что утилите необходимо указать способ доступа к существующей файловой системе ISO9660. Для этого следует использовать либо параметр -i с путем до ISO-файла, либо параметр dev= с путем до файла устройства привода для чтения оптических дисков (чаще всего это /dev/sr0). В отличие от большинства утилит из мира Linux, рассматриваемая утилита не выводит каких-либо данных в случае отсутствия параметра, указывающего необходимое действие. Таким параметром является параметр -d, позволяющий вывести информацию из основного дескриптора раздела ФС, параметр -f, позволяющий вывести список файлов ФС в формате команды find . -print, параметр -l, позволяющий вывести список файлов ФС в формате команды ls -lR, параметр -p, позволяющий вывести таблицу директорий ФС, параметр -J, позволяющий вывести информацию о расширениях Joliet указанной ФС, параметр -R, позволяющий вывести информацию о расширениях Rock Ridge указанной ФС, а также параметр -x, позволяющий вывести содержимое файла с указанным именем с помощью стандартного потока вывода. Параметр -s позволяет выводить размеры файлов в количестве блоков (блок имеет размер 2048 байт). Остальные параметры едва ли пригодятся обычным пользователям.
Для того, чтобы получить информацию о файловой системе оптического диска, следует прочитать информацию из основного дескриптора ФС ISO9660, что осуществляется с помощью параметра -d рассматриваемой утилиты. Для начала прочитаем информацию с оптического диска:
$ isoinfo dev=/dev/sr0
Error trying to open /dev/sr0 exclusively (Device or resource busy)... retrying in 1 second.
…
Error trying to open /dev/sr0 exclusively (Device or resource busy)... giving up.
WARNING: /dev/sr0 seems to be mounted!
isoinfo: Device or resource busy. Cannot open '/dev/sr0'. Cannot open SCSI driver.
isoinfo: Device or resource busy. Unable to open /dev/sr0
В случае подобного вывода следует отмонтировать файловую систему оптического диска, которая, скорее всего, была автоматически смонтирована силами окружения рабочего стола:
$ sudo umount /dev/sr0
[sudo] пароль для alex:
$ isoinfo -d dev=/dev/sr0
CD-ROM is in ISO 9660 format
System id:
Volume id: Ubuntu-Unity 23.04 amd64
Volume set id:
Publisher id:
Data preparer id: XORRISO-1.5.2 2019.10.26.180001, LIBISOBURN-1.5.2, LIBISOFS-1.5.2, LIBBURN-1.5.2
Application id:
Copyright File id:
Abstract File id:
Bibliographic File id:
Volume set size is: 1
Volume set sequence number is: 1
Logical block size is: 2048
Volume size is: 1525511
El Torito VD version 1 found, boot catalog is in sector 342
Joliet with UCS level 3 found
Rock Ridge signatures version 1 found
Eltorito validation header:
Hid 1
Arch 0 (x86)
ID ''
Key 55 AA
Eltorito defaultboot header:
Bootid 88 (bootable)
Boot media 0 (No Emulation Boot)
Load segment 0
Sys type 0
Nsect 4
Bootoff 157 343
По сути, данная команда позволяет получить метаданные файловой системы. В данном случае выведена информация о метке тома (Volume id), размере блока ФС (Logical block size is), размере раздела с ФС (Volume size is), наличии расширения для загрузки ОС с диска El Torito (El Torito VD version 1 found, boot catalog is in sector 342), наличии расширения для поддержки длинных имен файлов и юникода (Joliet with UCS level 3 found), наличии расширения для поддержки длинных имен файлов, прав доступа и специальных файлов Unix (Rock Ridge signatures version 1 found), а также подробная информация о заголовке El Torito для загрузки ОС.
Аналогичным образом можно получить информацию о файловой системе оптического диска из файла образа этого диска. Для этого предназначен параметр -i:
$ isoinfo -d -i ./Fedora-Workstation-Live-x86_64-38_Beta-1.3.iso
CD-ROM is in ISO 9660 format
System id:
Volume id: Fedora-WS-Live-38_B-1-3
Volume set id:
Publisher id:
Data preparer id: XORRISO-1.5.4 2021.01.30.150001, LIBISOBURN-1.5.4, LIBISOFS-1.5.4, LIBBURN-1.5.4
Application id:
Copyright File id:
Abstract File id:
Bibliographic File id:
Volume set size is: 1
Volume set sequence number is: 1
Logical block size is: 2048
Volume size is: 1007613
El Torito VD version 1 found, boot catalog is in sector 140
Joliet with UCS level 3 found
Rock Ridge signatures version 1 found
Eltorito validation header:
Hid 1
Arch 0 (x86)
ID ''
Key 55 AA
Eltorito defaultboot header:
Bootid 88 (bootable)
Boot media 0 (No Emulation Boot)
Load segment 0
Sys type 0
Nsect 4
Bootoff 8D 141
Несложно заметить, что вывод аналогичен. Правда в данном случае исследуется загрузочный диск Fedora Workstation вместо загрузочного диска Ubuntu Unity.
Для получения списка файлов файловой системы оптического диска без монтирования следует использовать один из поддерживаемых утилитой параметров. Например, параметр -f позволяет выводить список файлов в формате команды find . -print:
$ isoinfo -f dev=/dev/sr0
/.DISK
/BOOT
/BOOT.CATALOG;1
/CASPER
/DISTS
/EFI
/INSTALL
/MD5SUM.TXT;1
…
/POOL/UNIVERSE/W/WVSTREAMS/LIBUNICONF4_6_4_6_1_15BUILD.DEB;1
/POOL/UNIVERSE/W/WVSTREAMS/LIBWVSTREAMS4_6_BASE_4_6_1_.DEB;1
/POOL/UNIVERSE/W/WVSTREAMS/LIBWVSTREAMS4_6_EXTRAS_4_6_.DEB;1
Очевидно, что этот формат достаточно лаконичен. Если нужно больше подробностей, следует использовать параметр -l, позволяющий выводить список файлов в формате команды ls -lR:
$ isoinfo -l dev=/dev/sr0
Directory listing of /
d--------- 0 0 0 2048 Feb 20 2023 [ 35 02] .
d--------- 0 0 0 2048 Feb 20 2023 [ 35 02] ..
d--------- 0 0 0 2048 Feb 20 2023 [ 37 02] .DISK
d--------- 0 0 0 2048 Sep 22 2022 [ 38 02] BOOT
---------- 0 0 0 2048 Feb 20 2023 [ 342 00] BOOT.CATALOG;1
d--------- 0 0 0 2048 Feb 20 2023 [ 78 02] CASPER
d--------- 0 0 0 2048 Feb 20 2023 [ 79 02] DISTS
d--------- 0 0 0 2048 Sep 22 2022 [ 97 02] EFI
d--------- 0 0 0 2048 Feb 20 2023 [ 99 02] INSTALL
---------- 0 0 0 3561 Feb 20 2023 [1521091 00] MD5SUM.TXT;1
…
Directory listing of /POOL/UNIVERSE/W/WVSTREAMS/
d--------- 0 0 0 2048 Feb 20 2023 [ 119 02] .
d--------- 0 0 0 2048 Feb 20 2023 [ 117 02] ..
---------- 0 0 0 97732 May 18 2022 [1522922 00] LIBUNICONF4_6_4_6_1_15BUILD.DEB;1
---------- 0 0 0 174500 May 18 2022 [1522970 00] LIBWVSTREAMS4_6_BASE_4_6_1_.DEB;1
---------- 0 0 0 333152 May 18 2022 [1523056 00] LIBWVSTREAMS4_6_EXTRAS_4_6_.DEB;1
В данном случае помимо путей к файлам выводится информация об их типах, размерах, метках времени создания. Если же вас интересует лишь список директорий, вы можете воспользоваться параметром -p:
$ isoinfo -p dev=/dev/sr0
Path table starts at block 120, size 752
1: 1 23
2: 1 25 .DISK
3: 1 26 BOOT
4: 1 4e CASPER
5: 1 4f DISTS
6: 1 61 EFI
7: 1 63 INSTALL
8: 1 64 POOL
9: 3 27 GRUB
10: 5 50 LUNAR
11: 6 62 BOOT
12: 8 65 MAIN
13: 8 71 RESTRICTED
14: 8 74 UNIVERSE
15: 9 28 FONTS
16: 9 29 I386_PC
17: 9 3c X86_64_EFI
18: 10 51 MAIN
19: 10 55 MULTIVERSE
20: 10 59 RESTRICTED
21: 10 5d UNIVERSE
22: 12 66 B
23: 12 68 D
24: 12 6a G
25: 12 6c S
26: 12 6e U
27: 13 72 B
28: 14 75 W
29: 18 52 BINARY_AMD64
30: 18 53 BINARY_I386
31: 18 54 SOURCE
32: 19 56 BINARY_AMD64
33: 19 57 BINARY_I386
34: 19 58 SOURCE
35: 20 5a BINARY_AMD64
36: 20 5b BINARY_I386
37: 20 5c SOURCE
38: 21 5e BINARY_AMD64
39: 21 5f BINARY_I386
40: 21 60 SOURCE
41: 22 67 B43_FWCUTTER
42: 23 69 DKMS
43: 24 6b GRUB2
44: 25 6d SETSERIAL
45: 26 6f UBIQUITY
46: 26 70 UBIQUITY_SLIDESHOW_UBUNTU
47: 27 73 BROADCOM_STA
48: 28 76 WVDIAL
49: 28 77 WVSTREAMS
Список содержит имена всех директорий ФС с дополнительной информацией.
Для чтения файлов из файловой системы оптического диска без ее монтирования следует использовать параметр -x, передав имя интересующего файла. Содержимое этого файла будет выведено с помощью стандартного потока вывода утилиты:
$ isoinfo -x "/.DISK/INFO.;1" dev=/dev/sr0
Ubuntu-Unity 23.04 "Lunar Lobster" - Alpha amd64 (20230220)
Очевидно, что утилита смогла прочитать содержимое скрытого файла из файловой системы оптического диска без ее монтирования.