Lệnh Linux trả về số bit (32 hoặc 64)?


Câu trả lời:


13
  • 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).


3
Trên các hệ thống GNU (và các hệ thống khác nếu có), bạn sẽ có thể thực hiện 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).
Tạm dừng cho đến khi có thông báo mới.

@Dennis: Cảm ơn đã sửa chữa. Tôi đã không nghĩ đến việc sử dụng 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 .
Gilles 'SO- ngừng trở nên xấu xa'

Có một .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ờ
byf-ferdy

@ byf-ferdy Không phải là thiếu .: 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ờ.
Gilles 'SO- ngừng trở nên xấu xa'

@Gilles ah Tôi không biết về -qcờ. Ty, làm việc ngay bây giờ :)
byf-ferdy

3

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.


3
Bất cứ điều gì khác và bạn đang chạy 32-bit, hoặc phần cứng không phải là PC (ví dụ như alpha, sparc64, ppc64, ...
Gilles 'Somali dừng vốn là xấu'

@Gilles: Cảm ơn, tôi đã chỉnh sửa câu trả lời của mình cho phù hợp.
Wuffers


1

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


1
Đó không phải là câu hỏi.
harrymc

1

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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.