第 6 章 Linux 文 件 结 构

在 Linux 中 ,文 件 被 组 织 在 目 录 中 ,反 过 来 ,文 件 又 在 统 一 的 文 件 结 构 下 相 互 联系 。 文 件 引 用 不 仅 仅 是 依 照 它 的 名 字 ,此 外 还 依 照 它 在 文 件 结 构 中 的 位 置 。 你 想创 建 并 向 文 件 结 构 增 加 多 少 目 录 都 可 以 。 Linux 文 件 命 令 可 以 执 行 复 杂 的 操 作 , 诸 如 移 动 文 件 ,带 同 子 目 录 的 整 个 目 录 的 拷 贝 。 使 用 文 件 操 作 , 诸 如 find, cp,mv 和 ln ,你 可 以 对 文 件 定 位 ,拷 贝 或 将 他 们 由 一 个 目 录 连 接 到 另 一 个 目 录 。

这 些 特 性 一 齐 构 成 了 Linux 的 文 件 系 统 。 本 章 首 先 介 绍 不 同 的 文 件 类 型 和类 别 (clacses), 然 后 ,本 章 介 绍 了 Linux 文 件 总 体 结 构 , 以 及 如 何 利 用 路 径 名 和 工作 目 录 即 可 实 现 对 目 录 和 文 件 的 引 用 。 本 章 的 最 后 部 分 讨 论 了 诸 如 拷 贝 、 移 动 、连 接 文 件 等 不 同 文 件 操 作 。

Linux 文 件

你 可 以 用 任 何 字 母 表 中 字 母 ,下 划 线 和 数 字 来 命 名 一 个 文 件 。 你 也 可 以 使 用句 号 和 逗 号 。 但 是 ,文 件 名 不 能 以 数 字 开 头 。 此 外 ,除 非 在 特 殊 的 情 况 中 。 你 都 不应 该 以 点 号 作 为 文 件 名 开 头 。 其 它 的 字 符 ,如 横 线 、 问 号 或 逗 号 ,它 们 都 是 系 统 保

留 的 特 殊 字 符 ,不 能 用 于 文 件 名 。 文 件 名 可 长 达 256 个 字 符 。

你 可 以 把 扩 展 作 为 文 件 名 的 一 部 分 。 句 号 用 于 区 别 文 件 名 和 扩 展 。 扩 展 对于 将 你 的 文 件 分 类 是 非 常 有 用 的 。 你 可 能 对 某 些 大 众 已 接 纳 的 标 准 扩 展 比 较 熟悉 。 例 如 ,C 的 源 代 码 文 件 总 是 有 C 的 扩 展 。 包 含 编 辑 过 的 目 标 代 码 文 件 有 O 扩 展 。 当 然 ,你 可 以 加 入 自 己 的 文 件 扩 展 。 下 一 例 子 都 是 有 效 的 Linux 文 件 名 。

preface chapter 2

Calc.c intro.bk 1

有 一 些 特 殊 的 初 始 化 文 件 用 于 包 含 shell 的 设 置 命 令 。 这 些 文 件 是 隐 藏 的 或

者 是 点 号 文 件 , 如 第 5 章 所 述 , 以 点 号 开 头 的 文 件 。 点 号 文 件 有 预 先 已 定 好 的 名字 。 回 想 一 下 当 使 用 ls 命 令 来 显 示 文 件 名 时 ,点 号 文 件 不 会 被 显 示 。 要 包 括 点 号文 件 ,你 需 要 在 ls 命 令 中 加 入 -a 选 项 。 点 号 文 件 将 在 14 章 详 细 讨 论 。

文 件 类 型

正 如 在 第 5 章 中 所 知 道 的 ,linux 中 所 有 文 件 只 有 一 种 物 理 格 式 -byte 流 。byte 流 只 是 一 个 byte 的 序 列 。 这 一 点 使 linux 将 文 件 概 念 应 用 于 系 统 中 所 有 的 数 据元 素 。 目 录 和 设 备 都 被 分 类 成 文 件 。 将 所 有 东 西 都 当 作 文 件 对 待 ,可 使 linux 很方 便 地 组 织 并 交 换 数 据 。 文 件 中 的 数 据 可 以 被 直 接 送 往 设 备 , 例 如 屏 幕 因 为 设 备与 常 规 文 件 一 样 ,与 系 统 有 着 相 同 的 byte 流 文 件 格 式 接 口 。

这 种 相 同 的 文 件 格 式 被 用 于 其 它 操 作 系 统 元 素 的 执 行 。 设 备 ,诸 如 屏 幕 或 键

盘 的 接 口 也 被 设 定 为 一 个 文 件 。 其 它 元 素 ,如 目 录 ,本 身 也 是 byte 流 文 件 ,但 它 们有 着 不 同 的 内 部 组 织 形 式 。 一 个 目 录 文 件 包 含 着 目 录 信 息 , 并 以 一 种 特 殊 的 目 录格 式 组 织 。 既 然 这 些 不 同 的 元 素 都 被 作 为 文 件 对 待 , 他 们 可 被 视 为 构 成 不 同 的 文件 类 型 。 字 符 设 备 是 一 种 文 件 类 型 。 目 录 又 是 另 一 种 文 件 类 型 。 这 些 文 件 类 型的 数 目 因 你 所 用 Linux 类 型 不 同 而 变 化 。 然 而 , 有 四 种 常 见 的 文 件 类 型 : 普 通 文件 、 目 录 文 件 ,字 符 设 备 文 件 和 块 设 备 文 件 。 尽 管 你 可 能 很 少 会 引 用 文 件 的 类 型 , 但 搜 索 目 录 或 设 备 时 它 还 是 非 常 有 用 的 。 在 本 章 的 后 面 ,你 将 会 看 到 在 find 的 命令 的 搜 索 标 准 中 ,如 何 利 用 文 件 类 型 的 确 定 搜 索 的 目 录 和 设 备 。

文 件 分 类 (classification): 文 件 和 od 命 令

尽 管 所 有 的 普 通 文 件 都 有 byte 流 的 格 式 , 但 它 们 有 不 同 方 面 的 应 用 。 最 显 著的 区 别 是 二 进 制 和 文 本 文 件 之 间 。 编 译 过 的 程 序 是 二 进 制 文 件 。 然 而 , 即 便 是 文本 文 件 也 可 根 据 不 同 的 用 途 加 以 分 类 。 你 可 以 创 建 包 含 C 编 程 源 代 码 或 shell 命 令 的 文 件 , 甚 至 可 以 有 空 的 文 件 。 文 件 也 以 是 可 执 行 程 序 或 目 录 文 件 。 Linux 中 的 file 命 令 可 帮 你 判 定 一 个 文 件 的 用 途 。 它 对 文 件 的 头 几 行 进 行 检 查 并 试 图对 文 件 进 行 分 类 。 file 命 令 在 文 件 头 几 行 中 查 找 特 殊 关 键 词 或 特 殊 数 字 ,但 这 一命 令 并 不 总 是 正 确 的 。 在 下 一 个 例 子 中 ,file 命 令 检 查 了 两 个 文 件 的 内 容 并 对 它们 进 行 了 分 类 。

$ file monday reports monday: text reports: directory

为 了 描 述 文 件 分 类 的 不 同 ,在 下 一 个 例 子 中 ,file 命 令 检 查 了 一 个 C 源 代 码 文件 ,一 个 可 执 行 文 件 和 一 个 空 文 件 。

$ file calc.c proj newdata cale c: C program text proj: exe cutable newdata: empty

file 命 令 也 接 受 -f 选 项 使 你 可 以 从 文 件 读 入 文 件 名 ,而 无 须 在 命 令 行 上 敲 入 。

在 下 一 个 例 子 中 ,文 件 名 从 文 件 myfile 中 读 出 。

$ cat myfiles

calc.c proj newdata

$ file -f myfiles

calc.c: c program text proj: exe outable naodata: empty

如 果 你 要 逐 字 节 地 检 查 文 件 , 可 以 使 用 od 命 令 完 成 。 od 命 令 执 行 对 文 件 的

(dump )。 缺 省 情 况 下 , 它 将 以 八 进 制 形 式 打 印 文 件 每 一 个 字 节 。 当 然 , 你 也 可 以指 定 字 符 , 十 进 制 或 十 六 进 制 的 表 示 形 式 。 od 命 令 在 你 需 要 查 找 文 件 中 的 特 殊字 符 ,或 显 示 二 进 制 文 件 时 是 非 常 有 帮 助 的 。 如 果 你 进 行 字 符 的 清 查 ,某 些 特 定 无法 打 印 的 字 符 将 以 字 符 定 义 的 形 式 表 示 。 例 如 ,回 车 键 将 用 \n 表 示 。 file 和 od 命令 的 选 项 都 列 在 本 章 后 的 表 6-1 中。

文 件 结 构

Linux 将 文 件 组 织 在 一 个 分 层 相 连 的 目 录 集 中 。 每 一 个 目 录 中 可 包 含 文 件 或其 它 的 目 录 。 在 这 种 意 义 上 ,目 录 有 两 个 重 要 的 功 能 。 一 个 目 录 包 含 文 件 ,正 如 同文 件 放 入 文 件 柜 中 ,一 个 目 录 又 同 其 它 目 录 相 关 联 ,正 如 同 树 枝 与 其 它 的 树 枝 相 关联 。 对 文 件 而 言 ,目 录 就 如 同 文 件 柜 ,每 个 抽 屈 之 中 都 放 着 几 个 文 件 。 要 访 问 文 件 , 你 只 要 打 开 抽 屈 即 可 。 然 而 , 同 文 件 抽 屈 不 同 , 目 录 不 只 可 以 包 含 文 件 , 还 可 以 包含 其 它 目 录 。 这 样 , 一 个 目 录 便 可 与 另 一 个 目 录 关 联 。

因 为 这 一 结 构 与 树 的 相 似 性 , 在 计 算 机 术 语 中 它 通 常 被 称 作 树 形 结 构 (tree

structure )。 然 而 , 把 它 想 像 成 一 株 倒 置 的 灌 木 更 为 贴 切 。 没 有 主 干 , 树 是 倒 置 的 , 头 上 根 下 。 由 根 部 向 下 扩 展 。 每 一 个 分 支 都 只 来 自 另 一 个 分 支 ,但 它 可 以 有 许 多低 层 的 分 支 。 在 这 种 观 点 上 , 可 以 认 为 它 有 一 种 父 子 结 构 (parent child structme) 。 同 样 , 每 一 个 目 录 也 是 另 一 个 目 录 的 子 目 录 , 每 一 个 目 录 中 都 可 以 包含 许 多 子 目 录 ,但 它 只 是 某 一 个 父 目 录 的 子 目 录 。

图 6-1 描 述 了 文 件 的 分 层 结 构 。 由 顶 部 的 根 目 录 开 始 , 其 它 的 目 录 不 断 分 支 。每 个 目 录 都 包 含 其 它 几 个 目 录 或 文 件 ,但 每 个 目 录 只 能 有 一 个 父 目 录 。 例 如 ,目 录chris 有 两 个 子 目 录 ,reports 和 pregrams, 然而 Chris 只 跟 一 个 父 目 录 相 连 ,这 一目 录 叫 作 hom e。

第 6 章 Linux 文 件 结 构 - 图1

图 6-1Linux 树结构

第 6 章 Linux 文 件 结 构 - 图2

图 6-2Linux 文件结构 , 从 根 目 录 开 始 , 包括系统、 home 和用户目录

Linux 文 件 结 构 以 根 目 录 ,开 始 ,分 支 成 几 个 目 录 。 在 根 目 录 中 有 几 个 系 统 目录 ,它 们 包 括 着 描 述 Linux 系 统 特 征 的 文 件 和 程 序 。 根 目 录 也 包 含 着 一 个 用 于 容纳 系 统 中 所 有 用 户 的 home 目 录 。 每 个 用 户 的 home 目 录 中 都 包 含 着 用 户 自 行创 建 的 子 目 录 。 这 其 中 的 目 录 都 可 以 再 包 含 其 它 目 录 。 这 一 网 状 目 录 将 从 用 户的 home 目 录 进 行 分 支 。

