我目前正在学习操作系统内核以及如何从源代码构建它们(我使用Minix)。
我想弄清楚shell命令(例如ls)在哪里执行。我知道在哪里找到ls.c文件(src/bin/ls),我只是不确定当用户在终端中输入它时它会在哪里被调用。
我的目标是"劫持"ls命令来完成不同的结果,而不编辑命令文件本身ls.c(例如,ls命令现在关闭计算机或回显字符串)。为了做到这一点,我需要知道来自用户的文本在哪里被解析,ls命令在哪里被执行。
我在源代码中环顾四周,我相信它位于进程管理器(src/minix/servers/pm)内部,然而,这是在我迷路之前我得到的。
我知道这是一个非常具体的问题,但希望我能解决它。
提前致谢
您将两个不同的问题混合在一起:ls
二进制文件在哪里,它的源代码在哪里。对于前一个问题,您可以使用which
来确定它的绝对路径。例如,在我的FreeBSD机器上,which ls
输出/bin/ls
。然而,ls
是一个编译的二进制文件,所以它不能被"劫持"。无需更改源代码并再次编译即可轻松实现,这是后面的问题。您已经确定了ls
:src/bin/ls
的正确路径,因此您需要根据需要修改ls.c
并对其进行编译,然后可选地将其安装到系统中。我对Minix构建系统不是很熟悉,但是你可以随时查阅Minix文档来了解如何安装更新的用户空间程序。