如下所示:这三个程序指向了同一个文件,但是功能却不一样
[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
会执行不同的子命令,提供不同的功能。