1、重定向
什么是重定向?
将一些信息重定向到一个指定的地方,或者从一个重定向的位置读取内容。
重定向又分为输入重定向,输出重定向。
输入方向就是我们人类从键盘输入指令流向电脑程序,如果我们改变它流向的方向,就叫输入重定向。
输出方向就是我们给电脑程序指令,电脑程序接受到了然后输出给电脑屏幕或者终端上让我们看到结果,如果我们改变他流出的方向,不让我们看到,输出到文件中,就叫输出重定向。
从字面上理解,输入输出重定向 (重新定义方向) 就是「改变输入与输出的方向」的意思。
2、输出重定向
作用:将输出的结果重定向到一个指定的位置中,(不管正确的信息或者错误的信息)
注意:当描述符为1时,可以省略,当描述符为2时 不能省略!!!而且描述符和符合之间不能有空格
实例:
①、标准输出重定向
[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 ~]# echo 'test' >>file1.txt [root@lixian ~]# cat file1.txt hello test
③、标准错误输出重定向
[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 dwdawidji 2>>a.txt [root@lixian ~]# cat a.txt ls: cannot access dwdawidji: No such file or directory [root@lixian ~]# ls dsefg 2>>a.txt [root@lixian ~]# cat a.txt ls: cannot access dwdawidji: No such file or directory ls: cannot access dsefg: 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 &>he.txt #重定向对错覆盖方式一起保存 [root@lixian ~]# ls abc &>>he.txt #重定向对错追加方式一起保存 [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
⑥、将输出的信息定向到空洞
如果你既不想把命令的输出结果保存到文件,也不想把命令的输出结果显示到屏幕上,干扰命令的执行,那么可以把命令的所有结果重定向到 /dev/null 文件中。
[root@lixian ~]# ls -l &>/dev/null [root@lixian ~]#
⑦、将正确的和错误的输出信息重定向不同的文件中
[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 ~]#
⑦、将正确的和错误的输出信息重定向不同的文件中
[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文件里面
⑧、多条命令的输出结果保存到文件
多条命令直接用逗号分隔
[root@lixian ~]# (ls /root;ls /mnt) >>file10.txt [root@lixian ~]# cat file10.txt file10.txt file1.txt file2.txt file3.txt data data.log test.log
⑨、脚本使用重定向(用的比较多)
#!/bin/bash . /etc/init.d/functions #使输出正确错误的结果有个好看的标志 cat < /dev/null if [ "$?" -ne 0 ];then action "对不起,请你输入整数!!!" /bin/false exit 1 elif [ "$NUM" -eq 0 ];then action "对不起,请你输入比0大的数字!!!" /bin/false exit 1 fi [ "$NUM" = "1" ] && { ping -c2 www.lixian.fun &>/root/null #使输出的结果不打印在屏幕上 if [ $? -eq 0 ];then action "网络是通畅的....." /bin/true else action "网络是不通的....." /bin/false fi } [ "$NUM" = "2" ] && { action "暂无婚姻,你不配!" /bin/false } [ "$NUM" = "3" ] && { action "革命尚未成功,少年仍需努力" /bin/false }
3、输入重定向
什么是输入重定向
我们通常标准输入是通过键盘来输入,向程序发出指令,
我们改变它的方向,不再使用键盘作为命令输入的来源,而是使用文件作为命令的输入。
实例:
①、标准输入重定向
它是将文件指定为输入设备,并将内容显示到控制台,并不是用键盘设备输入
[root@lixian ~]#ls -l
②、数据库中导入库或者表,恢复数据
[root@lixian ~]# mysql -uroot -p123 < database.sql
③、生成一个大文件
[root@lixian ~]# dd if=/dev/zero of=/root/test.log bs=10M count=5 5+0 records in 5+0 records out 52428800 bytes (52 MB) copied, 0.285044 s, 184 MB/s [root@lixian ~]# dd </dev/zero >/root/test.log bs=10M count=5 5+0 records in 5+0 records out 52428800 bytes (52 MB) copied, 0.285044 s, 184 MB/s
dd #生成一个大文件
if或者< #源头数据文件 of或者> #输出的地方
bs #一次输出多大
count #输出的次数
④、标准输入限定标识符重定向
[root@lixian ~]#ls -l < dawkdw > daw434645 > fje3243lrg > end total 4 -rw-r--r--. 1 root root 0 Dec 1 14:02 a.txt -rw-r--r--. 1 root root 0 Dec 1 14:01 err.txt -rw-r--r--. 1 root root 147 Dec 1 14:02 out.txt
⑤、脚本打印菜单
cat <
4、管道符
作用:将左侧的命令的输出结果作为右侧命令的标准输入进行处理,不会把错误的信息传递过去
mkpasswd -l 18 |tee passwd.txt |passwd --stdin test01
tee:
作用:将输出结果输出到屏幕的同时,也会输出到一个指定的文件中
-a: 追加
xargs:
#将一些不支持管道命令支持管道,默认管道是将左侧的输出结果标准输入到右侧的命令,主要是针对数据操作,xargs可以让这些数据交给右侧命令当做是针对文件操作。
[root@lixian ~]# find ./ -name "*.txt" |xargs ls -l
将当前目录下的所有.txt类型的文件复制到/opt目录
[root@lixian ~]# find ./ -name "*.txt" |xargs cp -t /opt
[root@lixian ~]# cp $(find ./ -name "*.txt") /opt/