Ответы:
Команда system_profiler предоставляет прямой ответ, который легко читается человеком (при условии, что у вас версия 10.3 или новее), но вы также можете использовать ioreg для выполнения задачи, поскольку обычно она выполняется быстрее.
system_profiler SPHardwareDataType
это тип данных, который содержит информацию об оборудовании ядра, и вы можете использовать grep или awk, чтобы при необходимости урезать данные:
system_profiler SPHardwareDataType | awk '/Serial/ {print $4}'
или
ioreg -l | awk '/IOPlatformSerialNumber/ { print $4;}'
Обе эти команды работают от 0,5 до 0,2 секунд на современных SSD Mac, поэтому, если вы хотите оптимизировать команду и убрать « вы можете получить свой ответ через 0,005 с или около того:
ioreg -c IOPlatformExpertDevice -d 2 | awk -F\" '/IOPlatformSerialNumber/{print $(NF-1)}'
Это также работает ...
ioreg -l | grep IOPlatformSerialNumber
awk
лишить 600 строк ioreg
вывода, которые мы не хотим видеть. (также - не обращайте внимания на опущенных избирателей - некоторые люди действительно не любят короткие ответы или забывают, что не все знают, как работают grep и 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
хотя быстрее на этом Mac, чем мои старые гораздо медленнее.