L'anno di modello di un Mac può essere determinato con un comando terminale?

49

Qualcuno conosce un comando da terminale che mi dà il modello del mio Mac?

Ad esempio: "MacBook Pro, Retina, 13 pollici, metà 2013" o "MacBook Pro, fine 2009" o "Mac Mini, inizio 2010".

Queste informazioni non esistono nel SystemProfiler ( /usr/sbin/system_profiler SPHardwareDataType ), ma in OS X 10.7 e OS X 10.8 puoi vedere quelle informazioni quando fai clic su "Altre informazioni ..." nella finestra "Informazioni su questo Mac".

    
posta Mac 06.08.2013 - 10:42
fonte

6 risposte

65

È possibile ottenere indirettamente queste informazioni da una pagina Web e il comando di arricciatura. In passato questo URL è stato rimosso e ha un tasso limitato e ha nascosto una sorta di captcha per impedirne l'utilizzo, quindi potrebbe essere necessario ricorrere ad altre vie come link in questo caso.

A seconda che i numeri di serie siano di 11 o 12 caratteri, prendi rispettivamente gli ultimi 3 o 4 caratteri e li invii al seguente URL dopo la parte ? cc = XXXX . Se il tuo numero di serie era di 12 caratteri e terminava in DJWR, avresti dato questo comando:

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

Per ottenere il numero di serie, utilizzare il seguente comando:

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

Pertanto, potresti avere un comando complicato per interrogare Internet se hai bisogno di un singolo comando:

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

e quindi eseguire l'output di quello attraverso sed per tagliare alla parte chiave

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

C'era un file di libreria privata con questi mapping in modo da poterlo consultare offline, ma ho notato che era sparito a partire dal 10.8.3 (e forse prima) quindi il trucco di cui sopra è l'unico che conosco che funzioni sul sistema operativo corrente senza librerie di terze parti.

Alcune simpatiche libararie di terze parti forniscono una panoramica di questo:

Da novembre 2017 Apple ha imposto l'utilizzo di https su http per questo servizio.

    
risposta data 06.08.2013 - 13:39
fonte
34

Puoi usare il comando

system_profiler SPHardwareDataType | grep "Model Identifier"

in Terminale per ottenere l'ID del modello della tua macchina.
Quindi puoi inserire quell'ID sul questo sito che elencherà il mese e l'anno in cui è stato lanciato il particolare modello.

Come menzionato nei commenti qui sotto, il seguente comando è molto più veloce:

sysctl hw.model
    
risposta data 06.08.2013 - 12:16
fonte
6

Su El Capitan e Sierra, c'è un file plist in un framework privato con una dict di informazioni per ogni identificatore del modello; quel dict include il nome di marketing (che ha l'anno modello in esso). Non so quale versione del sistema operativo sia stata utilizzata da quel particolare file, ma NON è su Snow Leopard (l'unica cosa che ho è più vecchia di 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 = "\(.*\)";//p')"
    echo "${marketingModel}"
else
    echo "can't use offline method to find marketing name on this OS version"
fi

Quindi potresti usare quello (o altri trucchi simili per altre versioni del sistema operativo dopo aver controllato la versione del sistema operativo, se conosci quei trucchi, cosa che non faccio), e se ciò non fosse applicabile, potresti sempre ricorrere all'approccio che richiede l'accesso a Internet.

Questo non è esattamente lo stesso di ciò che mostra questo Mac, che nel mio caso è
MacBook Pro (Retina, 13 pollici, inizio 2015)
mentre questo mostra
13 "MacBook Pro con display Retina (inizio 2015)
ma in termini leggibili dall'uomo, penso che sia abbastanza vicino.

    
risposta data 05.10.2016 - 00:44
fonte
2

Verso la fine del gioco, ma ecco un approccio:

hardware_model () {

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

.

Questa funzione legge un file plist, cerca CPU Names all'interno di quel file:

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

, quindi utilizzando il delimitatore " analizza il quarto campo:

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

Testato per funzionare sulle versioni attualmente supportate di OS X.

    
risposta data 16.07.2018 - 16:20
fonte
1

Combinazione della risposta di Saaru con una versione debug di Richard Hamilton 's ottengo il seguente, che funziona da 10.6 a 10.12 (anche se la dimensione del campione su 10.6 è solo una macchina) e forse prima / dopo, e non dipende da una connessione a Internet e dai server Apple che non cambiano

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 = "\(.*\)";//p')"
    echo "${marketingModel}"
else
    echo "can't use offline method to find marketing name on this OS version"
fi

Alcune note su ciò che ho scoperto per ottenere qui:

  • Dobbiamo rimuovere ".plist" dal dominio per defaults per funzionare in 10.6 e quindi aggiungerlo di nuovo manualmente alla shell -f test
  • il -n flag in sysctl significa che stampa solo il valore, salvandoci un po 'di sed o awk di lavoro
risposta data 19.09.2017 - 08:33
fonte
-7

Questo dovrebbe farlo:

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
    
risposta data 06.08.2013 - 11:20
fonte

Leggi altre domande sui tag