Как Linux `uname -m` получает информацию?

15

Откуда Linux uname -mполучает информацию?

Я спрашиваю, потому что у меня есть машина, которая точно 64-битная, uname -aи uname -rподтверждаю это, но uname -mпечатает i686. Откуда он это взял ??

user322908
источник

Ответы:

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)                           = ?
drk.com.ar
источник
2
Используйте, strace -vчтобы увидеть полное возвращаемое значение uname.
user1686
Я использую Linux и UNIX последние 4 года и понятия не имел о strace. Интересно, использует ли он ptrace под капотом ... Если бы была программа, которая позволила мне легко проверить! ;)
Парфянский выстрел
2
@ParthianShot Это использует ptrace. Для проверки используйте strace strace uname -a. И направьте вывод в файл, чтобы вам было удобно читать его.
августа
@ParthianShot И они даже ltraceеще не упомянули . :)
дубад