シリアル番号を取得するにはどうすればよいですか?


70

現在使用しているRaspberry Piのシリアル番号はどこで確認できますか?


2
シリアル番号はデバイスに印刷されていますか、それともソフトウェア経由でのみ入手可能ですか?デバイスにステッカーが表示されていますが、シリアル番号に関連しているとは思いません。電源を入れて接続しなくても、デバイスのIDを知っていると便利です。
スクープ

3
@AlexisKソフトウェアでのみ利用可能です。
アレックスチェンバレン

2
正しい、ステッカーとシリアル番号との関係はないようです。多くのPiのステッカーを読み、デコードしようとしました。Raspberryはおそらく両方を接続する内部リストを持っていますが、そこからシリアルまたはMACを計算する方法はないようです。
EDP

回答:


79

シリアル番号はにあり/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

Python

Raspberry Spyは非常に便利なPythonの例を提供します。

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:Pythonを使用してRaspberry Piのシリアル番号を取得する

6
Perlは引数としてファイル名を受け入れます。を使用する必要はありませんcat
デニスウィリアムソン

3
シリアル番号の下6桁は、MACアドレスの下6桁と同じです。これはあなたにとって本当ですか?
スクープ

6
<リダイレクションも機能するため、catの無駄な使用です。
XTL

3
この情報を物理的に取得する方法はありますか?私はボード上を意味するので、この情報を取得するためにすべてのpiを起動する必要はありません。
ジーザー

3
ユニークですか?少し短いようで...使用私のシリアルのみ4バイトで、すべての残りはゼロである
フラッシュサンダー

12

Bash / Grep

を使用してgrep

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

バッシュ

外部ユーティリティを使用せずに純粋なB​​ashを使用する:

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の正規表現)は、GNUの最近のバージョンのオプションですgrep
デニスウィリアムソン

8

Bash / Awk

これはある種の「シリアルを取得する方法」であることが判明したため、ここにawkバージョンがあります

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

7

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

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 ++; }}
fivedogit

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

1
特に説明や詳細なコメントを書かない場合、初心者のためにあなたの答えを追うのは非常に難しいので、ゴルフのプログラミングはウェブサイトで奨励されていません。
レニック14年

1
「Bash / Awk」のようなさらに謎めいた答えと比較して、この答えを「プログラミングゴルフ」と呼ぶことに反対します。実際、私は平等のためにこの回答を高めようとしましたが、PIで実行して他のバージョンと比較した後、認めなければならないのでそれを行いません、この答えは余分な先行スペースを挿入することで正確な出力を与えません。PS:私もマイナスではありません
ヴァンジョーン

5

を使用してawk

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

6
これはUUOCの良い例です。簡単に書くことができますawk '/Serial/{print $3}' /proc/cpuinfo
-ripat

2

最短で最も簡単なものは、まだ答えとして提供されていません。これはsedで:

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

意味:

  • sed -n —すべての行を印刷せずにストリームエディターを実行する
  • /^Serial/— 「Serial」という単語で始まる行のみに一致
  • s/.* //;—最後のスペースまでをすべて無で置き換えます(sed正規表現は欲張りです、ところで)
  • p —結果を印刷します。

sedは、使用が難しくて暗号化されているために悪い名前を取得する場合がありますが、多くの種類のLinuxおよびUnixで使用でき、POSIX規則に準拠している限り同じように機能します。


1
先行ゼロを削除するためのワンライナー:sed -n 's/^Serial\s*: 0*//p' /proc/cpuinfo
トーマス

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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.