मुझे सीरियल नंबर कैसे मिलेगा?


69

मैं वर्तमान में उपयोग किए जा रहे रास्पबेरी पाई के सीरियल नंबर को कहां से पा सकता हूं?


2
डिवाइस पर सीरियल नंबर छपा है या यह केवल सॉफ्टवेयर के माध्यम से उपलब्ध है? मुझे लगता है कि डिवाइस पर एक स्टिकर है, लेकिन मुझे नहीं लगता कि यह सीरियल नंबर से संबंधित है। डिवाइस को पहचानने और उसे कनेक्ट किए बिना आईडी को जानना अच्छा होगा।
स्कूप

3
@AlexisK यह केवल सॉफ्टवेयर में उपलब्ध है।
एलेक्स चेम्बरलेन

2
सही है, स्टिकर और सीरियल नंबर के साथ कोई संबंध नहीं है। मैंने कई पाई का स्टिकर पढ़ा है और इसे डिकोड करने की कोशिश की है। जबकि रास्पबेरी में संभवतः दोनों को जोड़ने वाली आंतरिक सूचियां हैं, ऐसा नहीं लगता है कि धारावाहिक या मैक की गणना करने का कोई तरीका है।
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

चूंकि बृहदान्त्र के बाईं ओर टैब का उपयोग किया जाता है, इसलिए अंतरिक्ष चरित्र पर कटाई मज़बूती से केवल सीरियल नंबर को पकड़ेगी।

इस उत्तर के पूर्व संस्करणों ने बृहदान्त्र पर कटौती की, जिसने चर में एक अग्रणी स्थान का उत्पादन किया। वैसा प्रमुख स्थान वैरिएबल असाइनमेंट के दौरान हटाया नहीं गया है जैसा कि पहले सुझाया गया था।

बैश / पर्ल

बैश में, पर्ल का उपयोग करके इसे निकालना बहुत सरल है ... उपयोग

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

अजगर

रास्पबेरी जासूस एक बहुत उपयोगी पायथन उदाहरण प्रदान करता है।

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. रास्पबेरी जासूस: अपने रास्पबेरी पाई सीरियल नंबर पायथन का उपयोग करना

6
पर्ल, तर्कों को तर्क के रूप में स्वीकार करेंगे। यह उपयोग करने के लिए आवश्यक नहीं है cat
डेनिस विलियमसन

3
मेरे सीरियल नंबर के अंतिम 6 अंक मेरे मैक पते के अंतिम 6 अंकों के समान हैं। क्या यह आपके लिए सच है?
स्कूप

6
<पुनर्निर्देशन भी काम करता है, इसलिए यह बिल्ली का बेकार उपयोग है।
एक्सटीएल

3
क्या इस जानकारी को शारीरिक रूप से प्राप्त करने का कोई तरीका है? मेरा मतलब बोर्ड पर है, इसलिए मुझे यह जानकारी पाने के लिए हर पी को बूट नहीं करना पड़ेगा।
Zeezer

3
क्या यह अद्वितीय है? थोड़ा छोटा लगता है ... मेरे धारावाहिक में केवल 4 बाइट्स का इस्तेमाल हुआ, बाकी सभी शून्य हैं
फ्लैश थंडर

11

बैश / grep

का उपयोग कर grep:

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

दे घुमा के

किसी भी बाहरी उपयोगिताओं का उपयोग किए बिना शुद्ध बैश का उपयोग करना:

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

दोनों में से कोई एक ही है।


यह एकमात्र ऐसा काम है जो मेरे लिए काम करता है
cwd

यह काम नहीं करता है: 'P' एक अमान्य विकल्प है। कम से कम pcpAudioCore में
aking2

1
@ aking2: मुझे डर है कि मैं pcpAudioCore से अपरिचित हूं। -P(पर्ल regex) जीएनयू के आधुनिक संस्करणों के एक विकल्प है grep
डेनिस विलियमसन

7

बैश / Awk

चूँकि यह किसी तरह का "धारावाहिक कितने तरीके से आपको मिल सकता है" के बारे में बताया जा रहा है

  awk '/ ^ सीरियल \ _ *: \ s / {प्रिंट $ 3}' / proc / cpuinfo

6

NodeJS

यहां रुचि रखने वाले किसी व्यक्ति के लिए 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 हमेशा मेरे लिए काम नहीं करता है। कभी-कभी यह मुझे "रास्पबेरी पाई 4 मॉडल बी रेव 1.1" देता है जो "सीरियल" लाइन के ठीक बाद "मॉडल" लाइन है। इसलिए मैंने यह सुनिश्चित करने के लिए आपके फ़ंक्शन को इसमें बदल दिया (अगली टिप्पणी देखें)।
fivedogit

function getserial () {var fs = आवश्यकता ('fs'); var सामग्री = fs.readFileSync ('/ proc / cpuinfo', 'utf8'); var cont_array = content.split ("\ n"); var x = 0; var serial_line = ""; जबकि (x <cont_array.length) {serial_line = cont_array [x]; if (serial_line.startsWith ("Serial")) {return serial_line.split (":") [1] .llice (1); } x ++; }}
fivedogit

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

1
प्रोग्रामिंग गोल्फ को वेब-साइट पर प्रोत्साहित नहीं किया जाता है, क्योंकि शुरुआती लोगों के लिए आपके उत्तर का पालन करना बहुत मुश्किल है, खासकर यदि आप कोई स्पष्टीकरण या विस्तृत टिप्पणी नहीं लिखते हैं।
14:03 बजे lenik

1
मैं इस जवाब को "प्रोग्रामिंग गोल्फ" कहने का विरोध करता हूँ, "बैश / अक्क" जैसे और भी अधिक गूढ़। वास्तव में, मैंने इस उत्तर को समानता के लिए उत्थान करने का इरादा किया था, लेकिन इसे अपने पीआई पर चलाने और अन्य संस्करण की तुलना करने के बाद, ऐसा नहीं करेगा क्योंकि स्वीकार करना होगा, यह उत्तर अतिरिक्त अग्रणी स्थान डालकर सटीक आउटपुट नहीं दे रहा है। पुनश्च: मैं इसे बहुत कम नहीं करूँगा
वैन जोन

4

का उपयोग कर awk:

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

6
यह UUOC का एक अच्छा उदाहरण है । बस लिखा जा सकता हैawk '/Serial/{print $3}' /proc/cpuinfo
17

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 -n '/^Serial/{s/.* //;p}' /proc/cpuinfo

अर्थ:

  • sed -n - हर लाइन को प्रिंट किए बिना स्ट्रीम एडिटर को चलाएं
  • /^Serial/- केवल उन पंक्तियों से मेल करें जो "सीरियल" शब्द से शुरू होती हैं
  • s/.* //;- कुछ भी नहीं के साथ अंतिम स्थान तक सब कुछ बदलें (sedge regexes लालची , btw हैं)
  • p - रिजल्ट प्रिंट कर लें।

sed कभी-कभी उपयोग करने में मुश्किल और क्रिप्टोकरंसी के लिए एक बुरा नाम हो जाता है, लेकिन यह उपलब्ध है और कई तरह के लिनक्स और यूनिक्स पर (जब तक आप POSIX सम्मेलनों से चिपके रहते हैं) उसी तरह से काम करता है।


1
मेरा वन-लाइनर भी अग्रणी शून्य को हटाने के लिए:sed -n 's/^Serial\s*: 0*//p' /proc/cpuinfo
थॉमस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.