Linux

“file”命令手冊中命名的“compiled magic file”的用途是什麼?

  • May 2, 2021

閱讀有關 Linux 文件命令的文件。我在魔術測試描述中發現了這一點:

Any file with some invariant identifier at a small fixed offset into the file
can usually be described in this way. The information identifying these files
is read from /etc/magic and the compiled magic file /usr/share/misc/magic.mgc,
or the files in the directory /usr/share/misc/magic if the compiled file
does not exist. In addition, if $HOME/.magic.mgc or $HOME/.magic exists,
it will be used in preference to the system magic files.

我可以想像魔術文件是“MagicNumber -> Kind of file”關係的集合。“文件”程序執行以查找文件的類型,獲取文件的標題。但我不明白為什麼:

  • 為什麼要編譯這個文件?
  • 有什麼方法可以創建一個與命令一起使用的魔法編譯文件?
  • 與這種測試和文件相關的命令選項的用途是什麼?例如:-C or -m
  • 為什麼要編譯這個文件?

我懷疑這是出於性能原因。魔法數據庫不小。File 需要解析每個人類可讀的魔法源文件,建構用於檢測文件格式的結構,計算每個模式的強度並按此對所有內容進行排序。這個過程可能非常緩慢,尤其是幾十年前(文件自 70 年代以來就已經存在)。

我猜他們可以讓文件在執行時建構數據庫並記憶體結果,但考慮到案例,它似乎完全沒有必要、很複雜,而且還會有許多其他問題。

  • 有什麼方法可以創建一個與命令一起使用的魔法編譯文件?
file -m MAGIC_SOURCE -C

這將在目前工作目錄中創建一個具有相同基本名稱MAGIC_SOURCE和副檔名的已編譯魔法文件。.mgc

您可以在文件或目錄上使用它。避免目錄的尾部斜杠。

例如,file -m ~/.magic -C將所有~/.magic/*原始碼編譯成一個.magic.mgc編譯文件。

  • 與這種測試和文件相關的命令選項的用途是什麼?例如:-C-m

-C告訴文件編譯一些源文件。

-m告訴文件使用哪個魔法文件(源文件或編譯文件)。您也可以不使用它-C,例如使用任何文件(包括源文件)來檢測文件類型。

有關man file該命令man magic的更多資訊以及有關魔術源文件語法的更多資訊,請參閱參見。

引用自:https://unix.stackexchange.com/questions/607859