当前位置: 技术问答>linux和unix
有关strace ls命令的疑惑
来源: 互联网 发布时间:2015-11-25
本文导语: #strace ls 命令可以查看系统命令ls所调用的系统调用 问题:strace ls |more 结果不能分屏显示 strace ls >result ,result文件内容是命令ls后的内容,相当于ls>result后的结果,而不是我想要的strace ls的结果 ...
#strace ls 命令可以查看系统命令ls所调用的系统调用
问题:strace ls |more 结果不能分屏显示
strace ls >result ,result文件内容是命令ls后的内容,相当于ls>result后的结果,而不是我想要的strace ls的结果
为什么 strace ls 这条命令让管道,文件都失效?
问题:strace ls |more 结果不能分屏显示
strace ls >result ,result文件内容是命令ls后的内容,相当于ls>result后的结果,而不是我想要的strace ls的结果
为什么 strace ls 这条命令让管道,文件都失效?
|
在LINUX上,很重要的一个概念莫过于文件描述符,文件有描述符,设备也有描述符,用描述符来对这些进行操作,0,1,2是默认的输入,输出,错误控制台的描述符,比如你在应用程序中使用getch函数,那么就是从标准输入读取数据,在系统调用层就是读文件一样,用printf函数,就是向标准输出打印语句,在系统调用层就是写文件一样,只不过内核中调用了不同的驱动,举个例子,当你想对GDB进行图形化包装的时候,最简单的办法是什么呢?就是将它加一层包装,你用GDB命令行输入一个命令的时候,实际上就是向GDB的文件描述符0写入一串字符,那么如果我把这个标准输入进行重定向到一个文件的时候,直接向这个文件写入一串数据就相当于向这个GDB的标准输入发出一串数据,这种方式刚好就是包装命令行GDB的最方便的方式,同理,我们可以对任何一种命令行工具进行图形化包装,这是LINUX操作系统所提供的功能,SHELL管道,重定向文件等就是利用了这种特性
|
strace ls 2&>1 /tmp/1.txt
意思是把标准错误输出(stderr)输出到文件。strace的输出不是stdout。同理,more也不管用。
意思是把标准错误输出(stderr)输出到文件。strace的输出不是stdout。同理,more也不管用。