Home 目 录

当 你 登 录 入 系 统 ,你 便 处 于 你 的 home 目 录 中 。 系 统 起 这 个 目 录 起 的 名 字 同你 登 录 的 名 字 相 同 。 你 第 一 次 登 录 后 创 建 的 所 有 文 件 都 会 被 置 于 你 的 home 目录 中 。 然 而 ,在 你 的 home 目 录 中 ,你 也 可 以 创 建 其 它 新 的 目 录 。 你 可 以 转 向 这 些目 录 并 把 文 件 存 于 其 中 。 这 于 系 统 中 其 它 用 户 而 言 也 是 相 同 的 。 每 一 个 用 户 都有 自 己 的 以 正 确 的 登 录 名 标 识 的 home 目 录 。 它 们 也 可 以 用 于 创 建 其 它 自 己 的目 录 。

通 过 目 录 名 或 将 目 录 定 为 缺 省 目 录 , 你 便 可 以 访 问 一 个 目 录 。 每 个 目 录 在 创建 时 都 有 一 个 名 字 。 在 文 件 操 作 中 , 你 可 利 用 这 个 名 字 进 行 目 录 中 的 文 件 访 问 。你 也 可 比 将 目 录 设 为 你 的 缺 少 目 录 。 如 果 在 文 件 操 作 中 你 不 使 用 任 何 目 录 名 , 那么 将 会 对 缺 省 目 录 进 行 访 问 。 缺 省 目 录 被 叫 作 工 作 目 录 (working directory) 。 在这 种 意 义 上 ,工 作 目 录 是 你 当 前 正 在 进 行 工 作 的 目 录 。

当 你 登 录 时 ,工 作 目 录 便 是 你 的 home 目 录 , 它 通 常 与 你 的 登 录 名 有 相 同 的 名字 。 你 也 可 以 更 换 工 作 目 录 ,用 cd 命 令 来 指 定 另 一 个 工 作 目 录 。 工 作 目 录 更 换之 后 , 你 便 可 由 一 个 目 录 移 往 另 一 个 目 录 。 另 一 种 考 虑 目 录 的 方 法 是 把 它 认 为 一

条 走 廊 。 在 走 廊 上 ,每 个 门 上 都 有 自 己 的 名 字 。 一 些 门 通 向 房 间 ,另 一 些 门 通 向 其它 的 走 廊 。 通 向 房 间 的 门 就 是 目 录 中 的 文 件 。 通 向 其 它 走 廊 的 门 就 是 其 它 的 目录 。 从 一 个 走 廊 去 往 另 一 个 走 廊 就 是 更 换 工 作 目 录 。 穿 越 几 条 走 廊 即 是 更 换 几个 目 录 。

路 径 名

在 创 建 文 件 或 目 录 时 , 你 所 给 的 名 字 并 不 是 它 们 的 全 名 。 一 个 目 录 的 全 名 是它 的 路 径 名 。 目 录 之 间 分 层 的 网 状 关 系 构 成 了 路 径 , 这 些 路 径 可 无 歧 义 的 标 识 及引 用 目 录 和 文 件 。 在 图 6-3 中 ,有 一 条 路 径 从 根 目 录 ” /” 开 始 , 通过 home 目 录 到 达robert 目 录 。 有 另 一 条 路 径 ,从 根 目 径 通 过 home 和 Chris 目 录 到 达 report 目 录 。尽 管 路 径 的 某 些 部 分 开 始 是 一 样 的 ,但 在 某 一 点 它 们 不 同 了 。目 录 robert 和 report 有 两 个 目 录 是 共 享 的 :根 和 home 。 然 后 它 们 便 不 同 了 。 在 home 目 录 中 ,robert 以 robert 告 终 ,而 目 录 Chris 还 引 向 reports. 这样 ,文 件 结 构 中 的 每 个 目 录 都 可 以说 有 着 单 独 的 路 径 。 系 统 来 标 识 一 个 目 录 的 真 实 名 字 总 是 一 个 以 根 目 录 开 头 及包 含 目 录 上 方 所 有 网 状 目 录 的 名 字 。

在 Linux 中 , 在 路 径 中 列 出 各 个 目 录 名 并 用 斜 杠 加 以 分 隔 就 可 以 写 出 路 径

名 。路 中 第 一 个 目 录 前 的 斜 径 代 表 根 目 录 。目 录 robert 的 路 径 名 是 /home/robert.

目 录 reports 的 路 径 名 是 /home/chris/reports.

路 径 名 也 适 用 于 文 件 。 当 在 目 录 中 创 建 一 个 文 件 时 ,你 起 文 件 起 了 一 个 名 字 。然 而 , 系 统 标 识 文 件 的 真 正 名 字 是 文 件 名 和 从 根 目 录 到 文 件 所 在 目 录 的 目 录 路径 。 在 图 6-4 中 ,文 件 weather 的 路 径 包 括 根 目 录 ,home 和 chris 目 录 以 及 文 件

名 weathe r。 weather 的 路 径 名 是 /home/chris/weathes.( 根 目 录 由 第 一 个 斜 杠 代表 )。

路 径 名 可 以 是 绝 对 的 或 相 对 的 。 绝 对 路 径 名 是 文 件 或 目 录 由 根 目 录 开 始 的完 全 路 径 名 。 相 对 路 径 名 (relative path name) 是 工 作 目 录 开 始 的 ,它 是 与 你 的 工作 目 录 相 对 的 文 件 的 路 径 。

第 6 章 Linux 文 件 结 构 - 图3

图 6-3 目录路径名

利 用 图 6-4 所 示 的 目 录 结 构 。 如 果 chris 是 你 的 工 作 目 录 。 文 件 monday 的相 对 路 径 是 /reports/monday monday 的 绝 对 路 径 名 是

/home/chris/reports/monday.

第 6 章 Linux 文 件 结 构 - 图4

图 6-4weather 的路径名 :/home/chris/weather

系 统 目 录

开 始 Linux 文 件 结 构 的 根 目 录 包 含 几 个 系 统 目 录 。 系 统 目 录 中 包 含 着 系 统运 行 和 维 护 的 必 不 可 少 的 文 件 和 程 序 。 许 多 还 包 含 有 子 目 录 , 子 目 录 中 有 许 多 系统 设 备 的 接 口 ,如 打 印 机 或 终 端 。 表 6-2 列 出 了 基 本 的 系 统 目 录 ,图 6-5 表 明 这 些目 录 在 树 形 结 构 中 是 如 何 组 织 的 。

第 6 章 Linux 文 件 结 构 - 图5

图 6-5Linux 中系统目录

列 表 、 显 示 及 打 印 文 件 : ls, cat, more 和 lpr

操 作 系 统 的 主 要 功 能 之 一 是 文 件 管 理 。 你 可 能 会 对 你 的 文 件 执 行 某 些 基 本的 输 出 操 作 ,诸 如 把 它 们 显 示 在 屏 幕 上 或 把 它 们 打 印 出 来 。 linux 系 统 提 供 了 一 套命 令 来 完 成 诸 如 列 表 、 显 示 、 文 件 打 印 及 拷 贝 、 复 命 令 、 文 件 、 删 除 等 基 本 文件 管 理 操 作 。 这 些 命 令 通 常 是 由 简 写 的 词 构 成 。 例 如 ,ls 命 令 是 ” list” 的 化 简 形 式 , 它 将 对 目 录 中 的 文 件 进 行 列 表 。 lpr 命 令 是 ” line prin t” 的 ,它 将 打 印 文 件 。 cat 和 more 命 令 将 文 件 的 内 容 显 示 在 屏 幕 上 。 表 6-3 列 出 了 这 些 命 令 和 它 们 的 不同 选 项 。

当 登 录 到 你 的 linux 系 统 中 后 ,你 可 能 会 对 你 目 录 中 的 文 件 进 行 列 表 。 ls 命 令会 输 出 一 个 你 的 文 件 和 目 录 名 的 列 表 , 它 是 非 常 有 用 的 。 ls 命 令 有 许 多 选 项 用 于

显 示 有 不 同 特 征 的 文 件 的 列 表 。 这 些 在 第 5 章 中 有 详 细 的 讨 论 。

显 示 文 件 :cat 和 more

你 可 能 需 要 查 看 一 个 文 件 的 内 容 。 cat 和 more 命 令 将 文 件 的 内 容 显 示 在 屏幕 上 。 cat 代 表 “concatenate ” ( 连 锁 )。 正 如 第 7 章 所 述 ,它 实 际 上 是 一 个 非 常 复杂 、 功 能 强 大 的 命 令 。 这 里 只 是 被 有 限 的 利 用 , 用 于 将 文 件 的 文 本 显 示 在 屏 幕 上 。

$ cat sncydata computers

cat 命 令 将 一 个 文 件 的 全 部 文 本 一 次 全 部 送 往 显 示 设 备 。 将 文 件 较 大 时 , 就

带 来 一 个 问 题 。 因 为 文 本 在 屏 幕 上 迅 速 地 闪 过 ,more 命 令 即 是 设 计 用 来 克 服 这一 限 制 的 , 它 一 次 可 只 显 示 一 屏 的 文 本 。 你 便 可 以 随 心 所 欲 地 在 文 本 上 上 下 移动 。 你 可 键 入 more 命令 ,然 后 键 入 你 想 查 看 的 文 件 名 来 使 用 more 命 令 。

$ more mydata

当 more 命 令 调 用 一 个 文 件 时 ,显 示 第 一 屏 的 文 本 。 按 f 键 或 空 格 可 进 入 下 一屏 。 要 想 在 文 本 中 前 移 ,你 可 按 b 键 。 按 q 键 即 可 退 出 。

文 件 打 印 :lpr,lpq 和 lprm

当 你 希 望 打 印 文 件 时 , 可 使 用 lpr 命 令 将 文 件 送 往 与 系 统 相 连 的 打 印 机 。 在下 一 个 例 子 中 ,用 户 打 印 了 mydata 文 件 。

$ lpr mydata

如 果 你 一 次 想 打 印 多 个 文 件 ,那 么 在 命 令 行 的 lpr 命 令 之 后 你 可 以 指 定 不 止一 个 文 件 。 在 下 一 个 例 子 中 , 用 户 打 印 文 件 mydata 和 preface 。

$ lpr mydata preface

打 印 作 业 被 放 入 队 列 中 ,并 在 后 台 依 次 打 印 。 当 进 行 文 件 打 印 时 ,你 可 以 继 续从 事 其 它 的 工 作 。 用 lpq 命 令 你 可 以 看 到 某 一 时 刻 一 个 打 印 任 务 的 位 置 lpq 给出 打 印 任 务 的 用 户 ( 发 送 作 业 用 户 的 登 录 名 ), 打 印 任 务 的 ID ,以 bye 标 识 的 大 小 , 以 及 它 所 贮 存 的 临 时 文 件 。 在 下 一 个 例 子 中 ,打 印 任 务 的 用 户 是 Chris 打 印 功 能是 000/5 。

$ lpq

Owner ID Chars Filename Chris 000/5 360 /usr/lpd/cfa 000/5

如 果 您 想 取 消 一 个 不 需 要 的 打 印 任 务 ,你 可 以 利 用 lprm 来 完 成 。 lprm 以 打

印 作 业 的 ID 号 或 者 其 用 户 名 作 为 参 数 。 lprm 会 将 打 印 任 务 目 打 印 队 列 中 移 出 。在 这 项 工 作 中 ,lpq 是 非 常 有 用 的 , 它 可 以 给 你 提 供 打 印 任 务 ID 号 和 同 户 名 以 便lprm 使 用 。 在 下 一 个 例 子 中 ,15 号 打 印 任 务 被 取 消 。

$ lprm 000/5

