RHEL输入输出重定向

简介: 标准输入重定向、标准输出重定向、错误输出重定向

输入重定向是指把文件导入到命令中,而输出重定向则是指把原本要输出到屏幕 的数据信息写入到指定文件中。

输出重定向分为了标准输出重定向和错误输出重定向两种不同的技术, 以及覆盖写入与追加写入两种模式。

➢ 标准输入重定向(STDIN,文件描述符为0):默认从键盘输入,也可从其他文件或 命令中输入。

➢ 标准输出重定向(STDOUT,文件描述符为1):默认输出到屏幕。

➢ 错误输出重定向(STDERR,文件描述符为2):默认输出到屏幕。

比如分别查看两个文件的属性信息,我们先创建出第一个文件,而第二个文件是不存在 的。所以,虽然针对这两个文件的操作都分别会在屏幕上输出一些信息,但这两个操作的差 异其实很大:

[root@rhel-8 ~]# touch test[root@rhel-8 ~]# ls -l test-rw-r--r--. 1 root root 0 Nov 1418:42 test
[root@rhel-8 ~]# ls -l xxxxxxls: cannot access 'xxxxxx': No such file or directory

在上述命令中,名为 test 的文件是真实存在的,输出信息是该文件的一些相关权限、所 有者、所属组、文件大小及修改时间等信息,这也是该命令的标准输出信息。而名为 xxxxxx 的第 二个文件是不存在的,因此在执行完 ls 命令之后显示的报错提示信息也是该命令的错误输出信息。

那么,要想把原本输出到屏幕上的数据转而写入到文件当中,就要区别对待这两种输出信息。

image.png

image.png

对于重定向中的标准输出模式,可以省略文件描述符 1 不写,而错误输出模式的文件描 述符 2 是必须要写的。

通过标准输出重定向将 man bash 命令原本要输出到屏 幕的信息写入到文件 readme.txt 中,然后显示 readme.txt 文件中的内容。具体命令如下:

[root@rhel-8 ~]# man bash > readme.txt[root@rhel-8 ~]# cat readme.txtBASH(1)                                        General Commands Manual                                        BASH(1)
NAME
bash- GNU Bourne-Again SHell

通过覆盖写入模式向 readme.txt 文件写入多行数据(该文件中已包含 上一个实验的 man 命令信息)。需要注意的是,在通过覆盖写入模式向文件中写入数据时,每 一次都会覆盖掉上一次写入的内容,所以最终文件中只有最后一次的写入结果:

[root@rhel-8 ~]# echo "Hello World" > readme.txt[root@rhel-8 ~]# echo "Hello World" > readme.txt[root@rhel-8 ~]# cat readme.txtHello World

通过追加写入模式向 readme.txt 文件写入一次数据,然后在执行 cat 命令之后,可以看 到如下所示的文件内容:

[root@rhel-8 ~]# echo "Hello RHEL" >> readme.txt[root@rhel-8 ~]# cat readme.txtHello World
Hello RHEL

虽然都是输出重定向技术,但是命令的标准输出和错误输出还是有区别的。例如查看当 前目录中某个文件的信息,这里以 test 文件为例。由于这个文件是真实存在的,因此 使用标准输出即可将原本要输出到屏幕的信息写入到文件中,而错误的输出重定向则依然把 信息输出到了屏幕上。

[root@rhel-8 ~]# ls -l test > /root/readme.txt[root@rhel-8 ~]# ls -l test 2> /root/readme.txt-rw-r--r--. 1 root root 0 Nov 1418:42 test

如果想把命令的报错信息写入到文件,该怎么操作呢?当用户在执行一个自动化的 Shell 脚本时,这个操作会特别有用,而且特别实用,因为它可以把整个脚本执行过程中的报错信 息都记录到文件中,便于安装后的排错工作。

接下来以一个不存在的文件进行实验演示:

