一、什么是重定向?
定义:将原本要输出到屏幕的数据信息,重新定向到某个指定的文件中。(就是执行命令时把输出到屏幕的数据信息放到指定的文件夹中,输出的信息就不会显示到屏幕上)
二、为何要使用重定向?
1.当屏幕输出的信息很重要,而且希望保存重要的信息时;
2.后台执行中的程序,不希望他干扰屏幕正常的输出结果时;
3.系统的例行命令, 例如定时任务的执行结果,希望可以存下来时;
4.一些执行命令,我们已经知道他可能出现错误信息, 想将他直接丢弃时;
5.错误日志与正确日志需要分别输出至不同的文件保存时;
三、常用的符号
- < 输入重定向
- ; cmd1 ; cmd2 无论前者命令成功还是失败,都执行后者命令
- & 将程序放入后台执行 ( screen 将程序放入后台 )
- && cmd1 && cmd2 前者命令执行成功,后者命令才会执行
- || cmd1 || cmd2 前者命令执行失败,后者命令才会执行
3.标准输入\ 标准输出 错误输出
程序运行起来后,变为进程, 会同时打开三个文件 标准输入 标准输出 错误输出. 标准输入
标准输入输出 错误\ 与重定向之间有什么关系?
重定向就是用来改变标准输出 或者标准错误输出的一个指向.
1> 标准输出重定向 (覆盖)
1>> 标准输出重定向 (追加)
2> 标准错误输出重定向 (覆盖)
2>> 标准错误输出重定向 (追加)
&>/dev/null 混合输出 (覆盖)
&>>/tmp/t.log 混合输出 (追加
当运行一个程序时通常会自动打开三个标准文件,分别是标准输入、标准输出、错误输出
文件描述符
- 标准输入 0
- 标准输出 1
- 错误输出 2
-
文件名称 3+
image.png
四、cat 命令的功能是从命令行给出的文件中读取数据,并将这些数据直接送到标准输出。若使用如下命令:
会把文件/etc/passwd的内容输出显示到屏幕上
[root@ZhaoJianHao-1 ~]# cat /etc/passwd
如果用cat查看文件时没有带上文件名,就会把输入的内容输出到屏幕上。
[root@ZhaoJianHao-1 ~]# cat
1
1
23
23
ps 查看系统进程
[root@ZhaoJianHao-1 ~]# ps
PID TTY TIME CMD
20352 pts/1 00:00:00 bash
20370 pts/1 00:00:00 ps
Linux查看标准输入输出设备
[root@ZhaoJianHao-1 ~]# ls -l /dev/std*
lrwxrwxrwx. 1 root root 15 Aug 5 20:11 /dev/stderr -> /proc/self/fd/2
lrwxrwxrwx. 1 root root 15 Aug 5 20:11 /dev/stdin -> /proc/self/fd/0
lrwxrwxrwx. 1 root root 15 Aug 5 20:11 /dev/stdout -> /proc/self/fd/1
五、输出重定向
输出重定向,改变输出内容的位置。输出重定向有如下几种方式,如表格所示
类型 操作符 用途
标准覆盖输出重定向 > 将程序输出的正确结果输出到指定的文件中,会覆盖文件原有的内容
标准追加输出重定向 >> 将程序输出的正确结果以追加的方式输出到指定文件,不会覆盖原有文件
错误覆盖输出重定向 2> 将程序的错误结果输出到执行的文件中,会覆盖文件原有的内容
错误追加输出重定向 2>> 将程序输出的错误结果以追加的方式输出到指定文件,不会覆盖原有文件
标准输入重定向 << 将命令中接收输入的途径由默认的键盘更改为指定的文件或命令
案例1: 标准输出重定向(每次都会覆盖文件)
image.png[root@ZhaoJianHao-1 ~]# ifconfig eth0 > abc
[root@ZhaoJianHao-1 ~]# cat abc
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.0.10 netmask 255.255.255.0 broadcast 10.0.0.255
inet6 fe80::902a:d748:c923:992d prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:45:ce:35 txqueuelen 1000 (Ethernet)
RX packets 107722 bytes 17639774 (16.8 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 58756 bytes 27878833 (26.5 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
案例2: 标准输出重定向(会往文件的尾部在添加内容)
image.png#####标准追加输出重定向, 向配置文件末尾追加内容
[root@ZhaoJianHao-1 ~]# echo "This is network conf" >> if
[root@ZhaoJianHao-1 ~]# cat if
This is network conf
案例3: 错误输出重定向
image.png正确输出以及错误输出重定向至一个文件
[root@ZhaoJianHao-1 ~]# useradd xuliangwei
[root@ZhaoJianHao-1 ~]# su - xuliangwei
将标准输出和标准错误输出重定向到不同文件
[root@ZhaoJianHao-1 ~]$ find /etc -name "*.conf" 1>a 2>b
案例4: 正确和错误都输入到相同位置
image.png将标准输出和标准错误输出重定向到同一个文件, 混合输出
[root@ZhaoJianHao-1 ~]$ find /etc -name "*.conf" &>ab
合并两个文件内容至一个文件
[root@ZhaoJianHao-1 ~]$ cat a b > c
案例5: 正确和错误都输入到相同位置
image.png#重定向到相同的位置
[root@ZhaoJianHao-1 ~]# ls /root /error >ab 2>&1
案例6: 重定向到空设备/dev/null
image.png#将产生的任何数据放入黑洞设备,则视为丢弃。
[root@ZhaoJianHao-1 ~]# ls /root /error >ab 2>/dev/null
[root@ZhaoJianHao-1 ~]# ls /root /error >ab &>/dev/null
六、进程管道技术 |
将左边命令的标准输出 ---传递---> 右边命令的标准输入 ---> 标准输出| 错误输出 tee 将左边命令的标准输出保存至文件或打印至终端, 但不影 响管道数据的一个传递
xargs 用于将不支持管道的命令 支持管道 左边命令的输出作 为参数进行传递
网友评论