터미널 명령으로 Mac의 모델 연도를 결정할 수 있습니까?


58

아무도 내 Mac 모델을 제공하는 터미널 명령을 알고 있습니까?

예 : "MacBook Pro, Retina, 13 인치, 2013 년 중반"또는 "MacBook Pro, Late 2009"또는 "Mac Mini, Early 2010".

해당 정보는 SystemProfiler ( /usr/sbin/system_profiler SPHardwareDataType)에는 없지만 OS X 10.7 및 OS X 10.8에서는 "이 Mac 정보"창에서 "추가 정보 ..."를 클릭하면 해당 정보를 볼 수 있습니다.


1
Mac을 "Late 2009"로 직접 식별하는 명령이 없다고 생각합니다. 그러나 모델 식별자에서 파생 될 수 있습니다. 설명은 내 대답을 참조하십시오. But in OS X 10.7 and 10.8...문장의 의미는 무엇입니까 ? 이 매킨토시에 관하여 창에서 2009 년 말 또는 이와 유사한 내용이 표시되지 않습니다.
Saaru Lindestøkke

2
@BartArondson - 10.8에 약이 Mac 용 화면이 다음에 다음 늦은 2012 한 줄에 맥 미니를 보여줍니다
user151019

아, 지금 봅니다. 당신이 클릭 할 때이다 About This Mac그때와 More Info.... 터미널에서 정보를 얻는 방법에 대한 단서가 없습니다.
Saaru Lindestøkke

답변:


69

웹 페이지 및 curl 명령에서이 정보를 간접적으로 얻을 수 있습니다. 과거에는이 URL이 삭제되어 속도가 제한되었으며 이러한 사용을 막기 위해 일종의 보안 문자를 사용 했으므로이 경우 https://checkcoverage.apple.com/ 과 같은 다른 방법을 사용해야 할 수도 있습니다 .

직렬 숫자가 11 자 또는 12 자인지 여부에 따라 각각 마지막 3 자 또는 4자를 가져와 ? cc = XXXX 부분 다음에 다음 URL로 공급하십시오 . 일련 번호가 12 자이고 DJWR로 끝나면 다음 명령을 발행하십시오.

curl https://support-sp.apple.com/sp/product?cc=DJWR

일련 번호를 얻으려면 다음 명령을 사용하십시오.

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

따라서 단일 명령이 필요한 경우 인터넷을 쿼리하는 복잡한 명령이있을 수 있습니다.

curl https://support-sp.apple.com/sp/product?cc=$(
  system_profiler SPHardwareDataType \
    | awk '/Serial/ {print $4}' \
    | cut -c 9-
)

그런 다음 sed를 통해 출력을 실행하여 주요 부분을 자릅니다.

curl -s https://support-sp.apple.com/sp/product?cc=$(
  system_profiler SPHardwareDataType \
    | awk '/Serial/ {print $4}' \
    | cut -c 9-
) | sed 's|.*<configCode>\(.*\)</configCode>.*|\1|'

매핑이 있는 개인 라이브러리 파일 이 있었으므로 오프라인으로 참조 할 수 있었지만 10.8.3 (그리고 이전 버전)으로 사라 졌음을 알았으므로 위의 트릭은 내가 현재 OS에서 작동하는 유일한 방법입니다. 타사 라이브러리가 없습니다.

멋진 써드 파티 라이브러리는 다음과 같은 기능을 제공합니다.

2017 년 11 월 현재, Apple 은이 서비스 httpshttp대해 over 를 사용하도록 강요했습니다 .


하나 더 질문. 터미널에서 마지막으로 제공 한 옵션을 입력하면 <? xml version = "1.0"encoding = "utf-8"?> <root> <name> CPU 이름 </ name> <configCode> iMac (27 -inch, Late 2009) </ configCode> <locale> en_US </ locale> </ root> "."(27-inch, Late 2009) "를 얻을 수 있습니까? Tanks : P
Mac

그렇다면 추가 정보 화면 (OP에서 언급 한 화면)은 온라인 데이터베이스에서 정보를 가져 옵니까? 마케팅 이름이 표시되면 어딘가에 로컬로 저장되지 않습니까?
Saaru Lindestøkke

나는 그것이 데이터베이스에 있다고 생각합니다. 그러나 내 경우에는 문제가되지 않습니다 .P 그러나 인터넷없이 얻을 수 있다면 물론 좋을 것입니다. 그러나 "(27-inch, Late 2009)"라는 텍스트 만 얻을 수 있다면 좋을 것입니다! 감사합니다
Mac

