47 votos

¿Cómo puedo encontrar el número de serie en un mac de forma programada desde el terminal?

¿Qué comando puedo utilizar para recuperar el número de serie del sistema desde la línea de comandos de unix? Como uname dará alguna información sobre el software y el hardware, me gustaría recuperar el número de serie de un comando para usarlo en un script.

66voto

Oskar Puntos 1242

El perfil_del_sistema proporciona una respuesta directa que es fácilmente legible para los humanos (asumiendo que estás en 10.3 o más reciente), pero también puedes 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 básica del hardware, y puede utilizar grep o awk para reducir 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 Mac con SSD, así que si quiere optimizar el comando y eliminar el " puedes tener tu respuesta en 0,005s más o menos:

ioreg -c IOPlatformExpertDevice -d 2 | awk -F\" '/IOPlatformSerialNumber/{print $(NF-1)}'

18voto

MrPool Puntos 71

Esto también funciona

ioreg -l | grep IOPlatformSerialNumber

4voto

user321228 Puntos 39

Ejemplo de C++ de https://developer.apple.com/library/archive/technotes/tn1103/_index.html :

#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;
}

1voto

Jared Puntos 21

Para que sea más fácil de recordar, utilice una búsqueda que no distinga entre mayúsculas y minúsculas:

ioreg -l | grep -i serialnumber | grep -i platform

0 votos

Advertencia: esto devuelve una línea | "IOPlatformSerialNumber" = "YourSerialNumber" Eso está bien visualmente pero si lo usas en un script tendrás que canalizarlo a awk.

0voto

christianlc Puntos 1

Si no quieres contar las columnas puedes confiar en que el valor siempre está en la última y utilizar

system_profiler SPHardwareDataType | awk '/Serial/{print $NF}'

0 votos

Caramba, gracias mamá @nohillside; no quisiéramos someter a la gente a nada que no sea guante de seda y kudos, ya sabes, como la realidad.

0 votos

SE funciona un poco diferente a los sitios de foros. La forma de dar kudos es votar los mensajes que te gustan o que te ayudaron.

0 votos

No estaba dando la enhorabuena a @nohillside, estaba criticando a los miembros del hilo que se las arreglaron para perder el tiempo y desinformar discutiendo benchmarks en torno a ioreg y system_profiler, dando peso a algo que NADIE, fuera de circunstancias excepcionales, se preocupará nunca. Mi queja, es que un día un ingeniero de operaciones junior, apuntará a esto o algo parecido, cuando defienda un pull request que "optimice" el servicio serial-number-as-a-rube-goldberg, que es famoso por mantenerse unido con saliva y cinta adhesiva. Tal vez equilibrar la zanahoria con el palo ayude a que haya menos de eso.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X