系统linux 下的 管道 和 重定向 这两个概念怎么理解

发布网友 发布时间:2022-04-22 08:56

我来回答

1个回答

热心网友 时间:2022-04-18 17:19

管道是一个先进先出的特殊文件,一方只能依次写进去,另一方也只能依次读出来
理解管道符前先要知道一个进程运行后有3个最基本的文件,标准输入(0表示),标准输出(1表示),错误输出(2表示)
通过命令查看当前 3个基本文件,ls -l  /proc/$$/fd/
shell 中的管道符做了3件事,
1 ,先创建一个管道文件pipe
2,将管道符 前面的一个命令的 标准输出替换为pipe
2,将管道符 后面的一个命令的 标准输入替换为pipe
例子
echo test >/tmp/test
tail -f /tmp/test | cat  &
查看tail命令3个基本文件
ls -l  /proc/`pidof tail`/fd
查看cat命令3个基本文件
ls -l  /proc/`pidof cat`/fd
shell重定向 本身从编程角度理解就是 赋值语句, 0 ,1 ,2 本身理解为3个变量, 
< 和 >表示赋值符号, 变量名只能用数字表示,变量只能在 /proc/进程pid/fd/下查看
< 以只 读 方式打开一个文件,然后把打开的文件赋值给变量 
> 以只 写 方式打开一个文件,然后把打开的文件赋值给变量 
<> 以 读写 方式打开一个文件,然后把打开的文件赋值给变量
exec 1<>/tmp/info 表示读写打开/tmp/info,然后赋值给变量1,执行后其他命令打印的信息都会输入到 /tmp/info 里,默认所有的打印信息(echo aaaaaa)都会获取变量1里面打开的文件,然后把要打印的信息写到这个文件里面
如果写成 exec 1</tmp/info 这种方式,那么打印的信息就没法写进去了,因为是只读方式打开的
ls -l /dev/fd/ 或者 ls -l  /proc/$$/fd/ 查看
cat /proc/cmdline  >/tmp/cmd  通常啥这种写法,赋值符号前面没写具体的变量名,默认就是1 ,也就是    cat /proc/cmdline  1>/tmp/cmd
echo r >/tmp/r && exec  6</tmp/r
lsof |grep /tmp/r  可以查看到6r属性, 文件以 读方式开打,并且复制给变量6

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com