Seri numarasını nasıl alabilirim?


69

Kullanmakta olduğum Raspberry Pi'nin seri numarasını nereden bulabilirim?


2
Seri numarası cihazda yazılı mı yoksa sadece yazılım üzerinden mi mevcut? Cihazda bir çıkartma olduğunu görüyorum ama seri numarasıyla ilgili olduğunu sanmıyorum. Cihazın kimliğini, açıp bağlamak zorunda kalmadan bilmek güzel olurdu.
Scoop

3
@AlexisK Sadece yazılımda bulunmaktadır.
Alex Chamberlain

2
Doğru, etiket ve seri numarası ile bir ilişki görünmüyor. Birkaç Pi'nin etiketini okudum ve kodunu çözmeye çalıştım. Ahududu muhtemelen her ikisini de birbirine bağlayan dahili listeler içeriyor olsa da, seri veya MAC'ı hesaplamak için herhangi bir yol bulunmuyor gibi görünüyor.
EDP

Yanıtlar:


78

Seri numarası şurada bulunabilir /proc/cpuinfo; Örneğin,

 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

darbe

Çok basit bash borularını kullanabilirsiniz

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

Sekmeler kolonun sol tarafında kullanıldığından, boşluk karakterinin kesilmesi yalnızca seri numarasını güvenilir bir şekilde yakalar.

Bu cevabın önceki sürümlerinde, değişkende öncü bir boşluk oluşturan iki nokta üst üste kesilir. Bu öncü alan, daha önce önerildiği gibi değişken ataması sırasında kaldırılmaz.

Bash / Perl

Bash'de Perl'i kullanarak çıkarmak çok kolaydır. kullanım

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

Örneğin,

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

piton

Ahududu Spy çok kullanışlı bir Python örneği sağlar.

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

Referanslar

  1. Lisans anahtarı ürün sayfaları
  2. Ahududu Casusu: Ahududu Pi Seri Numarasını Python Kullanarak Almak

6
Perl, dosya isimlerini argüman olarak kabul edecektir. Kullanmak gerekli değil cat.
Dennis Williamson,

3
Seri numaramın son 6 hanesi MAC adresimin son 6 hanesi ile aynıdır. Bu sizin için doğru mu?
Scoop

6
yönlendirme de işe yarıyor, bu yüzden kedinin işe yaramaz bir kullanımı.
XTL

3
Bu bilgiyi fiziksel olarak almanın bir yolu var mı? Ben tahtada demek, bu yüzden bu bilgileri almak için her pi önyüklemek zorunda değilim.
Zeezer

3
Benzersiz mi biraz kısa gözüküyor ... seri yayınımda sadece 4 bayt kullanılmış, gerisi sıfırdır
Flash Thunder

11

Bash / Grep

Kullanarak grep:

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

darbe

Herhangi bir harici yardımcı program kullanmadan saf Bash kullanımı:

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

Yukarıdakilerden herhangi birinin çıktısı aynıdır.


bu benim için çalışan tek kişi
cwd

Bu işe yaramıyor: 'P' geçersiz bir seçenek. En azından pcpAudioCore'da
theking2

1
@ theking2: Korkarım pcpAudioCore'u tanımıyorum. -P(Perl regex) GNU modern versiyonları bir seçenektir grep.
Dennis Williamson

7

Bash / Awk

Bu bir tür "çıktı seri" kaç seri alabilirsin "işte burada awk versiyonu

  awk '/ ^ Seri \ ler *: \ s / {3 $ yazdır}} / proc / cpuinfo

6

NodeJS

Burada ilgilenen herkes için NodeJS kullanarak Ahududu Seri Numarası almanın bir yoludur:

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);

}

Sebep ne olursa olsun, content_array.length-2 her zaman benim için çalışmıyor. Bazen bana "Seri" satırından hemen sonra "Model" satırı olan "Ahududu Pi 4 Model B Rev 1.1" i veriyor. Bu yüzden emin olmak için işlevinizi bu şekilde değiştirdim (bir sonraki yorumu inceleyin).
fivedogit

function getserial () {var fs = requer ('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 ("Seri")) {{serial_line.split (":") [1] .slice (1) döndür; } x ++; }}
fivedogit

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

1
Programlama golf web sitesinde teşvik edilmez, çünkü yeni başlayanlar için cevabınızı takip etmek çok zordur, özellikle de herhangi bir açıklama veya ayrıntılı yorum yazmazsanız.
lenik

1
"Bash / Awk" gibi daha şifreli olanlara kıyasla bu cevabı "programlama golfü" olarak adlandırmaya karşıyım. Aslında, bu cevabı eşitlik uğruna yükseltmek niyetindeyim, ancak PI'mde çalıştırıp diğer sürümle karşılaştırdıktan sonra, bunu yapmaz çünkü kabul etmeliyim ki, bu cevap fazladan boş alan ekleyerek kesin çıktı vermiyor. Not: Ben de olsa eksi almayacağım
Van Jone

4

Kullanarak awk:

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

6
Bu UUOC'nin güzel bir örneği . Basitçe yazılmış olabilirawk '/Serial/{print $3}' /proc/cpuinfo
ripat

1

Evet. Gerçekten de bunu elde etmenin yolu.

Benim Pi0 benim yukarıdaki örnek ile aynı veri (seri) olması komik. PI0 dizim ile Alex Chamberlain tarafından yayınlanan arasında hiçbir fark yok

PI3 için 4 proces var

#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

En kısa ve en basit henüz bir cevap olarak sağlanmamıştır. Bu, sed içinde:

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

anlamı:

  • sed -n - Her satırı yazdırmadan akış editörünü çalıştır
  • /^Serial/- sadece “Seri” kelimesiyle başlayan satırları eşleştirin
  • s/.* //;- son boşluğa kadar hiçbir şeyin olmadığı her şeyi değiştir (sed regexes açgözlü , btw)
  • p - sonucu yazdırın.

sed bazen kullanımı zor ve şifreli olduğu için kötü bir ad alır, ancak birçok Linux ve Unix türünde kullanılabilir ve aynı şekilde çalışır (POSIX sözleşmelerine sadık kaldığınız sürece).


1
Tek sed -n 's/^Serial\s*: 0*//p' /proc/cpuinfo
thomas
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.