File-Format

Linux文件命令分類文件

  • March 17, 2020

我需要辨識隨機文件中包含的數據類型。我是 Linux 新手。

我打算使用該file命令來了解文件具有什麼類型的數據。我嘗試了該命令並得到了下面的輸出。

有人向我建議該file命令查看文件的初始字節以確定數據類型。該file命令根本不查看文件副檔名。那是對的嗎?我查看了手冊頁,但覺得它太技術性了。file如果有人可以提供一個連結,該連結對命令的工作原理有更簡單的解釋,我將不勝感激。

file執行命令後我可以獲得哪些不同的可能答案?例如,在下面的文字記錄中,我得到了 JPEG、ISO 媒體、ASCII 等:

畫面輸出如下

m7% file date-file.csv
date-file.csv: ASCII text, with CRLF line terminators
m7% file image-file.JPG
image-file.JPG: JPEG image data, EXIF standard
m7% file music-file.m4a
music-file.m4a: ISO Media, MPEG v4 system, iTunes AAC-LC
m7% file numbers-file.txt
numbers-file.txt: ASCII text
m7% file pdf-file.pdf
pdf-file.pdf: PDF document, version 1.4
m7% file text-file.txt
text-file.txt: ASCII text
m7% file video-file.MOV
video-file.MOV: data

更新 1 感謝您的回答,他們為我澄清了一些事情。

因此,如果我理解正確,文件夾 /usr/share/mime/magic 有一個數據庫,它將為我提供目前可能的文件格式(當我鍵入文件命令並跟隨文件時我可以獲得的輸出)。那是對的嗎?每當“文件”命令輸出包含“文本”一詞時,它是否指的是您可以使用文本查看器閱讀的內容,而沒有“文本”的任何內容都是某種二進製文件,這是真的嗎?

file 使用幾種測試

1:如果文件不存在、無法讀取或無法確定其文件狀態,則輸出應指示該文件已被處理,但無法確定其類型。

這將像cannot open file: No such file or directory.

2:如果文件不是普通文件,則應辨識其文件類型。文件類型目錄、FIFO、套接字、塊特殊和字元特殊應如此標識。也可以辨識其他實現定義的文件類型。如果 file 是符號連結,預設情況下應解析連結,並且 file 應測試符號連結引用的文件類型。(請參閱下面的-h-i選項。)

這將像.: directoryand一樣輸出/dev/sda: block specialPOSIX 部分定義了這一點和前一點的大部分格式- 您可以依賴輸出中的某些字元串。

3:如果文件長度為零,則標識為空文件。

這是foo: empty.

4:文件實用程序應檢查文件的初始段,並應根據位置敏感測試猜測辨識其內容。(不能保證答案是正確的;請參閱下面的 -d、-M 和 -m 選項。)

5:文件實用程序應檢查文件並根據上下文相關的預設系統測試來猜測辨識其內容。(不保證答案是正確的。)

這兩個使用幻數辨識並且是命令中最有趣的部分。幻數是一個特殊的字節序列,它位於文件中的已知位置,用於標識其類型。傳統上該位置是前兩個字節,但該術語已進一步擴展為包括更長的字元串和其他位置。有關命令中幻數的更多詳細資訊,請參閱this other question 。file

file命令具有這些數字的數據庫以及它們對應的類型;該數據庫通常位於其中/usr/share/mime/magic,並將文件內容映射到MIME 類型。那裡的輸出(通常是file -i預設情況下的一部分)將是定義的媒體類型或副檔名。“上下文敏感測試”使用相同的方法,但有點模糊。這些都不能保證是正確的,但它們旨在成為很好的猜測。

file還有一個將這些類型映射到名稱的數據庫,通過該數據庫它將知道它已辨識為的文件application/pdf可以描述為PDF document. 這些人類可讀的名稱也可能被本地化為另一種語言。這些將始終是以人們能夠理解的方式對文件類型進行一些高級描述,而不是機器。

您可以獲得的大多數不同輸出將來自這些階段。您可以查看magic文件以獲取受支持類型的列表以及它們是如何辨識的——我的系統知道 376 種不同的類型。給出的名稱和支持的類型取決於您的系統封裝和配置,因此您的系統可能支持的比我的多或少,但通常有很多。libmagic還包括額外的硬編碼測試。

6:文件應標識為數據文件。

這是foo: data,當它根本無法弄清楚該文件的任何內容時。

還有其他可以出現的小標籤。執行檔 ( +x) 將在輸出中包含“ executable”,通常以逗號分隔。實現可能還知道一些關於某些文件格式的file額外資訊,以便能夠描述關於它們的附加點,如在您的“ PDF document, version 1.4”中。

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