Yanıtlar:
System_profiler komutu (eğer 10,3 veya daha yeni üzerinde olduğunu varsayarsak) kolayca Okunabilir var doğrudan cevap verir, ama aynı zamanda da kullanabilirsiniz IOREG genellikle daha hızlı tamamlar olarak görev için.
system_profiler SPHardwareDataType
çekirdek donanım bilgilerini içeren veri türüdür ve gerektiğinde işlemleri daha da kısaltmak için grep veya awk komutunu kullanabilirsiniz:
system_profiler SPHardwareDataType | awk '/Serial/ {print $4}'
veya
ioreg -l | awk '/IOPlatformSerialNumber/ { print $4;}'
Bu komutların her ikisi de modern SSD Mac'lerde çalıştırmak için 0,5 ile 0,2 saniye arasında sürebilir, bu nedenle komutu en iyi duruma getirmek ve kaldırmak istiyorsanız " cevabınızı 0,005'de sorabilirsiniz:
ioreg -c IOPlatformExpertDevice -d 2 | awk -F\" '/IOPlatformSerialNumber/{print $(NF-1)}'
Bu da işe yarıyor…
ioreg -l | grep IOPlatformSerialNumber
awk
600 ioreg
çıktı satırını çıkarmak için sürümden kesinlikle daha kolaydır . (ayrıca - aşağı seçmenlere
Hatırlamayı kolaylaştırmak için küçük / küçük harf duyarlı bir arama kullanın:
ioreg -l | grep -i serialnumber | grep -i platform
C ++ örneği:
#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
Kimse benim MBPR üzerinde anlık yakındır.system_profiler
bu macta daha eski olanlardan daha hızlı olmasına rağmen çok daha yavaş.