Câu trả lời:
Bạn có thể xem liệu CPU là 64 bit, 32 bit hay có khả năng cả hai bằng cách kiểm tra flags
dòng trong /proc/cpuinfo
. Bạn phải biết những lá cờ có thể có trong gia đình kiến trúc của bạn. Ví dụ: trên các nền tảng i386 / amd64, lm
cờ xác định các CPU có khả năng amd64 (CPU không có cờ đó chỉ có i386).
grep -q '^flags\s*:.*\blm\b' /proc/cpuinfo # Assuming a PC
Bạn có thể xem kernel là 32 bit hay 64 bit bằng cách truy vấn kiến trúc với uname -m
. Ví dụ: i[3456]86
32 bit trong khi x86_64
64 bit. Lưu ý rằng trên một số kiến trúc, hạt nhân 64 bit có thể chạy các chương trình người dùng 32 bit, vì vậy ngay cả khi uname -m
hiển thị hạt nhân 64 bit, không có gì đảm bảo rằng các thư viện 64 bit sẽ khả dụng.
[ "$(uname -m)" = "x86_64" ] # Assuming a PC
Cũng lưu ý rằng uname -m
có thể trả về giá trị ảo hóa của người dùng. Ví dụ: trong Linux, nếu bạn chạy setarch i386 bash
trên hệ thống amd64 và bạn chạy uname -m
từ bash đó, bạn sẽ thấy uname -m
báo cáo i386
. Điều này cho phép bạn giả vờ rằng bạn đang sử dụng hệ thống 32-bit, mặc dù kernel là 64-bit, ví dụ để biên dịch các chương trình 32-bit mà không cần thiết lập biên dịch chéo.
Bạn có thể xem những gì có sẵn trong vùng người dùng bằng cách truy vấn hỗ trợ LSB bằng lsb_release
lệnh. Chính xác hơn, lsb_release -s
in một :
danh sách gồm các tính năng LSB được hỗ trợ. Mỗi tính năng có hình thức . Ví dụ, tính khả dụng của thư viện ix86 C được chỉ định bởi , trong khi đó là tương tự cho amd64. Không phải mọi phân phối đều tuyên bố tất cả các mô-đun LSB có sẵn, do đó, có thể có sẵn nhiều hơn là có thể phát hiện được theo cách này.module-version-architecture
core-2.0-ia32
core-2.0-amd64
Bạn có thể tìm ra kích thước từ ưa thích để phát triển (giả sử có trình biên dịch C) bằng cách biên dịch chương trình C 5 dòng có in sizeof(void*)
hoặc sizeof(size_t)
.
getconf WORD_BIT
hoặc getconf LONG_BIT
thay vì phải biên dịch chương trình C của riêng bạn (tầm thường và di động, mặc dù vậy).
getconf
ở đây. Về nguyên tắc nghe có vẻ hay, nhưng thật khó để đảm bảo rằng kết quả áp dụng cho trình biên dịch C cụ thể mà bạn sẽ sử dụng, nếu có nhiều hơn một (thường là gcc / icc hoặc tương tự trên Linux, gcc / cc gốc ở nơi khác). Trên một hệ thống tiêu chuẩn getconf
nên áp dụng cho c89
hoặc c99
vào $(getconf PATH)
, nhưng trong thực tế, tôi lo lắng về việc ai đó sẽ cài đặt một thay thế cc
được điều hành bởi c89
trình bao bọc của nhà cung cấp .
.
mất tích trong regex : grep '^flags.*:.*\blm\b' /proc/cpuinfo
. Ngoài ra, nó chỉ hoạt động với tôi mà không có -q
cờ
.
: Tôi đã có 0 hoặc nhiều khoảng trống, nhưng thực sự có một tab. Tôi cũng đã thay đổi biểu thức chính quy để cho phép các tab. Với -q
cờ, không có đầu ra, nhưng trạng thái thoát của lệnh cho bạn biết cờ có hiện diện hay không. Nếu bạn muốn đầu ra, loại bỏ -q
cờ.
-q
cờ. Ty, làm việc ngay bây giờ :)
Bạn có thể sử dụng uname -a
và tìm kiếm x86_64
để xem nếu bạn đang chạy 64-bit. Bất cứ điều gì khác (Theo như tôi biết) và bạn đang chạy 32-bit hoặc bạn đang ở trên phần cứng không phải là PC như alpha
, sparc
hoặc ppc64
.
alpha
, sparc64
, ppc64
, ...
Kiểu:
uname -a
Nếu bạn nhận được x86_64 GNU/Linux
bạn đang chạy kernel 64 bit. Nếu bạn nhận được một cái gì đó tương tự như i386/i486/i586/i686
bạn chắc chắn đang chạy kernel 32 bit
getconf sử dụng các cuộc gọi hệ thống ít nhất:
$ strace getconf LONG_BIT | wc -l
253
$ strace arch | wc -l
280
$ strace uname -m | wc -l
281
$ strace grep -q lm /proc/cpuinfo | wc -l
301