내 생각에 시스템은 등록하는 동안 시스템이 캐시하거나 정보를 얻기위한 개인 내부 SDK가 있습니다. 이전에는 개인 프레임 워크 ServerKit에 있었으므로 문서화되지 않았으며 이미 변경되었습니다. 인터넷에 연결하지 않고도 Mac에서 정보를 표시 할 수 있다는 것을 알고 있습니다. 그러나 설치시 캐시되거나 결정되어 하드 코딩되어 있는지 실제로 알 수 없습니다.
bmike

2
sysctl -n hw.model아래 언급 된 것과 유사하게 ioreg -c IOPlatformExpertDevice -d 2 | awk -F\" '/IOPlatformSerialNumber/{print $(NF-1)}'일련 번호를 얻는 데 더 빨리 작동합니다.
n8felton

37

당신은 명령을 사용할 수 있습니다

system_profiler SPHardwareDataType | grep "Model Identifier"

터미널에서 컴퓨터의 모델 ID를 가져옵니다.
그런 다음 사이트 에 해당 ID를 입력 하면 특정 모델이 시작된 월과 연도가 표시됩니다.

아래 주석에서 언급했듯이 다음 명령이 훨씬 빠릅니다.

sysctl hw.model

4
system_profiler SPHardwareDataType | grep "Model Identifier"전체 프로파일 러보다 훨씬 빠르게 실행되지만 OP가 요청한대로 마케팅 이름을 반환하지 않습니다. 터미널 친화적 인 방식으로 답변의 "찾아보기"부분을 해결하는 명령에 대한 내 대답을 참조하십시오.
bmike

1
귀하의 답변은 apple.stackexchange.com/questions/40243/… 를 위해 자리를 잡을 것입니다. 그러나 ;-)
bmike

4
동일한 출력의 sysctl hw.model경우 위 명령보다 빠릅니다.
Liyali

7

El Capitan과 Sierra에는 각 모델 식별자에 대한 정보가 담긴 개인 프레임 워크에 plist 파일이 있습니다. dict에는 마케팅 이름 (모델 연도가 포함됨)이 포함됩니다. 특정 파일과 함께 제공된 OS 버전을 모르지만 Snow Leopard에는 없습니다 (El Capitan보다 오래된 것만 있습니다).

#! /bin/ksh
if [ -f /System/Library/PrivateFrameworks/ServerInformation.framework/Versions/A/Resources/English.lproj/SIMachineAttributes.plist ]
then
    marketingModel="$(modelid="$(system_profiler SPHardwareDataType 2>/dev/null|awk '/Model Identifier:/ {print $NF}')"
    defaults read /System/Library/PrivateFrameworks/ServerInformation.framework/Versions/A/Resources/English.lproj/SIMachineAttributes.plist "MacBookPro12,1"|sed -n -e 's/\\//g' -e 's/.*marketingModel = "\(.*\)";/\1/p')"
    echo "${marketingModel}"
else
    echo "can't use offline method to find marketing name on this OS version"
fi

