『忘了再学』Shell基础|『忘了再学』Shell基础 — 6、Bash基本功能(输入输出重定向)
目录
- 1、Bash的标准输入输出
- 2、输出重定向
- (1)标准输出重定向
- (2)标准错误输出重定向
- (3)正确输出和错误输出同时保存
- 3、输入重定向
1、Bash的标准输入输出 我们前边一直在说,在Linux系统下,一切皆是文件,键盘和显示器等硬件都是文件,如下图:
文章图片
从上图中可以看出,键盘的设备文件名为
/dev/stdin
,显示器标准正确输入的设备文件名为/dev/stdout
,显示器标准错误输入的设备文件名为/dev/stderr
。这些设备文件名非常不好记忆,Shell允许我们用文件描述符来描述对应的设备,也就是用0、1、2,分别对应键盘、正确显示器,错误显示器。
2、输出重定向 什么叫输出重定向?
命令的输出,是输出给标准输出的,也就是输出到显示器上。而输出重定向就是命令的输出,不输出给标准输出,而是把输出的内容,输出到文件中。
(1)标准输出重定向
命令 > 文件
:以覆盖的方式,把命令的正确输出,输出到指定的文件或设备当中。命令 >> 文件
:以追加的方式,把命令的正确输出,输出到指定的文件或设备当中。
# 覆盖的方式
[root@localhost ~]# pwd > abc
[root@localhost ~]# cat abc
/root# 追加的方式
[root@localhost ~]# pwd >> abc
[root@localhost ~]# cat abc
/root
/root
只要该命令有结果,都能够输进行输出重定向。
(2)标准错误输出重定向
如果执行的命令出现报错,用上边的方式是不能够进行输出内容重定向的,错误信息会直接输出到标准错误输出,如下:
[root@localhost ~]# lsdgagsa >> abc
-bash: lsdgagsa: command not found
错误命令 2>文件
:以覆盖的方式,把命令的错误输出,输出到指定的文件或设备当中。错误命令 2>>文件
:以追加的方式,把命令的错误输出,输出到指定的文件或设备当中。
2
是文件描述符,表示标准错误输出,看上表。示例如下:
[root@localhost ~]# lsdgagsa 2>> abc
[root@localhost ~]# cat abc
/root
/root
-bash: lsdgagsa: command not found
这里需要注意的是,上边的标准正确输出和标准错误输出的重定向有一些小问题,就是我要事先知道这条命令是否报错,才能选择是使用标准正确输出还是使用标准错误输出。(3)正确输出和错误输出同时保存
这样十分不合理,我明知道命令会报错,那我直接写对不就完了。所以我们在工作中写脚本的时候,常用的输出重定向的方式是下面的方式。
方式一
命令 > 文件 2>&1
:以覆盖的方式,把正确输出和错误输出都保存到同一个文件当中。命令 >> 文件 2>&1
:以追加的方式,把正确输出和错误输出都保存到同一个文件当中。(常用)
# 把ls命令的查询结果覆盖存储到abc文件中
[root@localhost ~]# ls > abc2>&1
[root@localhost ~]# cat abc
anaconda-ks.cfg
install.log
install.log.syslog# 把错误信息追加存储到abc文件中
[root@localhost ~]# lsadfgag >> abc2>&1
[root@localhost ~]# cat abc
anaconda-ks.cfg
install.log
install.log.syslog
-bash: lsadfgag: command not found
方式二命令 >> 文件 2>&1
的意思是,把命令的正确输出,输出到文件中,然后把命令的错误输出,输出到正确输出的文件中。
命令 &>文件
:以覆盖的方式,把正确输出和错误输出都保存到同一个文件当中。命令 &>>文件
:以追加的方式,把正确输出和错误输出都保存到同一个文件当中。(常用)
# 把pwd命令的结果覆盖存储到abc文件中
[root@localhost ~]# pwd &> abc
[root@localhost ~]# cat abc
/root# 把错误信息追加存储到abc文件中
[root@localhost ~]# lsadfgag &>> abc
[root@localhost ~]# cat abc
/root
-bash: lsadfgag: command not found
方式三
命令>>文件1 2>>文件2
:把正确的输出追加到文件1中,把错误的输出追加到文件2中。(常用)文章图片
统一保存和分开保存看你习惯。
注意,在正确输出的时候3、输入重定向 输入重定向就是>
或者>>
两边是可以有空格的,如果是错误输出的时候,2和>
或者>>
之间是不能有空格的。
如下,提示语法错误。
[root@localhost ~]# lsgdagasasd >> abc 2 > &1 -bash: syntax error near unexpected token `&’
<
。意思是命令的输入是由标准输入输入的,也就是由键盘输入的。输入重定向就是改变输入方向,不在由键盘作为输入,而拿文件作为命令的输入。(输入重定向比较少见)我们只在之前给源码包打补丁的
patch
命令(文章https://www.cnblogs.com/liuyuelinfighting/p/15574188.html),和RPM源码包文件提取中的cpio
命令用到过。双
<<
号用的就更少了,基本没有实际的应用。文章图片
【『忘了再学』Shell基础|『忘了再学』Shell基础 — 6、Bash基本功能(输入输出重定向)】
uio
就相当于一个分界符,在两个uio
中间的内容,输入给wc
命令,进行统计。推荐阅读
- 『现学现忘』Docker基础|『现学现忘』Docker基础 — 35、实战(自定义CentOS镜像)
- 『忘了再学』Shell基础|『忘了再学』Shell基础 — 5、Bash基本功能(命令的别名和常用快捷键)
- 『现学现忘』Docker基础|『现学现忘』Docker基础 — 34、DockerFile文件详解
- 『现学现忘』Docker基础|『现学现忘』Docker基础 — 33、Docker数据卷容器的说明与共享数据原理
- 『忘了再学』Shell基础|『忘了再学』Shell基础 — 3、echo命令的介绍与使用
- JS三座大山再学习(二、作用域和闭包)
- 『现学现忘』Docker基础|『现学现忘』Docker基础 — 30、Docker中数据卷相关命令
- 『现学现忘』Docker基础|『现学现忘』Docker基础 — 29、Docker容器数据卷的应用
- 『现学现忘』Docker基础|『现学现忘』Docker基础 — 28、Docker容器数据卷介绍
- 『德不孤』Pytest框架|『德不孤』Pytest框架 — 15、Pytest参数化