hostname是centos内置的获取主机名的命令,该命令对应的源码是net-tools [root@] /data0/src/os/net-tools$ ls hostname* hostname hostname.c hostname.o
其中hostname二进制是编译出来的可执行文件 通过GDB hostname可以看到,最终是通过系统调用gethostname获取主机名 看下内核源码,本文以内核5.5.0版本为主 gethostname通过utsname获取对应nodename,结构是struct new_utsname 从utsname函数可以看出,是通过获取current这个task_struct的nsproxy->uts_ns->name成员从而返回主机信息 其中count表示的是进程数,增加一个进程count数就加一
这里还涉及到一个kernel的知识点就是namespace,hostname涉及到了kernel的UTS namespace,关于namespace本文不做阐述,以后有机会再详细分析