file - 肯定文件類型

FILE(1)                                                                FILE(1)linux


NAMEgit

      file - 肯定文件類型正則表達式


總覽算法

      file [ -bcnsvzL ] [ -f 命名文件 ] [ -m 幻數文件 ] file ...shell


描述編程

      本 手冊頁說明了3.27版本 file 命令的使用.  File 命令試圖檢查每一個參數以判網絡

      定文件的類型.  檢查共有三組,按以下順序進行:文件系統檢查,幻數檢查, 以app

      及語言檢查.  文件系統檢查成功則輸出文件類型.編程語言


      輸 出的類型通常會包含如下的詞中的一個: text (文件中僅有 ASCII 字符,可ide

      以用 ASCII 終端讀此文件,以保證內容的可靠性), executable (文件中保存 的

      是 程 序編譯後的結果,一些UNIX 內核或其它內核能理解這類文件), 或者 data

      表示全部其它類型文件(data 通常爲二進制文件或者不可打印的).  可是有的 常

      用的文件格式(如core文件、tar包),雖然也包含二進制數據,卻不屬於這一類

      若是要修改 /usr/share/magic 或者程序自己, preserve these keywords .  當

      文 件爲‘‘text’’ 類型時,認爲此文件爲可讀文件.  不要象在Berkeley環境中那

      樣作 - 要把‘‘shell commands text’’改成‘‘shell script’’.


      文件系統檢查是創建在對 stat(2) 系統調用結果的分析上的.  程序會分析文 件

      是 否爲空,或者是不是某種特殊文件.  對於全部可在現有系統上使用的文件類型

      (好比套接口文件,動態連接文件,命名管道文件(FIFOs) 等),只要它在系統 頭

      文件 sys/stat.h 中已經定義過,就能夠被檢查到.


      幻數檢查用來檢查文件中是否有特殊的固定格式的數據.  規範的例子如二進制可

      執行文件(編譯後的程序) a.out ,該文件格式在標準include目錄下 的  a.out.h

      文件中定義,也可能在 exec.h 中定義.  這些文件在文件開始部分附近的一個特

      殊位置保存有一個’幻數’ , 經過幻數告訴UNIX 操做系統此文件是二進制可執 行

      文 件, 和其中包含的其它類型.  幻數的概念已經擴展到數據文件.任何在文件固

      定位置有與文件類型相關的不變標識符的文件均可以這樣表示. 這些文件中的 信

      息能夠從幻數文件 /usr/share/magic 中讀取.


      若是文件爲 ASCII 文件, file 會試圖檢查它的語言.  語言檢查在文件開始的幾

      個塊中(任意位置)查找是否有特殊字符串(參看 names.h) 例如,關鍵字 .br  指

      出 此文件極可能是 troff(1) 輸入文件, 而關鍵字 struct 指出此文件是C程序.

      語言檢查不如前兩組檢查可靠,因此放在最後執行.它也用來檢查一些混合文 件(

      例如 tar(1) 存檔文件)並肯定文件是‘ascii text’類型仍是‘data’類型.


選項

      -b      不輸出文件名 (簡要模式).


      -c      檢查時打印輸出幻數文件的解析結果.常與 -m 一塊兒使用,用來在安裝幻

              數文件以前調試它.


      -f 命名文件

              從在參數表前的 命名文件中讀出將要檢查的文件名(每行一個文件). 要

              有   命名文件,或者至少有一個文件名參數; 若是要檢查標準輸入, 使

              用‘‘-’’做爲文件參數.


      -m list 指定包含幻數的文件列表.能夠是單個文件,也能夠是用冒號分開的多個

              文件.


      -n       每 檢查完一個文件就強制刷新標準輸出. 僅在檢查一組文件時纔有效.

              通常在將文件類型輸出到管道時才採用此選項.


      -v      打印程序版本並退出.


      -z      試圖查看壓縮文件內部信息.


      -L      (在支持符號連接的系統上)選項顯示符號連接文件的原 文 件,   就 像

              ls(1) 命令的like-named 選項.


      -s       一般, file 只是試圖去檢查在文件列表中那些 stat(2) 報告爲正常文

              件的文件的類型.因爲讀特殊文件將可能致使不可知後果,因此這樣能夠

              防止發生問題.使用 -s 選項時 file 命令也將去讀文件列表中的塊特殊

              文件和字符特殊文件.  通常用於從原始磁盤分區中得到文件系統類型,

              此文件爲塊特殊文件. 這個選項也致使 file 命令忽略 stat(2) 報告的

              文件大小,由於在有些系統中原始磁盤分區的大小報告爲0.


