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

评论

序列号是打印在设备上还是只能通过软件获得?我看到设备上有一个标签,但我认为它与序列号无关。知道设备的ID而不用打开电源并连接它会很高兴。

@AlexisK仅在软件中可用。

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

#1 楼

序列号可以在/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


由于冒号的左侧使用了制表符,因此切掉空格字符将只能可靠地捕获序列号。


该答案的先前版本在冒号上进行剪切,从而在变量中产生前导空格。如前所述,在变量分配过程中不会删除前导空间。


Bash / Perl

在Bash中,使用Perl提取...非常简单。使用

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


例如,

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


Python

Raspberry Spy提供一个非常有用的Python示例。使用Python的Pi序列号


评论


Perl将接受文件名作为参数。不必使用猫。

–丹尼斯·威廉姆森
2012年10月4日在21:18

我的序列号的后6位与我的MAC地址的后6位相同。这是真的吗?

–独家新闻
2012年10月4日在21:51



<重定向也有效,因此对cat毫无用处。

– XTL
2012年10月5日,下午6:21

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

– Zeezer
16年11月30日在14:46

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

– Flash Thunder
16年12月14日在23:18

#2 楼

Bash / Grep

使用grep

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


Bash

使用纯Bash而不使用任何外部实用程序:

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


以上两个的输出是相同的。

评论


这是唯一为我工作的人

– cwd
2014年3月26日19:36

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

–theking2
17年4月17日在16:06



@ theking2:恐怕我不熟悉pcpAudioCore。 -P(Perl正则表达式)是GNU grep的现代版本的选项。

–丹尼斯·威廉姆森
17年4月17日在17:26

#3 楼

Bash / Awk

由于原来是某种“可以通过多种方式获得序列号”,因此这里是awk版本。

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


#4 楼

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”,即“ Serial”行之后的“ Model”行。因此,请确保将您的功能更改为此(请参阅下一条注释)。

– 5dogdogit
19-10-5在21:34



功能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
– 5dogdogit
19-10-5在21:34

@fivedogit的编辑是解析输出IMO的更合适的方法。如果您要告诉人员如何解析该输出,请告诉他们查找以“ Serial”开头的行,而不是查找第二行。

– p10ben
昨天

#5 楼

现在,/sys/firmware/devicetree/base/serial-number似乎更通用。
并且不需要任何额外的处理。
# SN=$(cat /sys/firmware/devicetree/base/serial-number)
# echo $SN
0000000061c8eda7


BTW,这里也是模型( / base / model`)

评论


这是一种非常好的方法,也避免使用管道和填充物来获取序列号。测试可以在我的Rpi4上使用。如果在以前的模型上不起作用,将报告。

–gromain
9月14日16:19

@gromain也已通过2b / 3b / 3b +测试。它应与任何具有DT内核的RPi一起使用。

– edo1
9月14日21:46

#6 楼

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


评论


不鼓励在网站上编程高尔夫,因为对于初学者来说很难遵循您的答案,尤其是如果您不写任何解释或详细评论时。

– lenik
2014年5月10日上午8:03

与更神秘的“ Bash / Awk”相比,我反对将此答案称为“编程高尔夫球”。实际上,我打算为了平等而提高答案,但是在我的PI上运行它并与其他版本进行比较后,由于必须承认,它不会这样做,因为插入额外的前导空格不能给出准确的输出。 PS:我也不会减

– Van Jone
2015年3月25日在23:48



它仍然取决于输出中倒数第二行。无法保证会一直如此,并且在将来的内核中可能会更改。按照@fivedogit对另一个答案的评论,搜索“ Serial”标头要好得多。

– p10ben
昨天

#7 楼

使用awk

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


评论


这是UUOC的一个很好的例子。可以简单地写为awk'/ Serial / {print $ 3}'/ proc / cpuinfo

–ripat
16年4月4日在17:30

#8 楼

尚未提供最短和最简单的答案。在sed中,这是:

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


含义:



sed -n —运行流编辑器而不打印每一行

/^Serial/ —仅匹配以“ Serial”开头的行。 />
s/.* //; —打印结果。

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

评论


我的一线甚至删除前导零:sed -n's / ^ Serial \ s *:0 * // p'/ proc / cpuinfo

–托马斯
18年5月22日在15:28

#9 楼

是。确实,这是获得它的方法。

有趣的是我的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


#10 楼

这个SE上最常被回答的问题?...也许可以这样做:
$ grep Serial /proc/cpuinfo

还有一个好处:

树莓派具有“随机分配”的序列号到非易失性存储器。在这里就这些序列号是否唯一进行了长时间的讨论,但最重要的是算法是芯片制造商专有的。这实际上意味着“没有人知道序列号是否可以算作真正唯一”。它显然被认为“足够独特”,可以保护£2.40的MPEG-2许可证密钥-如果这样可以让您睡得更好:)