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


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


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.


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


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


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.