Respostas:
O comando system_profiler fornece uma resposta direta que é facilmente legível por humanos (supondo que você esteja na versão 10.3 ou mais recente), mas você também pode usar o ioreg para a tarefa, pois ela geralmente é concluída mais rapidamente.
system_profiler SPHardwareDataType
é o tipo de dados que contém as informações principais de hardware e você pode usar grep ou awk para analisar as coisas ainda mais, conforme necessário:
system_profiler SPHardwareDataType | awk '/Serial/ {print $4}'
ou
ioreg -l | awk '/IOPlatformSerialNumber/ { print $4;}'
Esses dois comandos demoram entre 0,5 e 0,2 segundos para serem executados nos Macs SSD modernos; portanto, se você deseja otimizar o comando e remover o ", você pode ter sua resposta em 0,005s ou mais:
ioreg -c IOPlatformExpertDevice -d 2 | awk -F\" '/IOPlatformSerialNumber/{print $(NF-1)}'
Isso também funciona…
ioreg -l | grep IOPlatformSerialNumber
awk
versão remover as 600 linhas de ioreg
saída que não queremos ver. (também - não me importo os eleitores para baixo - algumas pessoas realmente não gosto de respostas curtas ou esquecer que nem todos sabem como grep e trabalho awk.)
Para facilitar a lembrança, use uma pesquisa que não diferencia maiúsculas de minúsculas:
ioreg -l | grep -i serialnumber | grep -i platform
Exemplo 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
um está perto instantânea no meu MBPR.system_profiler
embora mais rápido neste mac do que os meus mais antigos seja muito mais lento.