ฉันจะรับหมายเลขซีเรียลได้อย่างไร


69

ฉันจะหาหมายเลขซีเรียลของ Raspberry Pi ที่ฉันกำลังใช้อยู่ได้ที่ไหน


2
หมายเลขซีเรียลถูกพิมพ์บนอุปกรณ์หรือสามารถใช้ได้ผ่านทางซอฟต์แวร์เท่านั้น ฉันเห็นว่ามีสติกเกอร์บนอุปกรณ์ แต่ฉันไม่คิดว่ามันเกี่ยวข้องกับหมายเลขซีเรียล มันจะเป็นการดีหากได้ทราบ ID ของอุปกรณ์โดยไม่ต้องเปิดเครื่องและเชื่อมต่อ
Scoop

3
@AlexisK มีเฉพาะในซอฟต์แวร์เท่านั้น
Alex Chamberlain

2
ถูกต้องดูเหมือนว่าจะไม่มีความเกี่ยวข้องกับสติกเกอร์และหมายเลขซีเรียล ฉันอ่านสติกเกอร์ของ Pi จำนวนหนึ่งแล้วพยายามถอดรหัสมัน ในขณะที่ราสเบอร์รี่อาจมีรายการเชื่อมต่อภายในทั้งสองดูเหมือนว่าจะไม่มีวิธีการคำนวณซีเรียลหรือ MAC จากมัน
EDP

คำตอบ:


78

หมายเลขซีเรียลสามารถพบได้ใน/proc/cpuinfo; ตัวอย่างเช่น,

 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

ทุบตี

คุณสามารถใช้การทุบตีระบบพื้นฐานได้

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

เนื่องจากมีการใช้แท็บทางด้านซ้ายของโคลอนการตัดอักขระช่องว่างจะจับได้เฉพาะหมายเลขซีเรียลเท่านั้น

เวอร์ชันก่อนหน้าของคำตอบนี้ตัดกับเครื่องหมายจุดคู่ซึ่งสร้างพื้นที่ส่วนนำในตัวแปร พื้นที่ส่วนนำนั้นจะไม่ถูกลบระหว่างการกำหนดตัวแปรตามที่แนะนำไว้ก่อนหน้านี้

ทุบตี / Perl

ใน Bash มันง่ายมากในการแยก ... โดยใช้ Perl ใช้

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

ตัวอย่างเช่น,

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

หลาม

Raspberry Spyให้ตัวอย่างที่มีประโยชน์มากกับงูหลาม

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

อ้างอิง

  1. หน้าผลิตภัณฑ์คีย์ใบอนุญาต
  2. Raspberry Spy: การรับหมายเลขซีเรียลของราสเบอร์รี่ Pi โดยใช้ Python

6
Perl จะยอมรับชื่อไฟล์เป็นอาร์กิวเมนต์ catก็ไม่จำเป็นที่จะใช้
Dennis Williamson

3
6 หลักสุดท้ายของหมายเลขซีเรียลของฉันเหมือนกับที่อยู่ 6 หลักสุดท้ายของที่อยู่ MAC ของฉัน มันเป็นเรื่องจริงสำหรับคุณหรือไม่?
Scoop

6
<การเปลี่ยนเส้นทางยังใช้งานได้ดังนั้นมันจึงใช้แมวอย่างไร้ประโยชน์
XTL

3
มีวิธีใดบ้างที่จะได้รับข้อมูลนี้ทางร่างกาย? ฉันหมายถึงบนกระดานดังนั้นฉันไม่จำเป็นต้องบูตทุกครั้งเพื่อรับข้อมูลนี้
Zeezer

3
มันเป็นเอกลักษณ์หรือไม่? ดูเหมือนว่าจะสั้นไปสักหน่อย ... ในอนุกรมของฉันที่ใช้เพียง 4 ไบต์ส่วนที่เหลือทั้งหมดเป็นศูนย์
Flash Thunder

11

ทุบตี / Grep

การใช้grep:

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

ทุบตี

การใช้ pure Bash โดยไม่ต้องใช้ยูทิลิตี้ภายนอก:

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

ผลลัพธ์ของทั้งสองข้างต้นเหมือนกัน


นี่เป็นคนเดียวที่ทำงานให้ฉัน
cwd

สิ่งนี้ใช้ไม่ได้: 'P' เป็นตัวเลือกที่ไม่ถูกต้อง อย่างน้อยใน pcpAudioCore
theking2

