48 votes

Comment puis-je trouver le numéro de série sur un Mac de manière programmée à partir du terminal ?

Quelle commande puis-je utiliser pour récupérer le numéro de série du système à partir de la ligne de commande unix? Comme uname affichera des informations sur le logiciel et le matériel, je voudrais récupérer le numéro de série à partir d'une commande à utiliser dans un script.

67voto

Oskar Points 1242

La commande system_profiler fournit une réponse directe facilement lisible par l'homme (en supposant que vous êtes sur 10.3 ou plus récent), mais vous pouvez également utiliser ioreg pour la tâche car il se termine généralement plus rapidement.

system_profiler SPHardwareDataType est le type de données qui contient les informations matérielles de base, et vous pouvez utiliser grep ou awk pour les simplifier encore si nécessaire :

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

ou

ioreg -l | awk '/IOPlatformSerialNumber/ { print $4;}'

Ces deux commandes prennent entre 0.5 et 0.2 secondes pour s'exécuter sur les Macs modernes équipés de SSD, donc si vous souhaitez optimiser la commande et supprimer le " vous pouvez obtenir votre réponse en environ 0.005s :

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

19voto

MrPool Points 171

Cela fonctionne aussi...

ioreg -l | grep IOPlatformSerialNumber

5voto

user321228 Points 49

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

#include 
#include 

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 Points 21

Pour rendre les choses plus faciles à retenir, utilisez une recherche insensible à la casse:

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

0 votes

Avertissement : cela renvoie une ligne | "IOPlatformSerialNumber" = "VotreNuméroDeSérie" C'est bien visuellement mais si vous l'utilisez dans un script, vous devrez le rediriger vers awk.

0voto

christianlc Points 101

Si vous ne voulez pas compter les colonnes, vous pouvez vous fier au fait que la valeur se trouve toujours dans la dernière et utiliser

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

0 votes

Chère maman @nohillside, merci beaucoup; nous ne voudrions pas soumettre les gens à autre chose que des gants pour enfants et des félicitations, tu sais, comme la réalité.

1 votes

SE fonctionne un peu différemment des sites de forum. La manière de donner des kudos est de voter pour les messages que vous aimez ou qui vous ont aidé.

0 votes

Je ne faisais pas l'éloge de @nohillside, je critiquais les membres du fil de discussion qui ont réussi à perdre du temps et à induire en erreur en discutant des références autour d'ioreg et de system_profiler, donnant du poids à quelque chose qui NE préoccupera jamais PERSONNE en dehors de circonstances exceptionnelles. Mon souci, c'est qu'un jour, un jeune ingénieur ops, montrera cela ou quelque chose de similaire, en défendant une demande de tirage qui "optimise" le numéro de série en tant que service Rube Goldberg, qui est célèbre pour être maintenu ensemble avec de la salive et du ruban adhésif. Peut-être que l'équilibre entre la carotte et le bâton aidera à réduire tout ça.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X