88 votes

Peut-on déterminer l'année modèle d'un Mac avec une commande de terminal ?

Quelqu'un connaît-il une commande de terminal qui me donne le modèle de mon Mac ?

Par exemple : "MacBook Pro, Retina, 13 pouces, mi-2013" ou "MacBook Pro, fin 2009" ou "Mac Mini, début 2010".

Cette information n'existe pas dans le SystemProfiler ( /usr/sbin/system_profiler SPHardwareDataType ), mais dans OS X 10.7 et OS X 10.8, vous pouvez voir ces informations lorsque vous cliquez sur "Plus d'infos..." dans la fenêtre "À propos de ce Mac".

89voto

Oskar Points 1242

Vous pouvez indirectement obtenir ces informations à partir d'une page web et de la commande curl. Dans le passé, cette URL a été supprimée et le taux d'accès a été limité et placé derrière une sorte de captcha pour empêcher cette utilisation, donc vous devrez peut-être recourir à d'autres moyens comme https://checkcoverage.apple.com/ dans ce cas.

Selon que votre numéro de série comporte 11 ou 12 caractères, prenez les 3 ou 4 derniers caractères, respectivement, et envoyez-les à l'URL suivante, après la balise ?cc=XXXX partie. Si votre numéro de série comporte 12 caractères et se termine par DJWR, vous devez émettre cette commande :

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

Pour obtenir votre numéro de série, utilisez la commande suivante :

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

Ainsi, vous pourriez avoir une commande compliquée pour interroger l'internet si vous avez besoin d'une seule commande :

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

et ensuite passer la sortie de ce fichier dans sed pour couper la partie clé.

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|'

Il y avait un fichier de bibliothèque privée avec ces mappings afin de pouvoir le consulter hors ligne, mais j'ai remarqué qu'il avait disparu depuis la 10.8.3 (et peut-être avant). L'astuce ci-dessus est donc la seule que je connaisse qui fonctionne sur l'OS actuel sans bibliothèques tierces.

Certaines librairies tierces fournissent une vue d'ensemble de ceci :

Notez qu'à partir de novembre 2017, Apple a imposé l'utilisation de https sur http pour ce service.

0 votes

J'ai créé un script un peu moins rapide et sale pour accomplir cela en Python, en utilisant des analyseurs XML : gist.github.com/zigg/6174270

3 votes

Similaire à l'utilisation de sysctl -n hw.model mentionnés ci-dessous, ioreg -c IOPlatformExpertDevice -d 2 | awk -F\" '/IOPlatformSerialNumber/{print $(NF-1)}' fonctionnera plus rapidement pour obtenir le numéro de série.

2 votes

Le ? de l'URL doit être échappé dans zsh (désormais l'interpréteur de commandes par défaut de MacOS), car sinon zsh essaie de l'interpréter comme un caractère générique de nom de fichier.

55voto

Saaru Lindestøkke Points 5124

Vous pouvez utiliser la commande

system_profiler SPHardwareDataType | grep "Model Identifier"

dans Terminal pour obtenir l'ID du modèle de votre machine.
Ensuite, vous pouvez entrer cet identifiant sur ce qui indique le mois et l'année de lancement du modèle en question.

Comme mentionné dans les commentaires ci-dessous, la commande suivante est beaucoup plus rapide :

sysctl hw.model

6 votes

system_profiler SPHardwareDataType | grep "Model Identifier" fonctionne beaucoup plus rapidement que le profileur complet, mais ne renvoie toujours pas le nom du marketing comme le demande le PO. Voir ma réponse pour une commande qui contourne la partie "look up" de votre réponse d'une manière conviviale pour le terminal.

1 votes

Votre réponse serait exacte pour apple.stackexchange.com/questions/40243/ cependant ;-)

6 votes

Pour la même sortie, sysctl hw.model est plus rapide que la commande ci-dessus.

8voto

Bruce Points 4426

Sur El Capitan et Sierra, il y a un fichier plist dans un cadre privé avec un dict d'informations pour chaque identifiant de modèle ; ce dict inclut le nom du marketing (qui contient l'année du modèle). Je ne sais pas avec quelle version d'OS ce fichier particulier est arrivé, mais il n'est PAS sur Snow Leopard (la seule chose que j'ai qui est plus ancienne qu'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

Vous pourriez donc utiliser cette méthode (ou d'autres astuces similaires pour d'autres versions du système d'exploitation après avoir vérifié la version du système d'exploitation, si vous connaissez ces astuces, ce qui n'est pas mon cas), et si cela n'était pas applicable, vous pourriez toujours vous rabattre sur l'approche qui nécessite un accès à Internet.

Ce n'est pas exactement la même chose que ce que montre About This Mac, qui dans mon cas est
MacBook Pro (Retina, 13 pouces, début 2015)
alors que ceci montre
MacBook Pro 13" avec écran Retina (début 2015)
mais en termes lisibles par l'homme, je pense que c'est assez proche.

0 votes

Je réalise que cette réponse date de plus de 2 ans, mais l'identifiant du modèle est codé en dur (ligne 4, MacBookPro12,1 ), ce qui signifie qu'il toujours prétend que vous êtes sur un mbp 13" de début 2015.

2 votes

Une autre façon : /usr/libexec/PlistBuddy -c "print :$(sysctl hw.model | cut -f 2 -d ' '):_LOCALIZABLE_:marketingModel" /System/Library/PrivateFrameworks/ServerInformation.framewor‌​k/Versions/A/Resourc‌​es/English.lproj/SIM‌​achineAttributes.pli‌​st

6voto

tabrindle Points 151

Voici un exemple d'utilisation de PlistBuddy, sans grep, sed ou awk-wardness.

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

cela renvoie quelque chose comme :

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

-

Une autre doublure qui donne une chaîne légèrement différente, utilisant également PlistBuddy (avec un tout petit peu d'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)

Le mérite en revient à plusieurs des réponses ci-dessus.

2 votes

Dans votre premier extrait, ceci : English.lproj est maintenant : en.lproj dans les nouvelles versions de MacOS. On peut y remédier en faisant précéder la commande de la mention : shopt -s extglob et ensuite, on attrape les deux possibilités : @(English|en).lproj .

1 votes

Renvoie à Entry, ":MacBookPro18,1:_LOCALIZABLE_:marketingModel", Does Not Exist sur mon MBP M1.

5voto

Steven Klein Points 306

Nous avons des MBP de 2019 qui retournent autre année des modèles pour les deux lettres d'une seule ligne postées par tabrindle .

Sa première phrase (utilisant sysctl -n hw.model ) revient en 2018 pour un modèle 2019 :

Faux : MacBook Pro 15" avec Thunderbolt 3 et Touch ID (mi 2018)

Mais sa deuxième phrase (utilisant system_profiler SPHardwareDataType ) renvoie le nom correct :

Bien : MacBook Pro (15 pouces, 2019)

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X