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

 我来答
懂事且健壮灬小喵e
2017-07-05 · TA获得超过756个赞
知道小有建树答主
回答量:575
采纳率:52%
帮助的人:410万
展开全部
管道是一个先进先出的特殊文件,一方只能依次写进去,另一方也只能依次读出来
理解管道符前先要知道一个进程运行后有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
Storm代理
2023-07-25 广告
StormProxies是一家提供动态住宅IP的服务商。动态住宅IP可以为用户提供更加灵活和稳定的网络连接,同时也可以用于一些特定的网络应用场景,例如网络游戏、视频直播等。使用StormProxies的动态住宅IP服务,用户可以通过更换IP... 点击进入详情页
本回答由Storm代理提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式