我试图理解Linux中的一些内核级概念。我正在检查shell内置命令和其他可执行命令之间的区别。
这个奇妙的答案清楚地说明了不同之处,并指定了对shell内置命令的需求。
现在我知道了,使用type <command-name>,我可以检查它是外部命令还是shell内置命令。
因此,我决定对各种命令执行一些strace,以了解更多的内部信息。
我学习了这个巧妙的小把戏在shell内置命令上做stracees,根据上面的答案,我也能在cd ..上做strace。
现在,当我运行type pwd并获得输出作为,pwd is a shell builtin。因此,我希望我不能在它上运行strace,因为它也是一个shell内置的。但是,当我在上面做了一个strace时,我惊讶地发现strace不需要做stty就能工作。
我也对strace进行了echo验证,而且效果也很好。
所以我的理解是,strace在pwd和echo的情况下起作用,因为pwd和echo的执行并没有改变shell的任何行为。
我的理解正确吗?
发布于 2014-09-09 01:36:40
因为pwd或echo具有同名的外部命令/bin/pwd或/bin/echo。如果您查看strace输出,您可以看到:
$ strace pwd
execve("/bin/pwd", ["pwd"], [/* 68 vars */]) = 0
brk(0) = 0x241e000
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f80c31b9000请注意,在PATH中搜索时,strace只接受设置了执行位的常规文件。
https://unix.stackexchange.com/questions/154492
复制相似问题