你 的 Linux 系 统 可 以 连 接 若 干 台 打 印 机 ,其 中 一 台 会 被 指 定 为 缺 省 打 印 机 ,除非 指 定 另 一 台 打 印 机 ,否 则 lpr 命 令 将 会 在 此 打 印 机 上 打 印 。 用 lpr 命 令 你 可 以 指定 想 要 进 行 打 印 的 特 定 的 打 印 机 。 系 统 中 的 每 一 台 打 印 机 都 有 自 己 的 名 字 。 利 - p 选 项 及 打 印 机 的 名 字 , 你 可 以 指 定 使 用 哪 一 台 打 印 机 。 在 下 一 个 例 子 中 , 文 件mydata 在 打 印 机 enansl 上 进 行 打 印 。

$ lpr -Pevansl mydata

目 录 管 理 : mkdir, rmdir, ls, cd 和 pwd

如 第 4 章 所 述 , 你 可 以 创 建 并 移 动 你 自 己 的 目 录 ,也 可 以 改 变 自 己 的 工 作 目 录 , 利 用 mkdir,rmdir 和 cd 命 令 。每 个 命 令 都 可 将 目 录 的 路 径 名 作 为 自 己 的 参 数 。pwd 命 令 会 显 示 你 工 作 目 录 的 绝 对 路 径 名 。 除 这 些 命 令 之 外 , 特 殊 字 符 如 点 号 、 双 点号 和 ~ 符 号 都 可 被 用 来 引 用 工 作 目 录 ,工 作 目 录 的 父 目 录 和 home 目 录 。 所 有 这些 命 令 加 在 一 起 ,你 便 可 以 对 你 的 目 录 进 行 管 理 。 你 可 以 创 建 网 状 的 目 录 ,从 一 个目 录 移 动 到 另 一 个 目 录 ,或 利 用 路 径 名 来 引 用 你 其 它 的 目 录 。 用 于 管 好 目 录 的 这些 通 常 的 命 令 在 表 6-4 中 列 出 。

创 建 和 删 除 目 录 : mkdir 和 rmd ir

用 mkdir 和 rmdir 命 令 你 便 可 以 创 建 和 删 除 目 录 。 两 个 情 况 下 ,你 都 可 以 使用 目 录 的 路 径 名 。 在 下 一 个 例 子 中 ,用 户 创 建 了 目 录 reports. 然 后 用 户 用 路 径 名创 建 了 letters 目 录 。 在 rmdir 命 令 后 加 入 目 录 名 可 以 删 除 目 录 。 在 下 一 个 例 子中 ,用 户 用 rmdir 命 令 删 除 了 目 录 reports ,然 后 用 路 径 名 删 除 了 目 录 letters.

$ rmdir neports

$ rmdir/home/chris/letters

目 录 列 表 :ls

你 已 看 到 如 何 使 用 ls 命 令 列 出 工 作 目 录 中 的 文 化 和 目 录 。 然 而 ,为 了 区 分 文件 名 和 目 录 名 ,你 需 使 ls 命 令 的 -F 选 项 。 然 后 列 表 中 每 个 目 录 名 后 会 加 入 一 条斜 线

$ ls

loeathes neports letters

$ ls -F

weather reports/ letters/

ls 命 令 也 可 以 目 录 名 或 目 录 路 径 名 作 参 数 。 这 样 你 无 需 先 改 换 向 该 目 录 , 便可 列 出 此 目 录 中 的 文 件 。 在 下 一 个 例 子 中 ,ls 命 令 的 参 数 是 一 个 目 录 名 ,reports 。然 后 ls 命 令 又 被 执 行 了 一 次 ,不 过 这 次 使 用 了 reporns 的 绝 对 路 径 名 。

$ ls reports monday tnesday

$ ls/home/chris/reports monday twesday

$

路 径 名 :pwd 命 令

在 每 个 目 录 中 ,你 可 以 再 创 建 另 外 的 目 录 , 即 在 实 际 上 成 为 网 状 目 录 。 利 用 cd

命 令 ,你 可 以 一 个 目 录 改 换 入 另 一 个 目 录 。 然 而 ,没 有 指 示 符 来 告 知 你 目 前 处 于 哪

  • 个 目 录 中 。 要 找 出 你 改 换 到 了 哪 个 目 录 ,用 pwd 命 令 可 以 显 示 你 目 前 的 工 作 目录 。 pwd 命 令 不 仅 仅 显 示 目 录 名 , 它 显 示 了 整 个 路 径 名 , 如 下 例 所 示 , 这 里 显 示 的路 径 名 包 括 home 目录 ,dylam 它是 home 目 录 的 一 部 分 。 每 一 个 目 录 名 都 用 斜线 隔 开 。 根 目 录 以 开 头 的 斜 线 表 示 :

$ pwd

/home/dylan

更 换 目 录 :cd 命 令

如 何 所 知 的 ,用 cd 命 令 可 以 更 换 目 录 。 更 换 后 的 目 录 当 成 为 工 作 目 录 ,它 是你 的 缺 省 目 录 。 文 件 名 诸 如 ls 和 cp ,都 将 对 你 工 作 目 录 中 的 文 件 除 当 操 作 当 特别 的 指 定 。

当 你 登 录 入 系 统 , 你 的 工 作 目 录 是 你 的 home 目 录 。 当 一 个 用 户 帐 号 创 建 时 , 系 统 也 为 该 用 户 创 建 了 一 个 home 目 录 。 当 你 登 录 时 ,你 便 总 被 置 于 home 目 录中 。cd 命 令 允 许 你 将 另 一 个 目 录 作 为 工 作 目 录 。在 某 种 意 义 上 , 你 可 从 你 的 home 目 录 移 到 另 一 个 目 录 中 。 这 一 目 录 便 成 为 任 何 命 令 和 新 文 件 创 建 的 缺 省 目 录 。例 如 ,ls 命 令 将 列 出 新 的 工 作 目 录 中 的 文 件 。 cd 命 令 将 你 想 转 移 的 目 录 名 作 的 参数 。

$ cd directory-name

在 下 一 个 例 子 中 , 用 户 从 home 目 录 更 换 到 props 目 录 中 。 用 户 执 行 了 pwd

命 令 来 显 示 工 作 目 录 。

$ pwd

/home/dylan

$ pwd

/home/dylan/props

$

注 意 ,当 你 创 建 一 个 新 目 录 时 ,你 已 经 处 于 一 个 工 作 目 录 当 中 了 。 你 所 创 建 的任 何 目 录 都 在 工 作 目 录 之 中 。 工 作 目 录 和 你 在 其 中 创 建 的 新 目 录 之 间 有 父 子 关系 。工 作 目 录 是 新 建 目 录 的 父 目 录 。如 果 用 户 在 home 目 录 中 ,创 建 了 一 个 props 目 录 ,那 么 home 目 录 便 是 props 目 录 的 父 目 录 ,props 是 home 目 录 的 子 目 录 。

你 可 用 两 点 ” . .” 来 代 表 一 个 目 录 的 父 目 录 。 在 字 面 上 ,它 表 示 着 父 目 录 的 路 径名 。 你 可 用 cd 命 令 和 双 点 号 移 回 到 父 目 录 。 将 父 目 录 作 为 当 前 目 录 。 在 下 一 个例 子 中 , 用 户 进 入 props 目 录 ,然 后 又 移 回 home 目 录 。

$ cd props

$ pwd

/ home/dylan/props

$ cd..

$ /home/dylan

如 果 你 想 改 换 回 home 目 录 ,你 只 需 键 入 cd 命 令 本 身 , 而 无 须 加 任 何 文 件 名参 数 。 你 将 移 回 home 目录 ,将 主 再 次 作 为 工 作 目 录 。 在 下 一 个 例 子 中 ,用 户 改 换回 home 目 录 。

$ pwd

/home/chris/letless

$ cd

$ pwd

/home/chris

你 会 发 现 你 会 频 繁 地 用 home 目 录 进 入 其 它 目 录 ,然 后 再 返 回 。 在 下 一 个 例子 中 ,用 户 由 自 己 的 home 目 录 ,dylan ,进 入 props 目 录 。 然 后 用 户 用 单 独 的 cd 命 令 ,又 返 回 了 自 己 的 home 目 录 。 在 每 次 改 换 之 前 ,用 户 使 用 pwd 命 令 来 显 示工 作 目 录 。

$ pwd

/home/dylan

$ cd props

$ pwd

/home/dylan/props

$ cd

$ pwd

/home/dylan

网 状 目 录 (nested Directories)

让 我 们 来 看 一 下 cd 命 令 如 何 在 一 系 列 网 状 目 录 间 穿 梭 的 。 在 下 一 个 例 子中 ,cd 命 令 进 入 letters 目 录 。 mkdir 命 令 建 了 一 个 叫 作 thankyou 的 letters 的 子目 录 。 再 次 使 用 cd 命 令 ,用 户 进 入 thankyou 目 录 。 在 此 目 录 中 ,又 创 建 了 一 个目 录 birthday。 用 户 又 进 入 该 目 录 。 每 次 ,pwd 命 令 都 显 示 了 路 名 。 最 后 ,没 有 参数 的 cd 命 令 回 到 了 home 目 录 中 。 ls 命 令 加 -R 选 项 将 打 印 出 ,工 作 目 录 下 的 所

有 网 状 子 目 录 。

$ pwd

/home/chris

$ cd letters

$ pwd

/home/chris/letters

$ mkdir thankyou

$ cd thankyou

$ pwd

/home/chris/tetters/thankyou letters:

$ mkdir birthday

$ cd birthday

$ pwd

/home/chris/letters/thankyou/birn

$ cd

$ pwd

/home/chris

$ ls -R thankyou letters/thankyou birthday

letters/thanbyan/birthday

$

引 用 工 作 目 录 和 父 目 录 : .和 ..

第 6 章 Linux 文 件 结 构 - 图6一 个 目 录 总 是 有 父 目 录 的 ( 当 然 ,根 目 录 除 外 )。 例 如 , 在 上 一 列 表 中 ,thankyou 目 录 的 父 目 录 是 letters 目 录 。 将 一 个 目 录 被 创 建 后 , 便 有 两 个 入 口 。 一 个 以 . 表示 ,另 一 个 以 .. 表 示 。 点 是 表 示 目 录 的 路 径 名 ,双 点 号 表 示 目 录 的 父 目 录 的 路 径 名 。双 点 是 可 以 命 令 中 作 为 参 数 , 代 表 的 父 目 录 的 引 用 。 单 点 代 表 目 录 本 身 。 在 下 一个 例 子 中 ,用 户 进 入 letters 目 录 。 ls 命 令 与 .参 数 一 起 列 出 了 letters 目 录 中 的 文件 。 ls 命 令 和 ..参 数 一 起 列 出 了 letters 的 父 目 录 ,Chris 中 的 文 件 名 。

图 6-6 工作目录 ( 用点表示 ) 是 letters, 它的父目录 ,chris 用两个点表示 , 是 home 目录

$ cd letters

$ ls. thankyou

$ ls..

weathen letters

$

图 6-6 描 述 了 点 号 和 双 点 号 代 表 工 作 目 录 和 父 目 录 的 使 用 。 正 如 上 例 所 示 ,

父 目 录 是 home 目 录 :chris 。 工 作 目 录 是 letters 。

你 可 以 用 单 点 号 来 引 用 工 作 目 录 ,而 不 用 它 的 路 径 名 。 例 如 ,将 一 个 文 件 以 原名 拷 贝 入 工 作 目 录 ,点 号 可 用 来 代 替 工 作 目 录 的 路 径 名 。 在 这 种 意 义 上 ,点 号 是 工作 目 录 的 另 一 个 名 字 。 在 下 一 个 例 子 中 , 用 户 将 文 件 weather 由 目 录 chris 拷 贝入 目 录 reports 中 。 reports 目 录 是 工 作 目 录 , 因 此 可 用 点 号 代 替 。

$ cd reports

