.TH FILE 1 "Copyright but distributable" .SH NAME file \- 確定檔案類型 .SH 總覽 .B file [ .B \-bcnsvzL ] [ .B \-f 命名檔案 ] [ .B \-m 幻數檔案 ] file ... .SH 描述 本手冊頁說明了3.27版本 .B file 命令的使用. .B File 命令試圖檢查每個參數以判定檔案的類型. 檢查共有三組,按如下順序進行:檔案系統檢查,幻數檢查,以及語言檢查. .I 檔案系統 檢查成功則輸出檔案類型. .PP 輸出的類型一般會包含以下的詞中的一個: .B text (檔案中僅有 .SM ASCII 字符,可以用 .SM ASCII 終端讀此檔案,以保証內容的可靠性), .B executable (檔案中保存的是程式編譯後的結果,一些\s-1UNIX\s0 核心或其它核心能理解這類檔案), 或者 .B data 表示所有其它類型檔案(data 一般為二進制檔案或者不可列印的). 但是有的常用的檔案格式(如core檔案、tar包),雖然也包含二進制數據, 卻不屬於這一類 如果要修改 .I /usr/share/magic 或者程式本身, .B "preserve these keywords" . 當檔案為``text'' 類型時,認為此檔案為可讀檔案. 不要像在Berkeley環境中那樣做 \- 要把``shell commands text''改為``shell script''. .PP 檔案系統檢查是建立在對 .BR stat (2) 系統調用結果的分析上的. 程式會分析檔案是否為空,或者是否是某種特殊檔案. 對於所有可在現有系統上使用的檔案類型 (比如套接 口檔案,動態鏈接檔案,命名管道檔案(FIFOs) 等), 只要它在系統頭檔案 .IR sys/stat.h 中已經定義過,就可以被檢查到. .PP 幻數檢查用來檢查檔案中是否有特殊的固定格式的數據. 規範的例子如二進制可執行檔案(編譯後的程式) .I a.out ,該檔案格式在標準include目錄下的 .I a.out.h 檔案中定義,也可能在 .I exec.h 中定義. 這些檔案在檔案開始部分附近的一個特殊位置保存有一個'幻數' , 通過幻數告訴\s-1UNIX\s0 作業系統此檔案是二進制可執行檔案, 和其中包含的其它類型. 幻數的概念已經擴展到數據檔案.任何在檔案固定位置有與檔案類型 相關的不變標識符的檔案都可以這樣表示. 這些檔案中的信息可以 從幻數檔案 .I /usr/share/magic 中讀取. .PP 如果檔案為 .SM ASCII 檔案, .B file 會試圖檢查它的語言. 語言檢查在檔案開始的幾個塊中(任意位置)查找是否有特殊字符串(參看 .IR names.h ) 例如,關鍵字 .B .br 指出此檔案很可能是 .BR troff (1) 輸入檔案, 而關鍵字 .B struct 指出此檔案是C程式. 語言檢查不如前兩組檢查可靠,所以放在最後執行.它也用來檢查 一些混合檔案(例如 .BR tar (1) 存檔檔案)並確定檔案是`ascii text'類型還是`data'類型. .SH 選項 .TP 8 .B \-b 不輸出檔名 (簡要模式). .TP 8 .B \-c 檢查時列印輸出幻數檔案的解析結果.常與 .B \-m 一起使用,用來在安裝幻數檔案之前調試它. .TP 8 .B \-f 命名檔案 從在參數表前的 .I 命名檔案 中讀出將要檢查的檔名(每行一個檔案).要有 .I 命名檔案 ,或者至少有一個檔名參數; 如果要檢查標準輸入, 使用``-''作為檔案參數. .TP 8 .B \-m list 指定包含幻數的檔案列表.可以是單個檔案,也可以是 用冒號分開的多個檔案. .TP 8 .B \-n 每檢查完一個檔案就強制刷新標準輸出. 僅在檢查一組檔案時才有效. 一般在將檔案類型輸出到管道時才採用此選項. .TP 8 .B \-v 列印程式版本並退出. .TP 8 .B \-z 試圖查看壓縮檔案內部信息. .TP 8 .B \-L (在支持符號鏈接的系統上)選項顯示符號鏈接檔案的原檔案, 就像 .BR ls (1) 命令的like-named 選項. .TP 8 .B \-s 通常, .B file 只是試圖去檢查在檔案列表中那些 .BR stat (2) 報告為正常檔案的檔案的類型.由於讀特殊檔案將可能導致 不可知後果,所以這樣可以防止發生問題.使用 .BR \-s 選項時 .B file 命令也將去讀檔案列表中的塊特殊檔案和字符特殊檔案. 一般用於從原始磁碟分區中獲得檔案系統類型,此檔案為塊 特殊檔案. 這個選項也導致 .B file 命令忽略 .BR stat (2) 報告的檔案大小,因為在有些系統中原始磁碟分區的大小報告為0. .SH 檔案 .I /usr/share/magic \- 預設的幻數列表 .SH ENVIRONMENT 環境變量 .B MAGIC 用於設置預設的幻數檔案. .SH 參看 .BR magic (4) \- 幻數檔案的格式. .br .BR strings (1), " od" (1), " hexdump(1)" \- 檢查非textfile的工具. .SH 標準的一致性 本程式比System V 的FILE命令強大, 幾乎能分辨出所有的模糊語言. 與System V 的FILE命令大部分相容.本版本能識別更多的magic, 但是,也將因此在有些情況下會產生不同輸出(儘管更加精確). .PP 本版本與System V的顯著區別就是本版本對空格是作為分隔符來 處理的, 所以不能在格式字符串中包含空格. 例如,現有幻數文 件中的 .br >10 string language impress\ (imPRESS data) .br 要改為 .br >10 string language\e impress (imPRESS data) .br 另外, 格式字符串中的反斜線符號也要避免.例如,現有幻數檔案中的 .br 0 string \ebegindata Andrew Toolkit document .br 要改為 .br 0 string \e\ebegindata Andrew Toolkit document .br .PP SunOS releases 3.2及以後的版本包括從System V 發展來的 .BR file (1) 命令,但有所擴展.本版本與Sun的file命令差別不大.它包括對 `&' 操作符的擴展,例如, .br >16 long&0x7fffffff >0 not stripped .SH MAGIC DIRECTORY 幻數檔案項主要是從USENET收集來的,許多人都為此作出了貢獻. Christos Zoulas (下邊將提到的)將收集附加項信息及修正幻數檔案項. 幻數檔案項的合並表將會定時發佈. .PP 幻數檔案項的順序非常重要.不同的系統上的幻數項放的順序可能不同. 如果老的 .B file 命令使用幻數檔案,請將舊的幻數檔案改名保存, (如改為 .IR /usr/share/magic.orig ) 以便日後做比較用. .SH 舉例 .nf $ 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 .fi .SH 歷史 There has been a .B file 命令至少是從研究版本6(手冊頁時間為1975年1月)開始加入\s-1UNIX\s0中的. System V 版本引入了一個重要變化:幻數類型的外部表.程式的運 行時間有輕微下降, 但是復雜性大大增加了. .PP 本程式是基於System V 版本的,由Ian Darwin獨立設計和編寫. .PP John Gilmore對原始碼做了較大修改,在第一版基礎上有較大提高. Geoff Collyer發現了一些不足之處,並提供了一些幻數檔案項. 本程式一直在完善中. .SH 作者 由Ian F. Darwin寫原始碼, UUCP 地址 {utzoo | ihnp4}!darwin!ian, 電子郵件 ian@sq.com, 郵寄地址: P.O. Box 603, Station F, Toronto, Ontario, CANADA M4Y 2L8. .PP 由Rob McMahon修改, cudcv@warwick.ac.uk, 1989, 並對`&'操作符進行了擴充 (不再僅僅是簡單的 `x&y != 0',而是像`x&y op z'這樣). .PP 由Guy Harris修改, guy@netapp.com, 1993,完成: .RS .PP 恢復``old-style'' `&' 操作符為原來的功能,因為 1) Rob McMahon所做的修改打破了原來的使用方式, 2) 本版本的 .B file 命令支持的SunOS 的``new-style'' `&' 操作符也處理 `x&y op z', 3) Rob的修改對某些情況沒有考慮到; .PP 引入多級`>'; .PP 引入``beshort'', ``leshort'', 等關鍵字使得程式能夠按照一定的比特順序 查看檔案中的比特數,而不是僅按運行 .BR file 時的本地比特順序查看. .RE .PP 由Ian Darwin和其他作者(包括Christos Zoulas(christos@astron.com))修改, 1990-1999. .SH 合法性通告 版權所屬 (c) Ian F. Darwin, Toronto, Canada, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993. .PP 本軟體獨立於美國電話電報公司,Sun微系統公司,Digital設備公司, Lotus發展公司 , California大學董事會,X聯盟或者MIT,或者自由軟體基金會. .PP 本軟體獨立於美國商業部的任何出口規定,可以自由用於任何國家和行星. .PP 任何人無需授權即可在任何電腦系統上使用此軟體用於任何目的, 可以自由修改和發佈,但要遵守以下限制: .PP 1. 作者對使用此軟體造成的任何後果不負任何責任,無論多麼嚴重, 即使這些後果是由於軟體造成的. .PP 2. 禁止不如實說明本軟體的來源,無論是明確說錯或是忽略. 由於很少有使用者讀原始碼, 所以在檔案中一定要說明軟體來源. .PP 3. 修改後的版本必須明白的標明,禁止將其作為原始軟體.由於很少有使用者讀原始碼, 所以在檔案中一定要說明軟體來源. .PP 4. 禁止刪除或修改本通告. .PP 隨同本包發佈的幾個支持檔案(\fIgetopt\fP, \fIstrtok\fP)由 Henry Spencer完成,同樣適用以上條款. .PP 隨同本包發佈的幾個支持檔案(\fIstrtol\fP, \fIstrchr\fP)屬於公共域的;都做了標記. .PP 檔案 .I tar.h 和 .I is_tar.c 由 .B tar 程式組的John Gilmore完成,無需遵從以上條款. .SH 臭蟲 必定存在一種更好的方法來根據Magdir中的glop來自動創建Magic 檔案.是什麼方法呢?要更好的實現,那麼幻數檔案應該編譯成二進制 (就是說, .BR ndbm (3) 或者, 在異種網路環境中採用定長的 .SM ASCII 字符串)來加快啟動速度.這樣,程式就能達到Version 7 中的 file命令那樣的運行速度,同時又具有System V 版本的靈活性. .PP .B File 使用的一些算法雖然提高了速度,但精確性降低了,因此 在對 .SM ASCII 檔案內容操作有時會出錯. .PP 對 .SM ASCII 檔案的支持(基本上是對編程語言)過於簡單,效率較低,需要重新編譯並更新. .PP 在一系列連續行後應該跟著有一個``else''從句. .PP 幻數檔案和關鍵詞應該有正則表達式的支持. 使用 .SM "ASCII TAB" 作為分隔符非常不足取,導致很難編輯檔案, 但也因此受到保護. .PP 在關鍵詞中使用大寫字母是可取的. 例如, .BR troff (1) 命令與查看手冊頁的宏. 正則表達式支持將使這易於實現. .PP 本程式沒有實現對 \s-2FORTRAN\s0 的理解. 應該能夠通過在開始行中出現的關鍵字識別出\s-2FORTRAN\s0 . 正則表達式支持將使這易於實現. .PP 檔案 .I ascmagic 中的關鍵詞表可能應歸入Magic檔案. 這能通過使用像`*'這樣的關鍵詞來實現偏移量. .PP 另一個優化是要對幻數檔案排序,這樣,我們就可以 在取得第一個比特,第一個詞,第一個長整型,等等的時候完成 對它們所有的檢查.抱怨在幻數檔案項中的沖突.制定一條規則, 將幻數項在檔案偏移量的基礎上排序,勝過在幻數檔案裏指定位置嗎? .PP 本程式應提供一種方法來評價一種猜測有"多麼好". 我們去除了一些先前的設想(如,將 ``From '' 作為檔案的最初5個字符) 因為它們不如其它的設想好(如,``Newsgroups:'' 對"Return-Path:"). 如果沒有其它的設想提出,就很可能會採納第一種設想. .PP 本程式比某些file命令執行速度慢. .PP 本手冊,特別是本部分,比較長. .SH 可用性 可以通過匿名FTP登陸到 .B ftp.astron.com 在目錄下 .I /pub/file/file-X.YY.tar.gz 獲得作者的命令的最新版本 .SH "[中文版維護人]" .B 姓名 .SH "[中文版最新更新]" .B 2001/07/15 .SH "《中國linux論壇man手冊頁翻譯計劃》:" .BI http://cmpp.linuxforum.net