Как мне получить серийный номер?

70

Где я могу найти серийный номер Raspberry Pi, который я сейчас использую?

Алекс Чемберлен
источник
2
серийный номер напечатан на устройстве или он доступен только через программное обеспечение? Я вижу, что на устройстве есть наклейка, но я не думаю, что это связано с серийным номером. Было бы неплохо узнать идентификатор устройства, не включая его и не подключая его.
Совок
3
@AlexisK Это доступно только в программном обеспечении.
Алекс Чемберлен
2
Правильно, нет никакой связи с наклейкой и серийным номером. Я прочитал наклейку с рядом пи и попытался ее расшифровать. Хотя 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

В 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: Получение серийного номера Raspberry Pi с использованием Python
Алекс Чемберлен
источник
6
Perl будет принимать имена файлов в качестве аргументов. Это не обязательно использовать cat.
Деннис Уильямсон
3
последние 6 цифр моего серийного номера совпадают с последними 6 цифрами моего MAC-адреса. Это правда для вас?
Совок
6
Перенаправление также работает, так что это бесполезное использование cat.
XTL
3
Есть ли способ получить эту информацию физически? Я имею в виду на доске, поэтому мне не нужно загружать каждый пи, чтобы получить эту информацию.
Zeezer
3
Это уникально? кажется немного коротким ... в моем сериале используется только 4 байта, все остальные нули
Flash Thunder
12

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
Это не работает: «P» - неверная опция. По крайней мере, в pcpAudioCore
theking2
1
@ theking2: боюсь, я незнаком с pcpAudioCore. -P(Perl регулярное выражение) вариант современных версий GNU grep.
Деннис Уильямсон
8

Bash / Awk

Так как это оказалось чем-то вроде «сколько способов получить сериал», вот версия awk

  awk '/ ^ Serial \ s *: \ s / {print $ 3}' / proc / cpuinfo
пс-RPI
источник
7

NodeJS

Для всех, кто заинтересован, вот способ получить серийный номер Raspberry с помощью 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);

}
М. Мартинс
источник
По какой-то причине, content_array.length-2 не всегда работает для меня. Иногда это дает мне "Raspberry Pi 4 Model B Rev 1.1", которая является линией "Model" сразу после линии "Serial". Поэтому я изменил вашу функцию на это (см. Следующий комментарий), чтобы убедиться.
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
user14752
источник
1
программирование гольфа не приветствуется на сайте, потому что очень сложно следить за вашим ответом для начинающих, особенно если вы не пишете никаких объяснений или подробных комментариев.
lenik
1
Я бы не стал называть этот ответ «программирующим гольфом» в сравнении с еще более загадочным, как «Bash / Awk». На самом деле, я намеревался поднять этот ответ ради равенства, но после запуска его на моем PI и сравнения с другой версией этого делать не буду, потому что должен признать, что этот ответ не дает точного вывода путем добавления дополнительного начального пробела. PS: я не буду минус это тоже, хотя
Ван Джоне
5

Использование awk:

cat /proc/cpuinfo | grep Serial | awk ' {print $3}'
имя
источник
6
Это хороший пример UUOC . Можно было бы просто написатьawk '/Serial/{print $3}' /proc/cpuinfo
Рипат
2

Самый короткий и простой ответ пока не предоставлен. Это в седе:

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

смысл:

  • sed -n - запустить редактор потоков без печати каждой строки
  • /^Serial/- сопоставлять только строки, начинающиеся со слова «Serial»
  • s/.* //;- заменить все до последнего пробела ничем (регулярные выражения sed жадные , кстати)
  • p - распечатать результат.

Сед иногда получает дурную славу за то, что его трудно использовать и он загадочен, но он доступен и работает одинаково (при условии соблюдения соглашений POSIX) во многих типах Linux и Unix.

scruss
источник
1
Мой однострочник даже для удаления ведущих нулей:sed -n 's/^Serial\s*: 0*//p' /proc/cpuinfo
Томас
1

Да. На самом деле это способ получить это.

Забавно, что у моего Pi0 те же данные (серийные), что и в примере выше. Между моим сериалом PI0 и тем, который написал Алекс Чемберлен, нет никакой разницы

Для 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
Colateral
источник