Linux
“file”命令手冊中命名的“compiled magic file”的用途是什麼?
閱讀有關 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
的更多資訊以及有關魔術源文件語法的更多資訊,請參閱參見。