일련 번호는 어떻게 얻습니까?


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

세게 때리다

매우 기본적인 bash 배관을 사용할 수 있습니다

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

탭은 콜론의 왼쪽에 사용되므로 공백 문자를 자르면 일련 번호 만 안정적으로 잡을 수 있습니다.

이 답변의 이전 버전은 변수에서 선행 공간을 생성하는 콜론을 줄였습니다. 선행 공간은 이전에 제안 된대로 변수 할당 중에 제거되지 않습니다.

배쉬 / 펄

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

파이썬

라즈베리 스파이 는 매우 유용한 파이썬 예제를 제공합니다.

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. 라즈베리 스파이 : Python을 사용하여 라즈베리 파이 일련 번호 얻기

6
펄은 파일 이름을 인수로 받아들입니다. 을 사용할 필요는 없습니다 cat.
Dennis Williamson

3
일련 번호의 마지막 6 자리는 MAC 주소의 마지막 6 자리와 같습니다. 이것이 당신에게 해당됩니까?
Scoop

6
<리디렉션도 작동하므로 고양이를 쓸모가 없습니다.
XTL

3
이 정보를 물리적으로 얻을 수있는 방법이 있습니까? 나는 보드에 있기 때문에이 정보를 얻기 위해 모든 pi를 부팅 할 필요가 없습니다.
Zeezer

3
독특합니까? 제로 조금 짧은 ... 단지 4 바이트를 사용 내 직렬, 모든 나머지는 것 같다
플래시 천둥

11

배쉬 / 그렙

사용 grep:

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

세게 때리다

외부 유틸리티를 사용하지 않고 순수 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(펄 정규식) GNU의 현대 버전의 옵션입니다 grep.
Dennis Williamson

7

배쉬 / 애크

이것은 일종의 "시리얼을 얻을 수있는 방법은 몇 가지"로 밝혀 졌기 때문에 여기 awk 버전이 있습니다.

  awk '/ ^ Serial \ s * : \ s / {print $ 3}'/ proc / cpuinfo

6

NodeJS

NodeJS를 사용하여 Raspberry 일련 번호를 얻는 방법은 다음과 같습니다.

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 Model B Rev 1.1"이 표시됩니다. 그래서 나는 당신의 기능을 이것으로 변경했습니다 (다음 주석 참조).
fivedogit

함수 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

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

1
웹 사이트에서는 프로그래밍 골프를 권장하지 않습니다. 초보자에게 답을 구하기가 특히 어렵습니다. 특히 설명이나 자세한 설명을 쓰지 않는 경우에는 더욱 그렇습니다.
lenik

1
나는 "Bash / Awk"와 같은 훨씬 더 비밀스러운 것에 비해이 대답을 "프로그래밍 골프"라고 부르기를 반대한다. 사실, 나는 평등을 위해이 답변을 향상 시키려고했지만 PI에서 실행하고 다른 버전과 비교 한 후에는 인정하지 않기 때문에 그렇지 않습니다.이 답변은 추가 선행 공간을 삽입하여 정확한 출력을 제공하지 않습니다. PS : 나도
빼지

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의 경우 4 명의 프로세서가 있습니다.

#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/— 단어 "Serial"로 시작 하는 줄만 일치
  • s/.* //;— 마지막 공간까지 모든 것을 아무것도없는 것으로 교체하십시오 (정규식은 탐욕 스럽습니다 , btw)
  • p — 결과를 인쇄하십시오.

sed는 때때로 사용하기 어렵고 암호로 인해 나쁜 이름을 얻지 만, 많은 유형의 Linux 및 Unix에서 사용 가능하고 POSIX 규칙을 따르는 한 동일한 방식으로 작동합니다.


1
선행 제로를 제거하는 내 라이너 :sed -n 's/^Serial\s*: 0*//p' /proc/cpuinfo
thomas
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.