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?
@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).
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.
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
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).Anda dapat melihat apakah kernelnya 32-bit atau 64-bit dengan menanyakan arsitekturnya
uname -m
. Misalnya,i[3456]86
32-bit sedangkanx86_64
64-bit. Perhatikan bahwa pada beberapa arsitektur, kernel 64-bit dapat menjalankan program userland 32-bit, sehingga walaupununame -m
kernel 64-bit menunjukkan, tidak ada jaminan bahwa perpustakaan 64-bit akan tersedia.Perhatikan juga bahwa
uname -m
mungkin mengembalikan nilai "virtual". Misalnya, di Linux, jika Anda menjalankansetarch i386 bash
sistem amd64, dan Anda menjalankanuname -m
dari bash itu, Anda akan melihatuname -m
pelaporani386
. 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*)
atausizeof(size_t)
.sumber
getconf WORD_BIT
ataugetconf 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 standargetconf
harus berlaku untukc89
atauc99
dalam$(getconf PATH)
, tetapi dalam praktiknya saya khawatir tentang seseorang menginstal alternatifcc
yang dijalankan olehc89
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 untukx86_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 sepertialpha
,sparc
, atauppc64
.sumber
alpha
,sparc64
,ppc64
, ...sumber
Tipe:
Jika Anda
x86_64 GNU/Linux
menjalankan kernel 64 bit. Jika Anda mendapatkan sesuatu yang mirip dengani386/i486/i586/i686
Anda, kemungkinan besar Anda menjalankan kernel 32 bitsumber
getconf menggunakan panggilan sistem paling sedikit:
sumber