strace 适用于某些内置命令

strace 适用于某些内置命令

我正在尝试了解 Linux 中的一些内核级概念。我正在检查之间的区别外壳内置命令和其他可执行命令。

这个精彩的答案清楚地说明了差异,并指定了 shell 内置命令的需要。

现在我知道使用type <command-name>,我可以检查它是否是外部命令或 shell 内置命令。

因此,我决定strace对各种命令进行一些操作,以了解更多内部结构。

我学会了这个巧妙的小技巧strace对 shell 内置命令执行 'es 操作。根据上面的答案,我也能够做到strace这一点。cd ..

现在,当我运行type pwd并获得输出时,pwd is a shell builtin.所以,我预计我将无法strace在它上运行,因为它也是一个 shell 内置函数。但是当我strace对它进行操作时,我惊讶地发现strace不需要做任何事情就可以工作stty

我也验证了strace并且echo效果也很好。

所以我的理解是,这在和strace的情况下有效,因为 和 的执行并没有改变 shell 的任何行为。pwdechopwdecho

我的理解正确吗?

答案1

因为pwdecho具有同名的外部命令,/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

请注意,在 中搜索时PATHstrace仅接受设置了执行位的常规文件。

相关内容