¿Cómo obtengo el número de serie?

70

¿Dónde puedo encontrar el número de serie de la Raspberry Pi que estoy usando actualmente?

Alex Chamberlain
fuente
2
¿Está impreso el número de serie en el dispositivo o solo está disponible a través del software? Veo que hay una pegatina en el dispositivo, pero no creo que esté relacionado con el número de serie. Sería bueno saber la ID del dispositivo sin tener que encenderlo y conectarlo.
Scoop
3
@AlexisK Solo está disponible en software.
Alex Chamberlain
2
Correcto, no parece haber ninguna relación con la etiqueta y el número de serie. He leído la pegatina de varios Pi y he intentado decodificarla. Si bien Raspberry probablemente tiene listas internas que conectan ambos, no parece que haya alguna forma de calcular el número de serie o MAC a partir de él.
EDP

Respuestas:

79

El número de serie se puede encontrar en /proc/cpuinfo; por ejemplo,

 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

Golpetazo

Puedes usar tuberías bash muy básicas

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

Dado que las pestañas se usan en el lado izquierdo del colon, cortar el carácter de espacio capturará de manera confiable solo el número de serie.

Las versiones anteriores de esta respuesta cortaban los dos puntos, lo que producía un espacio principal en la variable. Ese espacio inicial no se elimina durante la asignación de variables como se sugirió anteriormente.

Bash / Perl

En Bash, es muy simple extraer ... usando Perl. Utilizar

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

Por ejemplo,

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

Pitón

Raspberry Spy proporciona un ejemplo muy útil de 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

Referencias

  1. Páginas de productos de clave de licencia
  2. Raspberry Spy: Cómo obtener su número de serie de Raspberry Pi usando Python
Alex Chamberlain
fuente
66
Perl aceptará nombres de archivo como argumentos. No es necesario usar cat.
Dennis Williamson
3
Los últimos 6 dígitos de mi número de serie son los mismos que los últimos 6 dígitos de mi dirección MAC. ¿Es esto cierto para ti?
Scoop
66
<la redirección también funciona, por lo que es un uso inútil de cat.
XTL
3
¿Hay alguna forma de obtener esta información físicamente? Quiero decir en el tablero, así que no tengo que arrancar cada pi para obtener esta información.
Zeezer
3
¿Es único? parece un poco corto ... en mi serie solo se usan 4 bytes, todos los demás son ceros
Flash Thunder
12

Bash / Grep

Utilizando grep:

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

Golpetazo

Usando puro Bash sin usar ninguna utilidad externa:

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

La salida de cualquiera de los anteriores es la misma.

Dennis Williamson
fuente
este es el único que funcionó para mí
cwd
Esto no funciona: 'P' es una opción no válida. Al menos en pcpAudioCore
theking2
1
@ theking2: Me temo que no estoy familiarizado con pcpAudioCore. El -P(Perl regex) es una opción de versiones modernas de GNU grep.
Dennis Williamson
8

Bash / Awk

Dado que esto resultó ser una especie de "¿de cuántas maneras puede obtener la serie" aquí está la versión awk

  awk '/ ^ Serial \ s *: \ s / {print $ 3}' / proc / cpuinfo
ps-rpi
fuente
7

NodeJS

Para cualquier persona interesada, aquí hay una manera de obtener el número de serie de frambuesa usando 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);

}
M. Martins
fuente
Por alguna razón, content_array.length-2 no siempre funciona para mí. A veces me da "Raspberry Pi 4 Modelo B Rev 1.1", que es la línea "Modelo" justo después de la línea "Serie". Así que cambié su función a esto (ver el siguiente comentario) para asegurarme.
fivedogit
función 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
usuario14752
fuente
1
No se recomienda programar golf en el sitio web, porque es muy difícil seguir su respuesta para principiantes, especialmente si no escribe ninguna explicación o comentario detallado.
lenik
1
Me opondría a llamar a esta respuesta "programación de golf" en comparación con una aún más críptica como "Bash / Awk". En realidad, tenía la intención de elevar esta respuesta en aras de la igualdad, pero después de ejecutarla en mi PI y compararla con otra versión, no lo haré porque debo admitir que esta respuesta no está dando un resultado preciso insertando espacio inicial adicional. PD: Sin embargo, no lo voy a menos
Van Jone
5

Utilizando awk:

cat /proc/cpuinfo | grep Serial | awk ' {print $3}'
Nombre
fuente
66
Ese es un buen ejemplo de UUOC . Podría escribirse simplementeawk '/Serial/{print $3}' /proc/cpuinfo
ripat
2

Lo más corto y lo más simple aún no se ha proporcionado como respuesta. Esto, en sed:

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

sentido:

  • sed -n - ejecuta el editor de flujo sin imprimir cada línea
  • /^Serial/- coincide solo con las líneas que comienzan con la palabra "Serie"
  • s/.* //;- Reemplace todo hasta el último espacio con nada (las expresiones regulares sed son codiciosas , por cierto)
  • p - imprime el resultado.

A veces, sed recibe un mal nombre por ser difícil de usar y críptico, pero está disponible y funciona de la misma manera (siempre y cuando se adhiera a las convenciones POSIX) en muchos tipos de Linux y Unix.

scruss
fuente
1
Mi sola línea para eliminar incluso los ceros iniciales:sed -n 's/^Serial\s*: 0*//p' /proc/cpuinfo
Thomas
1

Si. De hecho, esta es la forma de conseguirlo.

Es curioso que mi Pi0 tenga los mismos datos (en serie) que en el ejemplo anterior. No hay diferenciador entre mi serie PI0 y la publicada por Alex Chamberlain

Para PI3 tienes 4 procesadores

#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
Colateral
fuente