file —
визначення
типу
файла
file
[
-bcdEhiklLNnprsSvzZ0]
[
--apple]
[
--exclude-quiet]
[
--extension]
[
--mime-encoding]
[
--mime-type]
[
-e назва_тесту]
[
-F роздільник]
[
-f файл_назв]
[
-m файли_контрольних_послідовностей]
[
-P назва=значення]
file
... file -C
[
-m
файли_контрольних_послідовностей]
file
[
-
-help]
Цю
сторінку
підручника
присвячено
документації
щодо
версії 5.44
програми
file.
file
виконує
тестування
кожного
аргументу
у спробах
його
класифікувати.
Передбачено
три набори
перевірок,
які буде
виконано у
такому
порядку:
перевірки
файлової
системи,
перевірки
контрольних
послідовностей
і
перевірки
мови.
Перша
пройдена
перевірка
призведе
до
виведення
типу файла.
Виведені
дані щодо
типу,
зазвичай,
містять
одне з
таких слів:
text (файл
містить
лише
друковані
символи і
деякі
типові
контрольні
символи,
його,
ймовірно,
безпечно
читати у
терміналі
ASCII
),
executable (файл
містить
результати
компіляції
програми у
формі, яку
може
обробляти
ядро UNIX або
іншої
системи)
або
data
для усього
іншого
(дані,
зазвичай, є
“двійковими”
або не
призначеними
для друку).
Виключеннями
є файли у
різних
знаних
форматах
даних
(файли ядра,
архіви tar),
які
містять
двійкові
дані. При
внесенні
змін до
файлів
контрольних
послідовностей
або самої
програми,
переконайтеся,
що
збережено
ці ключові
слова.
Робота
користувачів
залежить
від
відомостей
щодо того,
що для усіх
придатних
до читання
файлів у
каталозі
буде
виведено
слово “text”.
Не робіть
так, як
зробили у
Берклі, і не
міняйте “shell
commands text” на “shell script”.
Перевірки
файлової
системи
засновано
на
вивченні
даних, які
повернуто
системним
викликом
stat(2).
Програма
перевіряє,
чи не є файл
порожнім і
чи не є він
певним
чином
спеціальним
файлом. Усі
відомі
типи
файлів, які
відповідають
системі, у
якій ви
працюєте
(сокети,
символічні
посилання
або
іменовані
канали (FIFO) у
тих
системах,
де їх
реалізовано),
буде
розпізнано,
якщо їх
визначено
у
загальносистемному
файлі
заголовків
<sys/stat.h>.
Перевірки
контрольних
послідовностей
використовують
для
визначення
форматів
для файлів
із даними у
певному
фіксованому
форматі.
Яскравим
прикладом
цього є
двійкові
виконувані
файли
(зібрані
програми),
подібні до
a.out
,
формат
яких
визначено
у
<elf.h>,
<a.out.h>
і, можливо,
<exec.h>
у
стандартному
каталозі include.
У цих
файлах у
певному
місці на
початку
файла
зберігається
“контрольне
число”, яке
вказує
операційній
системі UNIX,
що файл є
двійковим
виконуваним
файлом і
вказує тип,
один із
декількох.
Концепцію
“контрольного
числа”
було
розширено
на файли
даних. За її
допомогою
може бути
описано
будь-який
файл із
певним
інваріантним
ідентифікатором
із
невеликим
фіксованим
відступом
у даних
файла. Дані
для
ідентифікації
цих файлів
буде
прочитано
із /etc/magic та
зібраних
файлів
контрольних
послідовностей
/usr/share/misc/magic.mgc
або файлів
у каталозі
/usr/share/file/misc/magic,
якщо
зібраного
файла не
існує. Крім
того, якщо
існує
$HOME/.magic.mgc або
$HOME/.magic, його
буде
використано
з вищим
пріоритетом
над
загальносистемними
файлами
контрольних
послідовностей.
Якщо файл
не
відповідає
жодному із
записів у
файлі
контрольних
послідовностей,
програма
спробує
визначити,
чи не є він
текстовим
файлом.
Кодування
ASCII, ISO-8859-x, 8-бітові
кодування
поза ISO поза ASCII
(подібні до
використаних
у системах
Macintosh та IBM PC),
кодування UTF-8
Unicode,
кодування
UTF-16 Unicode та
набори
символів EBCDIC
може бути
визначено
за різними
діапазонами
та
послідовностями
байтів, на
основі
яких
створюється
друкований
текст для
кожного з
наборів.
Якщо файл
проходить
будь-яку з
перевірок,
програма
повідомить
про набір
символів
(кодування).
Файли ASCII, ISO-8859-x, UTF-8, і
розширення
ASCII буде
ідентифіковано
як “text”,
оскільки
їх,
здебільшого,
можна
читати
майже у
будь-якому
терміналі;
UTF-16 і EBCDIC є лише
“character data”,
оскільки,
хоча вони
містять
текст, це
текст, який
потребує
трансляції
перед
читанням.
Крім того,
file
спробує
визначити
інші
характеристики
файлів
текстового
типу. Якщо
рядки
файла
завершуються
на CR, CRLF або NEL,
замість
стандартного
для Unix LF,
програма
про це
повідомить.
Також буде
ідентифіковано
файли, які
містять
вбудовані
екрановані
послідовності
та
перекреслення.
Після
визначення
file
набору
символів,
який
використано
у файлі
текстового
типу,
програма
спробує
визначити,
якою мовою
написано
файл. У
перевірках
мови буде
виконано
пошук
певних
рядків
(порівняйте
з
<names.h> ),
які може
бути
використано
будь-де у
перших
декількох
блоках
файла.
Наприклад,
ключове
слово
.br
вказує на
високу
ймовірність
того, що це
файл
вхідних
даних
troff(1), так
само, як
ключове
слово
struct
вказує на
програму
мовою C. Ці
перевірки
менш
надійні за
попередні
дві групи,
тому їх
виконують
останніми.
Підпрограми
перевірки
мов також
виконують
визначення
файлів із
сумішшю
даних
(зокрема
архівів
tar(1) та
файлів JSON).
Усі файли,
для яких не
вдасться
визначити
набір
символів
із
вказаного
вище
переліку,
буде
класифіковано
як “data”.
-
--apple
- Наказує
file
вивести
тип файла і
код засобу
створення
як такі, що
використані
у давніх
версіях MacOS.
Код
складається
з восьми
літер.
Перші
описують
тип файла,
а останні —
засіб
створення.
Цей
параметр
належним
чином
працює
лише для
форматів
файлів, у
яких
визначено
виведення
у стилі apple.
-
-b,
--brief
- Не
дописувати
назви
файлів
перед
виведеними
рядками
(скорочений
режим).
-
-C,
--compile
- Записати
файл
виведення
magic.mgc, який
містить
попередньо
оброблену
версію
файла або
каталогу
контрольних
послідовностей.
-
-c,
--checking-printout
- Наказує
вивести
табуляцію
перевірки
обробленої
форми
файла
контрольних
послідовностей.
Цей
параметр,
зазвичай,
використовують
у
поєднанні
з
параметром
-m для
діагностики
нового
файла
контрольних
послідовностей
до його
встановлення.
- -d
- Виводить
внутрішні
діагностичні
дані до stderr.
- -E
- Наказує
програмі
при
помилках
файлової
системи (не
знайдено
файла
тощо),
замість
звичайної
обробки
виведення
помилки, як
цього
вимагає POSIX, і
подальшого
виконання
завдань,
видати
повідомлення
про
помилку і
завершити
роботу.
-
-e,
--exclude
назва_тесту
- Виключити
перевірку
із назвою
назва_тесту
зі списку
перевірок,
які
призначено
для
визначення
типу файла.
Коректними
назвами
перевірок
є такі:
- apptype
-
EMX
тип
програми
(лише у EMX).
- ascii
- Різноманітні
типи
текстових
файлів (у
цій
перевірці
буде
зроблено
спробу
визначити
кодування
тексту,
незалежно
від
значення
параметра
‘encoding’).
- encoding
- Різні
кодування
тексту
для
програмних
перевірок
на
контрольні
послідовності.
- tokens
- Ігноровано,
для
зворотної
сумісності.
- cdf
- Виводити
подробиці
щодо
складених
файлів
документів
(CDF).
- compress
- Перевіряти
стиснені
файли і
заглядати
до них.
- csv
- Перевіряти
файли
значень,
які
відокремлено
комами (CSV).
- elf
- Виводить
подробиці
щодо
файла ELF,
якщо
увімкнено
перевірки
контрольних
послідовностей
і
виявлено
контрольну
послідовність
elf.
- json
- Інспектує
файли JSON (RFC-7159)
шляхом
перевірки
їх на
сумісність.
- soft
- Звернутися
до файлів
контрольних
послідовностей.
- tar
- Інспектує
файли tar
шляхом
перевірки
контрольних
сум 512
байтів у
заголовка
tar.
Виключення
цієї
перевірки
може
надати
докладніший
опис
вмісту,
оскільки
буде
використано
спосіб
тестування
за
контрольними
послідовностями.
- text
- Синонім
до ‘ascii’.
-
--exclude-quiet
- Подібний
до
--exclude,
але
ігнорує
перевірки,
про які не
відомо
file.
Призначено
для
сумісності
із
застарілими
версіями
file.
-
--extension
- Вивести
список
відокремлених
символом
похилої
риски
коректних
суфіксів
назви для
виявленого
типу
файлів.
-
-F,
--separator
роздільник
- Використати
вказаний
рядок як
роздільник
між назвою
файла і
повернутим
для файла
результатом.
Типовим є
‘:’.
-
-f,
--files-from
файл_назв
- Прочитати
назви
файлів, які
слід
інспектувати,
з
файла_назв
(по одному
файлу на
рядок)
перед
списком
аргументів.
Має бути
вказано
або
файл_назв
або
принаймні
один
аргумент
із назвою
файла. Якщо
треба
перевірити
дані зі
стандартного
джерела
вхідних
даних,
скористайтеся
аргументом
‘-’ замість
назви
файлів.
Будь ласка,
зауважте,
що
файл_назв
буде
розгорнуто
і включені
до нього
назви
файлів
буде
оброблено
одразу у
місці, де
вказано
цей
параметр, і
перед
обробкою
інших
параметрів.
Це надає
змогу
обробляти
декілька
писків
файлів із
різними
аргументами
командного
рядка в
одному
виклику
file invocation.
Таким
чином, якщо
ви хочете
визначити
роздільник,
вам слід
зробити це
до
визначення
списку
файлів,
якось так:
“-F @
-f
файл_назв”,
а не так:
“-f
файл_назв
-F
@”.
-
-h,
--no-dereference
- Використання
цього
параметра
призведе
до того, що
програма
не
переходитиме
за
символічними
посиланнями
(у
системах,
де
передбачено
підтримку
символічних
посилань).
Це типова
поведінка,
якщо не
встановлено
змінну
середовища
POSIXLY_CORRECT
.
-
-i,
--mime
- Наказує
file
виводити
рядки
типів MIME, а не
традиційніші
зручні для
читання
записи.
Отже, у
такому
режимі
програма
може
виводити
‘text/plain; charset=us-ascii’
замість “ASCII
text”.
-
--mime-type,
--mime-encoding
- Подібний
до -i, але
буде
виведено
лише
вказані
елементи.
-
-k,
--keep-going
- Не
зупинятися
на першому
відповіднику,
продовжувати
обробку.
Перед
наступними
відповідниками
буде
додано
рядок ‘\012- ’.
(Якщо ви
хочете
додати
розрив
рядка,
скористайтеся
параметром
-r.)
Взірець з
контрольної
послідовності,
який
матиме
найвищу
потужність
(див.
параметр
-l), буде
виведено
першим.
-
-l,
--list
- Показує
список
взірців та
їхню
потужність
з
упорядковування
за
спаданням
потужності
magic(5), яку
буде
використано
для
встановлення
відповідності
(див. також
параметр
-k).
-
-L,
--dereference
- Використання
цього
параметра
призведе
до того, що
програма
переходитиме
за
символічними
посиланнями,
як при
використанні
подібного
параметра
у ls(1) (у
системах,
де
передбачено
підтримку
символічних
посилань).
Це типова
поведінка,
якщо
встановлено
змінну
середовища
POSIXLY_CORRECT
.
-
-m,
--magic-file
файли_контрольних_послідовностей
- Вказати
альтернативний
список
файлів і
каталогів,
у яких
містяться
дані
контрольних
послідовностей.
Це може
бути
єдиний
запис або
список
записів,
які
відокремлено
двокрапками.
Якщо поряд
із файлом
або
каталогом
буде
виявлено
зібраний
файл
контрольних
послідовностей,
буде
використано
саме його.
-
-N,
--no-pad
- Не
доповнювати
назви
файлів так,
щоб
виведені
дані було
вирівняно.
-
-n,
--no-buffer
- Примусово
очищувати
stdout після
перевірки
кожного з
файлів.
Корисно,
лише якщо
виконується
перевірка
списку
файлів.
Параметр
призначено
для
використання
у
програмах,
яким
потрібне
виведення
типу
файлів з
каналу
даних.
-
-p,
--preserve-date
- У
системах,
де
передбачено
підтримку
utime(3) або
utimes(2),
намагатися
зберегти
час
доступу до
аналізованих
файлів, щоб
змусити
систему
вважати, що
file
ніколи не
виконував
їхнє
читання.
-
-P,
--parameter
назва=значення
- Встановити
різні
обмеження
параметрів.
Назва |
Типове |
Пояснення |
bytes |
1048576 |
максимальна
кількість
файлів,
які слід
прочитати
з файла |
elf_notes |
256 |
максимальна
оброблена
кількість
нотаток ELF |
elf_phnum |
2048 |
максимальна
оброблена
кількість
розділів
програми
ELF |
elf_shnum |
32768 |
максимальна
кількість
оброблених
розділів
ELF |
encoding |
65536 |
максимальна
кількість
байтів,
які слід
вивчити
для
визначення
кодування |
indir |
50 |
обмеження
рекурсії
для
опосередкованих
контрольних
послідовностей |
name |
50 |
використовувати
обмеження
лічильника
для
контрольних
назви/використання |
regex |
8192 |
обмеження
на
довжину
для
пошуків
за
формальним
виразом |
-
-r,
--raw
- Не
перетворювати
непридатні
до друку
символи на
\ooo. Зазвичай,
file
перетворює
непридатні
до друку
символи на
їхні
вісімкові
представлення.
-
-s,
--special-files
- Зазвичай,
file
намагається
читати і
визначати
тип
файлів-аргументів,
про які
stat(2)
повідомляє,
як про
звичайні
файли.
Таким
чином,
програма
намагається
запобігти
читанню
спеціальних
файлів, яке
може мати
небажані
наслідки.
Якщо
вказано
параметр
-s, file
також
прочитає
файли
аргументів,
які є
блоковим
або
символьним
спеціальними
файлами. Це
корисно
для
визначення
типів
файлових
систем
даних на
необроблених
розділах
диска,
оскільки
такі
розділи є
блоковими
спеціальними
файлами.
Використання
цього
параметра
також
наказує
file не
зважати на
розмір
файла, про
який
повідомляє
stat(2),
оскільки у
деяких
системах
ця функція
повідомляє
про
нульовий
розмір для
необроблених
розділів
диска.
-
-S,
--no-sandbox
- У
системах,
де
доступною
є libseccomp
(https://github.com/seccomp/libseccomp),
параметр
-S
вимикає
режим
пісочниці,
який
типово
увімкнено.
Цей
параметр
потрібен
file для
виконання
зовнішніх
програм
для
розпаковування,
тобто якщо
вказано
параметр
-z і
вбудовані
засоби
розпаковування
є
недоступними.
У системах,
де
пісочниця
є
недоступною,
цей
параметр
ні на що не
вплине.
Зауваження:
цю версію
файла для Debian
було
зібрано
без
підтримки
seccomp, тому це
параметр
не працює.
-
-v,
--version
- Вивести
дані щодо
версії
програми і
завершити
роботу.
-
-z,
--uncompress
- Намагатися
зазирати
до
стиснених
файлів.
-
-Z,
--uncompress-noreport
- Намагатися
зазирати
до
стиснених
файлів, але
звітувати
лише про
вміст, а не
про
стискання.
-
-0,
--print0
- Вивести
нуль-символ
‘\0’ після
назви
файла.
Добре для
використання
cut(1) для
виведених
даних. Не
впливає на
роздільник,
який все
одно буде
виведено.
Якщо цей
параметр
вказано
декілька
разів,
file
виведе
просто
назву
файла,
потім
NUL-символ,
потім опис
(або ERROR: text), або
другий
NUL-символ
для
кожного
запису.
- --help
- Вивести
короткий
текст
довідки і
завершити
роботу.
Змінною
середовища
MAGIC
можна
скористатися
для
встановлення
назви
типового
файла
контрольних
послідовностей.
Якщо
встановлено
значення
цієї
змінної,
file не
намагатиметься
відкрити
$HOME/.magic.
file
додає
“
.mgc” до
значення
цієї
змінної,
якщо це
потрібно.
Змінна
середовища
POSIXLY_CORRECT
керує тим (у
системах,
де
передбачено
підтримку
символічних
посилань),
чи
намагатиметься
file
переходити
за
символічними
посиланнями.
Якщо
встановлено,
file
переходитиме
за
символічними
посиланнями,
якщо ні — не
переходитиме.
Керувати
цим можна
також за
допомогою
параметрів
-L і
-h.
- /usr/share/misc/magic.mgc
- Типовий
зібраний
список
контрольних
послідовностей.
- /usr/share/misc/magic
- Каталог,
у якому
містяться
типові
файли
контрольних
послідовностей.
file
завершить
роботу зі
станом
виходу
0
, якщо
дію було
виконано
успішно,
або зі
станом
>0
, якщо
сталася
помилка.
Вказані
нижче
помилки
призводитимуть
до
виведення
діагностичних
повідомлень,
але не
впливатимуть
на код
виходу
програми
(як цього
вимагає POSIX),
якщо не
вказано
параметра
-E:
- Файл не
може бути
знайдено
- Немає
прав
доступу до
читання
файла
- Тип
файла не
вдалося
визначити
$ file file.c file /dev/{wd0a,hda}
file.c: C program text
file: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV),
dynamically linked (uses shared libs), stripped
/dev/wd0a: block special (0/0)
/dev/hda: block special (3/0)
$ file -s /dev/wd0{b,d}
/dev/wd0b: data
/dev/wd0d: x86 boot sector
$ file -s /dev/hda{,1,2,3,4,5,6,7,8,9,10}
/dev/hda: x86 boot sector
/dev/hda1: Linux/i386 ext2 filesystem
/dev/hda2: x86 boot sector
/dev/hda3: x86 boot sector, extended partition table
/dev/hda4: Linux/i386 ext2 filesystem
/dev/hda5: Linux/i386 swap file
/dev/hda6: Linux/i386 swap file
/dev/hda7: Linux/i386 swap file
/dev/hda8: Linux/i386 swap file
/dev/hda9: empty
/dev/hda10: empty
$ file -i file.c file /dev/{wd0a,hda}
file.c: text/x-c
file: application/x-executable
/dev/hda: application/x-not-regular-file
/dev/wd0a: application/x-not-regular-file
hexdump(1),
od(1),
strings(1),
magic(5)
Ми
вважаємо,
що
програма
перевищує
System V Interface Definition of FILE(CMD),
наскільки
точно ми
можемо
визначити
з
наведених
там
нечітких
визначень.
Поведінка
програми
здебільшого
сумісна з
програмою
з System V з такою ж
назвою.
Однак ця
версія
знає
більше
контрольних
послідовностей,
тож вона у
багатьох
випадках
надасть
інший
вивід (хоч
може й
точніший).
Одна
значна
різниця
між цією
версією й System V
це те, що ця
версія
опрацьовує
пробільні
символи, як
розділювач,
тож
пробіли в
рядках
шаблонів
будуть
екрановані.
Наприклад,
>10 string language impress (imPRESS data)
у наявному
файлі
контрольних
послідовностей
мало б бути
змінено на
>10 string language\ impress (imPRESS data)
Крім того, у
цій версії,
якщо у
рядку
взірця
міститься
символ
зворотної
похилої
риски, його
слід
екранувати.
Приклад:
0 string \begindata Andrew Toolkit document
у наявному
файлі
контрольних
послідовностей
мало б бути
змінено на
0 string \\begindata Andrew Toolkit document
Випуски SunOS 3.2 й
пізніше
від Sun Microsystems
містять
команду
file, що є
похідною
від
програми з
System V, але з
деякими
розширеннями.
Ця версія
відрізняється
від версії
Sun's лише
незначними
деталями.
Вона
містить
розширення
оператора
‘&’, що
використовується,
наприклад,
як
>16 long&0x7fffffff >0 not stripped
На
системах з
libseccomp
(https://github.com/seccomp/libseccomp),
file
примусово
встановлює
обмеження
системних
викликів
лише на ті,
що
необхідні
для
виконання
програми.
Це
примусове
встановлення
не надає
жодних
переваг з
погляду
безпеки
коли
file
запитують
розтиснути
вхідні
файли за
допомогою
зовнішніх
програм за
допомогою
параметра
-z. Щоб
дозволити
виконання
зовнішніх
розпакувальників,
потрібно
вимкнути
пісочницю
за
допомогою
параметра
-S.
Записи
файла
контрольних
послідовностей
було
зібрано з
різних
джерел, в
основному,
USENET, і
надіслано
різними
авторами. Christos
Zoulas (адресу
наведено
нижче)
збиратиме
додаткові
та
виправлені
записи
файла
контрольних
послідовностей.
Періодично
поширюватимуться
нові
версії
збірки
записів
файлів
контрольних
послідовностей.
Порядок
записів у
файлі
контрольних
послідовностей
має
значення.
Залежно
від
використаної
вами
системи,
порядок, у
якому їх
зібрано,
може бути
неправильним.
Команда
file була
частиною
усіх
UNIX з
часу
принаймні
Research Version 4
(сторінка
підручника
датується
листопадом
1973 року). У
версії для
System V було
впроваджено
одну
значну
зміну:
зовнішній
список
типів
контрольних
послідовностей.
Це дещо
уповільнило
роботу
програми,
але
зробило її
набагато
гнучкішою.
Цю
програму,
засновану
на версії
для System V, було
написано Ian Darwin
⟨
[email protected]⟩ без
використання
будь-чийого
початкового
коду.
Код було
суттєво
переписано
John Gilmore, що
зробило
його
кращим, ніж
у першій
версії. Geoff Collyer
виявив
декілька
невідповідностей
та надав
додаткові
записи для
файла
контрольних
послідовностей.
Внесок Rob McMahon,
⟨
[email protected]⟩, 1989 рік,
полягає у
впровадженні
оператора
‘&’.
Guy Harris, ⟨
[email protected]⟩,
вносив
багато
змін від 1993
рок і аж до
сучасного
стану
програми.
Основну
частину
завдань з
розробки і
супроводу
з 1990 року до
поточного
моменту
виконує Christos Zoulas
⟨
[email protected]⟩.
Змінено Chris Lowth
⟨
[email protected]⟩, 2000 рік:
реалізовано
обробку
параметра
-i для
виведення
рядків
типів MIME,
використання
альтернативного
файла
контрольних
послідовностей
та змінено
внутрішню
логіку.
Змінено Eric Fischer
⟨
[email protected]⟩,
липень 2000
року, для
визначення
кодів
символів і
спроби
визначити
мови у
файлах,
відмінних
від ASCII.
Змінено Reuben Thomas
⟨
[email protected]⟩, 2007-2011, для
удосконалення
підтримки MIME,
об'єднано
контрольні
послідовності
MIME і не-MIME,
реалізовано
підтримку
каталогів,
а також
файлів
контрольних
послідовностей,
виправлено
багато вад,
оновлено і
виправлено
багато
контрольних
послідовностей,
удосконалено
систему
збирання,
удосконалено
документацію
і
переписано
прив'язки
до Python на
чистому Python.
Список
учасників
розробки
для
каталогу
‘контрольних
послідовностей’
(файлів magic) є
надто
довгим для
включення
тут. Ви самі
знаєте про
свій
внесок.
Дякуємо
вам. Багато
учасників
розробки
наведено у
списках у
файлах
початкових
кодів.
Авторські
права
належать Ian F.
Darwin, Торонто,
Канада, 1986-1999.
Захищено
стандартними
авторськими
правами Berkeley Software
Distribution; див. файл
COPYING у
дистрибутиві
початкового
коду.
Файли
tar.h
і
is_tar.c
було
написано John Gilmore
для його
програми
tar(1) з
відкритим
доступом (public
domain). Цей файл
не
підлягає
ліцензуванню
за
вказаною
вище
ліцензією.
Будь ласка,
повідомляйте
про вади і
надсилайте
латки до
системи
стеження
за вадами
за адресою
https://bugs.astron.com/ або
до списку
листування
за адресою
⟨
[email protected]⟩
(спочатку
відвідайте
https://mailman.astron.com/mailman/listinfo/file,
щоб
підписатися).
Виправити
виведення
даних так,
щоб зникла
потреба у
перевірках
прапорців MIME
і APPLE в усьому
коді, а
виведення
відбувалося
лише в
одному
місці. Це
потребує
зміни
компонування.
Пропозиція:
скласти
список
можливих
позицій
виведення,
потім
вибрати
останнє
(сподіваємося,
найспецифічніше)
значення
наприкінці,
або
скористатися
типовим,
якщо
список
порожній.
Зміна не
повинне
вплинути
на
швидкодію
аналізу.
Обробка
MAGIC_CONTINUE
і
виведення \012-
між
записами є
незграбною
і
ускладненою;
переписати
і
централізувати.
Частину
логіки
кодування
жорстко
вписано до
encoding.c. Її можна
пересунути
до файлів
контрольних
послідовностей,
якщо
використовувати
позначення
!:набір_символів.
Продовжити
виправляти
усі вади в
обробці
контрольних
послідовностей.
Див.
систему
стеження
за вадами Debian,
щоб
дізнатися
про це
більше.
Зберігати
довільно
довгі
рядки,
наприклад,
для
взірців %s,
щоб їх
можна було
виводити.
Виправить
ваду Debian 271672.
Зробити це
можна
розміщенням
рядків у
буфері
рядків,
збереженням
буфера
рядків
наприкінці
файла
контрольних
послідовностей
і
перетворенням
усіх
вказівників
на рядки на
відносні
відступи з
буфера
рядків.
Додати
синтаксичні
конструкції
для
відносних
відступі
після
поточного
рівня (вада
Debian 466037).
Зробити
так, щоб file -ki
працювало,
тобто
можна було
вказати
декілька
типів MIME.
Додати
бібліотеку
zip, щоб можна
було
увійти до
документів
Office2007 для
виведення
додаткових
подробиць
щодо
їхнього
вмісту.
Додати
параметр
для
виведення
адрес для
джерел
описів
файлів.
Поєднати
пошуки
скриптів
та додати
спосіб
прив'язування
назв
виконуваних
файлів до
типів MIME
(наприклад,
мати
значення
контрольної
суми для !:mime,
яке
спричинятиме
пошук
рядка-результату
у таблиці).
Таким
чином буде
усунено
проблему
із
повторним
додаванням
контрольної
послідовності
для
кожного
нового
інтерпретатора
бінарних
позначок.
Якщо
доступним
є
дескриптор
файла, ми
можемо
пропустити
і
скоригувати
буфер,
замість
складного
керування
буфером,
яке
виконується
зараз.
Виправити
“name” і “use” для
перевірки
сумісності
під час
збирання
(дублювання
“name”, “use”, що
вказує на
невизначене
“name” ).
Зробити “name”
/ “use”
ефективнішим
шляхом
зберігання
упорядкованого
списку
назв.
Особливий
випадок ^
для зміни
порядку
байтів в
обробнику
так, щоб не
було
потреби в
екранування,
і
документування
нових
можливостей.
Якщо
відступи,
які
вказано на
внутрішньому
рівні у
файлі,
перевищують
розмір
буфера
(значення
змінної
HOWMANY
у file.h),
позиціювання
за
відступом
виконано
не буде.
Було б
краще
виконувати
керування
буфером
при
доступності
дескриптора
файла, щоб
можна було
виконувати
позиціювання
у файлі.
Втім, слід
бути
обережними,
оскільки
це може
торкнутися
питань
швидкодії
і безпеки,
оскільки
роботу
програми
може бути
уповільнено
повторними
позиціюваннями.
Маємо
підтримку
зберігання
окремих
буферів та
відступів
з кінця
файла, але
внутрішнє
керування
буфером
усе ще
потребує
значної
переробки.
Ви можете
отримати
найсвіжішу
версію від
самого
автора з
анонімного
FTP за адресою
ftp.astron.com у
каталозі
/pub/file/file-X.YZ.tar.gz.
Український
переклад
цієї
сторінки
посібника
виконано Andriy Rysin
<
[email protected]> і Yuri Chornoivan <
[email protected]>
Цей
переклад є
безкоштовною
документацією;
будь ласка,
ознайомтеся
з умовами
GNU
General Public License Version 3. НЕ
НАДАЄТЬСЯ
ЖОДНИХ
ГАРАНТІЙ.
Якщо ви
знайшли
помилки у
перекладі
цієї
сторінки
підручника,
будь ласка,
надішліть
електронний
лист до
списку
листування
перекладачів:
[email protected]