जवाबों:
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)}'
यह भी काम करता है ...
ioreg -l | grep IOPlatformSerialNumber
awkसे ioregउत्पादन की 600 लाइनों को बाहर निकालने के लिए संस्करण की तुलना में टाइप करना आसान है , जिसे हम देखना नहीं चाहते हैं। (यह भी - नीचे मतदाताओं कोई आपत्ति नहीं है - कुछ लोगों को वास्तव में कम जवाब पसंद नहीं या भूल जाते हैं कि हर कोई जानता है कि कैसे ग्रेप और awk काम करते हैं।)
याद रखना आसान बनाने के लिए, असंवेदनशील खोज का उपयोग करें:
ioreg -l | grep -i serialnumber | grep -i platform
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;
}
ioregएक मेरी MBPR पर तत्काल के पास है।system_profilerहालांकि इस मैक पर तेजी से मेरे पुराने की तुलना में बहुत धीमी है।