`
jzy996492849
  • 浏览: 128181 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Linux I/O 重定向基础

 
阅读更多
摘要: Linux 管理的一个最重要并且有趣的话题是 I/O 重定向。此功能在命令行中使你能够将命令的输入输出取自或送到文件中,或者可以使用管道将多个命令连接在一起以形成所谓的“命令管道”。 我们运行的所有命令基本上产生两种输出: 命令结果 - 程序产生的数据,以及 程序状态和错误消息,用来通知用户程序的执行细节。

Linux 管理的一个最重要并且有趣的话题是 I/O 重定向。此功能在命令行中使你能够将命令的输入输出取自或送到文件中,或者可以使用管道将多个命令连接在一起以形成所谓的“命令管道”。

我们运行的所有命令基本上产生两种输出:

命令结果 - 程序产生的数据,以及
程序状态和错误消息,用来通知用户程序的执行细节。
在 Linux 和其他类 Unix 系统中,有三个默认文件(名称如下),这些文件也由 shell 使用文件描述符号标识:

stdin 或 0 - 它连接键盘,大多数程序从此文件读取输入。
stdout 或 1 - 它连接屏幕,并且所有程序将其结果发送到此文件
stderr 或 2 - 程序将状态/错误消息发送到此文件,它也连接到屏幕上。
因此,I/O 重定向允许你更改命令的输入源以及将输出和错误消息发送到其他地方。这可以通过 < 和> 重定向操作符来实现。

如何在 Linux 中重定向标准输出到文件中
如下面的示例所示,你可以重定向标准输出,这里,我们要存储 top 命令的输出以供以后检查:

$ top -bn 5 >top.log
其中标志的含义:

-b - 让 top 以批处理模式运行,以便你可以将其输出重定向到一个文件或另一个命令。
-n - 指定命令终止前的迭代次数。
你可以使用 cat 命令来查看 top.log 文件的内容:

$ cat top.log
要将命令输出附加在文件后面,请使用 >> 操作符。

例如,要将 top 命令的输出追加在上面的 top.log 文件中,特别是在脚本(或命令行)中,请输入下面的那行:

$ top -bn 5 >>top.log
注意: 也可以使用文件描述符数字,上面的重定向命令等同于:

$ top -bn 5 1>top.log
如何在 Linux 中重定向标准错误到文件中
要重定向命令的标准错误,你需要明确指定文件描述符 2,以便让 shell 了解你正在尝试做什么。

例如,下面的 ls 命令将在没有 root 权限的普通系统用户执行时产生错误:

$ ls -l /root/
你可以重定向标准错误到文件中:

$ ls -l /root/ 2>ls-error.log
$ cat ls-error.log
重定向标准错误到文件中
重定向标准错误到文件中

为了将标准错误附加在文件后,使用下面的命令:

$ ls -l /root/ 2>>ls-error.log
如何重定向标准输出及标准错误到一个文件中
还可以将命令的所有输出(包括标准输出和标准错误)捕获到单个文件中。这可以用两种可能的方式,通过指定文件描述符来完成:

1、 第一种是相对较旧的方法,其工作方式如下:

$ ls -l /root/ >ls-error.log 2>&1
上面的命令意思是 shell 首先将 ls 命令的输出发送到文件 ls-error.log(使用 >ls-error.log),然后将所有写到文件描述符 2(标准错误)的错误消息重定向到文件 ls-error.log(使用2>&1)中。(LCTT 译注:此处原文有误,径改。)这表示标准错误也被发送到与标准输出相同的文件中。

2、 第二种并且更直接的方法是:

$ ls -l /root/ &>ls-error.log
你也可以这样将标准输出和标准错误附加到单个文件后:

$ ls -l /root/ &>>ls-error.log
如何将标准输入重定向到文件中
大多数(如果不是全部)命令从标准输入获得其输入,并且标准输入默认连接到键盘。

要从键盘以外的文件重定向标准输入,请使用 < 操作符,如下所示:

$ cat <domains.list
重定向文件到标准输入中
重定向文件到标准输入中

如何重定向标准输入/输出到文件中
你可以如下在 sort 命令中同时执行标准输入、标准输出的重定向:

$ sort <domains.list >sort.output
如何使用管道进行 I/O 重定向
要将一个命令的输出重定向为另一个命令的输入,你可以使用管道,这是用于构建复杂操作命令的有力方法。

例如,以下命令将列出最近修改的前五个文件。

$ ls -lt | head -n 5
选项的意思是:

-l - 启用长列表格式
-t - 最新修改的文件首先显示
-n - 指定要显示的标题行数
构建管道的重要命令
在这里,我们将简要回顾一下构建命令管道的两个重要命令,它们是:

xargs 用于从标准输入构建和执行命令行。下面是使用 xargs 的管道示例,此命令用于将文件复制到 Linux 中的多个目录:

$ echo /home/aaronkilik/test/ /home/aaronkilik/tmp | xargs -n 1 cp -v /home/aaronkilik/bin/sys_info.sh
复制文件到多个目录
复制文件到多个目录

选项含义:

-n 1 - 让 xargs 对每个命令行最多使用一个参数,并发送到 cp命令
cp - 复制文件
-v - 显示 cp 命令的进度。
有关更多的使用选项和信息,请阅读 xargs 手册页:

$ man xargs
tee 命令从标准输入读取,并写入到标准输出和文件中。我们可以演示 tee 如何工作:

$ echo "Testing how tee command works" | tee file1
tee 命令示例
tee 命令示例

文件或文本过滤器通常与管道一起用于有效地操作 Linux 文件,来以强大的方式来处理信息,例如命令的重组输出(这对于生成有用的 Linux 报告是必不可少的)、修改文件中的文本和其他的 Linux 系统管理任务。

要了解有关 Linux 过滤器和管道的更多信息,请阅读这篇文章查找前十个访问 Apache 服务器的 IP 地址,这里展示了使用过滤器和管道的一个例子。
分享到:
评论

相关推荐

    基于C++实现的Linux的 Shell 程序+项目开发文档,实现基本的命令执行功能,支持 I/O 重定向和管道操作

    本项目旨在开发一个用于 Linux 的 Shell 程序,利用 C++ 标准库和 Linux 系统调用来实现。该 Shell 程序提供了基本的命令执行功能,支持 I/O 重定向和管道操作,并实现了一些内置命令

    Linux环境下I_O重定向与异步通信的实现.pdf

    在Linux操作系统中,I/O重定向与异步通信是两个重要的概念,对于系统开发和优化具有深远的影响。本文主要探讨了在Linux环境下如何利用这两种技术实现串口通信,特别是针对海康威视的IP视频模块(IPMOD)的双处理器...

    Linux下重定向详解

    在深入了解Linux下的I/O重定向之前,首先需要掌握一些基础的概念。 - **I/O重定向**:通常与文件描述符(File Descriptor, FD)有关,shell中通常包含10个文件描述符,编号为0至9。 - **常用文件描述符**: - 0 ...

    Linux实验八:LinuxC-编程-IO-重定向和管道.doc

    在Linux系统中,I/O重定向和管道是两种重要的进程间通信(IPC)方式,它们允许我们改变程序的标准输入、输出和错误流,或者在不同的进程中传递数据。本实验主要涵盖了这两个主题,通过编写和运行C语言程序来实践。 ...

    shell(C语言开发)

    4. I/O 重定向:myshell 支持 I/O 重定向,stdin 和 stdout。 5. 后台程序执行:myshell 支持后台程序执行。 myshell 的源代码 myshell 的源代码主要包括以下部分: 1. 头文件引用:myshell.c 文件中引用了 stdio...

    Linux管道符与重定向.pdf

    Linux 计算环境使用重定向可以控制命令的 I/O。 Linux 管道机制是一种传送方向固定的单向管道,一旦确定了其数据传送方向就不能再更改。Linux 把管道看作是一种文件,采用文件管理的方法对管道进行管理。但管道与...

    linux,unix系统:用户的登录与退出、IO重定向与简单文件操作.pdf

    本实验旨在掌握 Linux/Unix 系统的用户登录与退出、IO 重定向和简单文件操作,熟悉系统的图形界面和字符界面,并了解命令操作方法和I/O 的重定向机制。 一、系统的开启和关闭 1. 系统的开启:通过 Windows 系统...

    管道与IO重定向 计算机操作系统 Linux Ubuntu

    在实验中,我们将学习如何使用Linux的I/O重定向和管道操作来完成单个命令不能实现的复杂任务。下面是实验的详细步骤: 1. 使用`cat`命令创建一个名字为`test.data`的文件,并显示文件的内容。 使用`cat`命令可以...

    main_linuxC语言shell_shell_linuxshell编程_

    基于linux的操作系统外壳。编写一个C 语言程序作为Linux 内核的shell 命令行解释程序,所执行的结果需和...修改程序,增加I/O 重定向功能。即用户可以使用”&lt;”、”&gt;”和”|”符号改变程序/文件的输入和输出。

    Shell命令解释系统设计

    在本文中,我们将深入探讨如何设计一个具备处理前后台运行命令、管道、I/O重定向以及多命令执行功能的Shell。 首先,我们要理解Shell命令解释器的核心职责。它的主要工作是接收用户的命令输入,解析这些命令,并...

    linux中的重定向.pdf

    11. 当需要执行更复杂的I/O重定向时,可以结合使用管道("|")、重定向和文件描述符。例如,"cmd1 | cmd2 | cmd3 &gt; file"这条命令会先将cmd1的输出传递给cmd2,再将cmd2的输出传递给cmd3,并将最终的输出结果重定向...

    linux/unix系统编程手册(下)

    这部分内容可能涉及文件的打开、关闭、读写、追加、定位等操作,以及文件描述符、缓冲区I/O和非阻塞I/O的概念。此外,可能还讨论了符号链接、硬链接、文件权限与所有权等文件系统特性。 四、网络编程 在Linux/Unix...

    57119101_王晨阳_实验21

    实验成功实现了包括基本命令执行、内置命令(如`cd`和`exit`)、I/O重定向和管道等功能的简易Shell。代码进行了简化处理,实际编写时还需要考虑程序的健壮性,例如错误处理和异常情况的管理。 通过这次实验,参与者...

    linux下输入输出重定向.docx

    Linux下的输入输出重定向 Linux下的输入输出重定向是指修改原来默认的一些东西,对原来系统命令的默认执行方式进行改变。...同时,我们可以使用 tee 命令来将 stdout 复制一份到档案去,不影响原本的 I/O。

    UNIX Linux实验教程 2实验二 UNIXLinux环境程序设计基础.doc

    例如,他们可能需要创建一个脚本来读取文件,处理数据并把结果输出到新的文件,或者使用I/O重定向和管道来实现复杂的任务自动化。同时,他们还将接触到gcc/gdb,这是在Linux环境下进行C/C++编程的必备工具,用于编译...

    Linux系统程序设计_文件IO例程

    在Linux系统程序设计中,文件I/O(Input/Output)是至关重要的部分,它涉及到程序与外部设备交互,包括磁盘、网络、键盘、显示器等。这篇文章“Linux系统程序设计_文件IO例程”深入探讨了如何在Linux环境下进行文件...

    RDAC安装配置手册(Linux).doc

    RDAC 驱动程序负责将 I/O 请求路由到正确的控制器上,多路径 I/O 处理机制负责处理 I/O 请求的路由和重定向,逻辑驱动器是存储设备上的逻辑单元。 3. RDAC 安装配置步骤 RDAC 的安装配置步骤主要包括以下几个步骤...

    一个简单的shell

    4. **处理I/O重定向和管道**: 在执行命令之前,检查是否有I/O重定向或管道操作,如果有,则设置相应的文件描述符。 5. **等待命令结束**: 父进程通过`wait()`或`waitpid()`等待子进程结束,然后处理返回的状态码。 ...

    shell浅谈之八IO重定向.docx

    总结,I/O 重定向是 Linux shell 中的重要特性,它提供了灵活的数据流控制,允许用户和程序以非交互方式处理输入和输出。通过管道、重定向操作符以及 tee 命令,我们可以构建复杂的命令链,实现数据处理和自动化任务...

    UNIX实验汇总.doc

    UNIX实验主要涵盖用户登录与退出、I/O重定向、文件操作、权限管理、用户管理等方面,旨在让学习者熟悉UNIX/Linux操作系统的基本操作和管理。 实验1主要涉及以下知识点: 1. **用户登录与退出**:了解如何通过shell...

Global site tag (gtag.js) - Google Analytics