文件

      /usr/share/magic - 默認的幻數列表


ENVIRONMENT

      環境變量 MAGIC 用於設置默認的幻數文件.


參看

      magic(4) - 幻數文件的格式.

      strings(1), od(1), hexdump(1) - 檢查非textfile的工具.


標準的一致性

      本程序比System V 的FILE命令強大, 幾乎能分辨出全部的模糊語言.   與System

      V  的FILE命令大部分兼容.本版本能識別更多的magic, 可是,也將所以在有些情

      況下會產生不一樣輸出(儘管更加精確).


      本版本與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 releases 3.2及之後的版本包括從System V 發展來的 file(1) 命令,但有

      所擴展.本版本與Sun的file命令差異不大.它包括對 ‘&’ 操做符的擴展,例如,

      >16  long&0x7fffffff     >0        not stripped


MAGIC DIRECTORY

      幻數文件項主要是從USENET收集來的,許多人都爲此做 出 了 貢 獻.   Christos

      Zoulas  (下邊將提到的)將收集附加項信息及修正幻數文件項.  幻數文件項的合

      並表將會定時發佈.


      幻數文件項的順序很是重要.不一樣的系統上的幻數項放的順序可能不一樣.  若是 老

      的  file   命 令 使 用 幻 數 文 件 ,請將舊的幻數文件更名保存, (如改成

      /usr/share/magic.orig) 以便往後作比較用.


舉例

      $ file file.c file /dev/hda

      file.c:   C program text

      file:     ELF 32-bit LSB executable, Intel 80386, version 1,

      dynamically linked, not stripped

      /dev/hda: block special


      $ 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


歷史

      There has been a file 命令至少是從研究版本6(手冊頁時間爲1975年1月)開 始

      加 入UNIX中的.  System V 版本引入了一個重要變化:幻數類型的外部表.程序的

      運行時間有輕微降低, 可是複雜性大大增長了.


      本程序是基於System V 版本的,由Ian Darwin獨立設計和編寫.


      John Gilmore對源代碼作了較大修改,在初版基礎上 有 較 大 提 高.   Geoff

      Collyer發現了一些不足之處,並提供了一些幻數文件項.  本程序一直在完善中.


做者

      由Ian F. Darwin寫源碼, UUCP 地址 {utzoo | ihnp4}!darwin!ian, 電子 郵 件

      ian@sq.com, 郵寄地址: P.O. Box 603, Station F, Toronto, Ontario, CANADA

      M4Y 2L8.


      由Rob McMahon修改, cudcv@warwick.ac.uk, 1989, 並對‘&’操做符進行了擴充(

      再也不僅僅是簡單的 ‘x&y != 0’,而是象‘x&y op z’這樣).


      由Guy Harris修改, guy@netapp.com, 1993,完成:


             恢復‘‘old-style’’ ‘&’ 操做符爲原來的功能,由於 1) Rob McMahon所作

             的修改打破了原來的使用方式, 2) 本版本的 file 命 令 支 持 的SunOS

             的‘‘new-style’’  ‘&’ 操做符也處理 ‘x&y op z’, 3) Rob的修改對某些

             狀況沒有考慮到;


             引入多級‘>’;


             引入‘‘beshort’’, ‘‘leshort’’, 等關鍵字使得程序可以按照必定的比特

             順 序 查看文件中的比特數,而不是僅按運行 file 時的本地比特順序查

             看.


      由Ian Darwin和其餘做者(包括Christos Zoulas(christos@astron.com))修改,

      1990-1999.


