Perintah Linux untuk mengembalikan jumlah bit (32 atau 64)?

13

Apa perintah Linux yang dapat saya jalankan untuk mengembalikan 32 atau 64 secara terprogram untuk mengindikasikan apakah prosesor tersebut prosesor 32 bit atau 64 bit?

WilliamKF
sumber
1
@Sathya: Itu bukan duplikat, karena prosesornya bisa 64-bit bahkan jika Linux tidak.
Gilles 'SO- stop being evil'

Jawaban:

13
  • Anda dapat melihat apakah CPU 64-bit, 32-bit, atau mampu keduanya dengan memeriksa flagsjalur masuk /proc/cpuinfo. Anda harus mengetahui kemungkinan bendera pada keluarga arsitektur Anda. Misalnya, pada platform i386 / amd64, lmflag mengidentifikasi CPU yang mampu amd64 (CPU yang tidak memiliki flag itu hanya untuk i386).

    grep -q '^flags\s*:.*\blm\b' /proc/cpuinfo    # Assuming a PC
    
  • Anda dapat melihat apakah kernelnya 32-bit atau 64-bit dengan menanyakan arsitekturnya uname -m. Misalnya, i[3456]8632-bit sedangkan x86_6464-bit. Perhatikan bahwa pada beberapa arsitektur, kernel 64-bit dapat menjalankan program userland 32-bit, sehingga walaupun uname -mkernel 64-bit menunjukkan, tidak ada jaminan bahwa perpustakaan 64-bit akan tersedia.

    [ "$(uname -m)" = "x86_64" ]    # Assuming a PC
    

    Perhatikan juga bahwa uname -mmungkin mengembalikan nilai "virtual". Misalnya, di Linux, jika Anda menjalankan setarch i386 bashsistem amd64, dan Anda menjalankan uname -mdari bash itu, Anda akan melihat uname -mpelaporan i386. Ini secara efektif memungkinkan Anda berpura-pura bahwa Anda berada di "sistem 32-bit" walaupun kernelnya 64-bit, misalnya untuk mengkompilasi program 32-bit tanpa mengatur kompilasi silang.

  • Anda dapat melihat apa yang tersedia di userland dengan menanyakan dukungan LSB dengan lsb_releaseperintah. Lebih tepatnya, lsb_release -smencetak :daftar fitur LSB yang didukung terpisah. Setiap fitur memiliki formulir . Misalnya, ketersediaan pustaka ix86 C ditandai dengan , sedangkan analog untuk amd64. Tidak setiap distribusi mendeklarasikan semua modul LSB yang tersedia, jadi lebih banyak yang tersedia daripada yang terdeteksi dengan cara ini.module-version-architecturecore-2.0-ia32core-2.0-amd64

  • Anda dapat mengetahui ukuran kata yang disukai untuk pengembangan (dengan asumsi kompiler C tersedia) dengan mengkompilasi program 5-baris C yang mencetak sizeof(void*)atau sizeof(size_t).

Gilles 'SANGAT berhenti menjadi jahat'
sumber
3
Pada sistem GNU (dan yang lain jika memilikinya), Anda seharusnya dapat melakukan getconf WORD_BITatau getconf LONG_BITalih-alih harus mengkompilasi program C Anda sendiri (sepele, dan portabel, meskipun begitu).
Dijeda sampai pemberitahuan lebih lanjut.
@ Dennis: Terima kasih atas koreksinya. Saya tidak berpikir untuk menggunakan di getconfsini. Kedengarannya bagus pada prinsipnya, tetapi sulit untuk memastikan bahwa hasilnya berlaku untuk kompiler C tertentu yang akan Anda gunakan, jika ada lebih dari satu (biasanya gcc / icc atau serupa di Linux, gcc / cc asli di tempat lain). Pada sistem standar getconfharus berlaku untuk c89atau c99dalam $(getconf PATH), tetapi dalam praktiknya saya khawatir tentang seseorang menginstal alternatif ccyang dijalankan oleh c89pembungkus vendor .
Gilles 'SANGAT berhenti menjadi jahat'
Ada .yang hilang dalam regex: grep '^flags.*:.*\blm\b' /proc/cpuinfo. Juga hanya berfungsi untuk saya tanpa -qbendera
byf-ferdy
@ byf-ferdy Itu bukan yang hilang .: Saya punya "nol atau lebih banyak ruang", tetapi sebenarnya ada tab. Saya telah mengubah regexp untuk membolehkan tab juga. Dengan -qflag, tidak ada output, tetapi status keluar dari perintah memberitahu Anda apakah flag ada. Jika Anda ingin keluaran, hapus -qbendera.
Gilles 'SO- stop being evil'
@ Gilles ah saya tidak tahu tentang -qbendera itu. Ty, bekerja sekarang :)
byf-ferdy
3

Anda dapat menggunakan uname -adan mencari untuk x86_64melihat apakah Anda menjalankan 64-bit. Hal lain (Sejauh yang saya tahu) dan Anda menjalankan 32-bit atau Anda berada di hardware non-PC seperti alpha, sparc, atau ppc64.

Wuffers
sumber
3
Apa pun dan Anda menjalankan 32-bit, atau perangkat keras non-PC (seperti alpha, sparc64, ppc64, ...
Gilles 'SO berhenti menjadi jahat'
@Gilles: Terima kasih, saya sudah mengedit jawaban saya.
Wuffers
2
uname -m | sed 's/x86_//;s/i[3-6]86/32/'
WilliamKF
sumber
1

Tipe:

uname -a

Jika Anda x86_64 GNU/Linuxmenjalankan kernel 64 bit. Jika Anda mendapatkan sesuatu yang mirip dengan i386/i486/i586/i686Anda, kemungkinan besar Anda menjalankan kernel 32 bit

Bepergian Tek Guy
sumber
1
Bukan itu pertanyaannya.
harrymc
1

getconf menggunakan panggilan sistem paling sedikit:

$ 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
Rachel Duncan
sumber