Wie bekomme ich die Seriennummer?

70

Wo finde ich die Seriennummer des aktuell verwendeten Raspberry Pi?

Alex Chamberlain
quelle
2
Ist die Seriennummer auf dem Gerät aufgedruckt oder nur über Software erhältlich? Ich sehe, dass sich auf dem Gerät ein Aufkleber befindet, glaube aber nicht, dass er mit der Seriennummer zusammenhängt. Es wäre schön, die ID des Geräts zu kennen, ohne es einschalten und anschließen zu müssen.
Scoop
3
@AlexisK Es ist nur in Software verfügbar.
Alex Chamberlain
2
Richtig, es scheint keine Beziehung zu dem Aufkleber und der Seriennummer zu bestehen. Ich habe den Aufkleber einiger Pi gelesen und versucht, ihn zu entschlüsseln. Während Raspberry wahrscheinlich interne Listen hat, die beide verbinden, scheint es keine Möglichkeit zu geben, die serielle oder die MAC-Adresse daraus zu berechnen.
EDP

Antworten:

79

Die Seriennummer finden Sie in /proc/cpuinfo; zum Beispiel,

 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

Sie können sehr einfache Bash-Rohre verwenden

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

Da Tabulatoren auf der linken Seite des Doppelpunkts verwendet werden, erfasst das Abschneiden des Leerzeichens zuverlässig nur die Seriennummer.

Frühere Versionen dieser Antwort haben den Doppelpunkt abgeschnitten, wodurch ein führendes Leerzeichen in der Variablen erzeugt wurde. Dieses führende Leerzeichen wird bei der Variablenzuweisung nicht entfernt, wie zuvor vorgeschlagen.

Bash / Perl

In Bash ist es sehr einfach, ... mit Perl zu extrahieren. Verwenden

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

Zum Beispiel,

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

Python

Raspberry Spy bietet ein sehr nützliches Python-Beispiel.

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

Verweise

  1. Lizenzschlüssel Produktseiten
  2. Raspberry Spy: Abrufen Ihrer Raspberry Pi-Seriennummer mit Python
Alex Chamberlain
quelle
6
Perl akzeptiert Dateinamen als Argumente. Es ist nicht notwendig zu benutzen cat.
Dennis Williamson
3
Die letzten 6 Ziffern meiner Seriennummer stimmen mit den letzten 6 Ziffern meiner MAC-Adresse überein. Ist das wahr für dich?
Scoop
6
<Die Umleitung funktioniert auch, daher ist die Verwendung von cat nutzlos.
XTL
3
Gibt es eine Möglichkeit, diese Informationen physisch abzurufen? Ich meine an der Tafel, also muss ich nicht jedes Pi booten, um diese Informationen zu erhalten.
Zeezer
3
Ist es einzigartig? scheint ein wenig kurz ... in meiner seriellen nur 4 Bytes verwendet, alle übrigen sind Nullen
Flash Thunder
12

Bash / Grep

Verwenden von grep:

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

Bash

Verwenden von Pure Bash ohne Verwendung externer Dienstprogramme:

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

Die Ausgabe der beiden oben genannten ist identisch.

Dennis Williamson
quelle
Dies ist die einzige, die für mich gearbeitet hat
CWD
Dies funktioniert nicht: 'P' ist eine ungültige Option. Zumindest in pcpAudioCore
theking2
1
@ theking2: Ich fürchte, ich bin mit pcpAudioCore nicht vertraut. Das -P(Perl-Regex) ist eine Option für moderne Versionen von GNU grep.
Dennis Williamson
8

Bash / Awk

Da sich herausstellte, dass es sich um eine Art "Wie viele Möglichkeiten gibt es, die Seriennummer zu erhalten?" Handelt es sich hier um die awk-Version

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

NodeJS

Für alle Interessierten ist hier eine Möglichkeit, die Himbeer-Seriennummer mit NodeJS zu erhalten:

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
quelle
Aus irgendeinem Grund funktioniert content_array.length-2 bei mir nicht immer. Manchmal gibt es mir "Raspberry Pi 4 Model B Rev 1.1", das ist die "Model" -Zeile direkt nach der "Serial" -Zeile. Also habe ich deine Funktion in diese geändert (siehe nächster Kommentar), um sicherzugehen.
Fivedogit
function 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
user14752
quelle
1
Das Programmieren von Golf wird auf der Website nicht empfohlen, da es sehr schwierig ist, Ihre Antwort für Anfänger zu verfolgen, insbesondere wenn Sie keine Erklärung oder keinen ausführlichen Kommentar verfassen.
Lenik
1
Ich würde es ablehnen, diese Antwort "Programmiergolf" zu nennen, verglichen mit einer noch kryptischeren Antwort wie "Bash / Awk". Eigentlich wollte ich diese Antwort aus Gründen der Gleichheit erhöhen, aber nachdem ich sie auf meinem PI ausgeführt und mit einer anderen Version verglichen habe, wird dies nicht getan, da ich zugeben muss, dass diese Antwort keine genaue Ausgabe durch Einfügen von zusätzlichem führenden Leerzeichen liefert. PS: Ich werde es aber auch nicht
Van Jone
5

Verwenden von awk:

cat /proc/cpuinfo | grep Serial | awk ' {print $3}'
Name
quelle
6
Das ist ein schönes Beispiel für UUOC . Könnte einfach geschrieben werdenawk '/Serial/{print $3}' /proc/cpuinfo
ripat
2

Das kürzeste und einfachste wurde noch nicht beantwortet. Dies in sed:

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

Bedeutung:

  • sed -n - Starten Sie den Stream-Editor, ohne jede Zeile auszudrucken
  • /^Serial/- Nur Zeilen abgleichen, die mit dem Wort "Seriell" beginnen
  • s/.* //;- alles bis zum letzten Leerzeichen durch nichts ersetzen (sed reguläre Ausdrücke sind übrigens gierig )
  • p - das Ergebnis ausdrucken.

sed hat manchmal einen schlechten Ruf, weil es schwer zu bedienen und kryptisch ist, aber es ist verfügbar und funktioniert unter vielen Linux- und Unix-Typen genauso (solange Sie sich an POSIX-Konventionen halten).

scruss
quelle
1
Mein sed -n 's/^Serial\s*: 0*//p' /proc/cpuinfo
Einzeiler,
1

Ja. In der Tat ist dies der Weg, um es zu bekommen.

Es ist komisch, dass mein Pi0 die gleichen Daten (seriell) wie im obigen Beispiel hat. Es gibt keinen Unterschied zwischen meiner PI0-Serie und der von Alex Chamberlain

Für PI3 gibt es 4 Prozessoren

#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
quelle