[root@rhel-8 ~]# ls -l xxxxxx > /root/test.txtls: cannot access 'xxxxxx': No such file or directory
[root@rhel-8 ~]# ls -l xxxxxx 2>  /root/test.txt[root@rhel-8 ~]# cat test.txtls: cannot access 'xxxxxx': No such file or directory

还有一种常见情况,就是我们想不区分标准输出和错误输出,只要命令有输出信息则全 部追加写入到文件中。这就要用到&>>操作符了:

[root@rhel-8 ~]# ls -l test &>> readme.txt[root@rhel-8 ~]# ls -l xxxxxx &>> readme.txt[root@rhel-8 ~]# cat readme.txt-rw-r--r--. 1 root root 0 Nov 1418:42 test
ls: cannot access 'xxxxxx': No such file or directory

输入重定向相对来说有些冷门,在工作中遇到的概率会小一点。输入重定向的作用是把 文件直接导入到命令中。接下来使用输入重定向把 readme.txt 文件导入给 wc -l 命令,统计一 下文件中的内容行数:

[root@rhel-8 ~]# wc -l < readme.txt2

这次的输出结果没有了文件名称。

[root@rhel-8 ~]# wc -l /etc/passwd46 /etc/passwd

因为此前使用的“wc -l /etc/passwd”是一种非常标准的“命令+参数+对象”的执行 格式,而这次的“wc -l < readme.txt”则是将 readme.txt 文件中的内容通过操作符导入到命令 中,没有被当作命令对象进行执行,因此 wc 命令只能读到信息流数据,而没有文件名称的信息。

相关文章
|
3月前
|
存储 Unix Linux
Linux I/O 重定向与管道
【8月更文挑战第17天】重定向在Linux中改变命令I/O流向,默认有&quot;&gt;&quot;覆盖输出至文件及&quot;&gt;&gt;&quot;追加输出至文件末尾,便于保存结果;使用&quot;&lt;&quot;从文件读取输入而非键盘,高效处理数据。文件描述符如0(stdin)、1(stdout)、2(stderr)标识I/O资源,支持读写操作。管道以&quot;|&quot;连接命令,使前一命令输出成为后一命令输入,如排序用户或找出CPU占用最高的进程,构建复杂数据处理流程。
48 9
|
6月前
|
Linux C语言
Linux 指令|echo|输出重定向|追加重定向|输入重定向|cat
Linux 指令|echo|输出重定向|追加重定向|输入重定向|cat
|
6月前
|
存储 Shell Linux
Linux--文件(2)-重定向和文件缓冲
Linux--文件(2)-重定向和文件缓冲
|
Linux
Linux重定向><命令的使用
重定向分为输出重定向和输入重定向。
96 0
|
Linux
Linux 重定向: >和>>的区别,2>&1解释:
Linux 重定向: >和>>的区别,2>&1解释:
413 0
Linux 重定向: >和>>的区别,2>&1解释:
|
存储 Linux 文件存储
6.6 Linux重定向(输入输出重定向)
我们知道,Linux 中标准的输入设备默认指的是键盘,标准的输出设备默认指的是显示器。而本节所要介绍的输入、输出重定向,完全可以从字面意思去理解,也就是:
315 0
6.6 Linux重定向(输入输出重定向)
|
Linux Shell
Linux重定向用法详解
Linux重定向用法详解
143 0
|
Linux
Linux 重定向与管道符
Linux 重定向与管道符
128 0
|
运维 大数据 Linux
【精通Linux系列】Linux中的输入输出与错误重定向详解
【精通Linux系列】Linux中的输入输出与错误重定向详解
348 0
|
Shell Linux C语言
Linux 重定向输入输出(转载)
linux文件描述符:可以理解为linux跟踪打开文件,而分配的一个数字,这个数字有点类似c语言操作文件时候的句柄,通过句柄就可以实现文件的读写操作。 用户可以自定义文件描述符范围是:3-num,这个最大数字,跟用户的:ulimit –n 定义数字有关系,不能超过最大值。
1158 0