Linux uname -m
lấy thông tin từ đâu?
Tôi đang hỏi bởi vì tôi có một máy chắc chắn là 64 bit, uname -a
và uname -r
xác nhận điều đó, nhưng uname -m
in ra i686
. Nó lấy nó từ đâu vậy ??
Linux uname -m
lấy thông tin từ đâu?
Tôi đang hỏi bởi vì tôi có một máy chắc chắn là 64 bit, uname -a
và uname -r
xác nhận điều đó, nhưng uname -m
in ra i686
. Nó lấy nó từ đâu vậy ??
Câu trả lời:
Bạn phải tính đến việc uname
in thông tin từ phần mềm và phần cứng của bạn. Máy 64 bit của bạn có thể đang chạy bản phân phối Linux 32 bit.
uname -a
in thông tin này (theo thứ tự): tên kernel, tên nút, phát hành kernel, phiên bản kernel, máy, bộ xử lý, nền tảng phần cứng, hệ điều hành. Nếu bạn thấy phần cứng 64 bit và hạt nhân i686, thì bạn đã cài đặt hạt nhân Linux 32 bit.
Để trả lời toàn bộ câu hỏi của bạn: uname là một cuộc gọi hệ thống và công cụ dòng lệnh này đang sử dụng nó. Bạn có thể kiểm tra xem có dễ dàng chạy khôngstrace 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) = ?
strace strace uname -a
. Và hướng đầu ra vào một tập tin để bạn có thể thoải mái đọc nó.
ltrace
chưa đề cập đến . :)
strace -v
để xem các giá trị trả lại uname đầy đủ.