一、啥是重定向??
从字面上理解,输入输出重定向 (重新定义方向) 就是「改变输入与输出的方向」的意思。
总结:
输入方向就是我们人类从键盘输入指令流向电脑程序,如果我们改变它流向的方向,就叫输入重定向。
输出方向就是我们给电脑程序指令,电脑程序接受然后输出给电脑屏幕或者终端上让我们看到结果,如果我们改变他流出的方向,不让我们在终端上看到,输出到文件中,就叫流出重定向。
二、文件描述符
标准输入文件的描述符 代表为 0
标准输出文件的描述符 代表为 1
标准错误输出文件的描述符为 2
三、Linux shell 输出重定向
command表示输出的结果
file代表一个目标文件
输出结果和描述符之间要有空格
符号和目标文件之间有没有空格都可以 最好不要带空格
1、标准输出重定向
符号:command >file 作用:以覆盖的方式,把 command 的正确输出结果输出到 file 文件中。
符号:command >>file 作用:以追加的方式,把 command 的正确输出结果输出到 file 文件中。
2、标准错误输出重定向
符号:command 2>file 作用:以覆盖的方式,把 command 的错误信息输出到 file 文件中。
符号:command 2>>file 作用:以追加的方式,把 command 的错误信息输出到 file 文件中。
3、正确输出和错误信息同时保存
符号:command >file 2>&1 作用:以覆盖的方式,把正确输出和错误信息同时保存到同一个文件(file)中。
符号:command >>file 2>&1 作用:以追加的方式,把正确输出和错误信息同时保存到同一个文件(file)中。
4、正确输出和错误信息分别保存
符号:command >file1 2>file2 作用:以覆盖的方式,把正确的输出结果输出到 file1 文件中,把错误信息输出到 file2 文件中。
符号:command >>file1 2>>file2 作用:以追加的方式,把正确的输出结果输出到 file1 文件中,把错误信息输出到 file2 文件中。
表格形式展示:
1、在输出重定向中,>代表的是覆盖,>>代表的是追加。 2、输出重定向的完整写法是 描述符>file 或者 描述符>>file 当描述符为1时,可以省略,当描述符为2时 不能省略!!!而且描述符和符合之间不能有空格 案例: [root@lixian ~]# touch 1 2 #有两个文件 [root@lixian ~]# echo "123445" 1 >1 #有空格输出到1 [root@lixian ~]# echo "123445" 1>2 #无空格输出到2 [root@lixian ~]# cat 1 2 #查看 123445 1 #系统默认把空格前面的1 当做内容 123445
实例操作(一看就懂,一听就会)干货:
标准输出重定向 案例
[root@lixian ~]# ls -l #预览输出结果 total 8 -rw-r--r--. 1 root root 9 Nov 30 22:04 1 -rw-r--r--. 1 root root 7 Nov 30 22:04 2 -rw-r--r--. 1 root root 0 Nov 30 22:12 demo.txt [root@lixian ~]# cat demo.txt #查看demo.txt有没有内容 [root@lixian ~]# ls -l >demo.txt #执行重定向 [root@lixian ~]# cat demo.txt #查看结果 total 8 -rw-r--r--. 1 root root 9 Nov 30 22:04 1 -rw-r--r--. 1 root root 7 Nov 30 22:04 2 -rw-r--r--. 1 root root 0 Nov 30 22:13 demo.txt
错误输出重定向 案例
[root@lixian ~]# ls a.txt #预览错误信息 ls: cannot access a.txt: No such file or directory [root@lixian ~]# cat err.txt #查看err.txt有没有内容 [root@lixian ~]# ls a.txt 2>err.txt #执行重定向 [root@lixian ~]# cat err.txt #查看结果 ls: cannot access a.txt: No such file or directory
把正确和错误信息都保存一个文件里 案例
[root@lixian ~]# ls -l >he.txt 2>&1 #重定向对错覆盖方式一起保存 [root@lixian ~]# ls abc >>he.txt 2>&1 #重定向对错追加方式一起保存 [root@lixian ~]# cat he.txt #查看结果 total 20 -rw-r--r--. 1 root root 9 Nov 30 22:04 1 -rw-r--r--. 1 root root 7 Nov 30 22:04 2 -rw-r--r--. 1 root root 283 Nov 30 22:26 a.txt -rw-r--r--. 1 root root 1 Nov 30 22:13 demo.txt -rw-r--r--. 1 root root 104 Nov 30 22:26 err.txt -rw-r--r--. 1 root root 0 Nov 30 22:27 he.txt ls: cannot access abc: No such file or directory
上面的操作太乱的,啥东西都往一个文件内存,乱七八糟的,太不利于我们以后的查找了,难以分辨!!
所以重点来了,我们会写成这样的形式
把正确的结果和报错的结果分开保存 案例
[root@lixian ~]# ls -l >>out.txt 2>>err.txt #执行结果的不同 分别输出到不同的文件 [root@lixian ~]# cat out.txt total 0 -rw-r--r--. 1 root root 0 Nov 30 22:37 err.txt -rw-r--r--. 1 root root 0 Nov 30 22:37 out.txt [root@lixian ~]# cat err.txt [root@lixian ~]# 解释:>>out.txt 是正确输出重定向的文件 2>>err.txt是错误输出重定向的文件 如果ls -l 这个命令执行成功,成功结果就会输出到out.txt文件里面 如果ls -l 这个命令执行错误,错误结果就会输出到err.txt文件里面
这样一来,正确的输出结果会写入到 out.txt,而错误的信息则会写入到 err.txt。
垃圾回收站:
如果你既不想把命令的输出结果保存到文件,也不想把命令的输出结果显示到屏幕上,干扰命令的执行,那么可以把命令的所有结果重定向到 /dev/null 文件中。
[root@lixian ~]# ls -l &>/dev/null [root@lixian ~]#