如下所示:这三个程序指向了同一个文件,但是功能却不一样
[root@node09 linux-5.16.14]# ll /usr/sbin/modinfo
lrwxrwxrwx. 1 root root 11 Nov 7 2018 /usr/sbin/modinfo -> ../bin/kmod
[root@node09 linux-5.16.14]# ll /usr/sbin/lsmod
lrwxrwxrwx. 1 root root 11 Nov 7 2018 /usr/sbin/lsmod -> ../bin/kmod
[root@node09 linux-5.16.14]# ll /usr/sbin/insmod
lrwxrwxrwx. 1 root root 11 Nov 7 2018 /usr/sbin/insmod -> ../bin/kmod
在 Linux 系统中,lsmod、insmod、modinfo 等工具虽然都指向相同的可执行文件 kmod,但它们的功能不同,这是因为 kmod 是一个多功能的工具包,能够根据调用的命令不同来执行相应的子命令。
这种机制叫做多态二进制程序 (multi-call binary),即通过符号链接(symlink)调用时,kmod 会根据它是被哪个名称调用(如 lsmod、insmod、modinfo)来决定运行哪一个具体的子命令。
具体流程如下:
- 你执行
lsmod时,实际上是执行kmod lsmod命令,它会列出当前加载的内核模块。 - 当你运行
insmod时,系统会调用kmod insmod命令,负责将模块加载到内核中。 - 运行
modinfo时,kmod modinfo会展示有关内核模块的详细信息。
因此,尽管它们指向相同的二进制文件 kmod,通过符号链接的不同名字调用,kmod 会执行不同的子命令,提供不同的功能。