Ketika saya ketik uname -a
, memberikan output sebagai berikut.
Linux mars 2.6.9-67.0.15.ELsmp #1 SMP Tue Apr 22 13:50:33 EDT 2008 i686 i686 i386 GNU/Linux
Bagaimana saya bisa tahu dari ini bahwa mengingat OS yang 32 atau 64 bit?
Hal ini berguna ketika menulis configure
script, misalnya: apa arsitektur saya membangun untuk?
Mencoba uname -m
. Yang lebih pendek dari uname-mesin
dan output:
x86_64 ==> 64-bit kernel
i686 ==> 32-bit kernel
Jika tidak, tidak untuk kernel Linux, tapi untuk CPU, anda ketik:
cat /proc/cpuinfo
atau:
grep flags /proc/cpuinfo
Di bawah "flags" parameter, anda akan melihat berbagai nilai-nilai: lihat "Apa bendera di /proc/cpuinfo berarti?"
Di antara mereka, ada yang bernama lm
: Modus Lama
(x86-64: amd64, juga dikenal sebagai Intel 64, yaitu 64-bit yang mampu)
lm ==> 64-bit processor
Atau menggunakan lshw
(seperti yang disebutkan di bawah oleh Rolf dari Saxony), tanpa sudo
(hanya untuk grepping cpu lebar):
lshw -class cpu|grep "^ width"|uniq|awk '{print $2}'
Catatan: anda dapat memiliki CPU 64-bit dengan 32-bit kernel diinstal. (sebagai ysdx menyebutkan dalam /nya sendiri jawaban, "Saat ini, sistem dapat multiarch jadi itu tidak masuk akal pula. Anda mungkin ingin untuk menemukan target bawaan dari kompiler")
Jika anda sedang menjalankan 64 bit platform anda akan melihat x86_64 atau sesuatu yang sangat mirip dalam output dari uname -a
Untuk mendapatkan mesin tertentu hardware nama run
uname -m
Anda juga dapat menghubungi
getconf LONG_BIT
yang kembali baik 32 atau 64
Aku bertanya-tanya tentang ini khusus untuk membangun perangkat lunak di Debian (diinstal sistem Debian dapat versi 32-bit dengan 32 bit kernel, library, dll., atau dapat versi 64-bit dengan barang-barang yang dikumpulkan untuk 64-bit ketimbang 32-bit mode kompatibilitas).
Paket Debian sendiri perlu tahu apa arsitektur mereka adalah untuk (tentu saja) ketika mereka benar-benar membuat paket dengan semua metadata, termasuk platform arsitektur, sehingga ada kemasan alat yang output untuk kemasan lain yang sesuai dan script untuk menggunakan, yang disebut dpkg-arsitektur. Ini mencakup baik apa itu's dikonfigurasi untuk membangun, serta saat ini tuan rumah. (Biasanya ini adalah sama meskipun.) Contoh output pada mesin 64-bit:
DEB_BUILD_ARCH=amd64
DEB_BUILD_ARCH_OS=linux
DEB_BUILD_ARCH_CPU=amd64
DEB_BUILD_GNU_CPU=x86_64
DEB_BUILD_GNU_SYSTEM=linux-gnu
DEB_BUILD_GNU_TYPE=x86_64-linux-gnu
DEB_HOST_ARCH=amd64
DEB_HOST_ARCH_OS=linux
DEB_HOST_ARCH_CPU=amd64
DEB_HOST_GNU_CPU=x86_64
DEB_HOST_GNU_SYSTEM=linux-gnu
DEB_HOST_GNU_TYPE=x86_64-linux-gnu
Anda dapat mencetak hanya satu dari variabel-variabel tersebut atau melakukan tes terhadap nilai-nilai mereka dengan opsi baris perintah untuk dpkg-arsitektur.
Saya tidak tahu bagaimana dpkg-arsitektur menyimpulkan arsitektur, tapi anda bisa melihat dokumentasi atau kode sumber (dpkg-arsitektur dan jauh dari dpkg sistem secara umum adalah Perl).
Jika anda memiliki OS 64-bit, bukan i686, anda memiliki x86_64
atau ia64
dalam output uname -a
. Dalam bahwa anda tidak memiliki salah satu dari dua string; anda memiliki 32-bit OS (catatan bahwa ini tidak berarti bahwa CPU anda tidak 64-bit).
Saat ini, sistem dapat multiarch sehingga tidak masuk akal pula. Anda mungkin ingin untuk menemukan target bawaan dari kompiler:
$ cc -v 2>&1 | grep ^Target Target: x86_64-pc-linux-gn
Anda dapat mencoba untuk mengkompilasi hello world:
$ echo 'int main() { return 0; }' | cc -x - c-o foo $ file foo foo: ELF 64-bit LSB executable, x86-64, versi 1 (SYSV), dinamis terkait, penerjemah /lib64/ld-linux-x86-64.jadi.2, untuk GNU/Linux 2.6.32, BuildID[sha1]=b114e029a08abfb3c98db93d3dcdb7435b5bba0c, tidak dilucuti
Sehubungan dengan jawaban "getconf LONG_BIT".
Saya menulis sebuah fungsi sederhana untuk melakukan hal ini di 'C':
/*
* check_os_64bit
*
* Returns integer:
* 1 = it is a 64-bit OS
* 0 = it is NOT a 64-bit OS (probably 32-bit)
* < 0 = failure
* -1 = popen failed
* -2 = fgets failed
*
* **WARNING**
* Be CAREFUL! Just testing for a boolean return may not cut it
* with this (trivial) implementation! (Think of when it fails,
* returning -ve; this could be seen as non-zero & therefore true!)
* Suggestions?
*/
static int check_os_64bit(void)
{
FILE *fp=NULL;
char cb64[3];
fp = popen ("getconf LONG_BIT", "r");
if (!fp)
return -1;
if (!fgets(cb64, 3, fp))
return -2;
if (!strncmp (cb64, "64", 3)) {
return 1;
}
else {
return 0;
}
}
Ide yang bagus, 'getconf'!
Anda juga bisa memeriksa dengan menggunakan variabel lingkungan:
echo $HOSTTYPE
Hasilnya:
i386
-> 32 bit
x86_64
-> 64 bit
Diambil dari: http://www.sysadmit.com/2016/02/linux-como-saber-si-es-32-o-64-bits.html
Jika anda shift 1 yang ditinggalkan oleh 32 dan anda mendapatkan 1, sistem 32 bit. Jika anda shift 1 yang ditinggalkan oleh 64 dan anda mendapatkan 1, sistem 64 bit.
Dengan kata lain,
jika echo $((1<<32)) memberikan 1 maka sistem 32 bit
.
jika echo $((1<<64)) memberikan 1 maka sistem 64 bit
.
Script sederhana untuk mendapatkan 64 bit atau 32 bit
if $(getconf LONG_BIT | grep '64'); then
echo "64 bit system"
else
echo "32 bit system"
fi
Jika salah satu adalah sangat terbatas dalam binari tersedia (misalnya di initramfs), rekan saya menyarankan:
$ ls -l /lib*/ld-linux*.so.2
Saya ALT sistem Linux, i586 telah /lib/ld-linux.jadi.2
dan x86_64 telah /lib64/ld-linux-x86-64.jadi.2
.