$ cp/home/chris/weather

双 点 是 常 用 于 引 用 父 目 录 中 的 文 件 。 下 列 中 ,cat 命 令 显 示 了 父 目 录 中 的

weather 文 件 ,文 件 的 目 路 径 名 是 ..是 加 斜 杠 和 文 件 名 。

$ cat ../weather raining and warm

利 用 cd 命 令 和 ..是 你 可 以 从 一 个 低 的 目 录 间 到 连 续 的 相 应 父 目 录 中 。 在 下

一 个 例 子 中 ,user 在 目 录 thankyou 中 。然 后 不 断 用 户 回 到 chris 中 ,使 用 cd 命 令 。

$ pwd

/home/chris/letters/thankyou

$ cd..

$ pwd

/home/chris/letters

$ cd..

$ pwd

/home/chris

很 多 时 候 你 会 同 时 使 用 .. 和 . 作 为 命 令 参 数 。 例 如 , 以 letters 作 为 工 作 目录 ,weather 可 被 拷 贝 到 letters 之 中 , 只 需 用 ..引 用 chris 目 录 及 用 。 引 用 letters 目 录 。

$ cp /weather.

使 用 绝 对 和 相 对 路 径 名 : ~

如 前 所 述 ,你 可 用 绝 对 或 相 对 路 径 名 来 引 用 文 件 和 目 录 。 然 而 ,每 一 个 都 有 其限 制 。 尽 管 绝 对 路 径 名 可 引 用 任 何 文 件 或 路 径 ,它 通 常 以 较 常 并 且 复 杂 ,使 之 很 难使 用 。 相 对 路 径 名 通 常 较 短 且 易 于 使 用 ,但 它 在 引 用 文 件 的 数 目 上 受 到 限 制 。 通常 , 你 会 尽 可 能 地 使 用 相 对 路 径 名 ,只 有 在 必 要 时 ,只 有 在 必 要 时 , 不 使 用 绝 对 路 径名 。 一 些 Shell 提 供 了 缩 略 路 径 名 的 方 法 。 相 对 路 径 名 由 工 作 目 录 开 始 。 在 下一 个 例 子 中 ,ls 命 令 利 用 了 文 件 thankgan 的 相 对 路 径 和 绝 对 路 径 。 工 作 目 录 是用 户 home 目 录 ,Chris thakyan 的 相 对 路 径 名 是 letters/ thankyan.

$ls letters/ thankyan

larisa

$ls/home/Chain/letters/thankyan larisa

$.

相 对 路 径 名 只 能 引 用 工 作 目 录 的 子 目 录 中 的 文 件 。 这 一 子 目 录 以 在 任 何 深度 , 但 它 们 的 路 径 必 须 从 工 作 目 录 开 始 分 支 。 假 如 你 要 引 用 某 一 在 目 录 树 上 更 高的 目 录 或 在 另 一 分 子 上 的 目 录 。 例 如 说 ,reports 目 录 。 在 这 种 情 况 下 , 你 需 要 利用 reports 的 绝 对 路 径 名 。 在 下 一 个 例 子 中 ,用 户 用 绝 对 路 径 名 引 用 了 reports 目录 中 的 monday 文 件 。

$cat/home/Chris/reports/monday

将 引 用 目 录 树 中 更 高 层 目 录 时 也 需 要 绝 对 路 径 名 。 假 定 thandyan 是 工 作 目录 , 一 个 用 户 想 显 示 你 的 home 目 录 :/home/Chris 中 的 文 件 。 Chris 目 录 不 是thankyan 的 一 个 子 目 录 ,不 能 用 相 对 路 路 径 名 加 以 引 用 。 在 这 种 情 况 下 , 用 户 为了 引 用 home 目 录 中 的 文 件 就 必 须 使 用 全 路 径 名 。 在 下 一 个 例 子 中 , 用 户 想 在thankyan 目 录 中 显 示 home 目 录 :/home/chris 中 的 一 个 文 件 weathe r。 用 户 需要 使 用 weather 的 绝 对 路 径 名 来 完 成 这 一 工 作 。

$Pwd

/Home/Chris/letters/thankyan

$cat/home/chris/weather raining and waim

由 根 目 录 到 你 的 home 目 录 的 绝 对 路 径 名 可 能 非 常 复 杂 ,并 有 可 能 因 系 统 管

理 员 的 原 因 而 改 变 。 为 了 让 它 更 易 使 用 , 你 可 以 使 用 特 殊 字 符 , 波 浪 线 ~ , 它 代 表

你 的 home 目 录 的 绝 对 路 径 名 。 在 下 一 个 例 子 中 ,用 户 在 weather 之 前 加 入 了 波浪 线 和 斜 和 来 完 成 对 home 目 录 中 weather 文 件 的 引 用 。

$Pwd

/home/Chris/letters/thankyon

$cat /weater raining and warm

$

你 必 须 指 定 由 home 目 录 之 后 的 其 它 路 径 。 在 下 一 个 例 子 中 , 用 户 引 用 了reports 目 录 中 的 monday 文 件 中 。 波 浪 线 代 表 了 用 户 的 home 目 录 的 路径 :/home/Chris ,然 后 又 指 定 了 到 monday 文 件 的 剩 余 路 径 。

$cat /reports/monday.

文 件 和 目 录 操 作 :find.cp.mv.rm 和 ln

随 着 你 创 建 文 件 数 目 的 增 加 ,你 可 能 希 望 将 之 备 份 ,改 变 它 们 的 名 字 ,删 除 部 分文 件 , 或 者 给 它 们 增 加 命 字 。 Linux 为 你 提 供 了 几 个 文 件 命 令 朵 查 找 文 件 、 拷 贝文 件 、 重 命 名 或 删 除 文 件 。 如 果 你 有 大 量 的 文 件 ,你 可 以 对 不 查 找 并 确 定 某 一 特殊 文 件 。 这 些 命 令 是 整 词 的 缩 略 形 式 , 由 两 个 字 符 组 成 。 CP 命 令 代 表 ”cop y”, 可以 完 成 文 件 拷 贝 命 令 ,mr 代 表 ” more ” , 可 对 文 件 重 定 各 或 移 动 文 件 ,rm 代表 ” remore ” ,可 以 删 除 一 个 文 件 ,ln 代 表 ” link”, 可 对 文 件 添 加 一 个 名 字 。 这 一 规 则的 例 外 是 find 命 令 ,它 对 文 件 名 进 行 搜 索 来 找 到 一 个 文 件 。 表 6-5 列 出 了 包 括 它

们 的 选 项 在 内 的 不 同 的 操 作 。

查 找 目 录 :find.

一 旦 在 许 多 不 同 目 录 中 有 大 量 的 文 件 , 你 便 需 要 对 某 一 文 件 或 某 一 类 型 的 文件 进 行 查 找 。 利 用 find 命 令 可 以 进 行 此 种 查 找 。 find 命 令 的 参 数 是 目 录 名 和 几个 指 定 查 找 类 型 和 查 找 标 准 的 可 能 的 选 项 。 然 后 find 将 在 指 定 的 目 录 及 其 子 目录 中 查 找 符 合 标 准 的 文 件 。 find 命 令 可 按 文 件 名 、 文 件 类 型 , 用 户 名 甚 至 最 新 更改 的 日 期 来 查 找 文 件 。

$find directory-fist option criteria

-name 选 项 确 定 了 查 找 标 准 并 指 导 find 命 令 查 找 与 此 标 准 匹 配 的 文 件 名 。要 按 文 件 名 进 行 查 找 ,可 使 用 find 命令 ,加 带 目 录 名 , 其 后 再 加 上 -name 选 项 和 文件 名 。

$find directory-list -name filenane

find 命 令 也 有 些 只 是 执 行 操 作 的 选 项 , 如 将 查 找 结 果 输 出 的 操 作 。 如 果 你 希望 find 命 令 显 示 找 到 的 文 件 ,只 须 在 命 令 行 上 将 -print 选 项 和 其 它 任 何 选 项 加 入即 可 。 -print 选 项 指 示 find 命 令 将 所 查 找 到 的 所 到 文 件 名 送 入 标 准 输 出 。 在 下一 个 例 子 中 ,用 户 搜 索 了 reports 目 录 中 所 有 以 monday 为 名 的 文 件 。 一 旦 找 到 , 这 一 文 件 和 它 的 相 对 路 径 名 将 会 被 打 印 出 来 。

$find reports -name monday -print reports/monday

find 命 令 将 用 目 录 列 表 中 指 定 的 目 录 名 来 显 示 一 个 文 件 名 。 如 果 你 指 定 了

一 个 绝 对 路 径 名 ,找 到 的 目 录 的 绝 对 路 径 将 被 显 示 。 如 果 指 定 了 相 对 路 经 名 ,那 么只 会 显 示 目 录 的 相 对 路 径 。 上 例 中 , 用 户 在 目 录 列 表 中 拽 定 了 一 个 相 对 路 径名 ,reports. 查 找 到 的 文 件 名 也 以 这 个 相 对 路 径 名 为 开 始 。 在 下 一 个 例 子 中 , 用 户指 定 了 目 录 列 表 中 一 个 绝 对 路 径 名 ,查 找 的 文 件 名 则 会 以 绝 对 路 径 名 输 出 。

$find /home/chais -name monday -print

/home/chris/reports/monday.

如 果 你 想 搜 索 你 的 工 作 目 录 , 可 以 使 用 目 录 路 径 名 中 的 点 是 来 代 表 工 作 目录 。 双 点 是 代 表 父 目 录 。 下 一 个 例 子 用 点 呈 代 表 工 作 目 录 , 搜 索 了 工 作 目 录 中 的所 有 文 件 和 子 目 录 。 如 果 你 位 于 home 目 录 中 ,这 是 一 种 搜 索 你 所 有 目 录 的 方 便的 方 法 。 注 意 找 到 的 文 件 是 以 点 是 开 头 而 输 出 的 。

$find -name weather -print

./weather

你 可 以 将 shell 特 殊 字 符 作 为 搜 索 标 准 的 一 部 分 。 然 而 ,特 殊 字 符 必 须 加 以 引用 以 免 shell 对 之 取 值 。 在 下 一 个 例 子 中 ,将 对 programs 目 录 中 所 有 以 .c 为 扩 展的 文 件 加 以 搜 索 。

$find programs -name '*.c' -print

搜 索 标 准

你 也 可 利 用 find 命 令 来 查 找 其 它 目 录 。 在 Linux 中 , 一 个 目 录 被 正 式 划 分 为一 种 特 殊 类 型 的 文 件 。 尽 管 所 有 的 文 件 都 有 byte 流 的 格 式 ,但 是 一 些 文 件 , 诸 如目 录 ,有 特 殊 的 用 法 。 在 这 个 意 义 上 ,一 个 文 件 也 说 是 有 一 种 文 件 类 型 。 find 命 令有 一 个 -type 选 项 , 可 用 来 查 找 一 个 文 件 或 一 种 文 件 类 型 。 -type 选 项 有 一 个 字 符代 表 文 件 类 型 。 这 一 代 表 目 录 的 字 符 是 d ,在 下 一 个 例 子 中 ,利 用 了 目 录 名 和 目 录

文 件 类 型 来 查 找 称 作 thankyon 的 目 录 。

$find /home/chris -name thankyon -type d -print

/home/ chris/letters /thankyon

如 上 文 所 述 ,文 件 不 同 类 型 并 不 像 操 作 系 统 的 其 它 元 素 — — 诸 如 设 备 的 文 件格 式 那 样 是 截 然 不 同 的 文 件 。 在 这 种 意 义 上 ,一 个 设 备 被 作 为 一 种 类 型 的 文 件 看诗 ,你 可 以 用 find 命 令 来 查 找 设 备 、 目 录 ,和 普 通 的 文 件 。 表 6-6 列 出 了 find 命令 的 -type 选 项 可 使 用 的 不 同 文 件 类 型 。

