如何获得序列号?


69

在哪里可以找到我当前使用的Raspberry Pi的序列号?


2
序列号是打印在设备上还是只能通过软件获得?我看到设备上有一个标签,但我认为它与序列号无关。无需打开设备电源并连接设备即可知道设备ID。
独家报道

3
@AlexisK仅在软件中可用。
亚历克斯·张伯伦

2
正确,似乎与标签和序列号没有任何关系。我已经阅读了许多Pi的标签,并试图对其进行解码。尽管Raspberry可能具有连接这两者的内部列表,但似乎没有任何方法可以从中计算串行或MAC。
EDP​​ 2015年

Answers:


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

在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提供了一个非常有用的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 2012年

3
有什么办法可以物理地获取此信息?我的意思是在板上,所以我不必启动每个pi即可获取此信息。
Zeezer '16

3
它独特吗?似乎有点短...在我的序列中仅使用了4个字节,其余均为零
Flash Thunder

11

Bash / Grep

使用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 2014年

这不起作用:“ P”是无效的选项。至少在pcpAudioCore中
theking2 '17

1
@ theking2:恐怕我不熟悉pcpAudioCore。该-P(Perl的正则表达式)是GNU的现代版本的选项grep
丹尼斯·威廉姆森

7

重击/ Awk

由于原来是某种“您可以通过什么方式获得序列号”,因此是awk版本

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

6

节点JS

对于任何对此感兴趣的人,都是一种使用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”,它是“ Serial”行之后的“ Model”行。因此,请确保将您的功能更改为此(请参阅下一条注释)。
fourdogit

功能getserial(){var fs = require('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]; 如果(serial_line.startsWith(“ Serial”)){返回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 2015年

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/.* //;-全部替换为最后一个空格(sed正则表达式为greedy,顺便说一句)
  • p —打印结果。

sed有时因难以使用和含糊不清而得名,但在许多类型的Linux和Unix上,它都是可用的并且以相同的方式工作(只要您遵循POSIX约定)。


1
我的单线甚至删除前导零:sed -n 's/^Serial\s*: 0*//p' /proc/cpuinfo
托马斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.