Comando Linux per restituire il numero di bit (32 o 64)?


Risposte:


13
  • Si può vedere se la CPU è a 64-bit, 32-bit, o in grado sia controllando la flagsriga /proc/cpuinfo. Devi conoscere le possibili bandiere sulla tua famiglia di architettura. Ad esempio, sulle piattaforme i386 / amd64, il lmflag identifica le CPU compatibili con amd64 (le CPU che non hanno quel flag sono solo i386).

    grep -q '^flags\s*:.*\blm\b' /proc/cpuinfo    # Assuming a PC
    
  • Puoi vedere se il kernel è a 32-bit o 64-bit interrogando l'architettura con uname -m. Ad esempio, i[3456]86sono a 32 bit mentre a x86_6464 bit. Si noti che su diverse architetture, un kernel a 64 bit può eseguire programmi userland a 32 bit, quindi anche se uname -mmostra un kernel a 64 bit, non vi è alcuna garanzia che saranno disponibili librerie a 64 bit.

    [ "$(uname -m)" = "x86_64" ]    # Assuming a PC
    

    Si noti inoltre che uname -mpotrebbe restituire un valore "virtualizzato". Ad esempio, sotto Linux, se corri setarch i386 bashsu un sistema amd64 e corri uname -mda quella bash, vedrai dei uname -mrapporti i386. Ciò ti consente di far finta di essere su un "sistema a 32 bit" anche se il kernel è a 64 bit, ad esempio per compilare programmi a 32 bit senza impostare la compilazione incrociata.

  • Puoi vedere cosa è disponibile in userland interrogando il supporto LSB con il lsb_releasecomando. Più precisamente, lsb_release -sstampa un :elenco separato di funzioni LSB supportate. Ogni funzione ha il modulo . Ad esempio, la disponibilità di una libreria ix86 C è indicata da , mentre è l'analogo per amd64. Tuttavia, non tutte le distribuzioni dichiarano tutti i moduli LSB disponibili, quindi potrebbero essere disponibili più quantità di quelle rilevabili in questo modo.module-version-architecturecore-2.0-ia32core-2.0-amd64

  • Puoi scoprire la dimensione della parola preferita per lo sviluppo (supponendo che sia disponibile un compilatore C) compilando un programma C a 5 righe che stampa sizeof(void*)o sizeof(size_t).


3
Sui sistemi GNU (e altri se ce l'hanno), dovresti essere in grado di fare getconf WORD_BITo getconf LONG_BITinvece di compilare il tuo programma C (banale e portatile, sebbene lo sia).
In pausa fino a ulteriore avviso.

@Dennis: grazie per la correzione. Non avevo pensato di usare getconfqui. Suona bene in linea di principio, ma è difficile garantire che i risultati si applichino al particolare compilatore C che utilizzerai, se ce n'è più di uno (in genere gcc / icc o simile su Linux, gcc / native cc altrove). Su un sistema standard getconfdovrebbe applicarsi c89o c99entrare $(getconf PATH), ma in pratica mi preoccuperei che qualcuno installi un alternativo ccche viene eseguito dal c89wrapper del fornitore .
Gilles 'SO- smetti di essere malvagio'

C'è un .mancante nella regex: grep '^flags.*:.*\blm\b' /proc/cpuinfo. Inoltre funziona solo per me senza la -qbandiera
byf-ferdy

@ byf-ferdy Non mancava .: avevo "zero o più spazi", ma in realtà c'è una scheda. Ho modificato regexp per consentire anche le schede. Con il -qflag, non c'è output, ma lo stato di uscita del comando indica se il flag è presente. Se si desidera l'output, rimuovere il -qflag.
Gilles 'SO- smetti di essere malvagio' il

@Gilles ah non sapevo della -qbandiera. Ty, funziona ora :)
byf-ferdy,

3

È possibile utilizzare uname -ae cercare per x86_64vedere se si esegue a 64 bit. Tutto il resto (Per quanto ne so) e si esegue a 32 bit o siete su hardware non PC, come alpha, sparco ppc64.


3
Tutto il resto e il gioco è in esecuzione a 32 bit, o hardware non PC (ad esempio alpha, sparc64, ppc64, ...
Gilles 'SO-tappa è male'

@Gilles: Grazie, ho modificato la mia risposta di conseguenza.
Wuffers,


1

Genere:

uname -a

Se ottieni x86_64 GNU/Linuxstai eseguendo un kernel a 64 bit. Se ottieni qualcosa di simile i386/i486/i586/i686probabilmente stai eseguendo un kernel a 32 bit


1
Non è questa la domanda.
harrymc,

1

getconf utilizza il minor numero di chiamate di sistema:

$ strace getconf LONG_BIT | wc -l
253

$ strace arch | wc -l
280

$ strace uname -m | wc -l
281

$ strace grep -q lm /proc/cpuinfo | wc -l
301
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.