серийный номер напечатан на устройстве или он доступен только через программное обеспечение? Я вижу, что на устройстве есть наклейка, но я не думаю, что это связано с серийным номером. Было бы неплохо узнать идентификатор устройства, не включая его и не подключая его.
Совок
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. использование
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
Для всех, кто заинтересован, вот способ получить серийный номер 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 ++; }}
программирование гольфа не приветствуется на сайте, потому что очень сложно следить за вашим ответом для начинающих, особенно если вы не пишете никаких объяснений или подробных комментариев.
lenik
1
Я бы не стал называть этот ответ «программирующим гольфом» в сравнении с еще более загадочным, как «Bash / Awk». На самом деле, я намеревался поднять этот ответ ради равенства, но после запуска его на моем PI и сравнения с другой версией этого делать не буду, потому что должен признать, что этот ответ не дает точного вывода путем добавления дополнительного начального пробела. PS: я не буду минус это тоже, хотя
Ван Джоне
5
Использование awk:
cat /proc/cpuinfo | grep Serial | awk ' {print $3}'
Это хороший пример 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.
Мой однострочник даже для удаления ведущих нулей: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
Ответы:
Серийный номер можно найти в
/proc/cpuinfo
; например,удар
Вы можете использовать очень простой bash трубопровод
Поскольку на левой стороне двоеточия используются вкладки, вырезание на пробел будет надежно поймать только серийный номер.
Bash / Perl
В Bash очень просто извлечь ... используя Perl. использование
Например,
питон
Raspberry Spy предоставляет очень полезный пример Python.
Рекомендации
источник
cat
.Bash / Grep
Использование
grep
:удар
Использование чистого Bash без использования каких-либо внешних утилит:
Вывод любого из вышеперечисленных одинаков.
источник
-P
(Perl регулярное выражение) вариант современных версий GNUgrep
.Bash / Awk
Так как это оказалось чем-то вроде «сколько способов получить сериал», вот версия awk
источник
NodeJS
Для всех, кто заинтересован, вот способ получить серийный номер Raspberry с помощью NodeJS:
источник
источник
Использование
awk
:источник
awk '/Serial/{print $3}' /proc/cpuinfo
Самый короткий и простой ответ пока не предоставлен. Это в седе:
смысл:
sed -n
- запустить редактор потоков без печати каждой строки/^Serial/
- сопоставлять только строки, начинающиеся со слова «Serial»s/.* //;
- заменить все до последнего пробела ничем (регулярные выражения sed жадные , кстати)p
- распечатать результат.Сед иногда получает дурную славу за то, что его трудно использовать и он загадочен, но он доступен и работает одинаково (при условии соблюдения соглашений POSIX) во многих типах Linux и Unix.
источник
sed -n 's/^Serial\s*: 0*//p' /proc/cpuinfo
Да. На самом деле это способ получить это.
Забавно, что у моего Pi0 те же данные (серийные), что и в примере выше. Между моим сериалом PI0 и тем, который написал Алекс Чемберлен, нет никакой разницы
Для PI3 у вас есть 4 процессора
источник