find 命 令 包 含 许 多 不 同 的 搜 索 标 准 。 你 可 以 按 文 件 大 小 、 文 件 最 后 被 修 改的 时 间 , 它 所 具 有 的 连 接 , 它 所 属 的 组 群 , 及 其 它 一 些 标 准 来 查 找 文 件 。 表 6-6 中列 出 了 这 些 不 同 的 查 找 标 准 。 其 中 两 个 比 较 常 用 的 是 -size 和 -mtime 选 项 。 每一 个 都 以 一 个 数 字 作 参 数 。-size 选 项 缺 省 以 块 作 度 量 单 位 , 如 果 在 数 字 后 加 入 c, 它 将 以 字 符 cbyte 为 度 名 单 位 。 你 可 用 ”+ ” ” - ” 来 修 改 一 个 数 字 以 查 找 比 指 是 大 小要 大 或 小 的 文 件 。 例 如 +100C 会 选 择 超 过 100 个 字 符 的 文 件 。 -mtime 选 项 以它 们 多 少 天 之 前 被 修 改 过 为 查 找 标 准 。 例 如 ,利 用 这 一 选 项 , 你 可 以 查 找 你 两 天 前使 用 过 的 文 件 。 在 下 一 个 例 子 中 ,find 命 令 用 -size 选 项 来 查 找 所 有 大 于 10 个 字节 的 文 件 。 第 二 个 例 子 中 ,find 命 令 用 -mtime 选 项 来 查 找 三 天 前 修 改 过 的 文 件 。

$find .-size +10c -print

.weather

./reports/monday

$find . -mtime +3 -print

./weather_

复 杂 的 搜 索

当 选 项 在 命 令 行 上 列 出 时 ,它 们 之 间 是 潜 在 的 与 操 作 。 只 有 满 足 所 有 要 求 的文 件 名 才 会 被 列 出 。 然 而 利 用 引 用 的 括 号 和 逻 辑 上 的 OR 和 NOT 操 作 符 ,你 便可 以 创 建 复 杂 的 搜 索 查 询 。 find 命 令 的 NOT 操 作 将 是 一 个 惊 叹 号 ” !” ,放 在 任 何搜 索 标 准 前 的 !号 将 对 比 标 准 取 反 。 如 果 这 一 标 准 的 匹 配 结 果 为 假 ,那 么 文 件 便 是有 效 匹 配 。 便 如 ,下 述 命 令 列 出 所 以 无 .C 扩 展 的 文 件 名 。

$/s

main.c/ib.o today

$find . !-name “*.c ”-print

/ib.o today

find 命 令 的 逻 辑 或 操 作 符 是 -o, 放 在 两 个 搜 索 标 准 之 间 的 -o 选 项 表 明 二 者 之间 是 或 的 关 系 。 如 果 文 件 满 足 其 一 或 两 者 的 要 求 ,那 文 件 就 是 一 个 有 效 的 匹 配 。你 需 要 把 -o 每 项 和 它 的 搜 索 标 准 操 作 数 放 入 括 号 内 。 括 号 之 前 加 左 斜 杠 并 在 前后 加 入 空 格 将 会 实 现 对 括 号 的 引 用 ,下 一 个 命 令 查 找 有 weather 名 字 的 文 件 和 目录 。 注 意 在 引 用 的 括 号 前 后 的 空 格 。

$ find . \(-name weathee -o -type d \) -print

./weather

./reports

./cetters

./cetters/ thankyou

用 引 用 的 括 号 将 搜 索 标 准 组 合 起 来 , 你 便 可 以 实 现 复 杂 的 逻 辑 操 作 。 下 列 中对 一 个 名 为 reports 的 目 录 和 所 有 尺 寸 大 于 lobyte 的 文 件 进 行 查 找 。 引 用 的 括号 放 在 -name 和 -type 的 与 操 作 和 与 -size 的 或 操 作 之 外 。 这 一 命 令 的 逻 辑 操 作

可 被 表 达 为 :

((name=reports) AND (file=directory type)) OR (size>10)

$find.\(\(-name reports -type d\)-o -size+10\)

-print

./reports

./weather

文 件 拷 贝

要 进 行 文 件 拷 贝 , 只 须 将 两 个 文 件 名 指 定 为 cp 命 令 的 参 数 。 第 一 个 文 件 名 是要 被 进 行 拷 贝 的 文 件 — — 已 存 在 的 那 个 文 件 。 这 通 常 被 称 作 源 文 件 。 第 二 个 文件 名 是 拷 贝 的 文 件 。 这 一 操 作 会 产 生 一 个 包 含 着 源 文 件 全 部 数 据 的 新 的 文 件 。第 二 个 参 数 通 常 被 称 作 目 标 文 件 。 cp 命 令 的 语 句 如 下 :

$cp source-file destination-file

下 列 中 ,用 户 将 一 个 叫 作 proposac 的 文 件 拷 贝 到 叫 做 oldprop 的 新 文 件 中 。

$cp proposal oldprop

当 用 户 对 目 录 中 文 件 列 表 时 , 新 的 拷 贝 也 在 列 表 中 。

$ ls

proposat oldprop

你 在 不 经 意 间 用 cp 命 令 破 坏 了 另 一 文 件 是 有 可 能 的 。 cp 命 令 进 行 拷 贝 时 , 首 先 创 建 一 个 文 件 ,然 后 将 数 据 拷 贝 入 其 中 。 如 果 另 一 文 件 与 目 标 文 件 同 为 ,那 么这 一 文 件 将 被 破 坏 ,而 另 一 同 名 的 新 文 件 会 被 创 建 。 在 某 种 定 义 上 ,原 有 文 件 被 新

的 拷 贝 覆 盖 了 。 在 下 一 个 例 子 中 ,proposal 文 件 被 newprop 文 件 覆 盖 了 。 因 为

proposal 文 件 已 经 存 在 了 。

$cp newprop proposal

在 15 章 ,你 将 学 习 如 何 对 系 统 进 行 设 置 来 查 觉 这 种 覆 盖 。 那 时 ,用 cp 命 令 和

-i 选 项 会 更 安 全 。 利 用 这 一 选 项 ,cp 首 先 会 察 看 这 一 文 件 是 否 已 存 在 。 如 果 已 存在 ,便 会 问 你 是 否 愿 意 覆 盖 已 存 在 的 文 件 。 如 果 你 输 入 y,这 一 文 件 将 被 破 坏 并 创建 一 个 新 文 件 作 为 拷 贝 文 件 。 如 果 你 输 入 其 它 任 何 东 西 , 它 便 认 为 是 否 定 的 回答 ,cp 命 令 将 会 被 中 断 , 保 留 原 有 的 文 件 。

$cp -i newprop proposal Orerwrite proposal? n

$

将 文 件 拷 入 目 录

要 将 文 件 由 工 作 目 录 拷 贝 到 另 一 目 录 , 只 须 将 目 录 名 作 为 命 令 的 第 二 个 参 数即 可 。 新 的 拷 贝 文 件 名 与 原 来 相 同 ,但 拷 贝 文 件 在 一 个 不 同 的 目 录 中 。

不 同 目 录 中 的 文 件 可 以 有 相 同 的 名 字 。 因 为 它 们 在 不 同 目 录 中 , 它 们 被 当 作不 同 的 文 件 登 记 。

$cp filename directoly-name

要 将 一 个 文 件 由 home 目 录 拷 贝 入 一 个 目 录 ,你 只 须 指 定 子 目 录 名 即 可 。 下列 中 ,文 件 newproop 被 由 工 作 目 录 拷 贝 入 props 目 录 。

$cp newprop props

CP 命 令 可 将 几 个 文 件 名 列 表 作 为 自 己 的 参 数 , 因 此 你 可 以 同 时 将 几 个 文 件拷 贝 入 一 个 目 录 。 只 要 在 命 令 行 上 列 出 文 件 名 ,并 将 目 录 名 作 为 最 后 一 个 参 数 , 然

后 所 有 文 件 便 被 拷 贝 入 目 标 在 下 一 个 例 子 中 ,用 户 将 文 件 preface 和 docl 拷 贝 到

props 目 录 中 ,注 意 props 是 最 后 一 个 参 数 。

$cp preface doc props

你 可 以 利 用 第 5 章 介 绍 的 特 殊 字 符 来 创 建 文 件 名 列 表 供 cp 或 mv 使 用 。 例如 ,你 想 把 所 有 的 C 源 代 码 文 件 拷 贝 到 指 定 目 录 。 无 须 在 命 令 行 上 将 每 个 文 件 名逐 一 列 出 ,只 要 用 特 殊 符 ”* ” 和 .c 扩 展 即 可 匹 配 并 列 出 所 有 的 C 源 代 码 文 件 ( 所 有此 类 文 件 都 有 .c 扩 展 名 )。 在 下 一 个 例 子 中 ,用 户 将 propes 目 录 中 所 有 文 件 拷 贝到 oldprop 目 录 中 。 注 意 在 *.* 之 前 props 路 径 名 的 使 用 。 在 这 种 语 境 下 ,props 是 一 个 加 在 *.* 产 生 的 文 件 列 表 上 的 路 径 名 。

$cp props/ *.* oldprop

你 当 然 可 以 使 用 其 它 的 特 殊 字 符 , 如 ” .” ”? ” 或 ” []” 。 在 下 一 个 例 子 中 , 用 户 将 源代 码 和 目 标 代 码 文 件 (.c 和 .o) 拷 贝 到 projbk 目 录 。

$cp *.[oc] projbk

当 你 拷 贝 文 件 时 , 你 可 能 想 给 拷 贝 文 件 起 一 个 前 的 名 字 。 将 新 文 件 名 对 目 录名 之 后 , 并 以 斜 杠 隔 开 即 可 完 成 这 一 任 务 。

$cp filename directory-name/new-filename

在 下 一 个 例 子 中 , 文 件 new prop 被 拷 贝 到 props 目 录 中 , 拷 贝 文 件 名 字 为version1 。用 户 然 后 进 入 props 目 录 并 对 文 件 列 表 。 其 中 只 有 一 个 叫 作 Version1 的 文 件 。

$cp newprop props/version/

$cd props

$ls

versionl.

当 你 想 把 一 个 文 件 由 子 目 录 拷 贝 到 父 目 录 中 时 ,你 需 要 指 定 子 目 录 的 名 字 。cp 命 令 的 第 一 个 参 数 是 需 要 拷 贝 的 文 件 名 。 文 件 名 前 必 须 加 由 斜 杠 分 隔 开 的 子 目录 的 名 字 。 第 二 个 参 数 是 将 拷 贝 在 父 目 录 中 的 文 件 名 。

$cp Child-directory-name/filename new-filename

下 列 中 ,文 件 versionl 被 由 props 目 录 拷 贝 到 home 目 录 。

$cp props/version/ version1

假 定 ,你 已 将 工 作 目 录 更 换 到 了 一 个 子 目 录 , 你 想 将 一 个 文 件 中 子 目 录 拷 贝 入父 目 录 。 你 需 要 通 过 一 些 方 法 来 引 用 父 目 录 。 你 可 以 用 双 点 号 来 完 成 , 它 代 表 着父 目 录 的 路 径 名 。

$cp filename ..

$cp filename../new-filename

例 如 , 如果 props 目 录 是 你 现 在 的 工 作 目 录 , 你 想 将 文 件 Version ′ 的 拷 贝 到它 的 父 目 录 中 ( 本 例 中 ,是 用 户 的 home 目录 ),你 需 要 把 双 点 是 作 为 cp 命 令 的 第二 个 参 数 。

$cp version1..

如 果 你 想 给 以 version/ 的 拷 贝 起 一 个 新 名 字 ,将 名 字 加 在 第 二 个 参 数 之 后 , 名字 之 前 加 斜 杠 。

$cp version 1../newversion

移 动 文 件

