Când am tip uname
, se dă următoarea ieșire.
Linux mars 2.6.9-67.0.15.ELsmp #1 SMP Tue Apr 22 13:50:33 EDT 2008 i686 i686 i386 GNU/Linux
Cum pot să știu că a dat de OPERARE este pe 32 sau 64 bit?
Acest lucru este util atunci când scrieți "configurare" script-uri, de exemplu: ce arhitectura construiesc pentru?
Încerca uname -m
. Care este scurt de `uname --mașini și ieșiri:
x86_64 ==> 64-bit kernel
i686 ==> 32-bit kernel
În caz contrar, nu pentru kernel-ul Linux, dar pentru CPU, tastați:
cat /proc/cpuinfo
sau:
grep flags /proc/cpuinfo
Sub "steaguri" parametru, veți vedea diverse valori: a se vedea "Ce steaguri în /proc/cpuinfo spun?"
Printre ei, unul este numit lm
: Long Mode
(x86-64: amd64, de asemenea, cunoscut sub numele de Intel 64, respectiv 64 de biți)
lm ==> 64-bit processor
Sau folosind lshw
(după cum sa menționat mai jos de către Rolf de Saxonia), fără "sudo" (doar pentru grepping cpu lățime):
lshw -class cpu|grep "^ width"|uniq|awk '{print $2}'
Notă: puteți avea un PROCESOR pe 64-bit cu un 32-bit kernel instalat. (ca ysdx menționează în lui/ei propriul răspuns, "în zilele noastre, un sistem poate fi multiarch deci nu are sens oricum. Ați putea dori pentru a găsi țintă implicit de compilator")
Dacă ați rulat o platforma de 64 de biți ai vedea x86_64 sau ceva foarte similar în producția de uname -o
Pentru a obține mașini specifice hardware numele rula
uname -m
Puteți apela, de asemenea,
getconf LONG_BIT
care revine fie pe 32 sau 64
Mă întrebam despre acest lucru în special pentru software-ul de construcție în Debian (Debian instalat sistemul poate fi un 32-bit versiunea de 32 bit kernel, biblioteci, etc., sau poate fi o versiune pe 64 de biți cu chestii elaborate pentru 64-bit, mai degrabă decât 32-bit modul de compatibilitate).
Pachete Debian ei înșiși trebuie să știți ce arhitectura sunt pentru (desigur), atunci când ei, de fapt, a crea pachetul cu toate metadatele sale, inclusiv platforma de arhitectura, deci nu este un ambalaj instrument care iesiri pentru alte ambalaje, instrumente și script-uri pentru a utiliza, numit dpkg-arhitectură. Acesta include atât ceea ce este's configurat pentru a construi, precum și gazdă curent. (În mod normal acestea sunt același lucru, deși.) Exemplu de ieșire de pe o mașină pe 64 de biți:
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
Puteți imprima doar una dintre variabilele respective sau de a face un test împotriva valorilor lor cu opțiuni de linie de comandă pentru a dpkg-arhitectura.
Nu am nici o idee cum dpkg-arhitectura deduce arhitectura, dar te-ai putea uita la documentare sau cod sursă (dpkg-arhitectură și o mare parte din dpkg sistem, în general, sunt Perl).
Dacă aveți un 64-bit sistem de OPERARE, în loc de i686, ai x86_64 " sau " ia64în producția de
uname -o`. În care nu aveți oricare dintre aceste două șiruri; ai un 32-bit sistem de OPERARE (rețineți că acest lucru nu înseamnă că PROCESORUL nu este de 64-bit).
Că sistemul este pe 32 de biți. iX86 în uname
înseamnă că este o arhitectură pe 32 de biți. Dacă era pe 64 de biți, ea va reveni
Linux mars 2.6.9-67.0.15.ELsmp #1 SMP Tue Apr 22 13:50:33 EDT 2008 x86_64 i686 x86_64 x86_64 GNU/Linux
În zilele noastre, un sistem poate fi multiarch deci nu are sens oricum. Ați putea dori pentru a găsi țintă implicit de compilator:
$ cc-v 2>&1 | grep ^Țintă Țintă: x86_64-pc-linux-gn
Puteți încerca să alcătuiască un salut lume:
$ echo 'int main() { return 0; }' | cc-x c - -o foo $ fișier foo foo: ELF 64-bit LSB executabil, x86-64, versiunea 1 (SYSV), legate dinamic, interpret /lib64/ld-linux-x86-64.deci.2, pentru GNU/Linux 2.6.32, BuildID[sha1]=b114e029a08abfb3c98db93d3dcdb7435b5bba0c, nu s-a eliberat
Cu privire la răspuns "getconf LONG_BIT".
Am scris o funcție simplă de a face din '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;
}
}
Buna idee, 'getconf'!
Puteți verifica, de asemenea, folosind o variabilă de mediu:
echo $HOSTTYPE
Rezultatul:
i386
-> 32 bits
x86_64
-> pe 64 de biți
Extras din: http://www.sysadmit.com/2016/02/linux-como-saber-si-es-32-o-64-bits.html
Dacă trecerea de la 1 la stânga de 32 și veți obține 1, sistemul dvs. este de 32 de biți. Dacă vă shift 1 lăsate de 64 și veți obține 1, sistemul este pe 64 de biți.
Cu alte cuvinte,
dacă echo $((1<<32)) da 1 atunci sistemul este pe 32 bit`.
dacă echo $((1<<64)) da 1, atunci sistemul este pe 64 bit`.
Script simplu pentru a obține 64 de biți sau 32 de biți
if $(getconf LONG_BIT | grep '64'); then
echo "64 bit system"
else
echo "32 bit system"
fi