Làm thế nào để tôi có được số sê-ri?


70

Tôi có thể tìm số sê-ri của Raspberry Pi hiện đang sử dụng ở đâu?


2
Số sê-ri được in trên thiết bị hay chỉ có sẵn thông qua phần mềm? Tôi thấy có một nhãn dán trên thiết bị nhưng tôi không nghĩ rằng nó có liên quan đến số sê-ri. Sẽ thật tuyệt khi biết ID của thiết bị mà không cần phải bật nguồn và kết nối nó.
Scoop

3
@AlexisK Nó chỉ có sẵn trong phần mềm.
Alex Chamberlain

2
Chính xác, dường như không có bất kỳ mối quan hệ nào với nhãn dán và số sê-ri. Tôi đã đọc nhãn dán của một số Pi và cố gắng giải mã nó. Mặc dù Raspberry có thể có các danh sách nội bộ kết nối cả hai, nhưng dường như không có cách nào để tính nối tiếp hoặc MAC từ nó.
EDP

Câu trả lời:


79

Số sê-ri có thể được tìm thấy trong /proc/cpuinfo; ví dụ,

 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

Bạn có thể sử dụng đường ống bash rất cơ bản

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

Vì các tab được sử dụng ở phía bên trái của dấu hai chấm, nên việc cắt ký tự khoảng trắng sẽ chỉ bắt được số sê-ri một cách đáng tin cậy.

Các phiên bản trước của câu trả lời này cắt trên dấu hai chấm, tạo ra một không gian hàng đầu trong biến. Không gian hàng đầu đó không bị xóa trong khi gán biến như đã đề xuất trước đây.

Bash / Perl

Trong Bash, rất đơn giản để trích xuất ... bằng cách sử dụng Perl. Sử dụng

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

Ví dụ,

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

Con trăn

Raspberry Spy cung cấp một ví dụ Python rất hữu ích.

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

Người giới thiệu

  1. Giấy phép trang sản phẩm
  2. Raspberry Spy: Lấy số sê-ri Raspberry Pi của bạn bằng Python

6
Perl sẽ chấp nhận tên tệp làm đối số. Không cần thiết phải sử dụng cat.
Dennis Williamson

3
6 chữ số cuối của số sê-ri của tôi giống với 6 chữ số cuối của địa chỉ MAC của tôi. Điêu nay đung vơi bạn chư?
Scoop

6
<chuyển hướng cũng hoạt động, vì vậy đó là một cách sử dụng mèo vô dụng.
XtL

3
Có cách nào để có được thông tin này về thể chất? Ý tôi là trên bảng, vì vậy tôi không phải khởi động mọi pi để có được thông tin này.
Zeezer

3
Nó có độc đáo không? có vẻ hơi ngắn ... trong chuỗi của tôi chỉ có 4 byte được sử dụng, tất cả phần còn lại là số không
Flash Thunder

12

Bash / Grep

Sử dụng grep:

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

Bash

Sử dụng Bash thuần túy mà không sử dụng bất kỳ tiện ích bên ngoài nào:

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

Đầu ra của một trong hai ở trên là như nhau.


đây là người duy nhất làm việc cho tôi
cwd

Điều này không hoạt động: 'P' là một tùy chọn không hợp lệ. Ít nhất là trong pcpAudioCore
theking2

1
@ theking2: Tôi sợ tôi không quen với pcpAudioCore. Các -P(Perl regex) là một lựa chọn của các phiên bản hiện đại của GNU grep.
Dennis Williamson

8

Bash / Awk

Vì đây hóa ra là một loại "có bao nhiêu cách bạn có thể nhận được nối tiếp" ở đây là phiên bản awk

  awk '/ ^ Nối tiếp \ s *: \ s / {in $ 3}' / Proc / cpuinfo

7

Nút

Đối với bất kỳ ai quan tâm ở đây là một cách để có được Số sê-ri Raspberry bằng 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);

}

Vì bất kỳ lý do gì, content_array.length-2 không phải lúc nào cũng phù hợp với tôi. Đôi khi, nó mang lại cho tôi "Raspberry Pi 4 Model B Rev 1.1", đây là dòng "Model" ngay sau dòng "Nối tiếp". Vì vậy, tôi đã thay đổi chức năng của bạn để này (xem bình luận tiếp theo) để đảm bảo.
fiveogit

hàm geterial () {var fs = quiries ('fs'); nội dung var = 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 ("Nối tiếp")) {return serial_line.split (":") [1] .slice (1); } x ++; }}
fiveogit

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

1
lập trình golf không được khuyến khích trên trang web, bởi vì rất khó để theo dõi câu trả lời của bạn cho người mới bắt đầu, đặc biệt nếu bạn không viết bất kỳ lời giải thích hoặc nhận xét chi tiết nào.
lenik

1
Tôi phản đối gọi câu trả lời này là "golf lập trình" so với một câu hỏi khó hiểu hơn như "Bash / Awk". Trên thực tế, tôi dự định nâng cao câu trả lời này vì sự bình đẳng, nhưng sau khi chạy nó trên PI của tôi và so sánh với phiên bản khác, sẽ không làm điều đó bởi vì phải thừa nhận, câu trả lời này không đưa ra đầu ra chính xác bằng cách chèn thêm không gian hàng đầu. Tái bút: Tôi sẽ không trừ nó nữa
Van Jone

5

Sử dụng awk:

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

6
Đó là một ví dụ hay về UUOC . Có thể được viết đơn giảnawk '/Serial/{print $3}' /proc/cpuinfo
ripat

2

Câu hỏi ngắn nhất và đơn giản nhất chưa được cung cấp như một câu trả lời. Điều này, trong sed:

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

Ý nghĩa:

  • sed -n - chạy trình chỉnh sửa luồng mà không in mỗi dòng
  • /^Serial/- chỉ khớp các dòng bắt đầu bằng từ Sê-ri Nối tiếp
  • s/.* //;- thay thế mọi thứ cho đến khi không gian cuối cùng không có gì (sed regexes là tham lam , btw)
  • p - in kết quả.

sed đôi khi có một tên xấu là khó sử dụng và khó hiểu, nhưng nó có sẵn và hoạt động theo cùng một cách (miễn là bạn tuân theo các quy ước POSIX) trên nhiều loại Linux và Unix.


1
Một lớp lót của tôi để thậm chí loại bỏ các số không hàng đầu:sed -n 's/^Serial\s*: 0*//p' /proc/cpuinfo
thomas

1

Đúng. Quả thực đây là cách để có được nó.

Thật buồn cười khi Pi0 của tôi có cùng dữ liệu (nối tiếp) như ví dụ trên. Không có sự khác biệt giữa sê-ri PI0 của tôi và cái được đăng bởi Alex Chamberlain

Đối với PI3 yo có 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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.