• 欢迎访问显哥博客,本网站纯属学习技术,绝无商业用途,欢迎小伙伴们共同学习!研究技术!QQ:52249909 加我QQ
  • 世界75亿人,这么小的概率,能认识你,是我一生的幸运,不妨加个QQ接触一下:52249909 加我QQ

输入输出重定向的详解及管道符【显哥出品,必为精品】

运维基础 lixian 5年前 (2019-12-19) 1795次浏览 1个评论 扫描二维码
文章目录[隐藏]

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、输入重定向

什么是输入重定向
我们通常标准输入是通过键盘来输入,向程序发出指令,
我们改变它的方向,不再使用键盘作为命令输入的来源,而是使用文件作为命令的输入。

标准输入文件的描述符 代表为 0
输入输出重定向的详解及管道符【显哥出品,必为精品】

实例:

①、标准输入重定向

它是将文件指定为输入设备,并将内容显示到控制台,并不是用键盘设备输入

[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/

本站博主 , 版权所有丨如未注明 , 均为原创
转载请注明原文链接:输入输出重定向的详解及管道符【显哥出品,必为精品】
喜欢 (36)

您必须 登录 才能发表评论!

(1)个小伙伴在吐槽
  1. Thanks for sharing. I read many of your blog posts, cool, your blog is very good.