file 中文man頁面
名稱
file - 確定文件類型
總覽
file [ -bcnsvzL ] [ -f 命名文件 ] [ -m 幻數文件 ] file ...
描述
本手冊頁說明了3.27版本 file 命令的使用. File 命令試圖檢查每個參數以判定文件的類型. 檢查共有三組,按如下順序進行:文件系統檢查,幻數檢查,以及語言檢查. 文件系統 檢查成功則輸出文件類型.
輸出的類型一般會包含以下的詞中的一個: text (文件中僅有 ASCII 字符,可以用 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的工具.
#p#
NAME
file - determine file type
SYNOPSIS
file [ -bcikLnNprsvz ] [ -f namefile ] [ -F separator ] [ -m magicfiles ] file ...
file -C [ -m magicfile ]
DESCRIPTION
This manual page documents version 4.10 of the file command.
File tests each argument in an attempt to classify it. There are three sets of tests, performed in this order: filesystem tests, magic number tests, and language tests. The first test that succeeds causes the file type to be printed.
The type printed will usually contain one of the words text (the file contains only printing characters and a few common control characters and is probably safe to read on an ASCII terminal), executable (the file contains the result of compiling a program in a form understandable to some UNIX kernel or another), or data meaning anything else (data is usually `binary' or non-printable). Exceptions are well-known file formats (core files, tar archives) that are known to contain binary data. When modifying the file /usr/share/file/magic or the program itself, preserve these keywords . People depend on knowing that all the readable files in a directory have the word ``text'' printed. Don't do as Berkeley did and change ``shell commands text'' to ``shell script''. Note that the file /usr/share/file/magic is built mechanically from a large number of small files in the subdirectory Magdir in the source distribution of this program.
The filesystem tests are based on examining the return from a stat(2) system call. The program checks to see if the file is empty, or if it's some sort of special file. Any known file types appropriate to the system you are running on (sockets, symbolic links, or named pipes (FIFOs) on those systems that implement them) are intuited if they are defined in the system header file <sys/stat.h>.
The magic number tests are used to check for files with data in particular fixed formats. The canonical example of this is a binary executable (compiled program) a.out file, whose format is defined in a.out.h and possibly exec.h in the standard include directory. These files have a `magic number' stored in a particular place near the beginning of the file that tells the UNIX operating system that the file is a binary executable, and which of several types thereof. The concept of `magic number' has been applied by extension to data files. 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 the compiled magic file /usr/share/file/magic.mgc , or /usr/share/file/magic if the compile file does not exist.
If a file does not match any of the entries in the magic file, it is examined to see if it seems to be a text file. ASCII, ISO-8859-x, non-ISO 8-bit extended-ASCII character sets (such as those used on Macintosh and IBM PC systems), UTF-8-encoded Unicode, UTF-16-encoded Unicode, and EBCDIC character sets can be distinguished by the different ranges and sequences of bytes that constitute printable text in each set. If a file passes any of these tests, its character set is reported. ASCII, ISO-8859-x, UTF-8, and extended-ASCII files are identified as ``text'' because they will be mostly readable on nearly any terminal; UTF-16 and EBCDIC are only ``character data'' because, while they contain text, it is text that will require translation before it can be read. In addition, file will attempt to determine other characteristics of text-type files. If the lines of a file are terminated by CR, CRLF, or NEL, instead of the Unix-standard LF, this will be reported. Files that contain embedded escape sequences or overstriking will also be identified.
Once file has determined the character set used in a text-type file, it will attempt to determine in what language the file is written. The language tests look for particular strings (cf names.h) that can appear anywhere in the first few blocks of a file. For example, the keyword .br indicates that the file is most likely a troff(1) input file, just as the keyword struct indicates a C program. These tests are less reliable than the previous two groups, so they are performed last. The language test routines also test for some miscellany (such as tar(1) archives).
Any file that cannot be identified as having been written in any of the character sets listed above is simply said to be ``data''.
OPTIONS
- -b, --brief
- Do not prepend filenames to output lines (brief mode).
- -c, --checking-printout
- Cause a checking printout of the parsed form of the magic file. This is usually used in conjunction with -m to debug a new magic file before installing it.
- -C, --compile
- Write a magic.mgc output file that contains a pre-parsed version of file.
- -f, --files-from namefile
- Read the names of the files to be examined from namefile (one per line) before the argument list. Either namefile or at least one filename argument must be present; to test the standard input, use ``-'' as a filename argument.
- -F, --separator separator
- Use the specified string as the separator between the filename and the file result returned. Defaults to ``:''.
- -i, --mime
- Causes the file command to output mime type strings rather than the more traditional human readable ones. Thus it may say ``text/plain; charset=us-ascii'' rather than ``ASCII text''. In order for this option to work, file changes the way it handles files recognised by the command itself (such as many of the text file types, directories etc), and makes use of an alternative ``magic'' file. (See ``FILES'' section, below).
- -k, --keep-going
- Don't stop at the first match, keep going.
- -L, --dereference
- option causes symlinks to be followed, as the like-named option in ls(1). (on systems that support symbolic links).
- -m, --magic-file list
- Specify an alternate list of files containing magic numbers. This can be a single file, or a colon-separated list of files. If a compiled magic file is found alongside, it will be used instead. With the -i or --mime option, the program adds ".mime" to each file name.
- -n, --no-buffer
- Force stdout to be flushed after checking each file. This is only useful if checking a list of files. It is intended to be used by programs that want filetype output from a pipe.
- -N, --no-pad
- Don't pad filenames so that they align in the output.
- -p, --preserve-date
- On systems that support utime(2) or utimes(2), attempt to preserve the access time of files analyzed, to pretend that file(2) never read them.
- -r, --raw
- Don't translate unprintable characters to \ooo. Normally file translates unprintable characters to their octal representation.
- -s, --special-files
- Normally, file only attempts to read and determine the type of argument files which stat(2) reports are ordinary files. This prevents problems, because reading special files may have peculiar consequences. Specifying the -s option causes file to also read argument files which are block or character special files. This is useful for determining the filesystem types of the data in raw disk partitions, which are block special files. This option also causes file to disregard the file size as reported by stat(2) since on some systems it reports a zero size for raw disk partitions.
- -v, --version
- Print the version of the program and exit.
- -z, --uncompress
- Try to look inside compressed files.
- --help
- Print a help message and exit.
FILES
- /usr/share/file/magic.mgc
- Default compiled list of magic numbers
- /usr/share/file/magic
- Default list of magic numbers
- /usr/share/file/magic.mime.mgc
- Default compiled list of magic numbers, used to output mime types when the -i option is specified.
- /usr/share/file/magic.mime
- Default list of magic numbers, used to output mime types when the -i option is specified.
- /etc/magic
- Local additions to magic wisdom.
ENVIRONMENT
The environment variable MAGIC can be used to set the default magic number file name. file adds ".mime" and/or ".mgc" to the value of this variable as appropriate.
SEE ALSO
magic(5) - description of magic file format.
strings(1), od(1), hexdump(1) - tools for examining non-textfiles.