合法性通告

      版 權 所 屬 (c) Ian F. Darwin, Toronto, Canada, 1986, 1987, 1988, 1989,

      1990, 1991, 1992, 1993.


      本軟件獨立於美國電話電報公司,Sun微系統公司,Digital設備公司, Lotus發展

      公司 , California大學董事會,X聯盟或者MIT,或者自由軟件基金會.


      本軟件獨立於美國商業部的任何出口規定,能夠自由用於任何國家和行星.


      任 何人無需受權便可在任何計算機系統上使用此軟件用於任何目的,能夠自由修

      改和發佈,但要遵照如下限制:


      1. 做者對使用此軟件形成的任何後果不負任何責任,不管多麼嚴重,即便這些後

      果是因爲軟件形成的.


      2. 禁止不如實說明本軟件的來源,不管是明確說錯或是忽略. 因爲不多有用戶讀

      源碼, 因此在文件中必定要說明軟件來源.


      3. 修改後的版本必須明白的標明,禁止將其做爲原始軟件.因爲不多有用戶讀 源

      碼, 因此在文件中必定要說明軟件來源.


      4. 禁止刪除或修改本通告.


      隨 同本包發佈的幾個支持文件(getopt, strtok)由 Henry Spencer完成,一樣適

      用以上條款.


      隨同本包發佈的幾個支持文件(strtol, strchr)屬於公共域的;都作了標記.


      文件 tar.h 和 is_tar.c 由 tar 程序組的John Gilmore完成,無需聽從以 上 條

      款.


臭蟲

      一定存在一種更好的方法來根據Magdir中的glop來自動建立Magic 文件.是什麼方

      法呢?要更好的實現,那麼幻數文件應該編譯成二進制 (就是說, ndbm(3) 或者,

      在異種網絡環境中採用定長的 ASCII 字符串)來加快啓動速度.這樣,程序就能達

      到Version 7 中的 file命令那樣的運行速度,同時又具備System V 版本的 靈 活

      到Version 7 中的 file命令那樣的運行速度,同時又具備System V 版本的 靈 活

      性.


      File  使用的一些算法雖然提升了速度,但精確性下降了,所以在對 ASCII 文件

      內容操做有時會出錯.


      對 ASCII 文件的支持(基本上是對編程語言)過於簡單,效率較低,須要從新編 譯

      並更新.


      在一系列連續行後應該跟着有一個‘‘else’’從句.


      幻 數文件和關鍵詞應該有正則表達式的支持.  使用 ASCII TAB 做爲分隔符很是

      不足取,致使很難編輯文件, 但也所以受到保護.


      在關鍵詞中使用大寫字母是可取的.  例如, troff(1) 命令與查看手冊頁 的 宏.

      正則表達式支持將使這易於實現.


      本 程序沒有實現對 FORTRAN 的理解.  應該可以經過在開始行中出現的關鍵字識

      別出FORTRAN .  正則表達式支持將使這易於實現.


      文件 ascmagic 中的關鍵詞表可能應納入Magic文件.  這能經過使用象‘*’這樣的

      關鍵詞來實現偏移量.


      另 一個優化是要對幻數文件排序,這樣,咱們就能夠在取得第一個比特,第一個

      詞,第一個長整型,等等的時候完成對它們全部的檢查.抱怨在幻數文件項中的衝

      突.制定一條規則,將幻數項在文件偏移量的基礎上排序,賽過在幻數文件裏指定

      位置嗎?


      本程序應提供一種方法來評價一種猜想有"多麼好".  咱們去除了一些先前 的 設

      想( 如,將 ‘‘From ’’ 做爲文件的最初5個字符) 由於它們不如其它的設想好(如

      ,‘‘Newsgroups:’’ 對"Return-Path:").  若是沒有其它的設想提出,就很可 能

      會採納第一種設想.


      本程序比某些file命令執行速度慢.


      本手冊,特別是本部分,比較長.


可用性

      可 以 通 過 匿 名FTP 登 陸 到  ftp.astron.com  在目錄下 /pub/file/file-

      X.YY.tar.gz 得到做者的命令的最新版本


[中文版維護人]

      姓名 <email>


[中文版最新更新]

      2001/07/15


《中國linux論壇man手冊頁翻譯計劃》:

      http://cmpp.linuxforum.net


                         Copyright but distributable                  FILE(1)

(END)

相關文章
相關標籤/搜索