Come ottengo il numero seriale?


70

Dove posso trovare il numero seriale del Raspberry Pi che sto attualmente utilizzando?


2
il numero seriale è stampato sul dispositivo o è disponibile solo tramite software? Vedo che sul dispositivo è presente un adesivo ma non penso che sia correlato al numero di serie. Sarebbe bello conoscere l'ID del dispositivo senza accenderlo e collegarlo.
Scoop

3
@AlexisK È disponibile solo nel software.
Alex Chamberlain,

2
Corretto, non sembra esserci alcuna relazione con l'adesivo e il numero di serie. Ho letto l'adesivo di un certo numero di Pi e ho provato a decodificarlo. Sebbene Raspberry abbia probabilmente elenchi interni che collegano entrambi, non sembra che ci sia alcun modo per calcolare il seriale o MAC da esso.
EDP,

Risposte:


79

Il numero di serie è disponibile in /proc/cpuinfo; per esempio,

 pi@raspberrypi:~$ cat /proc/cpuinfo
 Processor       : ARMv6-compatible processor rev 7 (v6l)
 BogoMIPS        : 697.95
 Features        : swp half thumb fastmult vfp edsp java tls
 CPU implementer : 0x41
 CPU architecture: 7
 CPU variant     : 0x0
 CPU part        : 0xb76
 CPU revision    : 7

 Hardware        : BCM2708
 Revision        : 1000002
 Serial          : 000000000000000d

bash

È possibile utilizzare tubazioni bash molto semplici

cat /proc/cpuinfo | grep Serial | cut -d ' ' -f 2

Poiché le schede vengono utilizzate sul lato sinistro dei due punti, il taglio del carattere spazio cattura in modo affidabile solo il numero di serie.

Le versioni precedenti di questa risposta tagliavano i due punti, che producevano uno spazio iniziale nella variabile. Quello spazio iniziale non viene rimosso durante l'assegnazione delle variabili come precedentemente suggerito.

Bash / Perl

In Bash, è molto semplice estrarre ... usando Perl. Uso

cat /proc/cpuinfo | perl -n -e '/^Serial\s*:\s([0-9a-f]{16})$/ && print "$1\n"'

Per esempio,

$ cat /proc/cpuinfo | perl -n -e '/^Serial\s*:\s([0-9a-f]{16})$/ && print "$1\n"'
000000000000000d

Pitone

Raspberry Spy fornisce un esempio molto utile di Python.

def getserial():
  # Extract serial from cpuinfo file
  cpuserial = "0000000000000000"
  try:
    f = open('/proc/cpuinfo','r')
    for line in f:
      if line[0:6]=='Serial':
        cpuserial = line[10:26]
    f.close()
  except:
    cpuserial = "ERROR000000000"

  return cpuserial

Riferimenti

  1. Pagine del prodotto chiave di licenza
  2. Raspberry Spy: ottenere il numero di serie di Raspberry Pi usando Python

6
Perl accetterà i nomi dei file come argomenti. Non è necessario usare cat.
Dennis Williamson,

3
le ultime 6 cifre del mio numero seriale sono le stesse delle ultime 6 cifre del mio indirizzo MAC. E 'vero per te?
Scoop

6
<il reindirizzamento funziona anche, quindi è un uso inutile di cat.
XTL

3
C'è un modo per ottenere queste informazioni fisicamente? Voglio dire sul tabellone, quindi non devo avviare ogni pi per ottenere queste informazioni.
Zeezer,

3
È unico? sembra un po 'corto ... nel mio seriale usato solo 4 byte, tutto il resto sono zero
Flash Thunder

12

Bash / Grep

Utilizzando grep:

grep -Po '^Serial\s*:\s*\K[[:xdigit:]]{16}' /proc/cpuinfo

bash

Utilizzo di Bash puro senza l'utilizzo di utilità esterne:

pattern='^Serial.*([[:xdigit:]]{16})$'
while read -r line
do
    if [[ $line =~ $pattern ]]
    then
        echo "${BASH_REMATCH[1]}"
    fi
done < /proc/cpuinfo

L'output di uno dei precedenti è lo stesso.


questo è l'unico che ha funzionato per me
Cwd,

Questo non funziona: 'P' è un'opzione non valida. Almeno in pcpAudioCore
theking2,

1
@ theking2: temo di non avere familiarità con pcpAudioCore. L' -P(Perl regex) è un'opzione di versioni moderne di GNU grep.
Dennis Williamson,

8

Bash / Awk

Dal momento che questo si è rivelato essere una sorta di "quanti modi puoi ottenere il seriale" ecco la versione awk

  awk '/ ^ Serial \ s *: \ s / {print $ 3}' / proc / cpuinfo

7

NodeJS

