我想实现我自己的ps命令版本,我试图理解shell命令是如何在Linux中实现的。它是命令行管理程序应用程序的一部分还是模块的一部分?
在我的理解中,当我在shell提示符中键入ps时:ps的实际实现只能驻留在内核中,shell只是调用内核api/二进制文件。
现在,如果我想添加一个新命令(比如myps):我应该在shell应用程序中修改什么?&我应该在内核模块中修改什么?
shell 应用程序如何知道各个模块(内核、网络、fs 等)中支持的命令列表?
最后,如果(例如)网络模块仅针对ipv4配置和构建,那么在shell中支持ipv6命令就没有意义了?这是怎么照顾的?
ps
只是一个常规程序(通常位于/bin/ps)。您可以通过运行 which ps
在系统上找到它的位置。
当您运行命令时(假设它不是 shell 本身实现的内置函数、别名等),shell 会搜索 PATH
环境变量中列出的目录。如果您使用 sh 或 bash 作为 shell,您可以通过运行 echo $PATH
来查看它。shell 按照目录在 PATH
中列出的顺序搜索目录,并运行它找到的第一个匹配程序。
如果你想创建一个新版本的ps
,只需编写一个程序并将其放在PATH
上的一个目录中。通常类似于 /usr/local/bin/
(所有用户都可以访问)或~/bin
(在您的主目录中)。或者,您可以向PATH
添加新目录。谢天谢地,无需弄乱内核或 shell 本身。