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
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
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
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
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);
}
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 ++; }}
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}'
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).
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
Antworten:
Die Seriennummer finden Sie in
/proc/cpuinfo
; zum Beispiel,Bash
Sie können sehr einfache Bash-Rohre verwenden
Da Tabulatoren auf der linken Seite des Doppelpunkts verwendet werden, erfasst das Abschneiden des Leerzeichens zuverlässig nur die Seriennummer.
Bash / Perl
In Bash ist es sehr einfach, ... mit Perl zu extrahieren. Verwenden
Zum Beispiel,
Python
Raspberry Spy bietet ein sehr nützliches Python-Beispiel.
Verweise
quelle
cat
.Bash / Grep
Verwenden von
grep
:Bash
Verwenden von Pure Bash ohne Verwendung externer Dienstprogramme:
Die Ausgabe der beiden oben genannten ist identisch.
quelle
-P
(Perl-Regex) ist eine Option für moderne Versionen von GNUgrep
.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
quelle
NodeJS
Für alle Interessierten ist hier eine Möglichkeit, die Himbeer-Seriennummer mit NodeJS zu erhalten:
quelle
quelle
Verwenden von
awk
:quelle
awk '/Serial/{print $3}' /proc/cpuinfo
Das kürzeste und einfachste wurde noch nicht beantwortet. Dies in sed:
Bedeutung:
sed -n
- Starten Sie den Stream-Editor, ohne jede Zeile auszudrucken/^Serial/
- Nur Zeilen abgleichen, die mit dem Wort "Seriell" beginnens/.* //;
- 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).
quelle
sed -n 's/^Serial\s*: 0*//p' /proc/cpuinfo
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
quelle