W jaki sposób Linux `uname -m` uzyskuje informacje?

15

Skąd Linux uname -mczerpie informacje?

Pytam, bo mam na pewno maszynę 64-bitową uname -ai uname -rpotwierdzam to, ale uname -mdrukuje i686. Skąd to bierze?

użytkownik322908
źródło

Odpowiedzi:

23

Musisz wziąć pod uwagę, że unamedrukuje informacje z twojego oprogramowania i sprzętu. Twój 64-bitowy komputer może być wyposażony w 32-bitową dystrybucję Linuksa.

uname -awypisuje te informacje (w kolejności): nazwa jądra, nazwa węzła, wydanie jądra, wersja jądra, maszyna, procesor, platforma sprzętowa, system operacyjny. Jeśli widzisz 64-bitowy sprzęt i jądro i686, oznacza to, że zainstalowałeś 32-bitowe jądro Linuksa.

Aby odpowiedzieć na całe pytanie: uname jest wywołaniem systemowym i używa tego narzędzia wiersza poleceń. Możesz to łatwo sprawdzić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
źródło
2
Użyj, strace -vaby zobaczyć pełne zwracane wartości uname.
user1686
Używam Linuksa i UNIXa przez ostatnie 4 lata i nie miałem pojęcia o strace. Zastanawiam się, czy używa ptrace pod maską ... Gdyby tylko był program, który pozwoliłby mi łatwo sprawdzić! ;)
Parthian Shot
2
@ParthianShot Używa ptrace. Aby zweryfikować, użyj strace strace uname -a. I skieruj wyjście do pliku, abyś mógł go wygodnie przeczytać.
tbodt
@ParthianShot I jeszcze nawet nie wspomnieli ltrace. :)
oakad