输入输出重定向
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3.3.3 错 误 重 定 向
为了某个命令的某次运行,您可以使用错误重定向,将与标准错误相联系的默认设备改变 为另一文件。这就允许您将错误消息发送到与之相关联的新文件,而不是发送到显示屏。按照 下 面 的 语 法 , 2>操 作 符 可 用 于 错 误 重 定 向 , 这 里 , 2 是 标 准 错 误 的 文 件 描 述 符 。 您 必 须 将 标 准 错 误 指 定 为 2。
$ cat<Phones [contents of Phones] $ grep "John"<Phones [output of the grep command] $
虽 然 最 终 结 果 相 同 , 但 cat<Phones 命 令 与 cat Phones 命 令 是 不 同 的 , 在 命 令 cat Phones 中 , 文 件 Phones 作 为 命 令 行 参 数 传 递 给 cat, cat 的 标 准 输 入 没 有 改 变 。
LINUX/UNIX 中 的 每 个 命 令 有 三 个 打 开 文 件 , 它 们 称 为 标 准 文 件 。 LINUX 和 UNIX 有 一 套 强大的操作符和命令,使您可以通过重定向操作符重定向某个命令的输入、输出和错误,并用 管道操作符将某个命令的输出与另一个命令的输入相连。这一章讨论标准文件,文件描述符, I/O 和 错 误 重 定 向 , 将 多 个 命 令 连 接 在 一 起 执 行 复 杂 的 文 件 操 作 , 以 及 tee 实 用 程 序 , 它 可 将 命 令的输出保存为一个或多个文件以及将输出发送给另一命令。
• 60 •
第 Ⅰ 部 分 有 效 地 使 用 LINUX 和 UNIX
存 在 , 错 误 消 息 ls:foo:NO such file or directory 将 发 送 到 文 件 error.log。
$ find~ -name foo -print 2> find.errors [ output of the find command ] $ ls -1 foo 2> error.log [ output of the find command ] $ cat error.log ls:foo: No such file or directory $
可 以 用 LINUX/UNIX 的 重 定 向 功 能 从 标 准 输 入 、 标 准 输 出 和 标 准 错 误 中 分 离 默 认 文 件 , 并 将 其 他 文 件 与 它 们 相 联 系 。 这 一 章 将 介 绍 这 些 功 能 是 如 何 工 作 的 , 如 果 没 有 提 及 其 他 shell, 讨 论 就 是 针 对 Bash 的 。
语 法 : 命 令 <输 入 文 件 或 命 令 0<输 入 文 件 目的:将键盘从标准输入中分离并将‘输入文件’与之关联,即‘命令’从‘输入文件’ 中 读 取 输 入 (而 不 是 从 键 盘 中 )。 命 令 的 输 出 结 果 和 错 误 消 息 仍 然 通 过 显 示 屏 输 出 ,在 下 面 的 会 话 中 ,cat 和 grep 命 令 从 Phone 文件获取输入,而不是键盘。它们的输出结果仍发送到显示屏上。
$ tr -s ' ' ' ' <Phones [contents of Phones with multiple consecutive spaces replaced with a single space ] $
3.3.2 输 出 重 定 向
为了执行某个命令,您可以使用输出重定向功能,它可将与标准输出相联系的默认设备改 变 为 另 一 文 件 。 这 就 允 许 命 令 将 结 果 输 出 到 新 关 联 的 文 件 , 而 不 是 输 出 到 显 示 屏 中 。 >(或 1> — — 1 是 隐 含 默 认 的 )操 作 符 可 按 照 下 面 的 语 法 用 于 输 出 重 定 向 , 这 里 1 是 标 准 输 出 的 文 件 描 述符。
$ cat > Phones [your input] <Ctrl+D> $ grep "John" Phones> Phones.bak [output of the grep command ] $ find ~-name foo -print >foo.paths [error messages] $
3.3 输 入 、 输 出 和 错 误 重 定 向
为 了 某 个 命 令 的 某 次 执 行 , 通 过 LINUX/UNIX 的 重 定 向 功 能 , 可 将 与 命 令 的 标 准 文 件 相 关 的 默 认 文 件 (设 备 )改 为 其 他 文 件 。 使 用 这 些 功 能 的 结 果 即 为 常 说 的 输 入 、 输 出 和 错 误 重 定 向 。 下面会逐个讨论这些功能。虽然重定向功能可用于网络环境中的多台计算机,但这里的讨论只 限于在同一台计算机上的重定向。
3.3.1 输 入 重 定 向
为了执行某个命令,您可以使用输入重定向功能,将与标准输入关联的默认设备改变为另 一 文 件 。 这 就 允 许 命 令 从 新 关 联 的 文 件 中 获 得 输 入 (而 不 是 从 键 盘 中 )。 <(或 0<— — 0 是 隐 含 默 认 的 )操 作 符 可 按 照 下 面 的 语 法 用 于 输 入 重 定 向 , 这 里 0 是 标 准 输 入 的 文 件 描 述 符 。
第 3章 输 入 输 出 重 定 向
• 59 •
如 果 没 有 在 命 令 行 中 给 出 文 件 参 数 , cat 和 grep 命 令 就 读 取 标 准 输 入 。 tr 命 令 只 读 取 标 准 输 入 , 并 将 结 果 发 送 到 标 准 输 出 中 。 tr 命 令 不 会 将 文 件 作 为 பைடு நூலகம் 令 行 参 数 来 处 理 。 所 以 tr 命 令 经 常 使 用 输 入 重 定 向 , 在 下 面 的 会 话 中 , 它 用 一 个 空 格 代 替 了 文 件 Phones 中 多 个 连 续 空 格 。
语 法 : 命 令 >输 出 文 件 或 命 令 1>输 出 文 件 目 的 :将 显 示 屏 从 标 准 输 出 中 分 离 ,并 将‘ 输 出 文 件 ’与 之 关 联 ,即‘ 命 令 ’发 送 结 果‘ 输 出文件’,而不是发送到显示屏。 命 令 的 输 入 仍 然 来 自 于 键 盘 , 错 误 信 息 仍 然 输 出 到 显 示 屏 。 在 下 面 的 会 话 中 , cat 命 令 从 键 盘 读 取 输 入 , 并 将 其 保 存 在 文 件 Phones 中 , 如 果 文 件 Phones 已 经 存 在 , 则 覆 盖 之 。 grep 命 令 从 文 件 Phones(它 被 作 为 命 令 行 参 数 传 递 )中 读 取 输 入 , 并 且 命 令 输 出 也 在 文 件 Phones 中 。 find 命 令 的 输 出 被 重 定 向 到 文 件 foo.paths 中 。 这 些 命 令 的 错 误 消 息 仍 然 发 送 到 显 示 屏 上 。
• 58 •
第 Ⅰ 部 分 有 效 地 使 用 LINUX 和 UNIX
们将交替使用监视屏、显示屏、控制台窗口和显示窗口等术语。
键盘 标准输入
标准输出
命令
显示屏
标准错误
图 3-1 标 准 输 入 、 标 准 输 出 和 标 准 错 误
LINUX/UNIX 内 核 通 过 一 个 称 为 文 件 描 述 符 的 小 整 数 与 每 一 打 开 文 件 联 系 。 该 描 述 符 的 值 的 上 限 依 赖 于 系 统 , 但 可 等 于 甚 至 大 于 1023。 您 可 以 用 ulimit 命 令 (见 第 6 章 )确 定 一 个 进 程 能 同 时 打 开 的 文 件 数 量 的 极 限 。 在 Mandrake 6.1 和 RedHat 7.1 上 , 默 认 值 为 1024, 而 在 SunOS 上 默 认 值 为 64。 标 准 输 入 、 标 准 输 出 和 标 准 错 误 的 文 件 描 述 符 分 别 是 0, 1, 2。
tee、 tr、 uniq 和 wc。
3.1 简 介
所 有 计 算 机 软 件 命 令 都 要 执 行 这 三 种 操 作 中 的 一 种 或 多 种 —— 输 入 、 处 理 、 输 出 ; 典 型 的 命 令 会 执 行 全 部 3 个 操 作 。 对 于 操 作 系 统 来 说 , 问 题 在 于 : shell 命 令 从 什 么 地 方 获 得 输 入 , 将 输 出 结 果 发 送 到 什 么 地 方 , 错 误 信 息 发 送 到 什 么 地 方 ? 如 果 输 入 不 是 命 令 代 码 的 组 成 部 分 (即 代 码 中 数 据 以 常 量 或 变 量 的 形 式 出 现 ), 它 必 然 来 自 于 外 界 。 外 界 来 源 通 常 是 一 个 文 件 , 有 时 可 能 是 一 个 I/O 设 备 , 比 如 键 盘 或 网 络 接 口 卡 。 命 令 输 出 和 错 误 信 息 同 样 可 发 送 到 一 个 文 件 。 为 了 使命令读写文件,首先就要打开文件。
3.2 标 准 文 件 、 文 件 描 述 符 和 标 准 文 件 的 重 定 向
在 LINUX/UNIX 中 , 对 于 每 个 命 令 来 说 来 说 , 有 三 种 文 件 可 由 内 核 自 动 打 开 , 以 读 取 输 入 , 发 送 输 出 和 错 误 消 息 。 这 些 文 件 称 为 标 准 文 件 , 包 括 标 准 输 入 (stdin)、 标 准 输 出 (stdout)以 及 标 准 错 误 (stderr)。 默 认 情 况 下 , 这 些 文 件 与 执 行 命 令 的 终 端 有 关 系 。 确 切 地 说 , 键 盘 就 是 标 准 输 入 , 而 显 示 屏 (登 录 的 控 制 台 )就 是 标 准 输 出 和 标 准 错 误 。 因 此 , 默 认 情 况 下 , 每 个 命 令 都 是 从 键 盘 获 取 输 入 , 而 将 输 出 结 果 和 错 误 信 息 发 送 到 显 示 屏 , 如 图 3-1 所 示 。 在 以 后 的 章 节 中 , 我
第 3章 输 入 输 出 重 定 向
学习目标 ● 讲 述 标 准 文 件 的 概 念 (标 准 输 入 、 标 准 输 出 和 标 准 错 误 )以 及 文 件 描 述 符 。 ● 讲述标准文件的输入和输出重定向。 ● 讨论错误重定向和追加到文件的概念。 ● 解 释 LINUX/UNIX 中 的 管 道 概 念 。 ● 讨 论 tee 实 用 程 序 。 ● 讲 述 管 道 、 文 件 描 述 符 、 重 定 向 原 语 和 tee 实 用 程 序 的 组 合 所 具 有 的 强 大 操 作 功 能 。 ● 涵 盖 的 命 令 和 原 语 : &、 | 、 <、 >、 >>、 cat、 grep、 more、 pr、 sort、 stderr、 stdin、 stdout、
语 法 : 命 令 2>错 误 文 件 目的:将显示屏与标准错误分离,并将‘错误文件’与之关联,即将错误消息发送到‘错 误文件’,而不是显示屏。 命 令 的 输 入 仍 然 来 自 于 键 盘 , 命 令 输 出 仍 然 发 送 到 显 示 屏 。 在 下 面 的 会 话 中 , find 命 令 的 输 出 仍 然 发 送 到 显 示 屏 , 错 误 消 息 发 送 到 文 件 find.errors 中 。 该 命 令 从 主 目 录 (~)读 取 输 入 。 命 令 ls -l foo 的 输 出 被 发 送 到 显 示 屏 上 , 而 错 误 消 息 发 送 到 文 件 error.log。 所 以 , 如 果 文 件 foo 不
为了某个命令的某次运行,您可以使用错误重定向,将与标准错误相联系的默认设备改变 为另一文件。这就允许您将错误消息发送到与之相关联的新文件,而不是发送到显示屏。按照 下 面 的 语 法 , 2>操 作 符 可 用 于 错 误 重 定 向 , 这 里 , 2 是 标 准 错 误 的 文 件 描 述 符 。 您 必 须 将 标 准 错 误 指 定 为 2。
$ cat<Phones [contents of Phones] $ grep "John"<Phones [output of the grep command] $
虽 然 最 终 结 果 相 同 , 但 cat<Phones 命 令 与 cat Phones 命 令 是 不 同 的 , 在 命 令 cat Phones 中 , 文 件 Phones 作 为 命 令 行 参 数 传 递 给 cat, cat 的 标 准 输 入 没 有 改 变 。
LINUX/UNIX 中 的 每 个 命 令 有 三 个 打 开 文 件 , 它 们 称 为 标 准 文 件 。 LINUX 和 UNIX 有 一 套 强大的操作符和命令,使您可以通过重定向操作符重定向某个命令的输入、输出和错误,并用 管道操作符将某个命令的输出与另一个命令的输入相连。这一章讨论标准文件,文件描述符, I/O 和 错 误 重 定 向 , 将 多 个 命 令 连 接 在 一 起 执 行 复 杂 的 文 件 操 作 , 以 及 tee 实 用 程 序 , 它 可 将 命 令的输出保存为一个或多个文件以及将输出发送给另一命令。
• 60 •
第 Ⅰ 部 分 有 效 地 使 用 LINUX 和 UNIX
存 在 , 错 误 消 息 ls:foo:NO such file or directory 将 发 送 到 文 件 error.log。
$ find~ -name foo -print 2> find.errors [ output of the find command ] $ ls -1 foo 2> error.log [ output of the find command ] $ cat error.log ls:foo: No such file or directory $
可 以 用 LINUX/UNIX 的 重 定 向 功 能 从 标 准 输 入 、 标 准 输 出 和 标 准 错 误 中 分 离 默 认 文 件 , 并 将 其 他 文 件 与 它 们 相 联 系 。 这 一 章 将 介 绍 这 些 功 能 是 如 何 工 作 的 , 如 果 没 有 提 及 其 他 shell, 讨 论 就 是 针 对 Bash 的 。
语 法 : 命 令 <输 入 文 件 或 命 令 0<输 入 文 件 目的:将键盘从标准输入中分离并将‘输入文件’与之关联,即‘命令’从‘输入文件’ 中 读 取 输 入 (而 不 是 从 键 盘 中 )。 命 令 的 输 出 结 果 和 错 误 消 息 仍 然 通 过 显 示 屏 输 出 ,在 下 面 的 会 话 中 ,cat 和 grep 命 令 从 Phone 文件获取输入,而不是键盘。它们的输出结果仍发送到显示屏上。
$ tr -s ' ' ' ' <Phones [contents of Phones with multiple consecutive spaces replaced with a single space ] $
3.3.2 输 出 重 定 向
为了执行某个命令,您可以使用输出重定向功能,它可将与标准输出相联系的默认设备改 变 为 另 一 文 件 。 这 就 允 许 命 令 将 结 果 输 出 到 新 关 联 的 文 件 , 而 不 是 输 出 到 显 示 屏 中 。 >(或 1> — — 1 是 隐 含 默 认 的 )操 作 符 可 按 照 下 面 的 语 法 用 于 输 出 重 定 向 , 这 里 1 是 标 准 输 出 的 文 件 描 述符。
$ cat > Phones [your input] <Ctrl+D> $ grep "John" Phones> Phones.bak [output of the grep command ] $ find ~-name foo -print >foo.paths [error messages] $
3.3 输 入 、 输 出 和 错 误 重 定 向
为 了 某 个 命 令 的 某 次 执 行 , 通 过 LINUX/UNIX 的 重 定 向 功 能 , 可 将 与 命 令 的 标 准 文 件 相 关 的 默 认 文 件 (设 备 )改 为 其 他 文 件 。 使 用 这 些 功 能 的 结 果 即 为 常 说 的 输 入 、 输 出 和 错 误 重 定 向 。 下面会逐个讨论这些功能。虽然重定向功能可用于网络环境中的多台计算机,但这里的讨论只 限于在同一台计算机上的重定向。
3.3.1 输 入 重 定 向
为了执行某个命令,您可以使用输入重定向功能,将与标准输入关联的默认设备改变为另 一 文 件 。 这 就 允 许 命 令 从 新 关 联 的 文 件 中 获 得 输 入 (而 不 是 从 键 盘 中 )。 <(或 0<— — 0 是 隐 含 默 认 的 )操 作 符 可 按 照 下 面 的 语 法 用 于 输 入 重 定 向 , 这 里 0 是 标 准 输 入 的 文 件 描 述 符 。
第 3章 输 入 输 出 重 定 向
• 59 •
如 果 没 有 在 命 令 行 中 给 出 文 件 参 数 , cat 和 grep 命 令 就 读 取 标 准 输 入 。 tr 命 令 只 读 取 标 准 输 入 , 并 将 结 果 发 送 到 标 准 输 出 中 。 tr 命 令 不 会 将 文 件 作 为 பைடு நூலகம் 令 行 参 数 来 处 理 。 所 以 tr 命 令 经 常 使 用 输 入 重 定 向 , 在 下 面 的 会 话 中 , 它 用 一 个 空 格 代 替 了 文 件 Phones 中 多 个 连 续 空 格 。
语 法 : 命 令 >输 出 文 件 或 命 令 1>输 出 文 件 目 的 :将 显 示 屏 从 标 准 输 出 中 分 离 ,并 将‘ 输 出 文 件 ’与 之 关 联 ,即‘ 命 令 ’发 送 结 果‘ 输 出文件’,而不是发送到显示屏。 命 令 的 输 入 仍 然 来 自 于 键 盘 , 错 误 信 息 仍 然 输 出 到 显 示 屏 。 在 下 面 的 会 话 中 , cat 命 令 从 键 盘 读 取 输 入 , 并 将 其 保 存 在 文 件 Phones 中 , 如 果 文 件 Phones 已 经 存 在 , 则 覆 盖 之 。 grep 命 令 从 文 件 Phones(它 被 作 为 命 令 行 参 数 传 递 )中 读 取 输 入 , 并 且 命 令 输 出 也 在 文 件 Phones 中 。 find 命 令 的 输 出 被 重 定 向 到 文 件 foo.paths 中 。 这 些 命 令 的 错 误 消 息 仍 然 发 送 到 显 示 屏 上 。
• 58 •
第 Ⅰ 部 分 有 效 地 使 用 LINUX 和 UNIX
们将交替使用监视屏、显示屏、控制台窗口和显示窗口等术语。
键盘 标准输入
标准输出
命令
显示屏
标准错误
图 3-1 标 准 输 入 、 标 准 输 出 和 标 准 错 误
LINUX/UNIX 内 核 通 过 一 个 称 为 文 件 描 述 符 的 小 整 数 与 每 一 打 开 文 件 联 系 。 该 描 述 符 的 值 的 上 限 依 赖 于 系 统 , 但 可 等 于 甚 至 大 于 1023。 您 可 以 用 ulimit 命 令 (见 第 6 章 )确 定 一 个 进 程 能 同 时 打 开 的 文 件 数 量 的 极 限 。 在 Mandrake 6.1 和 RedHat 7.1 上 , 默 认 值 为 1024, 而 在 SunOS 上 默 认 值 为 64。 标 准 输 入 、 标 准 输 出 和 标 准 错 误 的 文 件 描 述 符 分 别 是 0, 1, 2。
tee、 tr、 uniq 和 wc。
3.1 简 介
所 有 计 算 机 软 件 命 令 都 要 执 行 这 三 种 操 作 中 的 一 种 或 多 种 —— 输 入 、 处 理 、 输 出 ; 典 型 的 命 令 会 执 行 全 部 3 个 操 作 。 对 于 操 作 系 统 来 说 , 问 题 在 于 : shell 命 令 从 什 么 地 方 获 得 输 入 , 将 输 出 结 果 发 送 到 什 么 地 方 , 错 误 信 息 发 送 到 什 么 地 方 ? 如 果 输 入 不 是 命 令 代 码 的 组 成 部 分 (即 代 码 中 数 据 以 常 量 或 变 量 的 形 式 出 现 ), 它 必 然 来 自 于 外 界 。 外 界 来 源 通 常 是 一 个 文 件 , 有 时 可 能 是 一 个 I/O 设 备 , 比 如 键 盘 或 网 络 接 口 卡 。 命 令 输 出 和 错 误 信 息 同 样 可 发 送 到 一 个 文 件 。 为 了 使命令读写文件,首先就要打开文件。
3.2 标 准 文 件 、 文 件 描 述 符 和 标 准 文 件 的 重 定 向
在 LINUX/UNIX 中 , 对 于 每 个 命 令 来 说 来 说 , 有 三 种 文 件 可 由 内 核 自 动 打 开 , 以 读 取 输 入 , 发 送 输 出 和 错 误 消 息 。 这 些 文 件 称 为 标 准 文 件 , 包 括 标 准 输 入 (stdin)、 标 准 输 出 (stdout)以 及 标 准 错 误 (stderr)。 默 认 情 况 下 , 这 些 文 件 与 执 行 命 令 的 终 端 有 关 系 。 确 切 地 说 , 键 盘 就 是 标 准 输 入 , 而 显 示 屏 (登 录 的 控 制 台 )就 是 标 准 输 出 和 标 准 错 误 。 因 此 , 默 认 情 况 下 , 每 个 命 令 都 是 从 键 盘 获 取 输 入 , 而 将 输 出 结 果 和 错 误 信 息 发 送 到 显 示 屏 , 如 图 3-1 所 示 。 在 以 后 的 章 节 中 , 我
第 3章 输 入 输 出 重 定 向
学习目标 ● 讲 述 标 准 文 件 的 概 念 (标 准 输 入 、 标 准 输 出 和 标 准 错 误 )以 及 文 件 描 述 符 。 ● 讲述标准文件的输入和输出重定向。 ● 讨论错误重定向和追加到文件的概念。 ● 解 释 LINUX/UNIX 中 的 管 道 概 念 。 ● 讨 论 tee 实 用 程 序 。 ● 讲 述 管 道 、 文 件 描 述 符 、 重 定 向 原 语 和 tee 实 用 程 序 的 组 合 所 具 有 的 强 大 操 作 功 能 。 ● 涵 盖 的 命 令 和 原 语 : &、 | 、 <、 >、 >>、 cat、 grep、 more、 pr、 sort、 stderr、 stdin、 stdout、
语 法 : 命 令 2>错 误 文 件 目的:将显示屏与标准错误分离,并将‘错误文件’与之关联,即将错误消息发送到‘错 误文件’,而不是显示屏。 命 令 的 输 入 仍 然 来 自 于 键 盘 , 命 令 输 出 仍 然 发 送 到 显 示 屏 。 在 下 面 的 会 话 中 , find 命 令 的 输 出 仍 然 发 送 到 显 示 屏 , 错 误 消 息 发 送 到 文 件 find.errors 中 。 该 命 令 从 主 目 录 (~)读 取 输 入 。 命 令 ls -l foo 的 输 出 被 发 送 到 显 示 屏 上 , 而 错 误 消 息 发 送 到 文 件 error.log。 所 以 , 如 果 文 件 foo 不