Antworten:
Der Befehl system_profiler bietet eine direkte Antwort, die für den Menschen leicht lesbar ist (vorausgesetzt, Sie verwenden Version 10.3 oder höher ). Sie können jedoch auch ioreg für die Aufgabe verwenden, da sie im Allgemeinen schneller ausgeführt wird.
system_profiler SPHardwareDataType
ist der Datentyp, der die Kernhardwareinformationen enthält, und Sie können grep oder awk verwenden, um die Dinge nach Bedarf weiter zu reduzieren:
system_profiler SPHardwareDataType | awk '/Serial/ {print $4}'
oder
ioreg -l | awk '/IOPlatformSerialNumber/ { print $4;}'
Die Ausführung dieser beiden Befehle auf modernen SSD-Macs dauert zwischen 0,5 und 0,2 Sekunden. Wenn Sie also den Befehl optimieren und die Option "entfernen" möchten, können Sie Ihre Antwort in etwa 0,005 Sekunden erhalten:
ioreg -c IOPlatformExpertDevice -d 2 | awk -F\" '/IOPlatformSerialNumber/{print $(NF-1)}'
Das funktioniert auch ...
ioreg -l | grep IOPlatformSerialNumber
awk
Version, um die 600 Zeilen der ioreg
Ausgabe herauszulösen, die wir nicht sehen wollen. (auch - macht euch nichts aus den down-
Verwenden Sie eine Suche, bei der die Groß- und Kleinschreibung nicht berücksichtigt wird, um das Erinnern zu erleichtern:
ioreg -l | grep -i serialnumber | grep -i platform
C ++ Beispiel:
#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
ist fast sofort auf meinem MBPR.system_profiler
Obwohl auf diesem Mac schneller als auf meinen älteren, ist er viel langsamer.