Per chiunque sia interessato qui è un modo per ottenere il numero di serie Raspberry utilizzando NodeJS:

function getserial(){

   var fs = require('fs');

   var content = fs.readFileSync('/proc/cpuinfo', 'utf8');

   var cont_array = content.split("\n");

   var serial_line = cont_array[cont_array.length-2];

   var serial = serial_line.split(":");

   return serial[1].slice(1);

}

Per qualsiasi motivo, content_array.length-2 non sempre funziona per me. A volte mi dà "Raspberry Pi 4 Modello B Rev 1.1" che è la linea "Modello" subito dopo la linea "Seriale". Quindi ho cambiato la tua funzione in questo (vedi il prossimo commento) per essere sicuro.
fivedogit

funzione getserial () {var fs = require ('fs'); var content = fs.readFileSync ('/ proc / cpuinfo', 'utf8'); var cont_array = content.split ("\ n"); var x = 0; var serial_line = ""; while (x <cont_array.length) {serial_line = cont_array [x]; if (serial_line.startsWith ("Serial")) {return serial_line.split (":") [1] .slice (1); } x ++; }}
fivedogit

5
grep -i serial /proc/cpuinfo | cut -d : -f2

1
la programmazione del golf non è incoraggiata sul sito web, perché è molto difficile seguire la tua risposta per i principianti, soprattutto se non scrivi alcuna spiegazione o commento dettagliato.
Lenik,

1
Mi oppongo a chiamare questa risposta "programmazione golf" rispetto a quella ancora più criptica come "Bash / Awk". In realtà, intendevo elevare questa risposta per ragioni di uguaglianza, ma dopo averla eseguita sul mio PI e confrontata con un'altra versione, non lo farò perché devo ammettere, questa risposta non dà un risultato preciso inserendo spazio aggiuntivo. PS: Ma non lo tralascerò anche io
Van Jone il

5

Utilizzando awk:

cat /proc/cpuinfo | grep Serial | awk ' {print $3}'

6
Questo è un bell'esempio di UUOC . Potrebbe essere semplicemente scrittoawk '/Serial/{print $3}' /proc/cpuinfo
Ripat

2

Il più breve e semplice non è stato ancora fornito come risposta. Questo, in sed:

sed -n '/^Serial/{s/.* //;p}' /proc/cpuinfo

senso:

  • sed -n - esegui l'editor di stream senza stampare ogni riga
  • /^Serial/- trova solo le righe che iniziano con la parola "Seriale"
  • s/.* //;- sostituisci tutto fino all'ultimo spazio con niente (sed regexes sono golosi , a proposito)
  • p - stampa il risultato.

sed a volte prende una brutta reputazione per essere difficile da usare e criptico, ma è disponibile e funziona allo stesso modo (a patto di attenersi alle convenzioni POSIX) su molti tipi di Linux e Unix.


1
Il mio one-liner per rimuovere anche gli zeri iniziali:sed -n 's/^Serial\s*: 0*//p' /proc/cpuinfo
Thomas,

1

Sì. In effetti questo è il modo di ottenerlo.

È divertente che il mio Pi0 abbia gli stessi dati (seriali) dell'esempio sopra. Non esiste un differenziatore tra il mio seriale PI0 e quello pubblicato da Alex Chamberlain

Per PI3 hai ottenuto 4 processori

#cat /proc/cpuinfo

processor       : 0
model name      : ARMv7 Processor rev 4 (v7l)
BogoMIPS        : 38.40
Features        : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt                                                                                                                      vfpd32 lpae evtstrm crc32
CPU implementer : 0x41
CPU architecture: 7
CPU variant     : 0x0
CPU part        : 0xd03
CPU revision    : 4

processor       : 1
model name      : ARMv7 Processor rev 4 (v7l)
BogoMIPS        : 38.40
Features        : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt                                                                                                                      vfpd32 lpae evtstrm crc32
CPU implementer : 0x41
CPU architecture: 7
CPU variant     : 0x0
CPU part        : 0xd03
CPU revision    : 4

processor       : 2
model name      : ARMv7 Processor rev 4 (v7l)
BogoMIPS        : 38.40
Features        : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt                                                                                                                      vfpd32 lpae evtstrm crc32
CPU implementer : 0x41
CPU architecture: 7
CPU variant     : 0x0
CPU part        : 0xd03
CPU revision    : 4

processor       : 3
model name      : ARMv7 Processor rev 4 (v7l)
BogoMIPS        : 38.40
Features        : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt                                                                                                                      vfpd32 lpae evtstrm crc32
CPU implementer : 0x41
CPU architecture: 7
CPU variant     : 0x0
CPU part        : 0xd03
CPU revision    : 4

Hardware        : BCM2709
Revision        : a02082
Serial          : 000000003d1d1c36
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.