Linux —— 重定向与管道
系统的输入输出包括:默认输入设备:标准输入,STDIN,描述符为0默认输出设备:标准输出,STDOUT,描述符为1 标准错误输出,STDERR,描述符为2 标准输入,标准输出,标准错误输出是三个不同的数据流 系统默认标准输入是从键盘读取,标准输出和标准错误输出是输出到显示器
Linux中I/O重定向: 输出重定向, >:覆盖输出,作为输出目标的文件原有内容会被覆盖 示例: root@ubuntu:/home/linlin/linlin/test# echo 'The dog is so cute' The dog is so cute root@ubuntu:/home/linlin/linlin/test# echo 'The dog is so cute' > file root@ubuntu:/home/linlin/linlin/test# cat file The dog is so cute 覆盖 root@ubuntu:/home/linlin/linlin/test# echo 'The cat is so smart' > file root@ubuntu:/home/linlin/linlin/test# cat file The cat is so smart
>>:追加输出,保留作为输出目标的原有文件 示例: root@ubuntu:/home/linlin/linlin/test# echo 'The dog is so cute' >> file root@ubuntu:/home/linlin/linlin/test# cat file The cat is so smart The dog is so cute 在使用输出重定向时,可能由于某个输出目标文件内容很重要,这时就需要使用追加 输出,但在实际使用过程中,很容易错把>当做>>使用,为了防止这个错误,我们可以 使用set命令 set:shell内置功能开关 set -C:禁止对已存在文件使用覆盖重定向 强制覆盖输出使用 >| set +C:允许对已存在内容重定向 root@ubuntu:/home/linlin/linlin/test# set -C root@ubuntu:/home/linlin/linlin/test# echo 'The cat is so smart' > file bash: file: cannot overwrite existing file tee:从标准输入读取数据,输出到标准输出,并保存至文件 2>:标准错误输出重定向 2>>:标准错误追加重定向
&>:重定向标准输出和标准错误输出到同一个文件 注意 &>> 不支持 <:输入重定向 <<结束符:表示在此处生成文档,当输入为结束符时表示输入结束 here document具体解释https://linux.die.net/abs-guide/here-docs.html 管道:把一个命令的输出作为另一个命令的输入体现了Linux的基本思想之一:组合小命令完成复杂任务使用格式: 命令1 | 命令2 | ...... 例如,取出某文件的倒数第3行 root@ubuntu:/home/linlin/linlin/test# cat file 10086 213 3134 21343452 2341 root@ubuntu:/home/linlin/linlin/test# tail -3 file | head -1 3134
构造管道时,应该试着让每个阶段的数据量变得更少,换句话说,如果你有两个要完成的步骤与先后次序无关,你可以把让数据变少的那一个步骤放在管道的前面,这么做可以提高脚本的整体性能,应为此时系统只需要在两个程序中移动少的数据量,每个程序要做的是也比较少。
转载于:https://www.cnblogs.com/lnlin/p/6958761.html