您好,登錄后才能下訂單哦!
file
判斷指定文件的文件類型,它依據文件內容判斷,并不依據擴展名。此命令的適用范圍:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1 、語法
file [ 選項] filename
2 、選項列表
選項 |
說明 |
-v | --version |
顯示命令版本信息 |
--help |
顯示幫助文檔 |
-b | --brief |
列出結果的時候,不顯示文件名 |
-C | --compile |
編寫一個magic.mgc輸出文件,其中包含魔術文件或目錄的預解析版本 |
-c | --checking-printout |
以檢查魔術文件的解析形式的打印輸出。這通常與-m標志一起使用,用于在安裝新的魔術文件之前調試它。 |
-e | --exclude testname |
從確定文件類型的測試列表中排除在testname中指定的測試。有效的測試名稱是: apptype ,EMX應用程序類型(僅在EMX上)。 text ,各種類型的文本文件(此測試將嘗試猜測文本編碼,而不管“編碼”選項的設置如何) encoding ,用于軟魔術測試的不同文本編碼 tokens ,在文本文件中查找已知的令牌 cdf ,打印復合文檔文件的詳細信息 compress ,檢查并查看壓縮文件 elf ,打印ELF文件的細節。 soft ,查閱魔法檔案。 tar ,檢查tar文件 |
-F | --separator |
指定文件名和結果之間的分隔符,默認: |
-f namefile | --files-from namefile |
從給定的文件中,讀取文件名,然后操作 |
-h | --no-dereference |
選項導致符號鏈接不被遵循(在支持符號鏈接的系統上)。如果沒有定義環境變量POSIXLY_TRIDER,則這是默認的 |
-i | --mime |
導致文件命令輸出MIME類型字符串,而不是更傳統的人類可讀的字符串。因此,它可以說‘text/plain;;charset=us-ascii’而不是‘ASCII文本’。為了使此選項工作,文件更改了它處理命令本身識別的文件的方式(例如許多文本文件類型、目錄等),并使用了另一個“魔術”文件。(見下文檔案部分) |
--mime-type | --mime-encoding |
類似-i,但只打印指定的元素。 |
k | --keep-going |
第一次匹配別停,繼續。隨后的匹配將具有字符串‘\012-’。(如果需要換行符,請參見‘-r’選項。) |
-L | --dereference |
選項導致符號鏈接被遵循,就像ls(1)中的同名選項(在支持符號鏈接的系統上)。如果定義了環境變量POSIXLY_TRIDER,則這是默認的 |
-m | --magic-file magicfiles |
指定包含魔術的文件和目錄的備用列表。這可以是單個項目,也可以是冒號分隔的列表。如果在文件或目錄旁邊找到已編譯的魔術文件,則將使用它。 |
-N | --no-pad |
讓文件名在輸出中對齊 |
-n | --no-buffer |
檢查每個文件后,強迫stdout被刷新。這只有在檢查文件列表時才有用。它用于希望從管道輸出文件類型的程序。 |
-p | --preserve-date |
在支持utime(2)或utime(2)的系統上,嘗試保留分析過的文件的訪問時間,假裝文件從未讀取過它們。 |
-r | --raw |
不要將不可打印的字符翻譯為\ooo。通常,文件將不可打印的字符轉換為它們的八進制表示形式 |
-s | --special-files |
通常,文件只嘗試讀取和確定STAT(2)報告是普通文件的參數文件的類型。這可以防止出現問題,因為讀取特殊文件可能會產生特殊的后果。指定-s選項會導致file也讀取參數文件,這些參數文件是塊文件或字符特殊文件。這對于確定原始磁盤分區中數據的文件系統類型非常有用,這些分區是塊特殊文件。此選項還會導致文件忽略stat(2)所報告的文件大小,因為在某些系統上,它報告原始磁盤分區的大小為零。 |
-z | --uncompress |
試著查看壓縮文件 |
-0 | --print0 |
在文件名結束后輸出空字符‘\0’。很好地削減了產量。這不影響仍然打印的分隔符。 |
-z |
嘗試讀取壓縮文件的內容 |
3 、說明
file 對每個參數進行測試,試圖對其進行分類。按照這個順序執行的測試有三組:文件系統測試、魔術測試和語言測試。成功的第一個測試將導致打印文件類型。打印的類型通常包含一個單詞text(該文件只包含打印字符和幾個常見的控制字符,并可能安全地在ASCII終端上讀取)、executable (該文件包含以某種UNIX內核可以理解的形式編譯程序的結果),或包含任何其他含義的data(數據通常是“二進制”或不可打印的)。異常是眾所周知的包含二進制數據的文件格式(核心文件、tar存檔).在修改魔術文件或程序本身時,請確保保留這些關鍵字。用戶依賴于知道目錄中的所有可讀文件都打印了單詞“text”。不要像Berkeley那樣,把“shell命令文本”改為“shell腳本”
文件系統測試基于檢查STAT(2)系統調用的返回。該程序檢查該文件是否為空文件,或是否為某種特殊文件。如果在系統頭文件中定義了適合您正在運行的系統的任何已知文件類型(套接字、符號鏈接或有名管道),則會直觀地顯示它們。
魔術測試用于檢查具有特定固定格式的數據的文件。這方面的典型示例是二進制可執行文件(已編譯的程序)a.out文件,其格式在標準include目錄中的#include<a.out.h>中定義,或者#include <exec.h>。這些文件具有一個“魔術號”,存儲在文件開頭附近的某個特定位置,該位置告訴UNIX操作系統該文件是二進制可執行文件,以及其中的幾種類型中的哪一種。“魔術”的概念已經通過擴展應用于數據文件。任何在一個小的固定偏移量處具有一些不變標識符的文件通常都可以用這種方式來描述。標識這些文件的信息是從已編譯的魔術文件/usr/share/misc/magic.mgc中讀取的,如果編譯的文件不存在,則從/usr/share/misc/magc目錄中讀取這些文件。此外,如果$HOME/.magic.mgc或$home/.magic存在,則它將優先用于系統魔術文件。如果/etc/magic存在,它將與其他魔術文件一起使用。
如果文件與魔術文件中的任何條目不匹配,則檢查它是否為文本文件。ASCII、ISO-8859-x、非ISO 8位擴展-ASCII字符集(例如在Macintosh和IBM PC系統上使用的字符集)、UTF-8編碼Unicode、UTF-16編碼Unicode和EBCDIC字符集可以通過構成每組可打印文本的不同范圍和字節序列來區分。如果一個文件通過了這些測試中的任何一個,就會報告它的字符集。ASCII、ISO-8859-x、UTF-8和Extended-ASCII文件被識別為“Text”,因為它們在幾乎任何終端上都是可讀的;UTF-16和EBCDIC僅僅是“字符數據”,因為它們包含文本,但是文本需要翻譯才能被讀取。此外,文件將試圖確定文本類型文件的其他特征.如果文件的行被CR、CRLF或Nel終止,而不是Unix標準LF,這將被報告。還將識別包含嵌入轉義序列或過度醒目的文件。
一旦文件確定了在文本類型文件中使用的字符集,它將試圖確定該文件是用哪種語言編寫的。語言測試尋找特定的字符串(Cf. #include<names.h>),它可以出現在文件的前幾個塊中的任何地方。例如,關鍵字.br表示文件很可能是troff(1)輸入文件,正如關鍵字struct表示C程序一樣。這些測試不如前兩組可靠,因此它們是最后執行的。語言測試例程還測試一些混類(例如tar(1)存檔)。
任何無法標識為已在上述任何字符集中寫入的文件,都被簡單地稱為“data”。
4 、環境變量
環境變量MAGIC可以用來設置默認的魔術文件名。如果設置了該變量,那么文件將不會嘗試打開$HOME/.magic。文件酌情將‘.mgc’添加到此變量的值中。環境變量POSIXLY_RIDER控制(在支持符號鏈接的系統上),文件是否會嘗試遵循符號鏈接。如果設置了,那么文件將遵循符號鏈接,否則就不會。這也是由-l和-h選項控制的。
5 、返回值
文件在成功時返回0,在錯誤時返回非零。如果文件操作數命名的文件不存在,無法讀取,或者無法確定由文件操作數命名的文件的類型,則不認為這是影響退出狀態的錯誤。
6 、文件
/usr/share/misc/magic.mgc ,默認已編譯魔術列表。
/usr/share/misc/magic ,包含默認魔術文件的目錄。
7 、實例
1 )直接查看文件
|
2 )從給定文件中讀取文件名,然后進行操作
|
3 )讀取特殊文件的類型
|
4 )以MIME格式輸出
|
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。