我正在尝试了解 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 的任何行为。pwd
echo
pwd
echo
我的理解正确吗?
答案1
因为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
仅接受设置了执行位的常规文件。