Linux重定向与管道(Pipe)
重定向
- stdout:标准输出流,文件描述符为1
- stderr:标准错误流,文件描述符为2
- stdin:标准输入流,文件描述符0
重定向输出
- 在输出重定向的描述符中,command>file表示覆盖,command>>file表示追加,如下:
1
2
3
4
5
6
7hyd@DESKTOP-IKHMVJG:~$ echo 123 > demo && cat demo
123
hyd@DESKTOP-IKHMVJG:~$ echo 456 > demo && cat demo #覆盖原文件的123
456
hyd@DESKTOP-IKHMVJG:~$ echo 456 >> demo && cat demo #在456后追加456
456
456 - 如n>file,n>>file,可使用文件描述符来重定向,同上:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17hyd@DESKTOP-IKHMVJG:~$ touch xaa xab yaa yab
hyd@DESKTOP-IKHMVJG:~$ ls x* z*
ls: cannot access 'z*': No such file or directory
xaa xab
hyd@DESKTOP-IKHMVJG:~$ ls x* z* >stdout.txt 2>stderr.txt
hyd@DESKTOP-IKHMVJG:~$ ls w* y*
ls: cannot access 'w*': No such file or directory
yaa yab
hyd@DESKTOP-IKHMVJG:~$ ls w* y* stdout.txt 2>>stderr.txt
hyd@DESKTOP-IKHMVJG:~$ cat stdout.txt
xaa
xab
yaa
yab
hyd@DESKTOP-IKHMVJG:~$ cat stderr.txt
ls: cannot access 'z*': No such file or directory
ls: cannot access 'w*': No such file or directory - 使用n>&m将输出文件m与n合并,如下含义为:将stderr重定向到stdout,再将stdout重定向到output.txt。
1
command 2>&1 >output.txt
重定向输入
重定向输入的使用方式与输出类似,使用<提示符:1
2
3
4
5hyd@DESKTOP-IKHMVJG:~$ echo "apple microsoft google" > demo
hyd@DESKTOP-IKHMVJG:~$ tr ' ' '\n'<demo
apple
microsoft
google
管道
在类Unix系统中,将一系列标准输入输出连接起来的进程。使用“|”连接两个命令,shell会将两个进程用管道相连。1
2
3
4
5hydIKHMVJG:~$ ls -l /etc/ > etc.txt -
hydIKHMVJG:~$ wc -l etc.txt -
180 etc.txt
hydIKHMVJG:~$ ls -l /etc/ | wc -l -
180
管道的本质仍然是文件,上一个进程写入,下一个进程读取,遵循“一切皆文件”的设计原则。该管道文件不占用磁盘空间,使用内存空间。
参考连接
本文标题:Linux重定向与管道(Pipe)
文章作者:Raincorn
发布时间:2020-07-16
最后更新:2020-07-28
原始链接:https://blog.raincorn.top/2020/07/16/Linux_Pipe/
版权声明:本文采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可