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?
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?
Jawaban:
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).
getconf WORD_BITatau getconf LONG_BITalih-alih harus mengkompilasi program C Anda sendiri (sepele, dan portabel, meskipun begitu).
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 .
.yang hilang dalam regex: grep '^flags.*:.*\blm\b' /proc/cpuinfo. Juga hanya berfungsi untuk saya tanpa -qbendera
.: 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.
-qbendera itu. Ty, bekerja sekarang :)
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.
alpha, sparc64, ppc64, ...
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
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