터미널에서 프로그래밍 방식으로 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;}'

이러한 명령은 모두 당신이 할 그렇다면, 현대 SSD 맥에서 실행되도록 0.5 내지 0.2 초 정도 걸릴 명령을 최적화 하고 (가) "제거 당신이 0.005s 정도에 답을 할 수 있습니다 :

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

2
ioreg하나는 내 MBPR에 즉시 근처에 있습니다. system_profiler이전 Mac보다이 Mac에서 더 빠르지 만 훨씬 느립니다.
markhunte

system_profile은 너무 느리고 ioreg는 매우 빠릅니다.
user1735921

14

이것은 또한 작동합니다…

ioreg -l | grep IOPlatformSerialNumber

우리가보고 싶지 않은 awk600 줄의 ioreg출력 을 제거하기 위해 버전 보다 입력하기가 확실히 쉽습니다 . (또한-유권자들을 신경 쓰지 마십시오. 어떤 사람들은 짧은 답변을 좋아하지 않거나 모든 사람들이 grep과 awk의 작동 방식을 아는 것을 잊지 않습니다.)
bmike

알았어, 고마워 bmike, 나에게 더 단순 해 보이지만 정답에 대한 투표를 기대하지 않았다. 알아 둘만 한.
MrPool

1
@MrPool 이전 답변에있는 내용을 반복하고 이전 답변에서 개선되지 않는 경우
user151019

1
그들은 그 자체로 잘못된 투표가 아닙니다. 다운 투표조차도 누군가가 조치를 취하기에 충분히 관심이 있음을 나타내므로 좋습니다. 또한, 나는 총체적으로 정당하지 않은 투표를 볼 때 의견을 말하거나 채팅을 시도합니다. 좋은 소식은 상향 투표가 +10이고 하향 투표가 -2이므로 논란의 여지가있는 게시물을 게시하면 (+2와 -2로이 0의 잔액이 여전히 +16
응답

1
그리고 모든 사용자가 설명하지 않고 독점적으로 늦고 짧고 사소한 변경 사항을 게시하면 표시가 정확합니다 (포인트를 입력하면 grep을 입력하는 것이 더 명확하고 짧으며 충분합니다). 그들은 그것을 노크합니다. 평판이 높은 사용자 대부분이 내 답변에 대해 언급하지만 1 명의 담당자가있는 새로운 사용자는 그렇게 할 것으로 예상 할 수 없습니다. 이제 다음과 같이 할 수 있습니다 :-)
bmike

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

다른 질문에 오신 것을 환영합니다. 본질적으로 코드와 관련하여 지시 사항이없고 코드를 사용하는 방법이나 코드 사용 방법에 대한 지침이없는 코드 만 포함 된 답변을 게시해도 품질이 우수하지 않습니다. 좋은 답변을 작성 하려면 어떻게합니까? 를 읽으십시오 . 그런 다음 코드 컴파일 및 사용 방법에 대한 지침을 포함하도록 답변을 편집하십시오. 또한 걸릴 투어 .
user3439894

설명이있는 Apple Technical Docs에서 가져온 것입니다. developer.apple.com/library/archive/technotes/tn1103/…
Cinder Biscuits
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.