Linux命令学习手册-file
file [-beLvz][-f <名称文件>][-m <魔法数字文件>...][文件或目录...]
功能
辨识文件类型。
举例
检查文件类型
$file file.c file /dev/hda
输入之后,输出如下:
file.c: C program textfile: ELF 32-bit LSB executable, Intel 80386, version 1,dynamically linked, not stripped/dev/hda: block special
检查文件类型,不输出文件名
$file -b test/
输入之后,输出如下:
directory
检查文件类型,文件名和结果用 “,” 隔开
$file -F, example/
输入之后,输出如下:
example, directory
这里可以指定其它的分割字符。
检查块文件内部,获得文件系统信息
$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
这里,如果没有权限,执行不了。
描述
本手册页说明了 3.27
版本 file
命令的使用 . File
命令试图检查每个参数以判定文件的类型. 检查共有三组,按如下顺序进行:文件系统检查,幻数检查,以及语言检查.
文件系统检查成功则输出文件类型. 输出的类型一般会包含以下的词中的一个: text
(文件中仅有 ASCII 字符,可以用 ASCII 终端读此文件,以保证内容的可靠性), executable
(文件中保存的是程序编译后的结果,一些UNIX 内核或其它内核能理解这类文件), 或者 data
表示所有其它类型文件( data
一般为二进制文件或者不可打印的). 有的常用的文件格式(如 core
文件、 tar
包),虽然也包含二进制数据,却不属于这一类。 可以修改如果要修改 /usr/share/magic
或者程序本身,以便针对这些关键字进行处理。当文件为 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的工具.
标准的一致性
本程序(一般Linux上的?)比 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
) 以便日后做比较用.
其它参考资料
http://fanqiang.chinaunix.net/a1/b1/20020108/08100041.html
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
Linux命令学习手册-file
下载Word文档到电脑,方便收藏和打印~
相关文章
- 在 Java 中,keystore 究竟有哪些作用呢?(java中keystore的作用是什么)
- 在 Java 中,三个点(...)具体代表什么含义呢?(java中三个点是什么意思)
- Java 中 Replace 和 ReplaceAll 的区别究竟在哪里?(Java中的Replace和ReplaceAll有什么区别)
- 如何有效提升 Java con 的查询效率?(如何提高java con的查询效率)
- 提升Ruby代码安全性:全面攻略
- Java 中 charAt 方法到底是什么?(java的charat方法是什么)
- Java 流的概念究竟是什么?(java流的概念是什么)
- 如何在 Java 中有效处理时间戳的时区问题?(如何在Java中处理时间戳的时区问题)
- 在 JavaScript 中,getter 与 setter 究竟该如何使用呢?(JavaScript中getter与setter怎么使用)
- Java 集合框架究竟能实现哪些复杂操作?(Java集合框架能实现哪些复杂操作)