Answers:
该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
的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上速度比我的旧Mac快得多。