Як отримати серійний номер?


69

Де я можу знайти серійний номер Raspberry Pi, який я зараз використовую?


2
чи друкується серійний номер на пристрої чи доступний лише через програмне забезпечення? Я бачу, що на пристрої є наклейка, але я не думаю, що це стосується серійного номера. Було б непогано знати ідентифікатор пристрою, не вмикаючи його та підключаючи.
Scoop

3
@AlexisK Доступний лише у програмному забезпеченні.
Алекс Чемберлен

2
Правильно, схоже, що стосунки з наклейкою та порядковим номером не мають ніякого відношення. Я прочитав наклейку ряду пі та намагався її розшифрувати. Незважаючи на те, що у Raspberry, мабуть, є внутрішні списки, що з'єднують обидва, не здається, що існує спосіб обчислити послідовний або 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

Баш

Можна використовувати дуже базові трубопроводи

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 Pi за допомогою Python

6
Perl прийме назви файлів як аргументи. Користуватися не потрібно cat.
Денніс Вільямсон

3
останні 6 цифр мого серійного номера такі самі, як останні 6 цифр моєї MAC адреси. Це правда для вас?
Scoop

6
<перенаправлення також працює, тож це марне використання кота.
XTL

3
Чи є спосіб отримати цю інформацію фізично? Я маю на увазі на дошці, тому мені не потрібно завантажувати кожну пі, щоб отримати цю інформацію.
Zeezer

3
Це унікально? здається трохи коротким ... в моєму серіалі використовуються лише 4 байти, усі інші нулі
Flash Thunder

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(Perl регулярний вираз) варіант сучасних версій GNU grep.
Денніс Вільямсон

7

Bash / Awk

Оскільки це виявилося певним "скільки способів отримати серійний", ось версія awk

  awk '/ ^ Серійний \ s *: \ s / {print $ 3}' / proc / cpuinfo

6

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". Тому я змінив вашу функцію на це (див. Наступний коментар), щоб переконатися.
п'ятьдогіт

функція getserial () {var fs = requ ('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 ++; }}
п'ятьдогіт

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 та тим, який розмістив Алекс Чемберлен

За 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/- збігаються лише рядки, які починаються словом "Серійний"
  • s/.* //;- замініть все до останнього простору нічим (sed regexes жадібні , btw)
  • p - роздрукувати результат.

sed іноді отримує погану назву за те, що він важкий у використанні та криптовалют, але він доступний і працює однаково (доки ви дотримуєтесь конвенцій POSIX) для багатьох типів Linux та Unix.


1
Мій однолінійний навіть зняти провідні нулі:sed -n 's/^Serial\s*: 0*//p' /proc/cpuinfo
Томас
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.