그래서, 당신은 (또는 OS 버전을 확인한 후 다른 OS 버전에 대한 다른 유사한 트릭을 사용할 수 있습니다. 인터넷 액세스가 필요합니다.

이 정확히 동일하지 않습니다 어떤 내 경우에이 맥 쇼, 약
맥북 프로 (망막, 13 인치, 2015 년 초)
이 보여주고있는 동안
(2015 초) 레티 나 디스플레이 프로 13 "맥북
하지만 사람이 읽을 수있는 용어를 나는 그것이 충분히 가깝다고 생각합니다.


이 답변이 2 년이 지난 것을 알고 있지만, 모델 식별자를 하드 코드 (4 행 MacBookPro12,1)했습니다. 이는 항상 2015 년 초 13 "mbp에 이른다고 주장합니다.
egid

다른 방법 :/usr/libexec/PlistBuddy -c "print :$(sysctl hw.model | cut -f 2 -d ' '):_LOCALIZABLE_:marketingModel" /System/Library/PrivateFrameworks/ServerInformation.framework/Versions/A/Resources/English.lproj/SIMachineAttributes.plist
gregmac

4

게임에 늦었지만 여기에 한 가지 접근법이 있습니다.

hardware_model () {

  local hardware_mod=$(defaults read 
  ~/Library/Preferences/com.apple.SystemProfiler.plist 'CPU Names' \
  |cut -sd '"' -f 4 \
  |uniq)
}

.

이 함수는 plist 파일을 읽고 CPU Names해당 파일 내 에서 찾습니다 .

{
    "CPU Names" =     {
        "J1GN-en-US_US" = "iMac (Retina 5K, 27-inch, 2017)";
    };
} 

그런 다음 구분 기호를 사용하면 "네 번째 필드를 구문 분석합니다.

iMac (Retina 5K, 27-inch, 2017) 

현재 지원되는 OS X 버전에서 작동하도록 테스트되었습니다.


이것은 Catalina에서 실제로 나를 위해 일한 가장 간단한 접근법입니다. 더 많은 표를 얻은 다른 답변은 인터넷 액세스가 필요하거나 잘못된 모델 식별자를 반환해야합니다. 예를 들어, "MacBookPro15,1"은 2018 및 2019 MBP에 해당합니다. 나는 다음과 같이 더 단순화 할 것이다 : defaults read ~/Library/Preferences/com.apple.SystemProfiler.plist 'CPU Names' | cut -sd '"' -f 4 | uniq
Kamal

3

여기에 grep, sed 또는 awk-wardness가없는 PlistBuddy를 사용하는 하나의 라이너가 있습니다.

/usr/libexec/PlistBuddy -c "print :$(sysctl -n hw.model):_LOCALIZABLE_:marketingModel" /System/Library/PrivateFrameworks/ServerInformation.framework/Versions/A/Resources/English.lproj/SIMachineAttributes.plist

이것은 다음과 같은 것을 반환합니다 :

15" MacBook Pro with Thunderbolt 3 and Touch ID (Mid 2017)

-

PlistBuddy (약간의 awk)를 사용하여 약간 다른 문자열을 생성하는 또 하나의 라이너 :

/usr/libexec/PlistBuddy -c "print :'CPU Names':$(system_profiler SPHardwareDataType | awk '/Serial/ {print $4}' | cut -c 9-)-en-US_US" ~/Library/Preferences/com.apple.SystemProfiler.plist

MacBook Pro (15-inch, 2017)

이에 대한 위의 답변 중 몇 가지를 인정합니다.


1

Saaru 의 답변과 디버깅 된 Richard Hamilton 의 버전을 결합하면 10.6 ~ 10.12 (10.6의 샘플 크기는 하나의 시스템이지만)와 이전 / 이후의 연결에 의존하지 않는 다음과 같은 결과를 얻습니다. 인터넷과 애플의 서버는 변하지 않습니다

ATTRIBSFILE=/System/Library/PrivateFrameworks/ServerInformation.framework/Versions/A/Resources/English.lproj/SIMachineAttributes
if ! [ -f "${ATTRIBSFILE}.plist" ] ; then
  # 10.7 or 10.6
  ATTRIBSFILE=/System/Library/PrivateFrameworks/ServerKit.framework/Versions/A/Resources/English.lproj/XSMachineAttributes
fi
if [ -f "${ATTRIBSFILE}.plist" ]
then
    modelid="$(sysctl -n hw.model)"
    marketingModel="$(defaults read "${ATTRIBSFILE}" "${modelid}" |sed -n -e 's/\\//g' -e 's/.*marketingModel = "\(.*\)";/\1/p')"
    echo "${marketingModel}"
else
    echo "can't use offline method to find marketing name on this OS version"
fi

내가 여기에 도착한 것에 대한 몇 가지 메모 :

  • defaults10.6에서 작동 하려면 도메인에서 ".plist"를 제거해야 하므로 쉘 -f테스트에 수동으로 다시 추가해야합니다.
  • -n에 플래그 sysctl는 우리에게 약간의 절약 값만 출력을 의미 sed하거나 awk작업을

0

tabrindle이 게시 한 두 개의 단일 라이너에 대해 서로 다른 연도 모델을 반환하는 2019 MBP가 있습니다.

그의 첫 번째 원 라이너 (를 사용하여 sysctl -n hw.model)는 2019 모델에 대해 2018을 반환합니다.

잘못된 정보 : Thunderbolt 3 및 Touch ID가 포함 된 15 "MacBook Pro (Mid 2018)

그러나 그의 두 번째 한 줄짜리 (을 사용하여 system_profiler SPHardwareDataType)는 올바른 이름을 반환합니다.

오른쪽 : MacBook Pro (2019 년 15 인치)


-7

이것은해야합니다 :

system_profiler | more
sw_vers
scutil --get ComputerName
sw_vers | awk -F':\t' '{print $2}' | paste -d ' ' - - -
sysctl -n hw.memsize | awk '{print $0/1073741824" GB RAM"}'
sysctl -n machdep.cpu.brand_string

3
나열된 명령 중 어느 것도 질문자가 요구하는 것을 수행하지 않습니다.
Saaru Lindestøkke
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.