Linux`uname -m`如何获得其信息?


15

Linux是uname -m从哪里获得信息的?

我问是因为我有一台肯定是64位的机器,uname -a然后uname -r确认这一点,但是可以uname -m打印出来i686。它是从哪里得到的?

Answers:


23

您必须考虑uname打印来自您的软件和硬件的信息。您的64位计算机可能正在运行32位Linux发行版。

uname -a按顺序打印此信息:内核名称,节点名称,内核发行版,内核版本,机器,处理器,硬件平台,操作系统。如果看到64位硬件和i686内核,则说明您已经安装了32位Linux内核。

要回答您的整个问题:uname是系统调用,并且此命令行工具正在使用它。您可以检查它是否易于运行strace uname -a

$ strace uname -a
execve("/bin/uname", ["uname", "-a"], [/* 23 vars */]) = 0
brk(0)                                  = 0x9fa6000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2b4abb365000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2b4abb366000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
...
...
...
uname({sys="Linux", node="my_pc", ...}) = 0
fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 0), ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2b4abe953000
uname({sys="Linux", node="my_pc", ...}) = 0
uname({sys="Linux", node="my_pc", ...}) = 0
write(1, "Linux my_pc 2.6.18-371.8.1.el5 "..., 99Linux my_pc 2.6.18-371.8.1.el5 #1 SMP Thu Apr 24 18:19:36 EDT 2014 x86_64 x86_64 x86_64 GNU/Linux
) = 99
close(1)                                = 0
munmap(0x2b4abe953000, 4096)            = 0
exit_group(0)                           = ?

2
使用strace -v看到完整的UNAME返回值。
user1686 2014年

在过去的四年中,我一直在使用Linux和UNIX,但对strace却一无所知。我想知道它是否在后台使用了ptrace ...如果只有一个程序可以让我轻松检查!;)
Parthian Shot 2014年

2
@ParthianShot它正在使用ptrace。要进行验证,请使用strace strace uname -a。并将输出定向到文件,以便您可以轻松地阅读它。
tbodt 2014年

@ParthianShot他们甚至还没有提到ltrace。:)
oakad 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.