【发布时间】:2021-12-07 21:43:09
【问题描述】:
我目前正在学习操作系统内核以及如何从源代码构建它们(我使用的是 Minix)。
我试图找出 shell 命令(例如 ls)在哪里执行。我知道在哪里可以找到 ls.c 文件 (src/bin/ls) 我只是不确定当用户在终端中键入它时它在哪里被调用。
我的目标是“劫持” ls 命令以完成不同的结果,而无需编辑命令文件本身 ls.c(例如,ls 命令现在关闭计算机或回显字符串)。为了做到这一点,我需要知道来自用户的文本在哪里被解析以及 ls 命令被执行。
我查看了源代码,我相信它位于进程管理器 (src/minix/servers/pm) 中,但是,这是我迷路之前所获得的。 p>
我知道这是一个非常具体的问题,但希望我能解决它。
提前致谢
【问题讨论】:
-
shell 将调用
exec系列函数之一来加载和执行程序。在尝试使用类 Unix 内核之前,请先了解更多关于 Unix 系统编程的知识。 -
如果要“劫持”,最简单的方法:使用shell别名,第二种最简单的方法:将/bin/ls移入/bin/ls.orig,在/下放一个命令或脚本bin/ls(在大多数情况下会自称为 /bin/ls.orig)。注意 shell 可以实现 ls 内置(对于最常见的情况)并且程序可以直接调用系统。
-
@GiacomoCatenazzi 确实,shell 内置函数帮助了 UNIX 历史上一些最神奇的恢复 :)
标签: c unix linux-kernel operating-system minix