Como obtenho o número de série?


70

Onde posso encontrar o número de série do Raspberry Pi que estou usando atualmente?


2
o número de série está impresso no dispositivo ou está disponível apenas através do software? Vejo que há um adesivo no dispositivo, mas não acho que esteja relacionado ao número de série. Seria bom saber o ID do dispositivo sem precisar ligá-lo e conectá-lo.
Colher

3
@AlexisK Está disponível apenas em software.
Alex Chamberlain

2
Correto, não parece haver nenhuma relação com o adesivo e o número de série. Eu li o adesivo de vários Pi's e tentei decodificá-lo. Embora o Raspberry provavelmente tenha listas internas conectando os dois, não parece haver nenhuma maneira de calcular o serial ou MAC a partir dele.
EDP

Respostas:


79

O número de série pode ser encontrado em /proc/cpuinfo; por exemplo,

 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

Bater

Você pode usar tubulação bash muito básica

cat /proc/cpuinfo | grep Serial | cut -d ' ' -f 2

Como as guias são usadas no lado esquerdo dos dois pontos, o corte do caractere de espaço capturará apenas o número de série.

As versões anteriores dessa resposta eram cortadas no cólon, o que produzia um espaço à esquerda na variável. Esse espaço inicial não é removido durante a atribuição de variáveis, conforme sugerido anteriormente.

Bash / Perl

No Bash, é muito simples extrair ... usando Perl. Usar

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

Por exemplo,

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

Pitão

O Raspberry Spy fornece um exemplo muito útil de 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

Referências

  1. Páginas do produto da chave de licença
  2. Raspberry Spy: Obtendo seu número de série do Raspberry Pi usando Python

6
O Perl aceita nomes de arquivos como argumentos. Não é necessário usar cat.
Dennis Williamson

3
os últimos 6 dígitos do meu número de série são iguais aos últimos 6 dígitos do meu endereço MAC. Isso é verdade para você?
Colher

6
<redirecionamento também funciona, por isso é um uso inútil de gato.
XTL

3
Existe alguma maneira de obter essas informações fisicamente? Quero dizer, no quadro, então não preciso inicializar todos os pi para obter essas informações.
Zeezer #

3
É único? parece um pouco curto ... na minha série apenas 4 bytes usado, tudo resto são zeros
flash Trovão

12

Bash / Grep

Usando grep:

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

Bater

Usando o Bash puro sem usar utilitários externos:

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

A saída de qualquer um dos itens acima é a mesma.


este é o único que trabalhou para mim
cwd

Isso não funciona: 'P' é uma opção inválida. Pelo menos em pcpAudioCore
theking2

11
@ theking2: Receio não estar familiarizado com o pcpAudioCore. O -P(Perl regex) é uma opção de versões modernas do GNU grep.
Dennis Williamson

8

Bash / Awk

Como isso acabou sendo um tipo de "quantas maneiras você pode obter o serial", aqui está a versão do awk

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

7

NodeJS

Para qualquer pessoa interessada aqui, é uma maneira de obter o número de série da framboesa usando o 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);

}

Por qualquer motivo, content_array.length-2 nem sempre funciona para mim. Às vezes, aparece o "Raspberry Pi 4 Modelo B Rev 1.1", que é a linha "Model" logo após a linha "Serial". Então mudei sua função para isso (veja o próximo comentário) para ter certeza.
fivedogit

função 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

11
A programação de golfe não é incentivada no site, porque é muito difícil seguir sua resposta para iniciantes, especialmente se você não escrever nenhuma explicação ou comentário detalhado.
lenik

11
Eu me oporia a chamar essa resposta de "programação de golfe" em comparação com uma resposta ainda mais enigmática, como "Bash / Awk". Na verdade, eu pretendia elevar esta resposta por uma questão de igualdade, mas depois de executá-la no meu PI e comparar com outra versão, não o faço porque devo admitir que esta resposta não está fornecendo resultados precisos ao inserir espaço extra à esquerda. PS: Eu não vou menos isso também, embora
Van Jone

5

Usando awk:

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

6
Esse é um bom exemplo de UUOC . Poderia ser simplesmente escrito #awk '/Serial/{print $3}' /proc/cpuinfo
4186 ripat

2

O mais curto e mais simples ainda não foi fornecido como resposta. Isto, em sed:

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

significado:

  • sed -n - execute o editor de fluxo sem imprimir todas as linhas
  • /^Serial/- corresponda apenas às linhas que começam com a palavra "Serial"
  • s/.* //;- substitua tudo até o último espaço por nada (as expressões regulares são gananciosas , aliás)
  • p - imprima o resultado.

Às vezes, o sed recebe um nome ruim por ser difícil de usar e enigmático, mas está disponível e funciona da mesma maneira (desde que você se atenha às convenções do POSIX) em muitos tipos de Linux e Unix.


11
My one-liner até mesmo remover zeros à esquerda:sed -n 's/^Serial\s*: 0*//p' /proc/cpuinfo
thomas

1

Sim. Na verdade, este é o caminho para obtê-lo.

É engraçado que meu Pi0 tenha os mesmos dados (serial) do exemplo acima. Não há diferenciador entre minha série PI0 e a publicada por Alex Chamberlain

Para PI3 você tem 4 procesores

#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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.