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 flagsdò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, lmcờ 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]8632 bit trong khi x86_6464 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 -mhiể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 -mcó 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 bashtrên hệ thống amd64 và bạn chạy uname -mtừ bash đó, bạn sẽ thấy uname -mbá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_releaselệnh. Chính xác hơn, lsb_release -sin 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-architecturecore-2.0-ia32core-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_BIThoặc getconf LONG_BITthay 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 getconfnên áp dụng cho c89hoặc c99và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 c89trì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ó -qcờ
.: 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 -qcờ, 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ỏ -qcờ.
-qcờ. Ty, làm việc ngay bây giờ :)
Bạn có thể sử dụng uname -avà 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, sparchoặc ppc64.
alpha, sparc64, ppc64, ...
Kiểu:
uname -a
Nếu bạn nhận được x86_64 GNU/Linuxbạ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/i686bạ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