Respuestas:
El comando system_profiler proporciona una respuesta directa que es fácilmente legible por humanos (suponiendo que esté en 10.3 o más reciente), pero también puede usar ioreg para la tarea, ya que generalmente se completa más rápido.
system_profiler SPHardwareDataType
es el tipo de datos que contiene la información central del hardware, y puede usar grep o awk para reducir aún más las cosas según sea necesario:
system_profiler SPHardwareDataType | awk '/Serial/ {print $4}'
o
ioreg -l | awk '/IOPlatformSerialNumber/ { print $4;}'
Ambos comandos tardan entre 0.5 y 0.2 segundos en ejecutarse en los modernos SSD Macs, por lo que si desea optimizar el comando y eliminar el " puede obtener su respuesta en 0.005s más o menos:
ioreg -c IOPlatformExpertDevice -d 2 | awk -F\" '/IOPlatformSerialNumber/{print $(NF-1)}'
Esto también funciona ...
ioreg -l | grep IOPlatformSerialNumber
awk
versión para eliminar las 600 líneas de ioreg
salida que no queremos ver. (también, no se preocupe por los votantes negativos, a algunas personas realmente no les gustan las respuestas cortas u olvidan que no todos saben cómo funcionan grep y awk).
Para que sea más fácil de recordar, utilice una búsqueda sin distinción entre mayúsculas y minúsculas:
ioreg -l | grep -i serialnumber | grep -i platform
Ejemplo de 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
uno es casi instantáneo en mi MBPR.system_profiler
aunque más rápido en este Mac que en los anteriores es mucho más lento.