1
@ theking2: ฉันกลัวว่าฉันไม่คุ้นเคยกับ pcpAudioCore -P(Perl regex) เป็นตัวเลือกในรุ่นที่ทันสมัยของ grepGNU
Dennis Williamson

7

ทุบตี / Awk

ตั้งแต่นี้กลายเป็นชนิด "กี่วิธีที่คุณสามารถรับอนุกรม" นี่คือรุ่น awk

  awk '/ ^ Serial \ s *: \ s / {พิมพ์ $ 3}' / proc / cpuinfo

6

NodeJS

สำหรับผู้ที่สนใจที่นี่เป็นวิธีรับหมายเลข Raspberry โดยใช้ 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);

}

ด้วยเหตุผลใดก็ตาม content_array.length-2 ไม่ได้ผลสำหรับฉันเสมอไป บางครั้งมันทำให้ฉัน "Raspberry Pi 4 รุ่น B Rev 1.1" ซึ่งเป็นบรรทัด "Model" หลังจากบรรทัด "Serial" ดังนั้นฉันจึงเปลี่ยนการทำงานของคุณเป็นแบบนี้ (ดูความคิดเห็นถัดไป) เพื่อให้แน่ใจ
fivedogit

function geterial () {var fs = ต้องการ ('fs'); var content = fs.readFileSync ('/ proc / cpuinfo', 'utf8'); var cont_array = content.split ("\ n"); var x = 0; var serial_line = ""; ในขณะที่ (x <cont_array.length) {serial_line = cont_array [x]; if (serial_line.startsWith ("Serial")) {return serial_line.split (":") [1] .slice (1); } x ++; }}
fivedogit

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

1
การเขียนโปรแกรมกอล์ฟไม่ได้รับการสนับสนุนบนเว็บไซต์เพราะมันยากมากที่จะทำตามคำตอบของคุณสำหรับผู้เริ่มต้นโดยเฉพาะอย่างยิ่งถ้าคุณไม่เขียนคำอธิบายหรือแสดงความคิดเห็นโดยละเอียด
lenik

1
ฉันไม่เห็นด้วยที่จะเรียกคำตอบนี้ว่า "การเขียนโปรแกรมกอล์ฟ" เปรียบเทียบกับคำที่มีความลับมากกว่าเช่น "Bash / Awk" ที่จริงแล้วฉันตั้งใจจะยกระดับคำตอบนี้เพื่อความเสมอภาค แต่หลังจากใช้งานบน PI ของฉันและเปรียบเทียบกับเวอร์ชันอื่นแล้วจะไม่ทำเพราะต้องยอมรับคำตอบนี้ไม่ได้ให้ผลลัพธ์ที่แม่นยำโดยการแทรกพื้นที่นำหน้าพิเศษ PS: ฉันจะไม่ลบมันด้วย
Van Jone

4

การใช้awk:

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

6
นั่นเป็นตัวอย่างที่ดีของUUOC สามารถเขียนได้ง่าย ๆawk '/Serial/{print $3}' /proc/cpuinfo
ripat

1

ใช่. อันที่จริงวิธีการที่จะได้รับมัน

มันตลกที่ Pi0 ของฉันมีข้อมูลเดียวกัน (อนุกรม) ดังตัวอย่างข้างต้น ไม่มีความแตกต่างระหว่างซีเรียล PI0 ของฉันกับโพสต์โดย Alex Chamberlain

สำหรับ PI3 yo มี 4 procesors

#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

1

คำตอบที่สั้นและง่ายที่สุดยังไม่ได้ให้คำตอบ นี่ใน sed:

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

ความหมาย:

  • sed -n - รันโปรแกรมแก้ไขสตรีมโดยไม่ต้องพิมพ์ทุกบรรทัด
  • /^Serial/- จับคู่เฉพาะบรรทัดที่ขึ้นต้นด้วยคำว่า "อนุกรม"
  • s/.* //;- แทนที่ทุกอย่างจนถึงพื้นที่สุดท้ายด้วยไม่มีอะไร (sed regexes โลภ btw)
  • p - พิมพ์ผลลัพธ์

sed บางครั้งได้รับชื่อที่ไม่ดีสำหรับการใช้งานยากและเป็นความลับ แต่ก็มีให้และทำงานในลักษณะเดียวกัน (ตราบใดที่คุณติดกับ POSIX Convention) ใน Linux และ Unix


1
หนึ่งซับของฉันที่จะได้ลบศูนย์ชั้นนำ:sed -n 's/^Serial\s*: 0*//p' /proc/cpuinfo
โทมัส
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.