Bagaimana saya mendapatkan nomor seri?

70

Di mana saya dapat menemukan nomor seri Raspberry Pi yang saya gunakan saat ini?

Alex Chamberlain
sumber
2
apakah nomor seri tercetak pada perangkat atau hanya tersedia melalui perangkat lunak? Saya melihat ada stiker di perangkat tetapi saya tidak berpikir itu terkait dengan nomor seri. Akan menyenangkan untuk mengetahui ID perangkat tanpa harus menyalakannya dan menghubungkannya.
Sendok
3
@AlexisK Ini hanya tersedia dalam perangkat lunak.
Alex Chamberlain
2
Benar, sepertinya tidak ada hubungan dengan stiker dan nomor seri. Saya sudah membaca stiker sejumlah Pi dan mencoba men-decode-nya. Walaupun Raspberry mungkin memiliki daftar internal yang menghubungkan keduanya, sepertinya tidak ada cara untuk menghitung serial atau MAC dari itu.
EDP

Jawaban:

79

Nomor seri dapat ditemukan di /proc/cpuinfo; sebagai contoh,

 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

Pesta

Anda dapat menggunakan bash piping yang sangat dasar

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

Karena tab digunakan di sisi kiri titik dua, memotong karakter spasi hanya akan menangkap nomor seri.

Versi sebelumnya dari jawaban ini dipotong di titik dua, yang menghasilkan ruang terdepan dalam variabel. Ruang terdepan itu tidak dihapus selama penugasan variabel seperti yang disarankan sebelumnya.

Bash / Perl

Di Bash, sangat mudah untuk mengekstrak ... dengan menggunakan Perl. Menggunakan

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

Sebagai contoh,

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

Python

Raspberry Spy memberikan contoh Python yang sangat berguna.

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

Referensi

  1. Halaman produk kunci lisensi
  2. Raspberry Spy: Mendapatkan Nomor Seri Raspberry Pi Anda Menggunakan Python
Alex Chamberlain
sumber
6
Perl akan menerima nama file sebagai argumen. Itu tidak perlu digunakan cat.
Dennis Williamson
3
6 digit terakhir dari nomor seri saya sama dengan 6 digit terakhir dari alamat MAC saya. Apakah ini benar untukmu?
Sendok
6
<Pengalihan juga berfungsi, jadi itu adalah penggunaan kucing yang tidak berguna.
XTL
3
Apakah ada cara untuk mendapatkan informasi ini secara fisik? Maksud saya di papan tulis, jadi saya tidak perlu melakukan booting setiap pi untuk mendapatkan informasi ini.
Zeezer
3
Apakah ini unik? tampaknya sedikit pendek ... di seri saya hanya 4 byte yang digunakan, sisanya adalah nol
Flash Thunder
12

Bash / Grep

Menggunakan grep:

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

Pesta

Menggunakan Bash murni tanpa menggunakan utilitas eksternal apa pun:

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

Output dari salah satu di atas adalah sama.

Dennis Williamson
sumber
ini adalah satu-satunya yang bekerja untuk saya
cwd
Ini tidak berfungsi: 'P' adalah opsi yang tidak valid. Setidaknya di pcpAudioCore
theking2
1
@ theking2: Saya khawatir saya tidak terbiasa dengan pcpAudioCore. The -P(Perl regex) adalah pilihan dari versi modern dari GNU grep.
Dennis Williamson
8

Bash / Awk

Karena ini ternyata semacam "berapa banyak cara Anda bisa mendapatkan serial" di sini adalah versi awk

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

NodeJS

Bagi siapa pun yang tertarik di sini adalah cara untuk mendapatkan Nomor Seri Raspberry menggunakan 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
sumber
Untuk alasan apa pun, content_array.length-2 tidak selalu bekerja untuk saya. Kadang-kadang itu memberi saya "Raspberry Pi 4 Model B Rev 1.1" yang merupakan "Model" tepat setelah garis "Serial". Jadi saya mengubah fungsi Anda menjadi ini (lihat komentar berikutnya) untuk memastikan.
fivedogit
function getserial () {var fs = butuhkan ('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
pengguna14752
sumber
1
pemrograman golf tidak dianjurkan di situs web, karena sangat sulit untuk mengikuti jawaban Anda untuk pemula, terutama jika Anda tidak menulis penjelasan atau komentar terperinci.
lenik
1
Saya menentang untuk menyebut jawaban ini "pemrograman golf" dibandingkan dengan yang lebih samar seperti "Bash / Awk". Sebenarnya, saya bermaksud untuk mengangkat jawaban ini demi kesetaraan, tetapi setelah menjalankannya pada PI saya dan membandingkannya dengan versi lain, tidak akan melakukannya karena harus mengakui, jawaban ini tidak memberikan hasil yang tepat dengan memasukkan ruang memimpin tambahan. PS: Saya tidak akan mengurangi itu juga
Van Jone
5

Menggunakan awk:

cat /proc/cpuinfo | grep Serial | awk ' {print $3}'
Nama
sumber
6
Itu contoh yang bagus dari UUOC . Bisa ditulis dengan sederhanaawk '/Serial/{print $3}' /proc/cpuinfo
ripat
2

Yang tersingkat dan paling sederhana belum diberikan sebagai jawaban. Ini, dalam sed:

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

berarti:

  • sed -n - Jalankan editor aliran tanpa mencetak setiap baris
  • /^Serial/- hanya mencocokkan garis yang dimulai dengan kata "Serial"
  • s/.* //;- Mengganti semuanya sampai ruang terakhir dengan apa-apa (regex sed serakah , btw)
  • p - cetak hasilnya.

kadang-kadang mendapat nama yang buruk karena sulit untuk digunakan dan samar, tetapi tersedia dan bekerja dengan cara yang sama (selama Anda tetap pada konvensi POSIX) pada banyak jenis Linux dan Unix.

scruss
sumber
1
Satu-liner saya bahkan menghapus nol terkemuka:sed -n 's/^Serial\s*: 0*//p' /proc/cpuinfo
thomas
1

Iya. Memang ini cara untuk mendapatkannya.

Sangat lucu bahwa Pi0 saya memiliki data yang sama (serial) seperti contoh di atas. Tidak ada perbedaan antara seri PI0 saya dan yang diposting oleh Alex Chamberlain

Untuk PI3 kamu mendapat 4 procesor

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