मैं टर्मिनल से प्रोग्रामेटिक रूप से मैक पर सीरियल नंबर कैसे खोज सकता हूं?


37

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

जवाबों:


55

System_profiler आदेश (यह मानते हुए आप 10.3 या नए पर हैं) एक सीधा जवाब आसानी से मानव पठनीय है कि प्रदान करता है, लेकिन आप यह भी उपयोग कर सकते हैं ioreg के रूप में यह आम तौर पर तेजी पूरा करता है कार्य के लिए।

system_profiler SPHardwareDataType वह डेटा प्रकार है जिसमें मुख्य हार्डवेयर जानकारी होती है, और आप चीजों को आगे बढ़ाने के लिए grep या awk का उपयोग कर सकते हैं:

system_profiler SPHardwareDataType | awk '/Serial/ {print $4}'

या

ioreg -l | awk '/IOPlatformSerialNumber/ { print $4;}'

आधुनिक SSD Mac पर चलने के लिए उन दोनों कमांड्स को 0.5 से 0.2 सेकंड का समय लगता है, इसलिए यदि आप कमांड को ऑप्टिमाइज़ करना चाहते हैं और " आप अपना उत्तर 0.005 या में निकाल सकते हैं:

ioreg -c IOPlatformExpertDevice -d 2 | awk -F\" '/IOPlatformSerialNumber/{print $(NF-1)}'

2
ioregएक मेरी MBPR पर तत्काल के पास है। system_profilerहालांकि इस मैक पर तेजी से मेरे पुराने की तुलना में बहुत धीमी है।
मार्कशीट 16

system_profile बहुत धीमा है, ioreg सुपर फास्ट है।
user1735921

14

यह भी काम करता है ...

ioreg -l | grep IOPlatformSerialNumber

यह निश्चित रूप awkसे ioregउत्पादन की 600 लाइनों को बाहर निकालने के लिए संस्करण की तुलना में टाइप करना आसान है , जिसे हम देखना नहीं चाहते हैं। (यह भी - नीचे मतदाताओं कोई आपत्ति नहीं है - कुछ लोगों को वास्तव में कम जवाब पसंद नहीं या भूल जाते हैं कि हर कोई जानता है कि कैसे ग्रेप और awk काम करते हैं।)
bmike

ठीक है, धन्यवाद bmike, यह मेरे लिए आसान लगता है, लेकिन एक सही जवाब के लिए वोट नीचे उम्मीद नहीं की थी। जानकार अच्छा लगा।
MrPool

1
@MrPool जब यह दोहराता है जो पहले वाले उत्तर में है और पिछले एक पर सुधार नहीं करता है
user151019

1
वे प्रति सेगमेंट गलत वोट नहीं हैं। यहां तक ​​कि नीचे वोट अच्छे होते हैं क्योंकि वे संकेत देते हैं कि किसी को कार्रवाई करने के लिए पर्याप्त परवाह है। इसके अलावा, मैं चैट करने के लिए टिप्पणी या पोस्ट करने की कोशिश करता हूं जब मुझे वोट मिलते हैं जो मुझे पूरी तरह से योग के रूप में हड़ताल नहीं करते हैं। अच्छी खबर यह है निर्भर है वोट +10 कर रहे हैं और नीचे वोट केवल -2 इसलिए यदि आप पोस्ट कुछ विवादास्पद इंटरनेट ;-) करने के लिए स्वागत (+2 के साथ इस शून्य शेष की तरह और -2 अभी भी +16 प्रतिनिधि है।)
bmike

1
और निशान सही है, अगर कोई उपयोगकर्ता करता है तो विशेष रूप से देर से, संक्षिप्त, मामूली बदलावों को बिना बताए पोस्ट किया जाता है (यदि मैंने आपकी बात का अनुमान लगाया है - टाइपिंग grep दोनों अधिक स्पष्ट, कम और बहुत अच्छे हैं, तो मैं उस उपयोगकर्ता को पिंग कर सकता हूं और पूछ सकता हूं) उन्होंने इसे खटखटाया। अधिकांश उच्च प्रतिष्ठा उपयोगकर्ताओं मेरा उत्तर पर टिप्पणी होगा, लेकिन हम 1 प्रतिनिधि के साथ एक नया उपयोगकर्ता है कि ऐसा करने के लिए उम्मीद नहीं कर सकते, अब कर सकते हैं हम :-)
bmike

2

याद रखना आसान बनाने के लिए, असंवेदनशील खोज का उपयोग करें:

ioreg -l | grep -i serialnumber | grep -i platform

चेतावनी: यह एक लाइन देता है | "IOPlatformSerialNumber" = "YourSerialNumber" यह दृष्टिगत रूप से ठीक है, लेकिन यदि आप इसे एक स्क्रिप्ट में उपयोग करते हैं तो आपको इसे जागृत करने के लिए पाइप करने की आवश्यकता होगी।
जसनोलॉजी

1

C ++ उदाहरण:

#include <CoreFoundation/CoreFoundation.h>
#include <IOKit/IOKitLib.h>

std::string 

getSerialNumber()

{

   CFStringRef serial;
    char buffer[32] = {0};
    std::string seriaNumber;

io_service_t platformExpert = IOServiceGetMatchingService(kIOMasterPortDefault,
                                                          IOServiceMatching("IOPlatformExpertDevice"));
if (platformExpert)
{
    CFTypeRef serialNumberAsCFString = IORegistryEntryCreateCFProperty(platformExpert,
                                                                       CFSTR(kIOPlatformSerialNumberKey),
                                                                       kCFAllocatorDefault, 0);
    if (serialNumberAsCFString) {
        serial = (CFStringRef)serialNumberAsCFString;
    }
    if (CFStringGetCString(serial, buffer, 32, kCFStringEncodingUTF8)) {
        seriaNumber = buffer;
    }

    IOObjectRelease(platformExpert);
}
return seriaNumber;
}

अलग पूछने के लिए आपका स्वागत है। कृपया यह समझें कि ऐसा उत्तर पोस्ट करना जिसमें अनिवार्य रूप से केवल कोड हो, जिसमें कोई निर्देश न हो कि उसके साथ क्या करना है या इसका उपयोग कैसे करना है, यह गुणवत्ता के उत्तर के लिए नहीं है। कृपया पढ़ने का समय निकालें मैं एक अच्छा उत्तर कैसे लिखूं? और फिर कोड को संकलित करने और इसका उपयोग करने के निर्देश को शामिल करने के लिए अपने उत्तर को संपादित करें। टूर भी लेते हैं ।
user3439894

यह ध्यान देने योग्य है कि यह Apple टेक्निकल डॉक्स से लिया गया था, जहाँ एक स्पष्टीकरण मौजूद है: developer.apple.com/library/archive/technotes/tn1103/…
सिंडर बिस्कुट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.