it-swarm-id.com

Bagaimana cara menentukan arsitektur kernel Linux?

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?

105
user2914

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

99
Behrooz

Itu mudah! Gunakan perintah Arch.

49
PHPst

@ 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 bit
  • tm flag berarti Mode terproteksi - CPU 32-bit
  • rm flag berarti Real Mode - 16 bit CPU
32
xenoterracide

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

21
Luchostein

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
13
dannyw

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
2
Alex

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
1
minaev

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;
}
0
Meow

Berikut metode lain menggunakan uname.

Dari man uname:

... -i, --hardware-platform print the hardware platform or "unknown" ...

# uname -i x86_64#

0
clusterdude

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.

0
b_laoshi