加入收藏 | 设为首页 | 会员中心 | 我要投稿 汽车网 (https://www.0577qiche.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

Shell 重定向是什么

发布时间:2023-06-08 14:08:41 所属栏目:教程 来源:
导读:我们知道了系统默认的输入为键盘,标准输出与错误输出为显示器,当我们在编写 Shell 的时候有一些非交互的操作,不能通过键盘输入,或显示的结果我们不希望在显示器显示的时候,此场景就需要利用输入输出重定向了。
我们知道了系统默认的输入为键盘,标准输出与错误输出为显示器,当我们在编写 Shell 的时候有一些非交互的操作,不能通过键盘输入,或显示的结果我们不希望在显示器显示的时候,此场景就需要利用输入输出重定向了。

Shell 输入输出重定向

Linux Shell 重定向分为两种,顾名思义,输入重定向即改变标准的默认系统键盘输入,输出重定向即改变默认的系统显示器输出。

文件描述符

在 Linux 中一切皆文件,包括标准输入设备(键盘)和标准输出设备(显示器)在内的所有计算机硬件都是文件。为了表示和区分已经打开的文件,Linux 会给每个文件分配一个 ID,这个 ID 就是一个整数,被称为文件描述符(File Descriptor)。

如下是文件描述符的类型及其对应的设备。

文件描述符    文件名    类型    硬件
0    stdin    标准输入文件    键盘
1    stdout    标准输出文件    显示器
2    stderr    标准错误输出文件    显示器
Linux 程序在你执行任何形式的 I/O 操作时,其实都是在对一个文件描述符进行读取或写入,一个文件描述符只是一个打开的文件相关联的整数,在其背后就是硬盘上一个普通文件或管道,键盘,显示器,或是一个网络链接等。

输入重定向

输入方向为数据从那流入程序,输入重定向即改变默认的系统键盘输入,改变其从其他对方流入程序。

输出重定向

输出方向为数据输出到那个终端,输出重定向即改变默认的显示器输出,改变其从其他设备输出。

一般输出重定向的应用场景多为将标准输出或标准错误输出分别保持到不同的文件,或者是我们不关心输出等情况等。

标准输出重定向

覆盖方式

语法:command >file

标准输入重定向覆盖方式,直接将 command 命令的标准输出,以覆盖方式输出到文件中,例如:

[root@xuel-terraform-cvm-0 ~]# cat file1.txthello shell
hello gotest file[root@xuel-terraform-cvm-0 ~]# echo test > file1.txt[root@xuel-terraform-cvm-0 ~]# cat file1.txttest
可以看到将文件的原始内容已经覆盖掉了,也可以用来清空文件内容,例如:

[root@xuel-terraform-cvm-0 ~]# cat file1.txttest[root@xuel-terraform-cvm-0 ~]# >file1.txt[root@xuel-terraform-cvm-0 ~]# cat file1.txt
追加方式

语法:command >>file

将标准的输出追加到文件中,注意追加为不覆盖原始文件内容,例如:

[root@xuel-terraform-cvm-0 ~]# cat file1.txttest[root@xuel-terraform-cvm-0 ~]# echo test222 >> file1.txt[root@xuel-terraform-cvm-0 ~]# cat file1.txttesttest222

错误输出重定向

覆盖方式:

语法:command 2>file

与标准输出重定向一样,只是绑定标准错误输出文件描述符 2,例如:

[root@xuel-terraform-cvm-0 ~]# ls /nonels: 无法访问/none: 没有那个文件或目录[root@xuel-terraform-cvm-0 ~]# ls /none 2> error.txt[root@xuel-terraform-cvm-0 ~]# cat error.txtls: 无法访问/none: 没有那个文件或目录
我们可以使用 ls 查看一个不存在的文件或目录,会输出标准错误输出,将其重定向到 error.txt 中。

追加方式:

语法:command 2>>file

与标准输出追加方式一样,只是绑定标准错误输出文件描述符,例如:

[root@xuel-terraform-cvm-0 ~]# abc 2>>error.txt[root@xuel-terraform-cvm-0 ~]# cat error.txtls: 无法访问/none: 没有那个文件或目录
-bash: abc: command not found
我们使用命令 abc,Shell 提示我们没有这个命令,在此就将标准错误输出以追加形式重定向到文件中。

全部重定向

在我们使用输出重定向分为标准输出与错误输出,当我们希望将两者都重定向到某文件使用可以使用 &>,例如:

[root@xuel-terraform-cvm-0 ~]# cat totle.txt
ls: 无法访问/none: 没有那个文件或目录
/tmp:
cpulimit-0.2
cvm_init.log
net_affinity.log
nohup.out
nv_driver_install.log
nv_gpu_conf.log
setRps.log
v0.2.tar.gz
virtio_blk_affinity.log
我们可以看出无论标准输出或错误输出都重定向到了 totle.txt 文件中。

(编辑:汽车网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章