赞
踩
uname 命令适用于所有类似 Linux 和 Unix 的操作系统。uname 是一个命令行实用程序,用于打印有关操作系统名称和系统硬件的基本信息。下面我们来学习了如何使用uname命令获取内核、系统、硬件和处理器信息等。
Linux uname 命令的基本示例
首先,只需在 bash 窗口的命令行中键入 uname 命令即可查看默认结果。
uname 命令报告有关计算机软件和硬件的基本信息。
它的语法是
在不带任何选项的情况下使用时,uname 报告内核(即操作系统的核心)的名称,但不报告版本号。因此,在运行某些 Linux 发行版(即版本)的系统上,它会在监视器屏幕上显示 Linux 一词。
显示内核名称
要显示内核名称,您可以使用 -s 参数。
输出将与不带参数的 uname 相同。
显示内核发布信息
如果您需要知道您使用的是哪个内核版本,只需使用 -r 参数
显示内核版本
除了内核信息,uname 还可以获取内核版本。 为此使用 -v 参数
显示机器的网络节点主机名
选项 -n(节点名称)将为您提供系统的主机名。 例如,如果您的主机名为“localhost.localdomain”,则 -n 选项将打印“localhost.localdomain”作为 -n 参数的输出 :
显示机器(硬件)类型
如果你想知道你使用的是什么类型的机器,你可以试试 -m 参数。 它会显示有关它的信息
输出 x86_64 表示您的系统是 64 位操作系统。如果uname -m 返回i686,表示您的系统是 32 位操作系统
显示硬件平台
与机器(硬件)类型类似,-i 选项将显示硬件平台信息。
显示主机处理器(CPU)类型
要查看处理器类型(架构),您可以使用 -p 选项。 如果 uname 无法向您显示该信息,它将在输出中显示“未知”。
显示操作系统
uname 还可用于显示您正在运行的操作系统。 使用 -o 选项来实现此目的。
但是为了找到分发名称及其版本,您需要查看以下文件。对于 RedHat 和 CentOS,您还可以使用“/etc/redhat-release”文件。
在其他 Linux 发行版上,您可以使用“/etc/issue”。
cat /etc/issue
所有信息
-a(即所有)选项告诉 uname 提供以下信息:内核名称、网络节点主机名(例如,localhost.localdomain)、内核版本号和发行级别(例如,3.10.0-862.el7.x86_64) 、内核发布日期、机器硬件名称、CPU(中央处理器)类型、硬件平台和操作系统名称(例如,GNU/Linux)。
编码获取有关系统信息
编写一个程序来获取有关系统的一些信息(最重要的信息是体系结构)。uname() 在 buf 指向的结构中返回系统信息。 utsname 结构是
struct utsname {
char sysname[]; /* Operating system name (e.g., "Linux") */
char nodename[]; /* Name within "some implementation-defined
network" */
char release[]; /* Operating system release (e.g., "2.6.28") */
char version[]; /* Operating system version */
char machine[]; /* Hardware identifier */
#ifdef _GNU_SOURCE
char domainname[]; /* NIS or YP domain name */
#endif
};
struct utsname字符数组的大小未指定,但存储在其中的数据以空字节 (’\0’)结尾。
#include <sys/utsname.h>
int uname(struct utsname *buf);
uname一个系统调用,操作系统大概知道它的名字、版本和版本, 它还知道它在什么硬件上运行等等。
#include <stdio.h> #include <stdlib.h> #include <errno.h> #include <sys/utsname.h> int main(void) { struct utsname buffer; errno = 0; if (uname(&buffer) < 0) { perror("uname"); exit(EXIT_FAILURE); } printf("system name = %s\n", buffer.sysname); printf("node name = %s\n", buffer.nodename); printf("release = %s\n", buffer.release); printf("version = %s\n", buffer.version); printf("machine = %s\n", buffer.machine); #ifdef _GNU_SOURCE printf("domain name = %s\n", buffer.domainname); #endif return EXIT_SUCCESS; }
结果显示:
uname() 函数接受一个指向 utsname 结构的指针,该结构将存储结果作为输入。 因此,只需要创建一个临时的utsname实例,将它的地址传递给uname,在函数成功后读取这个struct的内容。
uname命令代码实现
int main(int argc, char **argv) { struct utsname u; char machine_arch[SYS_NMLN]; int c; int space = 0; int print_mask = 0; (void)setlocale(LC_ALL, ""); while ((c = getopt(argc,argv,"amnprsv")) != -1) { switch (c) { case 'a': print_mask |= PRINT_ALL; break; case 'm': print_mask |= PRINT_MACHINE; break; case 'n': print_mask |= PRINT_NODENAME; break; case 'p': print_mask |= PRINT_MACHINE_ARCH; break; case 'r': print_mask |= PRINT_RELEASE; break; case 's': print_mask |= PRINT_SYSNAME; break; case 'v': print_mask |= PRINT_VERSION; break; default: usage(); } } if (optind != argc) { usage(); } if (!print_mask) { print_mask = PRINT_SYSNAME; } if (uname(&u) != 0) { err(EXIT_FAILURE, "uname"); } if (print_mask & PRINT_MACHINE_ARCH) { //int mib[2] = { CTL_HW, HW_MACHINE_ARCH }; int mib[2] = { CTL_KERN, KERN_OSTYPE }; size_t len = sizeof (machine_arch); if (sysctl(mib, sizeof (mib) / sizeof (mib[0]), machine_arch,&len, NULL, 0) < 0) err(EXIT_FAILURE, "sysctl"); } if (print_mask & PRINT_SYSNAME) { space++; fputs(u.sysname, stdout); } if (print_mask & PRINT_NODENAME) { if (space++) putchar(' '); fputs(u.nodename, stdout); } if (print_mask & PRINT_RELEASE) { if (space++) putchar(' '); fputs(u.release, stdout); } if (print_mask & PRINT_VERSION) { if (space++) putchar(' '); fputs(u.version, stdout); } if (print_mask & PRINT_MACHINE) { if (space++) putchar(' '); fputs(u.machine, stdout); } if (print_mask & PRINT_MACHINE_ARCH) { if (space++) putchar(' '); fputs(machine_arch, stdout); } putchar('\n'); exit(EXIT_SUCCESS); } static void usage(void) { fprintf(stderr, "usage: uname [-amnprsv]\n"); exit(EXIT_FAILURE); }
编译运行:
总结
uname 是一个命令行实用程序,当您在没有任何选项的情况下运行 uname 命令时,它只会打印核心操作系统名称。
uname 命令用于打印基本系统信息。 它通常与 -a 选项一起调用以显示所有可用信息。
欢迎关注微信公众号【程序猿编码】,需要uname命令完整源码的添加本人微信号(c17865354792)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。