uname -m
memberi i686 dan uname -m
memberikan output i686 i386 di mesin Red Hat Enterprise Linux Server rilis 5.4 (Tikanga). Saya perlu menginstal Oracle Database 10g Release 2 di mesin itu. Jadi, bagaimana saya bisa memutuskan apakah arsitektur kernel 32bit atau 64bit?
i386 dan i686 keduanya 32-bit.
x86_64 adalah 64-bit
contoh untuk 64 bit:
[email protected]:~$ uname -a
Linux behrooz 2.6.32-5-AMD64 #1 SMP Mon Mar 7 21:35:22 UTC 2011 **x86_64** GNU/Linux
EDIT:
Lihat apakah linux saya ARM 32 atau 64 bit? untuk ARM
Itu mudah! Gunakan perintah Arch
.
@ behrooz sudah benar. Sayangnya uname
mengharuskan Anda untuk mengetahui arsitektur. Sebenarnya, saya mencari daftar arsitektur dan saya menemukan artikel ini yang menjawab pertanyaan Anda. Dalam hal uname -m
:
x86_64 GNU/Linux menunjukkan bahwa Anda telah menjalankan kernel Linux 64bit. Jika Anda menggunakan lihat i386/i486/i586/i686 itu adalah kernel 32 bit.
Untuk menentukan apakah perangkat keras mampu menjalankan kernel 64-bit
grep flags /proc/cpuinfo
Cari yang berikut di output (semua flag diambil dari jawaban stackoverflow ini untuk pertanyaan yang sama)
lm
flag berarti cpu mode Panjang - CPU 64 bittm
flag berarti Mode terproteksi - CPU 32-bitrm
flag berarti Real Mode - 16 bit CPU(EDIT: jawaban ini SALAH. Terima kasih atas komentar @ Lizardx)
Di Bash, menggunakan integer overflow:
if ((1<<32)); then
echo 64bits
else
echo 32bits
fi
Ini jauh lebih efisien daripada memanggil proses lain atau membuka file.
Untuk Debian:
Di PC saya
~> dpkg --print-architecture AMD64
~> dpkg - print-foreign-architectureures i386
Raspberry Pi 2 saya
~> dpkg - print-architecture armhf
Cara paling sederhana adalah menjalankan:
getconf LONG_BIT
yang akan menghasilkan 64 atau 32 tergantung pada apakah itu 32 atau 64 bit.
misalnya:
[email protected]:~$ getconf LONG_BIT
64
gunakan syscap dari proyek Formake
syscap memungkinkan untuk menyelidiki banyak properti sistem dan menguji dependensi. Ini adalah skrip Shell portabel.
Dapatkan arsitektur CPU:
syscap info -Arch
Dapatkan nama dan versi kernel:
syscap info -kernel -kernver
Cara lain adalah dengan memeriksa arsitektur beberapa file sistem dikompilasi, seperti
$ file /usr/bin/ld
/usr/bin/ld: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, stripped
Atau Anda dapat menggunakan cara yang dilakukan perintah name secara internal jika Anda ingin mengimplementasikan beberapa hal sendiri:
#include <sys/utsname.h>
#include <stdio.h>
int main() {
struct utsname name;
uname(&name);
printf("%s\n",name.machine);
return 0;
}
Berikut metode lain menggunakan uname
.
Dari man uname
:
... -i, --hardware-platform print the hardware platform or "unknown" ...
# uname -i x86_64
#
Jika Anda mencari satu-liner sederhana, ini adalah solusi paling andal yang saya temukan yang mengembalikan 64 atau 2. Tidak masalah jika Anda menjalankan ARM atau tidak, dan itu seharusnya bekerja pada sistem apa pun menggunakan bash atau sh.
Hati-hati, ini akan menganggap sistem adalah 32-bit atau 64-bit. Lihat penjelasan saya di bawah ini jika Anda perlu mendeteksi arsitektur 8- 16- atau beberapa bit lainnya.
[$ ((0xffffffff)) -eq -1] && echo 32 || gema 64
Apa yang terjadi di sini?
Logikanya sangat sederhana dan semuanya bermuara pada bagaimana komputer menyimpan bilangan bulat yang ditandatangani. Arsitektur 32-bit hanya memiliki 32 bit yang dapat digunakan untuk menyimpan bilangan bulat yang ditandatangani sementara arsitektur 64-bit memiliki 64 bit! Dengan kata lain, himpunan bilangan bulat yang dapat disimpan terbatas. Setengah dari himpunan ini mewakili angka negatif dan setengah mewakili angka positif. Bilangan bulat bertanda sama dengan -1 direpresentasikan sebagai angka terbesar yang dapat disimpan dalam jumlah bit tertentu untuk arsitektur itu. Pada sistem 32-bit, -1 dapat diwakili oleh nilai hex 0xFFFFFFFF (yang merupakan 32 bit biner, semua sama dengan 1). Pada sistem 64-bit, 0xFFFFFFFF diterjemahkan menjadi 4.294.967.295, basis 10 sedangkan 0xFFFFFFFFFFFFFFFF adalah representasi untuk -1). Anda dapat melihat bagaimana ini akan dengan mudah skala untuk sistem yang 8- atau 16-bit juga yang akan sama -1 pada 0xFF dan 0xFFFF, masing-masing.