Linux

Linux标准输入输出与重定向详解|果断收藏

2020-04-15  本文已影响0人  Coding测试

重定向分类

linux中的>、>>、<、<<、2>、2>>、2>&1、&>、&<,总归要面对的

为了更好的理解这个问题,我们需要追本溯源。

简单了解下标准输入输出

执行一个shell命令行时通常会自动打开三个标准文件

(1) 、标准输入文件(stdin)

通常对应终端的键盘。

(2)、标准输出文件(stdout)。

(3)、标准错误输出文件(stderr)。

(2)和(3)这两个文件都对应终端的屏幕。

进程将从标准输入文件中得到输入数据。

将正常输出数据输出到标准输出文件[显示器]。

将错误信息送到标准错误文件中[显示器]。

下图所示:

0、1、2表示一个文件描述符

但是,有时候我们不想把一些进程处理后信息输出到显示器。

这时我们就引出了重定向。

重定向目的

改变标准输入/输出的方向

三种重定向:

1、重定向标准输出,包括两种。

(1)、>(覆盖),等价1>

将命令执行的结果输出到指定文件,非显示器。

(2) 、>>(追加),等价1>>

将命令执行的结果追加到指定文件,非显示器。

2、 重定向标准输入,包括两种。

(1) 、<

将命令中接收的输入途径,由键盘改为指定文件。

(2) 、<<[Here Document]

命令序列传递到一个交互程序或者命令中。

3、 重定向标准错误,包括两种。

(1) 、2>(覆盖)

将命令执行的结果输出到指定文件。

(2) 、2>>(追加)

将命令执行的结果追加到指定文件。

补充说明

1、重定向标准输出和重定向标准错误到同一个文件中

有以下的几种方式

(1) 、2>&1

(2) 、>&

(3) 、&>

2、 两个特殊文件

(1) 、/dev/nul

过滤标准错误信息

意思就是不想显示结果就输出到这里面。

(2) 、/dev/zero

创建指定长度的文件

案例介绍

案例1:

测试> and >>

echo "使用>输出到文件shellFile">shellFile.txt
echo "使用>>追加内容到shellFile">>shellFile.txt
echo "使用>覆盖全部内容">shellFile.txt
//清空文件
>shellFile.txt

案例2:

测试< and <<

测试<

echo -e "123456\n123456">passwd.txt
useradd demo
//从文件中读取密码
passwd demo < passwd.txt

测试<<

//注意EOF结束标志
[root@kingdom stdin_out_err]# passwd demo << EOF
> abcdef
> abcdef
> EOF

案例3:

测试2> and 2>>

//查看当前目录的文件
[root@kingdom stdin_out_err]# ll
total 4
-rw-r--r-- 1 root root 14 Jan 22 16:25 passwd.txt
-rw-r--r-- 1 root root 0 Jan 22 16:19 shellFile.txt
//查看一条没有的文件记录,将错误信息输出到errFile.txt
[root@kingdom stdin_out_err]# ll noFile.txt 2> errFile.txt
[root@kingdom stdin_out_err]# cat errFile.txt
ls: cannot access noFile.txt: No such file or directory
//追加
[root@kingdom stdin_out_err]# ll noFile.txt 2>> errFile.txt
[root@kingdom stdin_out_err]# cat errFile.txt
ls: cannot access noFile.txt: No such file or directory
ls: cannot access noFile.txt: No such file or directory

案例4:

测试重定向标准输出和重定向标准错误到同一个文件中

(1)、>&

[root@kingdom stdin_out_err]# ll
total 8
-rw-r--r-- 1 root root 57 Jan 22 16:36 errFile.txt
-rw-r--r-- 1 root root 14 Jan 22 16:25 passwd.txt
-rw-r--r-- 1 root root 0 Jan 22 16:19 shellFile.txt
//查看两个文件,passwd.txt存在,passwd1.txt不存在
[root@kingdom stdin_out_err]# ll passwd.txt passwd1.txt &> one.txt
//查看输出,一条成功,一条错误
[root@kingdom stdin_out_err]# cat one.txt
ls: cannot access passwd1.txt: No such file or directory
-rw-r--r-- 1 root root 14 Jan 22 16:25 passwd.txt
image

(2)、&>

与上面的案例类似,不做解释

(3) 、2>&1

//ll执行的结果输出到file中
[root@kingdom stdin_out_err]# ll passwd.txt passwd1.txt > file 2>&1
//查看输出
[root@kingdom stdin_out_err]# cat file
ls: cannot access passwd1.txt: No such file or directory
-rw-r--r-- 1 root root 14 Jan 22 16:25 passwd.txt

案例5:

使用/dev/nul文件

有时候我们使用命令,不想将输出的信息显示到界面

这时我们可以使用 &> /dev/nul[常用]

简单测试修改demo 用户密码

//修改用户demo的密码,执行完后会有一些提示信息
[root@kingdom stdin_out_err]# echo "123456" | passwd --stdin demo
Changing password for user demo.
passwd: all authentication tokens updated successfully.
//使用&> /dev/nul不再显示器中显示这些信息
[root@kingdom stdin_out_err]# echo "123456" | passwd --stdin demo &> /dev/nul

上一篇下一篇

猜你喜欢

热点阅读