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 flags
jalur masuk /proc/cpuinfo
. Anda harus mengetahui kemungkinan bendera pada keluarga arsitektur Anda. Misalnya, pada platform i386 / amd64, lm
flag 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]86
32-bit sedangkan x86_64
64-bit. Perhatikan bahwa pada beberapa arsitektur, kernel 64-bit dapat menjalankan program userland 32-bit, sehingga walaupun uname -m
kernel 64-bit menunjukkan, tidak ada jaminan bahwa perpustakaan 64-bit akan tersedia.
[ "$(uname -m)" = "x86_64" ] # Assuming a PC
Perhatikan juga bahwa uname -m
mungkin mengembalikan nilai "virtual". Misalnya, di Linux, jika Anda menjalankan setarch i386 bash
sistem amd64, dan Anda menjalankan uname -m
dari bash itu, Anda akan melihat uname -m
pelaporan 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_release
perintah. Lebih tepatnya, lsb_release -s
mencetak :
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-architecture
core-2.0-ia32
core-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_BIT
atau getconf LONG_BIT
alih-alih harus mengkompilasi program C Anda sendiri (sepele, dan portabel, meskipun begitu).
getconf
sini. 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 getconf
harus berlaku untuk c89
atau c99
dalam $(getconf PATH)
, tetapi dalam praktiknya saya khawatir tentang seseorang menginstal alternatif cc
yang dijalankan oleh c89
pembungkus vendor .
.
yang hilang dalam regex: grep '^flags.*:.*\blm\b' /proc/cpuinfo
. Juga hanya berfungsi untuk saya tanpa -q
bendera
.
: Saya punya "nol atau lebih banyak ruang", tetapi sebenarnya ada tab. Saya telah mengubah regexp untuk membolehkan tab juga. Dengan -q
flag, tidak ada output, tetapi status keluar dari perintah memberitahu Anda apakah flag ada. Jika Anda ingin keluaran, hapus -q
bendera.
-q
bendera itu. Ty, bekerja sekarang :)
Anda dapat menggunakan uname -a
dan mencari untuk x86_64
melihat 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/Linux
menjalankan kernel 64 bit. Jika Anda mendapatkan sesuatu yang mirip dengan i386/i486/i586/i686
Anda, 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