你 右 使 用 m v 命 令 来 为 文 件 改 名 或 将 文 件 由 一 个 目 录 移 入 另 一 个 目 录 。 当 利用 m v 来 对 文 件 改 名 时 ,只 需 将 新 文 件 名 作 为 其 第 二 个 参 数 。 第 一 个 参 数 是 你 正在 使 用 的 文 件 名 。

$mv original-filename new-filename

$mv proposal version1

与 co 相同 ,m v 命 令 也 很 有 可 能 意 外 地 删 除 一 个 文 件 。 将 对 文 件 更 名 时 ,你 可能 不 小 心 选 择 了 另 一 个 已 存 在 的 文 件 的 名 字 。 m v 命 令 的 一 个 选 项 也 可 以 事 先 查看 有 相 同 文 件 名 的 文 件 是 否 存 在 。 如 果 存 在 ,会 向 你 询 问 是 否 将 之 覆 盖 。 下 列 中 , 一 个 以 version1 为 名 的 文 件 已 经 存 在 。

覆 盖 状 况 被 查 觉 到 ,你 会 被 询 问 是 否 将 那 个 文 件 覆 盖 。

$ ls

proposal version1

$mv-i version1 proposal over write proposal? n

$

你 可 将 文 件 由 一 个 目 录 移 动 到 另 一 目 录 ,只 要 将 文 件 名 作 为 m v 命 令 的 第 二个 参 数 。 这 种 情 况 下 ,你 可 以 认 为 m v 命 令 是 简 单 地 将 文 件 由 一 个 目 录 移 到 另 一个 ,而 不 是 将 文 件 更 名 。 在 将 文 件 移 动 之 后 , 文 件 将 与 在 原 目 录 中 具 有 相 同 的 文 件名 ,除 非 你 有 特 殊 的 指 定 。

$mv filename directory-name

在 下 一 个 例 子 中 , 文件 newprop 由 home 目 录 移 动 到 props 目 录 。

$mv newprop props

如 果 你 想 在 移 动 文 件 时 对 文 件 更 名 , 可 在 目 录 名 后 指 定 新 的 文 件 名 。 目 录 名和 新 的 文 件 名 之 间 由 斜 杠 分 隔 。 在 下 一 个 例 子 中 ,文 件 new prop 移 动 到 props 目 录 并 被 更 名 为 verion1.

$mv newprops props/version1

$cd props

$ls

通 过 在 文 件 名 前 指 定 子 目 录 名 , 一 个 文 件 也 可 以 被 很 容 易 地 由 一 个 子 目 录 移动 到 父 目 录 。

$mv props/version1 version1

假 定 ,你 已 将 你 的 工 作 目 录 移 到 工 作 目 录 的 子 目 录 中 ,你 想 将 一 个 一 个 由 子 目录 移 到 父 目 录 中 。 如 同 CP 命 令 一 样 , 你 也 可 以 用 双 点 是 来 引 用 父 目 录 。

$mv filename ..

$mv filename ../new-filename

如 果 props 是 你 现 在 的 工 作 目 录 ,你 想 将 文 件 由 props 目 录 移 到 它 的 父 目 录中 ,-home 目 录 中 , 那 你 应 把 双 点 是 作 为 m v 命 令 的 第 二 个 参 数 :

$mv version1..

如 果 你 想 在 X 目 录 中 给 文 件 revsion1 更 换 一 个 新 名 字 ,只 要 将 新 名 字 加 在 m r

命 令 第 二 个 参 数 之 后 ,名 字 之 前 加 斜 杠 。

$mv version1 ../ddprop

一 个 文 件 的 实 际 名 字 是 文 件 名 之 前 加 它 的 目 录 路 径 。 当 文 件 tuesday 移 到

reports 目 录 后 , 实 际 上 它 的 路 径 名 已 经 变 了 。 文 件 tresday 的 全 名 已 由

/home/chris/tuesday 变 成 /home/chris/reports/tuesday, 它 的 路 径 名 现 在 包 括 目录 reportss 。 在 这 种 意 义 上 ,将 文 件 更 名 更 像 是 将 文 件 进 行 了 移 动 。

利 用 绝 对 路 径 名 也 同 样 方 便 。 在 下 一 个 例 子 中 ,文 件 today 移 到 目 录 reports 中 ,并 更 名 为 tuesday, 注 意 在 m v 和 ls 命 令 中 都 使 用 文 件 的 绝 对 路 径 来 作 文 件 名参 数 。

$mv today/home/chris/reports/tuesday

$ ls/home/chris/reports monday tuesday

$

同 cp 命 令 一 样 ,m v 命 令 也 可 以 同 时 将 几 个 文 件 由 一 个 目 录 移 到 另 一 目 录 。你 只 需 在 命 令 行 上 列 出 文 件 名 。 你 最 后 输 入 应 该 总 是 目 标 目 录 。 在 下 一 个 例 子中 ,用 户 将 文 件 wednesday 和 friday 移 到 了 lastleek 目 录 中 。

$cp wednesday friday lastloeek

你 也 可 以 利 第 5 章 描 述 的 任 一 个 特 殊 字 符 产 生 文 件 名 的 列 表 以 供 m v 命 令使 用 。 在 下 一 个 例 子 中 ,用 户 将 现 有 目 录 中 的 所 有 源 代 码 文 件 移 到 newproj 目 录中 。

l209 $mv *.c newproj

如 果 你 想 将 一 个 给 定 目 录 中 所 有 的 文 件 移 到 另 一 个 目 录 ,你 可 以 用 *.* 来 作 匹配 以 产 生 这 些 文 件 的 列 表 。 在 下 一 个 例 子 中 ,用 户 将 reorts 目 录 中 所 有 的 文 件 都移 到 lepbks 目 录 。

