Linux `uname -m` 如何获取它的信息?

use*_*908 16 linux cpu

Linuxuname -m从哪里获取信息?

我问是因为我有一台机器肯定是 64 位的,uname -a并且uname -r确认了这一点,但是uname -m打印i686. 这是从哪里弄来的??

drk*_*log 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)                           = ?
Run Code Online (Sandbox Code Playgroud)

  • 使用 `strace -v` 查看完整的 uname 返回值。 (2认同)
  • @ParthianShot 它正在使用 ptrace。要验证,请使用`strace strace uname -a`。并将输出定向到文件,以便您可以轻松阅读。 (2认同)