답변:
system_profiler의 명령은 (당신이 10.3 이상에있는 가정) 쉽게 사람이 읽을 수의 직접적인 대답을 제공하지만, 당신은 또한 사용할 수 있습니다 ioreg 그것은 일반적으로 더 빨리 완료로 작업.
system_profiler SPHardwareDataType
핵심 하드웨어 정보가 포함 된 데이터 유형이며, grep 또는 awk를 사용하여 필요에 따라 추가로 구문 분석 할 수 있습니다.
system_profiler SPHardwareDataType | awk '/Serial/ {print $4}'
또는
ioreg -l | awk '/IOPlatformSerialNumber/ { print $4;}'
이러한 명령은 모두 당신이 할 그렇다면, 현대 SSD 맥에서 실행되도록 0.5 내지 0.2 초 정도 걸릴 명령을 최적화 하고 (가) "제거 당신이 0.005s 정도에 답을 할 수 있습니다 :
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에서 더 빠르지 만 훨씬 느립니다.