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...文はどういう意味ですか?[このMacについて]ウィンドウを見ると、Late 2009などの状態を示すものは表示されません。
SaaruLindestøkke

2
@BartArondson-10.8で、「このMacについて」の画面の1行にMac Miniが表示され、次の行に2012年後半が表示されます
user151019

ああ、私は今それを見る。をクリックしてAbout This MacからをクリックしますMore Info...。端末でその情報を取得する方法についてはわかりません。
サアルリンデストッケ

回答:


69

この情報は、Webページと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はこのサービスにhttpsover の使用を強制していることに注意してくださいhttp


もう一つ質問。ターミナルで最後のオプションを指定すると、<?xml version = "1.0" encoding = "utf-8"?> <root> <name> CPU Name </ name> <configCode> iMac(27 -inch、Late 2009)</ configCode> <locale> en_US </ locale> </ root> "。「(27-inch、Late 2009)」を取得することは可能ですか?Tanks:P
Mac

それでは、More Info画面(OPが言及する画面)はオンラインデータベースから情報を取得しますか?マーケティング名は、そこに表示されている場合、ローカルのどこかに保存されていませんか?
サアルリンデストッケ

データベース上にあると思います。しかし、私の場合、それは問題ではありません: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場合、上記のコマンドよりも高速です。
リャリ14

7

El CapitanとSierraでは、プライベートフレームワークにplistファイルがあり、各モデル識別子の情報が含まれています。この辞書には、マーケティング名(モデル年が含まれています)が含まれています。特定のファイルがどの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バージョンのための他の同様のトリック、あなたがそれらのトリックを知っていれば、私は知らない)、それが適用できない場合は、常にアプローチにフォールバックできますインターネットアクセスが必要です。

これはAbout Macの表示とまったく同じではなく、私の場合は
MacBook Pro(Retina、13-inch、Early 2015)で
、これは
Retinaディスプレイを備えた13 インチMacBook Pro(Early 2015)です
が、人間が読める形式で表示されます、十分に近いと思います。


私はこの答えは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
グレックマック

4

ゲームに遅れて、しかし、ここに1つのアプローチがあります:

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

、次に区切り文字を使用"して4番目のフィールドを解析します。

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

OS Xの現在サポートされているバージョンで動作するようにテストされています。


これは、カタリナで実際に働いた最も簡単なアプローチです。投票数が多い他の回答では、インターネットへのアクセスが必要か、モデル識別子が返されますが、これは誤解を招く恐れがあります。たとえば、「MacBookPro15,1」は2018および2019 MBPに対応します。:私はちょうどで、さらにそれを簡素化したい defaults read ~/Library/Preferences/com.apple.SystemProfiler.plist 'CPU Names' | cut -sd '"' -f 4 | uniq
カマル

3

ここに、grep、sed、またはawk-wardnessなしのPlistBuddyを使用した1つのライナーがあります。

/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を使用)を使用して、わずかに異なる文字列を生成するもう1つのライナー:

/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のサンプルサイズは1台のマシンですが)で動作する可能性があります。インターネットとAppleのサーバーは変わらない

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

私たちは、返すいくつかの2019たMBP持っている別の年によって投稿2ワンライナーのためのモデルをtabrindleを

彼の最初のワンライナー(を使用sysctl -n hw.model)は、2019年モデルに対して2018を返します。

誤り: Thunderbolt 3およびTouch IDを搭載した15インチMacBook Pro(2018年中旬)

しかし、2番目の1ライナー(を使用system_profiler SPHardwareDataType)は正しい名前を返します。

右: MacBook Pro(15インチ、2019)


-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
あなたがリストしたコマンドはどれも質問者が尋ねるようなことをしません。
SaaruLindestøkke
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.