回答:
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.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の方がずっと遅いですが。