Як я можу програмно знайти серійний номер на mac програмно з терміналу?


37

Яку команду можна використовувати для отримання серійного номера системи з командного рядка unix? Оскільки unameвиведемо деяку інформацію про програмне та апаратне забезпечення, я хотів би отримати серійний номер з команди, яку слід використовувати в скрипті.

Відповіді:


55

Команда system_profiler надає пряму відповідь, яку легко зрозуміти людині (якщо припустити, що ви перебуваєте на 10.3 або новішій версії), але ви можете також використовувати ioreg для завдання, оскільки воно, як правило, швидше завершується.

system_profiler SPHardwareDataType - це тип даних, який містить основну технічну інформацію про обладнання, і ви можете використовувати grep або awk, щоб запакувати речі далі за необхідності:

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

або

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

Обидві ці команди займають від 0,5 до 0,2 секунд для запуску на сучасних SSD Macs, тому, якщо ви хочете оптимізувати команду та видалити ", ви можете отримати свою відповідь за 0,005s або так:

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

2
На ioregмоєму MBPR цей момент майже зараз. system_profilerхоча швидше на цьому mac, ніж у моїх старших, набагато повільніше.
markhunte

system_profile такий повільний, ioreg дуже швидкий.
користувач1735921

14

Це також працює ...

ioreg -l | grep IOPlatformSerialNumber

Це, звичайно, простіше, ніж awkверсія, щоб викреслити 600 ліній ioregвиводу, які ми не хочемо бачити. (також - не заперечуйте тих, хто
втратив чинність.

Гаразд, спасибі bmike, мені здається простішим, але не очікував, що голоси за правильну відповідь. Добре знати.
MrPool

1
@MrPool, коли він повторює те, що є у попередній відповіді, і не покращується на попередній
user151019

1
Вони самі не помиляються голосами. Навіть голоси вниз - це добре, оскільки вони вказують на те, що хтось піклується, щоб вжити заходів. Крім того, я намагаюся коментувати або публікувати в чаті, коли бачу голоси, які не вважають мене цілком справедливим за сумою. Хороша новина - це голоси +10, а голоси - лише -2, тож якщо ви опублікуєте щось суперечливе (наприклад, цей нульовий баланс з +2 і -2 все ще +16 відс.), Ласкаво просимо в Інтернет ;-)
bmike

1
І позначити правильно, якщо всі користувачі публікують виключно пізні, короткі, незначні зміни без пояснень (якщо я здогадався, ваша думка - введення grep є більш чітким, коротким і досить хорошим для багатьох), я можу пінг цього користувача і запитати вони його збивають. Більшість користувачів з високою репутацією прокоментують мою відповідь, але ми не можемо очікувати, що це зробить новий користувач з 1
повторною пропозицією

2

Щоб полегшити запам’ятовування, використовуйте нечутливий до регістру пошук:

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

Попередження: це повертає рядок | "IOPlatformSerialNumber" = "YourSerialNumber" Це візуально чудово, але якщо ви використовуєте його в сценарії, вам потрібно буде передати його на awk.
jasonology

1

Приклад 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;
}

Ласкаво просимо до "Запитайте різних". Будь ласка, розумійте, що розміщення відповіді, яка по суті містить лише код, не має ніяких вказівок щодо того, що з ним робити або як його використовувати, не дає якісної відповіді. Будь ласка, знайдіть час, щоб прочитати Як написати гарну відповідь? а потім відредагуйте свою відповідь, щоб включити інструкцію щодо складання коду та способів його використання. Також взяти тур .
користувач3439894

Варто зазначити, що це було взято з Apple Technical Docs, де є пояснення: developer.apple.com/library/archive/technotes/tn1103/…
Cinder Biscuits
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.