标准流/管道符
标准流/管道符
参考:
https://www.runoob.com/linux/linux-shell-io-redirections.html
pipeline(管道符),将前一个命令的stdout做为后一个命令的stdin,采用FIFO
概述
在POSIX系统中,每个进程都内置了三个“standard stream”(标准流),stdin(标准输入流),stdout(标准输出流),stderr(标准错误输出流)
当你在程序中打开某个文件,会得到一个“文件描述符”(洋文叫“file descriptor”,简称 fd)。fd 本身是个整数,程序员可以通过 fd 对该文件进行读写。
而进程的三个【标准流】,就相当于是三个特殊的 fd。当进程启动时,操作系统就已经把这三个 fd 准备好了。
由于这三个玩意儿是预先备好滴,所以它们的数值分别是:0、1、2(参见上图中 # 后面的数字)。
标准流的重定向
-
输入流重定向
把某个文件重定向为stdin;此时进程通过stdin读取的是该文件内容。使用
<
来表示cat < 文件名
注意echo 使用的并不是输入流,而是命令行参数,cat命令就是输入流,类似的还有wc
-
输出流重定向
把stdout重定向到某个文件,
>
覆盖文件内容,>>
追加文件内容echo hello > redirect echo hello >> redirect
2>&1 表示将stderr(2)合并到stdout(1)
echo hello > redirect 2>&1 echo hello >> redirect 2>&1
cat
命令还可以起到类似“文件复制”效果
cat < src > dest
某些同学可能会问了:既然能这么玩,为啥还需要用
cp
命令进行文件复制捏?
原因在于:cat
的玩法,只保证内容一样,其它的不管;而cp
除了复制文件内容,还会确保“目标文件”与“源文件”具有相同的属性(比如 mode)。