¿Se puede determinar el año modelo de una Mac con un comando de terminal?

48

¿Alguien sabe un comando de terminal que me da el modelo de mi Mac?

Por ejemplo, "MacBook Pro, Retina, 13 pulgadas, mediados de 2013" o "MacBook Pro, finales de 2009" o "Mac Mini, principios de 2010".

Esa información no existe en el SystemProfiler ( /usr/sbin/system_profiler SPHardwareDataType ), pero en OS X 10.7 y OS X 10.8 puede ver esa información al hacer clic en "Más información ..." en la ventana "Acerca de esta Mac".

    
pregunta Mac 06.08.2013 - 10:42

6 respuestas

65

Puede obtener esta información de forma indirecta desde una página web y el comando curl. En el pasado, esta URL se ha desactivado, se ha limitado la velocidad y se ha colocado detrás de algún tipo de captcha para evitar este uso, por lo que es posible que deba recurrir a otras vías como enlace en ese caso.

Dependiendo de si su número de serie tiene una longitud de 11 o 12 caracteres, tome los últimos 3 o 4 caracteres, respectivamente, y comparta la siguiente URL después de la parte ? cc = XXXX . Si su número de serie era de 12 caracteres y terminó en DJWR, emitiría este comando:

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

Para obtener su número de serie, use el siguiente comando:

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

Por lo tanto, podría tener un comando complicado para consultar Internet si necesita un solo comando:

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

y luego ejecuta la salida de eso a través de sed para cortar a la parte clave

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

solía haber un archivo de biblioteca privada con estas asignaciones para que pueda consultarlas sin conexión, pero me di cuenta de que se había ido a partir de la versión 10.8.3 (y quizás antes), por lo que el truco anterior es el único que sé que funciona en el sistema operativo actual sin bibliotecas de terceros.

Algunos buenos bibliotecas de terceros ofrecen una vista de esto:

Tenga en cuenta que a partir de noviembre de 2017, Apple ha forzado el uso de https sobre http para este servicio.

    
respondido por el bmike 06.08.2013 - 13:39
32

Puedes usar el comando

system_profiler SPHardwareDataType | grep "Model Identifier"

en la Terminal para obtener el ID de modelo de su máquina.
Luego, puede ingresar esa ID en este sitio que mostrará el mes y el año en que se lanzó el modelo en particular.

Como se menciona en los comentarios a continuación, el siguiente comando es mucho más rápido:

sysctl hw.model
    
respondido por el Saaru Lindestøkke 06.08.2013 - 12:16
6

En El Capitán y Sierra, hay un archivo plist en un marco privado con un dictado de información para cada identificador de modelo; ese dictamen incluye el nombre de marketing (que tiene el año del modelo). No sé con qué versión de SO vino ese archivo en particular, pero NO está en Snow Leopard (lo único que tengo es más antiguo que El Capitán).

#! /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

Entonces, puedes usar eso (u otros trucos similares para otras versiones del sistema operativo después de verificar la versión del sistema operativo, si conoces esos trucos, que yo no conozco), y si eso no fuera aplicable, siempre podrías retroceder. al enfoque que requiere acceso a internet.

Esto no es exactamente lo mismo que muestra Acerca de este Mac, que en mi caso es
MacBook Pro (Retina, 13 pulgadas, principios de 2015)
mientras esto se muestra
MacBook Pro de 13 "con pantalla Retina (principios de 2015)
pero en términos de lectura humana, creo que es lo suficientemente cerca.

    
respondido por el Richard Hamilton 05.10.2016 - 00:44
2

Tarde en el juego, pero aquí hay un enfoque:

hardware_model () {

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

.

Esta función lee un archivo plist, busca CPU Names dentro de ese archivo:

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

, luego, utilizando el delimitador " , se analiza el cuarto campo:

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

Probado para funcionar en las versiones actualmente compatibles de OS X.

    
respondido por el marshki 16.07.2018 - 16:20
1

Combinación de la respuesta de Saaru con una versión depurada de Richard Hamilton , obtengo lo siguiente, que funciona de 10.6 a 10.12 (aunque el tamaño de muestra en 10.6 es solo una máquina) y posiblemente antes / después, y no depende de una conexión a Internet y los servidores de Apple no cambian

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

Algunas notas sobre lo que descubrí para llegar aquí:

  • Tenemos que eliminar ".plist" del dominio para que defaults funcione en 10.6 y, por lo tanto, volver a agregarlo manualmente al shell -f tests
  • el indicador -n a sysctl significa que solo imprime el valor, lo que nos ahorra algo de sed o awk trabajo
respondido por el Piersg 19.09.2017 - 08:33
-7

Esto debería hacerlo:

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
    
respondido por el JoeriBe 06.08.2013 - 11:20

Lea otras preguntas en las etiquetas