$mv leports/*.* lepbks

目 录 的 移 动 和 拷 贝

你 也 可 以 对 目 录 进 行 移 动 和 拷 贝 。 cp 和 m v 都 可 以 把 目 录 名 作 为 第 一 个 参数 , 使 你 可 以 把 子 目 录 由 一 个 目 录 拷 贝 或 移 动 到 另 外 一 个 目 录 中 去 。 第 一 个 参 数是 要 被 拷 贝 成 移 动 的 目 录 名 , 第 二 个 参 数 是 将 要 把 子 目 录 置 于 其 中 的 目 录 名 。 文件 适 用 的 路 径 名 结 构 同 样 适 用 于 目 录 的 移 动 或 拷 贝 。

将 子 目 录 由 一 个 目 录 拷 贝 到 另 一 个 目 录 也 同 样 容 易 。 要 进 行 目 录 拷 贝 ,cp 命令 要 求 你 使 用 一 个 选 项 。 一 个 选 项 代 表 了 ” 回 归 的 ”。 它 指 示 cp 命 令 拷 贝 一 个 目录 和 它 所 包 含 的 子 目 录 。 换 句 话 说 , 整 个 的 目 录 树 , 由 那 个 目 录 起 , 都 会 被 拷 贝 。在 下 一 个 例 子 中 , 目 录 thankyou 被 拷 贝 到 目 录 oldletloos 中 。 现 在 就 有 两 个thankyou 子 目 录 了 。 一 个 在 letters 中 ,另 一 个 oldletters 中 。

$cp-r letters/thankyou oldletters

$ls-F letters

/thankyou

$ls -F oldletters

/thankyou

假 定 , 你 只 想 拷 贝 一 个 目 录 中 的 文 件 , 而 不 想 拷 贝 一 个 目 录 ,使 之 成 为 另 一 个 目录 的 子 目 录 。 要 将 一 个 目 录 中 的 全 部 文 件 拷 贝 到 另 一 个 目 录 中 ,你 必 须 指 定 它 们的 文 件 名 。 特 殊 字 符 星 号 可 以 匹 配 一 个 目 录 中 的 全 部 文 件 和 子 目 录 名 。 要 将letters 目 录 中 的 全 部 文 件 拷 贝 到 oldletters 目 录 中 ,你 应 将 星 号 作 为 你 的 第 一 个

参 数 以 便 产 生 letters 目 录 中 所 有 文 件 名 的 列 表 。 如 果 你 要 为 第 一 参 数 指 定 一 个路 径 名 , 你 可 以 把 星 号 放 在 末 尾 。 在 下 一 个 例 子 中 ,letters 目 录 中 所 有 的 文 件 都 被拷 贝 到 oldletters 目 录 。 为 letters 指 定 了 一 个 路 径 名 ,路 径 名 末 尾 的 星 号 匹 配 了letters 目 录 中 所 有 的 文 件 。

$cp-letters/* oldletters

为 了 将 子 目 录 包 含 在 拷 贝 操 作 中 ,你 需 要 使 用 cp 的 一 个 选 项 。

$cp-r letters/* oldletters

特 殊 字 符 ~

你 已 经 看 过 你 可 以 如 何 利 用 波 浪 线 来 代 表 home 目 录 的 绝 对 路 径 名 。 例 如 , 为 了 将 一 个 文 件 由 低 层 的 目 录 拷 贝 到 home 目 录 中 , 你 可 以 用 波 浪 线 来 代 表home 目 录 的 绝 对 路 径 名 。 在 下 一 个 例 子 中 ,用 户 进 入 reports 目 录 ,然 后 将 文 件monday 由 reports 目 录 拷 贝 到 home 目 录 中 。

$cd reports

$cd monday ~

为 了 在 将 文 件 拷 贝 到 home 目 录 时 给 文 件 更 换 一 个 新 的 名 字 , 你 可 将 名 字 放在 ~ /之 后 。 在 下 一 个 例 子 中 ,文 件 monday 被 拷 贝 回 home 目 录 中 ,拷 贝 被 更 名为 toda y。

$cp monday ~ /today

在 m v 命 令 中 也 可 以 用 同 样 的 方 法 使 用 波 浪 线 。 在 下 一 个 例 子 中 , 文 件

monday 被 从 reports 目 录 移 动 到 home 目 录 。

$mv monday ~

如 果 将 文 件 由 低 层 目 录 移 到 home 目 录 时 你 想 将 之 更 名 ,新 名 字 前 应 加 波 浪线 和 斜 杠 :~ /。 在 下 一 个 例 子 中 ,用 户 进 入 了 reports 目 录 ,文 件 monday 被 移 动回 home 目 录 并 被 更 名 为

today 。

$cd reports

$mv monday ~ /today

当 你 将 利 用 home 目 录 的 路 径 名 时 你 就 可 以 使 用 波 浪 线 。 在 下 一 个 例 子 中 ,

以 前 介 绍 过 的 一 个 m v 和 ls 命 令 与 波 浪 线 一 齐 执 行 。

$mv weather ~ / reports/monday

$ls ~ /reports monday

$

删 除 文 件 :rm 命 令

当 你 使 用 linux 时 ,你 会 发 现 你 所 使 用 文 件 的 数 目 剧 增 。 在 linux 中 创 建 文 件是 很 容 易 的 。 诸 如 象 编 辑 器 的 应 用 程 序 ,象 cp 命 令 ,都 很 容 易 地 可 以 创 建 文 件 。最 终 ,这 其 中 的 许 多 文 件 会 变 得 过 时 且 毫 无 用 处 。 你 可 以 用 rm 命 令 将 之 删 除 。在 下 一 个 例 子 中 ,用 户 删 除 了 文 件 oldprop。

$ rm oldprop

rm 命 令 可 接 受 任 何 数 目 的 参 数 ,使 你 可 以 列 出 几 个 文 件 的 名 字 并 一 次 把 它 们

同 时 删 除 。 你 只 要 在 输 入 rm 之 后 把 它 们 列 在 命 令 行 上 即 可 。

$rm proposal version1 version2

使 用 rm 命 令 时 要 小 心 。 它 是 不 可 恢 复 的 。 一 旦 一 个 文 件 被 删 除 , 它 是 不 能被 修 复 的 。 例 如 ,假 如 你 在 输 cp,rm 或 其 它 命 令 时 ,不 小 心 误 输 入 了 rm 命 令 。 当你 按 了 回 车 键 并 认 识 到 自 己 的 错 误 时 ,已 经 太 晚 了 。 文 件 已 经 没 有 了 。 为 了 防 止此 种 情 况 的 发 生 ,你 可 以 使 用 rm 命 令 的 一 个 选 项 来 确 保 你 想 删 除 一 个 文 件 。 利用 一 个 选 项 ,你 会 被 每 个 文 件 揭 示 是 否 确 定 将 之 删 除 。 如 果 你 输 入 y,文 件 将 被 删除 。 如 果 你 输 入 任 何 其 它 东 西 ,文 件 将 被 保 留 。 在 下 一 个 例 子 中 ,rm 命 令 被 指 示去 删 除 文 件 proposal 和 oldprop。 然 后 它 会 询 问 对 每 个 文 件 的 确 认 。 用 户 决 定删 除 oldprop ,保 留 proposa l。

#rm -i proposal oldprop Remove proposal? n Romove oldprop? y

$

连 接 :ln 命 令

用 ln 命 令 有 两 个 参 数 :文 件 的 原 名 和 文 件 新 的 添 加 名 。 ls 操 作 会 列 出 两 个 文件 名 ,但 是 物 理 文 件 只 有 一 个 。

$ ln original-file-name added-file-name

在 下 一 个 例 子 中 , 文件 today 有 一 个 另 外 的 名 字 weather 。 它 是 today 文 件的 另 一 个 名 字 。

$ls today

$ln today weather

$ls

today weather

将 ln 命 令 对 同 一 文 件 使 用 多 次 ,你 可 以 给 同 一 文 件 几 个 不 同 的 名 字 。 在 下 一个 例 子 中 ,文 件 today 有 了 weather 和 weekend 名 字 。

$ln today weather

$ln today weekend

$ls

today weather weekend

你 可 以 使 用 ls 命 令 的 一 个 选 项 来 察 看 一 个 文 件 有 几 个 连 接 。有 一 个 选 项 的 ls 命 令 列 出 了 若 干 条 信 息 ,诸 如 许 可 ( 将 在 下 章 中 介 绍 ),和 一 个 文 件 拥 有 的 连 接 数 , 文件 大 小 和 最 后 修 改 的 日 期 。 在 这 行 信 息 中 , 在 用 户 登 录 名 前 的 第 一 个 数 字 ,标 定 了一 个 文 件 的 连 接 数 。 在 日 期 之 前 的 数 字 是 文 件 的 大 小 。 日 期 是 文 件 最 后 被 修 改的 时 间 。 在 下 一 个 例 子 中 ,用 户 列 出 了 文 件 today 和 weather 的 全 部 信 息 。 注 意二 者 的 连 接 数 都 为 2 。 而 且 , 文 件 大 小 和 修 改 日 期 相 同 。 这 意 味 着 这 两 个 文 件 确实 是 一 个 文 件 的 不 同 名 字 。

$ls -l today weather

-rw-rw-r-- 2 Chris group 563 Feb 14 10:30 today

-rw-rw-r-- 2 Chris group 563 Feb 14 10:30 weather

这 些 仍 然 没 有 告 诉 你 哪 些 文 件 名 是 确 切 相 连 的 。 当 文 件 有 相 同 连 接 数 、 大

小 和 修 改 日 期 时 ,如 上 面 today 文 件 和 weather 文 件 的 情 况 ,你 在 某 种 程 度 上 可 以确 认 二 者 是 同 一 文 件 。 然 而 , 要 想 完 全 确 认 , 你 应 使 用 ls 命 令 的 一 个 选 项 。 利 用一 个 选 项 ,ls 命 令 列 出 了 文 件 名 和 它 的 i 节 点 (inode )数。 I 节 点 数 是 系 统 来 标 识 文件 的 一 个 特 殊 数 字 。 如 果 两 个 文 件 有 相 同 的 I 节 点 数 ,它 们 代 表 了 相 同 的 文 件 。它 们 是 同 一 文 件 的 不 同 名 字 。 在 下 一 个 例 子 中 , 用 户 列 出 了 文 件 today,weather 和 larisa 。 注 意 today 和 weather 有 相 同 的 I 结 点 数 。

$ls -i today weather larisa

1234 today 1234 weather 3976 larisa

添 加 名 ,或 连 接 , 它 们 由 ln 命 令 创 建 , 并 通 常 用 于 在 不 同 目 录 中 对 同 一 文 件 的引 用 。 在 一 个 目 录 中 的 文 件 可 以 被 链 接 到 另 一 个 目 录 并 在 另 一 个 目 录 中 进 行 访问 。 假 定 你 想 在 另 一 个 目 录 中 引 用 home 目 录 中 的 文 件 。 你 可 在 那 个 目 录 中 建立 一 个 home 目 录 中 文 件 的 连 接 。 这 一 连 接 实 际 是 文 件 的 另 一 个 名 字 ,因 为 连 接在 另 一 个 目 录 中 ,它 可 与 原 文 件 有 相 同 的 名 字 。 要 将 home 目 录 中 的 一 个 文 件 连接 到 另 一 个 目 录 ,将 另 一 个 目 录 名 作 为 ln 命 令 的 第 二 个 参 数 即 可 。

$ln filename directory-name

在 下 一 个 例 子 中 ,Chris 目 录 中 的 文 件 today 被 连 接 到 目 录 reorts 中 。 ls 命 令会 列 出 Chris 目 录 中 的 文 件 today 被 连 接 到 目 录 reports 中 。ls 命 令 会 列 出 Chris 目 录 和 reports 目 录 中 的 today 文 件 ,实 际 上 ,只 存 在 today 文 件 的 一 份 拷 贝 , 即home 目 录 中 的 原 文 件 。

$ln today reports

$ls

today reports

$ls reports today

$

如 同 cp 和 mv 命 令 一 样 ,你 也 可 以 给 连 接 一 个 新 名 字 。 只 要 将 新 名 字 放 在 目录 名 之 后 ,并 加 斜 杠 分 隔 即 可 。 在 下 一 个 例 子 中 ,文 件 today 被 用 wednesday 的名 字 连 接 到 目 录 reports 中 。 这 时 也 只 有 一 个 真 实 的 文 件 ,即 Chris 目 录 中 叫 作today 的 原 文 件 。 然 而 ,现 在 today is wednesday 的 名 字 连 接 到 了 目 录 reports 中 , 在 这 种 意 义 上 ,today 有 了 另 外 一 个 名 字 。 在 目 录 reports 中 ,today 以wednesday 的 名 字 存 在 。

$ln today reports/wednesday

$ls

today reports

$ls reports wednesday

$

你 可 以 引 用 文 件 的 路 径 名 很 轻 易 地 把 一 个 目 录 的 一 个 文 件 连 接 到 另 一 个 目录 的 另 一 个 文 件 中 去 。 在 下 一 个 例 子 中 ,reports 目 录 中 的 文 件 monday 被 连 接到 目 录 Chris 中 。 注 意 第 二 个 参 数 是 绝 对 路 径 名 。

$ln monday/home/Chris

要 删 除 文 件 ,你 需 要 删 除 它 所 有 的 连 接 。 一 个 文 件 名 实 际 上 被 认 为 是 到 文 件的 一 个 连 接 。 命 令 rm 将 到 文 件 的 连 接 删 除 。 如 果 你 的 文 件 有 几 个 连 接 而 你 只删 除 了 其 中 一 个 ,其 它 的 原 地 未 动 ,那 么 你 便 可 以 通 过 其 它 的 文 件 名 来 引 用 文 件 。

即 使 你 将 初 始 的 连 接 — — 文 件 的 初 始 文 件 名 删 除 ,情 况 仍 然 如 此 。 任 何 增 加 的 连接 都 会 一 样 地 起 作 用 。 在 下 一 个 例 子 中 ,today 文 件 被 rm 命 令 删 除 。 然 而 ,同 一个 文 件 还 有 一 个 叫 weather 的 连 接 ,文 件 可 由 weather 的 名 字 加 以 引 用 ( 见 图 6- 7 )。

$ln today weather

$rm today

$cat weather

The storm broke today and the sun came out.

$

第 6 章 Linux 文 件 结 构 - 图7

图 6-7 要删除一个文件 , 你需要删除它的所有链接

符 号 连 接 和 硬 连 接

Linux 支 持 所 谓 的 符 号 连 接 , 就 我 们 所 介 绍 的 而 言 ,被 称 作 硬 连 接 。 尽 管 , 硬 连接 可 以 满 足 你 大 部 分 的 需 要 , 但 它 仍 然 有 很 大 的 局 限 性 。 当 你 试 图 连 接 其 它 用 户的 目 录 中 的 文 件 时 , 硬 连 接 可 能 会 失 败 。 这 是 因 为 Limux 文 件 结 构 可 被 物 理 上 划分 为 称 作 文 件 系 统 的 部 分 。 一 个 文 件 系 统 可 由 许 多 物 理 存 贮 设 备 或 设 备 组 成 , 从一 个 软 盘 到 一 系 列 的 硬 盘 。 尽 管 所 有 文 件 系 统 中 的 文 件 都 被 连 接 到 同 一 个 总 的目 录 树 中 , 每 一 个 文 件 系 统 在 物 理 上 将 管 理 自 己 的 文 件 和 目 录 。 这 意 味 着 一 个 文件 系 统 中 的 文 件 不 能 由 硬 连 接 到 另 一 个 文 件 系 统 的 文 件 上 。 如 果 你 试 图 连 接 另一 个 文 件 系 统 中 另 一 用 户 目 录 中 的 文 件 , 硬 连 接 将 会 失 败 。

使 用 符 号 连 接 使 可 以 克 服 这 一 限 制 。 符 号 连 接 中 包 含 着 它 所 连 接 到 的 文 件的 路 径 名 。 它 不 是 一 个 直 接 的 硬 连 接 ,而 是 如 何 定 位 一 个 特 定 文 件 的 信 息 。 不 像

硬 连 接 一 样 为 同 一 个 文 件 再 登 记 一 个 名 字 ,符 号 连 接 只 是 被 认 为 是 代 表 路 径 名 的另 一 种 符 号 。 它 是 文 件 路 径 名 的 另 一 种 写 法 。

使 用 ln 命 令 的 -S 选 项 你 便 可 以 创 建 一 个 符 号 连 接 。 在 下 一 个 例 子 中 , 用 户 为文 件 /home/george/veglist 创 建 了 一 个 叫 作 lunch 的 连 接 。

$ ln-s lunch/home/george/veglist

如 果 你 列 出 了 一 个 符 号 连 接 和 它 的 文 件 的 信 息 ,你 会 发 现 显 示 的 信 息 是 不 同的 。 在 下 一 个 例 子 中 , 用 户 用 ls 命 令 和 一 个 选 项 列 出 了 lunch 和

/home/george/veglist 的 全 部 信 息 。 命 令 行 中 第 一 个 字 符 标 识 了 文 件 的 类 型 。 符号 连 接 有 它 们 自 己 的 文 件 类 型 — — 用 L 表 示 。 lunch 的 文 件 类 型 是 L ,表 明 它 是一 个 符 号 连 接 , 而 不 是 一 个 通 常 的 文 件 。 在 术 语 ” group ” 之 后 的 是 文 件 的 尺 寸 。 注意 到 二 者 的 大 小 是 不 同 的 。 文 件 lunch 仅 有 4byte 大 。 这 是 因 为 Lunch 只 是 一个 符 号 连 接 — — 包 含 着 另 一 文 件 的 路 径 的 文 件 — — 路 径 名 只 会 占 用 几 个 字 节 。它 不 是 文 件 veglist 的 一 个 直 接 的 硬 连 接 。

$ls lunch/home/george/veglist

Lrw-rw-r--1 Chris group 4 Feb 14 10:30 lunch

-rw-rw-r--1 george group 793 Feb14 10:30 veglist

要 删 除 一 个 文 件 , 你 只 需 删 除 它 的 硬 连 接 。 如 果 还 有 一 些 符 号 连 接 , 它 们 不 会完 成 对 文 件 的 访 问 。 在 这 种 情 况 下 , 符 号 连 接 中 将 包 含 一 个 已 经 不 存 在 的 文 件 的路 径 名 。 与 硬 连 接 不 同 , 使 用 符 号 连 接 你 可 以 创 建 目 录 的 连 接 。 在 效 果 上 ,你 可 以创 建 另 一 个 名 字 来 实 现 对 目 标 目 录 的 引 用 。 然 而 ,如 果 你 用 符 号 连 接 来 代 表 一 个目 录 名 ,你 要 记 住 pwd 命 令 总 是 会 显 示 实 际 的 目 录 名 ,而 不 是 符 号 名 。 在 下 一 个例 子 中 , 用 户 将 目 录 thankyou 连 接 到 符 号 连 接 gifts 上 。当 用 户 使 用 cd 命 令 和 gifts

时 ,用 户 实 际 上 将 进 入 thankyou 目 录 。 pwd 会 显 示 thankyou 目 录 的 路 径 名 。

$ln -s/home/chris/letters/thankyou gifts

$cd gifts

$pwd

/home/chris/letters/thankyou

$

如 果 你 想 显 示 符 号 连 接 的 名 字 ,你 可 用 cwd 变 量 对 之 访 问 。 cwd 是 一 个 特 殊的 系 统 变 量 ,它 容 纳 着 一 个 目 录 的 符 号 递 接 的 名 字 ,如 果 存 在 这 一 符 号 连 接 的 话 。cwd 变 量 将 在 15 章 加 以 讨 论 。 你 可 echo $ cwd 命 令 显 示 了 cwd 的 内 容 。

$pwd

/home/Chris/letters/thankyou

$echo $cwd

/home/Chris/gifts

总 结 :Linux 文 件 系 统

在 Linux 中 ,文 件 被 组 织 在 目 录 中 。 目 录 本 身 相 互 间 分 层 连 接 ,构 成 一 种 树 形结 构 。 每 一 个 目 录 中 都 包 含 了 文 件 和 其 它 目 录 。 在 分 层 结 构 的 顶 端 是 根 目 录 , 由它 分 支 出 系 统 目 录 和 用 户 的 home 目 录 。 系 统 目 录 中 包 含 着 维 持 Linux 系 统 运行 的 应 用 程 序 ,home 目 录 是 用 户 的 登 录 目 录 。

目 录 的 网 状 结 构 构 成 了 一 个 由 高 层 目 录 到 底 层 目 录 的 路 径 , 反 之 亦 然 。 由 根

目 录 到 一 个 特 定 目 录 之 间 的 目 录 集 就 是 目 录 的 路 径 名 。 实 际 上 ,每 一 个 文 件 都 由一 个 路 径 名 , 由 根 目 录 开 始 到 文 件 所 在 目 录 。 路 径 名 和 文 件 名 一 同 构 成 了 文 件 的绝 对 路 径 名 。

你 可 以 轻 松 地 管 理 目 录 — — 创 建 新 目 录 ,删 除 旧 目 录 ,由 一 个 目 录 更 换 到 另 一个 目 录 。 在 一 个 目 录 中 你 还 可 以 创 建 任 何 深 层 的 子 目 录 。 当 然 录 入 系 统 后 , 你 总是 处 于 一 个 缺 省 的 目 录 中 。 这 一 缺 省 目 录 叫 作 你 的 工 作 目 录 , 你 创 建 的 任 何 文 件都 会 被 放 入 这 一 目 录 中 ,除 非 另 加 指 定 。

你 可 以 用 cd 命 令 来 改 变 缺 省 目 录 。 在 此 意 义 上 ,你 可 以 从 一 个 目 录 移 到 另 一个 目 录 。 当 你 首 次 登 录 入 系 统 时 ,你 缺 省 的 目 录 是 你 的 home 目 录 。

你 可 在 目 录 之 间 或 目 录 本 身 上 进 行 文 件 操 作 。 你 可 将 文 件 由 一 个 目 录 拷 贝 , 移 动 到 另 一 个 目 录 。 你 甚 至 可 以 移 动 ,拷 贝 整 个 目 录 ,你 也 可 以 给 文 件 创 建 连 接 。连 接 是 文 件 的 另 一 个 名 字 。 可 你 以 在 一 个 目 录 中 有 一 个 可 引 用 另 一 目 录 中 文 件的 连 接 。

表 6-1file 和 od 命 令

命 令 执行

file 检 查 一 个 文 件 的 头 几 行 以 确 定 其 分 类

-f filename 将 要 进 行 检 查 的 文 件 名 由 一 个 文 件 中 读 出

od 将 文 件 的 内 容 以 八 进 制 、 字 符 、 十 进 制 或 十 六进 制 的 形 式 逐 一 打 击 ; 八 进 制 是 缺 省 格 式

-c 将 byte 值 以 字 符 形 式 输 出 ; 非 打 印 字 符 有相 应 的 字 符 表 示 形 式

-d 将 byte 值 以 十 进 制 形 式 输 出

-x 将 byte 值 以 十 六 进 制 形 式 输 出

-o 将 byte 值 以 八 进 制 形 式 输 出

6-2 Linux 中 标 准 系 统 目 录

目 录

功能

/

文 件 系 统 结 构 的 开 始 — 叫 作 根 目 录

/home

包 含 着 用 户 的 home 目录

/bin

包 含 着 所 有 标 准 的 命 令 和 应 用 程 序

/usr

包 含 着 系 统 使 用 的 文 件 和 命 令 ; 这 一 目 录 被 分 为

若 干 子 目 录

/usr/bin 包 含 着 面 向 用 户 的 命 令 和 应 用 程 序

/usr/sbin 包 含 系 统 管 理 命 令

/usr/lib 包 含 编 程 语 言 的 序

/usr/doc 包 含 Linux 的 文 档

/usr/man 包 含 在 线 的 手 工 man 文 件

/usr/spooc 包 含 缓 冲 文 件 ,如 一 些 打 印 作 业 和 网 络 传 输

/sbin 包 含 系 统 重 启 动 的 系 统 管 理 命 令

/var 包 含 一 些 如 信 箱 文 件 之 类 的 可 变 文 件

/dev 包 含 与 诸 如 终 端 和 打 印 机 的 文 件 接 口

/etc 包 含 系 统 设 置 和 其 它 系 统 文 件

6-3 文 件 列 表 、 显 示 和 打 印

命 令 选 项

ls

执行

列 出 文 件 和 目 录 名

$ls

cat

这 一 过 滤 器 被 用 于 文 件 显 示 ,它 可 将 文 件 名 作

为 参 数 。 它 将 文 件 内 容 直 接 送 入 标 准 输 出 ,后 者

more

在 缺 省 情 况 下 指 向 屏 幕

这 一 应 用 将 文 件 逐 屏 显 示 。 它 可 将 文 件 名 作 为

参 数 。 它 将 文 件 的 内 容 输 出 到 屏 幕 ,一 次 只 显 示一 屏 内 容 $more filenames

+num 从 文 件 的 第 num 页 开 始 显 示

numf 跳过 num 数 的 屏 幕

numb 返 回 num 数 的 屏 幕

d 显 示 半 屏

h 列 出 所 有 more 命令

q 退出 more 命 令

lpr 将 文 件 送 往 在 线 打 印 机 打 印 ; 参 数 可 以 是 一 个 文件 的 列 表

-p printername 选 择 一 个 特 定 的 打 印 机

lpq 列 出 打 印 任 务 的 队 列

lprm 将 一 个 打 印 任 务 自 打 印 队 列 中 删 除

表 6-4 目 录 命 令

命 令 执行

mkdir 创 建 一 个 目 录

$ mkdir reports

rmdir 删 除 一 个 目 录

$ rmdir letters

ls -F 用 斜 杠 列 出 目 录 名

$ls -F

today reports/letters/

ls -R 列 出 工 作 目 录 和 子 目 录

cd directory name 进 入 特 定 的 目 录 ,并 将 之 作 为 工 作 目 录 ; 没 有 指 定

目 录 名 的 cd 命 令 将 回 到 home 目 录 中

$cd reports

$cd

pwd 列 出 一 个 工 作 目 录 的 路 径 名

$pwd

/home/chris/reports

directory name/filename 在 路 径 名 中 的 斜 杠 用 于 分 隔 每 个 目 录 名 。 对 文

件 的 路 径 名 而 言 ,斜 杠 将 文 件 名 同 前 面 的 目 录 名分开

$ cd/home/Chris/reports

$ cat/home/Chris/reports/ m ydata

引 用 工 作 目 录 。 你 可 将 之 作 为 参 数 或 路 径 名 的一 部 分

$ ls.

$ mv ../aleina.

~ /pathname 波 浪 线 是 一 个 代 表 home 目 录 路 径 名 的 特 殊 字符 。 当 使 用 文 件 或 目 录 的 绝 对 路 径 名 时 它 是 很有 用 的

$ cp monday ~ / today

$ mv tuesday ~ / weather

表 6-5 文 件 操 作

命 令 执行

cp filename filename 拷 贝 文 件 。 CP 有 两 个 参 数 :原 文 件 名 和 新 的 拷 贝

文 件 名 。 你 可 以 使 用 文 件 的 路 径 名 以 进 行 跨 目 录的 拷 贝

$cp today reports/monday

cp -r dirname dirname 将 一 个 子 目 录 由 一 个 目 录 拷 贝 到 另 一 个 目 录 中 。

被 拷 贝 的 子 目 录 将 包 含 它 所 有 的 子 目 录

$cp -r letters/thankyou oldletters

mv filename filname 移 动 或 将 文 件 更 名 。 m v 有 两 个 参 数 :第 一 个 是 要

移 动 的 文 件 第 二 个 是 新 文 件 名 或 目 录 的 路 径 名 。如 果 它 是 一 个 目 录 名 ,这 一 文 件 在 字 面 上 被 移 到 那

一 目 录 中 ,并 且 将 文 件 的 路 径 名 加 以 改 变

$mv today/home/Chris/reports

mv dirname dirname 移 动 一 个 目 录 ,在 这 种 情 况 下 , 两 个 参 数 都 是 目 录

$mv letters/thankyou oldletters

ln filename filename 为 文 件 创 建 一 个 名 为 连 接 的 增 加 名 。 可 在 一 个

目 录 中 创 建 另 一 个 目 录 中 文 件 的 连 接

$ln today reports/monday

rm filenames 删 除 文 件 。 可 以 有 任 意 数 目 的 文 件 作 参 数 。 字面 上 删 除 了 文 件 的 连 接 。 如 果 一 个 文 件 有 多 个连 接 ,你 应 当 连 接 全 部 删 除 以 最 终 删 除 一 个 文 件

$rm today weather weekend

表 6-6find 命 令

命 令 或 选 项 执 行

find 根 据 一 个 标 准 搜 索 目 录 以 查 找 文 件 。 这 一 命令 有 许 多 参 数 确 定 搜 索 标 准 和 要 采 取 的 行 为

-have pattern 查 找 名 字 中 具 有 pattern 的 文 件

-group name 查 找 属 于 那 一 组 名 的 文 件

-size name 查 找 具 有 num 块 大 小 的 文 件 。 如 果 在 num 之后加入 C ,那 将 以 byte 为 单 位 进 行 查 找

-mtime num 查 找 num 天 之 前 修 改 过 的 文 件

-newer pattern 查 找 与 pattern 匹 配 文 件 之 后 的 修 改 过 的 文 件

-print 将 查 找 结 果 输 出 到 标 准 输 出 。 结 果 通 常 是 文件 名 的 列 表 , 包 括 它 们 的 全 路 径 名

-type filetype 查 找 特 定 类 型 的 文 件

  1. 块 设 备 文 件

  2. 字 符 设 备 文 件

  3. 目 录 文 件

f 常 规 文 件

p 指 定 的 管 道 (fifo)

l 符 号 连 接