Manpages

NAME

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的 工 具 .

标 准 的 一 致 性

本 程 序 比 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 [AT] sq.com, 邮 寄 地 址 : P.O. Box 603, Station F, Toronto, Ontario, CANADA M4Y 2L8. 由 Rob McMahon修 改 , cudcv [AT] warwick.uk, 1989, 并 对 ’&’操 作 符 进 行 了 扩 充 ( 不 再 仅 仅 是 简 单 的 ’x&y != 0’, 而 是 象 ’x&y op z’这 样 ) . 由 Guy Harris修 改 , guy [AT] 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 [AT] 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.his_tar.ctar 程 序 组 的 John Gilmore完 成 ,无 需 遵 从 以 上 条 款 .

臭 虫

必 定 存 在 一 种 更 好 的 方 法 来 根 据 Magdir中 的 glop来 自 动 创 建 Magic 文 件 .是 什 么 方 法 呢 ?要 更 好 的 实 现 , 那 么 幻 数 文 件 应 该 编 译 成 二 进 制 (就 是 说 , ndbm(3) 或 者 , 在 异 种 网 络 环 境 中 采 用 定 长 的 ASCII 字 符 串 )来 加 快 启 动 速 度 .这 样 , 程 序 就 能 达 到 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

本 页 面 中 文 版 由 中 文 man 手 册 页 计 划 提 供 。 中 文 man 手 册 页 计 划 : https://github.com/man-pages-zh/manpages-zh