Odpowiedzi:
Polecenie system_profiler zapewnia bezpośrednią odpowiedź, która jest łatwa do odczytania przez człowieka (zakładając, że korzystasz z wersji 10.3 lub nowszej), ale możesz także użyć ioreg do zadania, ponieważ generalnie kończy się ono szybciej.
system_profiler SPHardwareDataType
jest typem danych, który zawiera podstawowe informacje o sprzęcie, i możesz użyć grep lub awk, aby w razie potrzeby zmniejszyć liczbę elementów:
system_profiler SPHardwareDataType | awk '/Serial/ {print $4}'
lub
ioreg -l | awk '/IOPlatformSerialNumber/ { print $4;}'
Oba te polecenia działają od 0,5 do 0,2 sekundy na nowoczesnych komputerach Mac z dyskiem SSD, więc jeśli chcesz zoptymalizować polecenie i usunąć „ możesz uzyskać odpowiedź w około 0,005 s:
ioreg -c IOPlatformExpertDevice -d 2 | awk -F\" '/IOPlatformSerialNumber/{print $(NF-1)}'
Działa to również…
ioreg -l | grep IOPlatformSerialNumber
awk
wersję, aby usunąć 600 wierszy ioreg
wyjścia, których nie chcemy widzieć. (także - nie przejmuj się wyborcami - niektórzy naprawdę nie lubią krótkich odpowiedzi lub zapominają, że nie wszyscy wiedzą, jak działają grep i awk.)
Aby ułatwić zapamiętanie, użyj wyszukiwania bez rozróżniania wielkości liter:
ioreg -l | grep -i serialnumber | grep -i platform
Przykład 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
jest prawie natychmiastowy na moim MBPR.system_profiler
chociaż na tym Macu szybszy niż moje starsze jest znacznie wolniejszy.