Bir Mac'in model yılı bir Terminal Komutuyla belirlenebilir mi?


58

Bana Mac'imin modelini veren bir terminal komutu bilen var mı?

Örneğin - "MacBook Pro, Retina, 13 inç, Orta 2013" veya "MacBook Pro, 2009 Sonu" veya "Mac Mini, Erken 2010".

Bu bilgiler SystemProfiler ( /usr/sbin/system_profiler SPHardwareDataType) ' da mevcut değildir , ancak OS X 10.7 ve OS X 10.8'de "Bu Mac Hakkında" penceresinde "Daha Fazla Bilgi ..." seçeneğini tıkladığınızda bu bilgileri görebilirsiniz.


1
Mac'i doğrudan "Geç 2009" olarak tanımlamak için bir komut olduğunu sanmıyorum. Ancak, Model Tanımlayıcı'dan türetilebilir, bir açıklama için cevabımı görün. But in OS X 10.7 and 10.8...Cümle ile ne demek istiyorsun ? Bu Mac Hakkında penceresine baktığımda, 2009'un Geçini veya benzeri bir şey gösteren hiçbir şey göremiyorum.
Saaru Lindestøkke

2
@BartArondson - 10.8 için bu Mac Hakkında ekranı bir satırda Mac Mini'yi, bir sonraki
seferde

Ah şimdi anlıyorum. Tıkladığınızda About This Macve daha sonra More Info.... Terminalinizde bu bilgilerin nasıl elde edileceğine dair hiçbir fikrim yok.
Saaru Lindestøkke

Yanıtlar:


69

Bu bilgiyi dolaylı olarak bir web sayfasından ve curl komutundan alabilirsiniz. Geçmişte bu URL düşürülmüş ve oranlandırılmış ve bu kullanımı engellemek için bir tür captcha'yı geride bıraktığından , bu durumda https://checkcoverage.apple.com/ gibi diğer caddelere başvurmanız gerekebilir .

Seri numaranızın 11 veya 12 karakter uzunluğunda olmasına bağlı olarak, sırasıyla son 3 veya 4 karakteri kullanın ve bunu ? Cc = XXXX bölümünden sonra aşağıdaki URL'ye besleyin . Seri numaranız 12 karakter ise ve DJWR'de bittiyse, şu komutu verirdiniz:

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

Seri numaranızı almak için aşağıdaki komutu kullanın:

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

Böylece, tek bir komuta ihtiyacınız olursa, interneti sorgulamak için karmaşık bir komutunuz olabilir:

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

ve sonra anahtar kısmını kesmek için sed'in içinden çıktıyı çalıştırın

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

Orada bir eskiden bu eşleştirmeleri ile özel kitaplık dosyası çevrimdışı olarak danışmak böylece, ama (belki de daha erken ve) 10.8.3 itibariyle gitmişti fark nedenle yukarıdaki hüner geçerli işletim sistemi üzerinde çalışır bildiğim tek üçüncü taraf kütüphaneleri olmadan.

Bazı güzel üçüncü taraf kütüphaneleri şunlara bir göz atıyor:

Kasım 2017 itibariyle, Apple'ın bu hizmet için httpsüzerinden kullanımın zorladığını unutmayın http.


Bir soru daha. Bana verdiğiniz son seçeneği koyduysanız şunu anladım: <? Xml version = "1.0" encoding = "utf-8"?> <root> <name> CPU Adı </name> <configCode> iMac (27 -inch, 2009 Sonu) </configCode> <locale> tr_US </locale> </root> ". Sadece" (27-inç, 2009 Sonu) "" almak mümkün mü? Tanklar: P
Mac

Öyleyse, Daha Fazla Bilgi ekranı (OP'nin bahsettiği) çevrimiçi bir veritabanından bilgilerini alıyor mu? Pazarlama adı, orada görüntülenirse yerel olarak bir yerde saklanmıyor mu?
Saaru Lindestøkke

Bir veritabanında olduğunu düşünüyorum. Ama benim durumumda bu bir sorun değil: P Ama eğer internet olmadan alabilirsem elbette harika olurdu. Ama "(27-inç, 2009 Sonu)" metnini yalnızca alabilirsem bu harika olurdu! Regards
Mac,

Tahminim sistem kayıt sırasında önbelleğe alıyor veya bilgi almak için özel bir dahili SDK var. ServerKit adlı özel bir çerçevede çalışıyordu - bu yüzden açıkça belgelenmemiş ve çoktan değişti. Mac'in bilgileri internet bağlantısı olmadan gösterebildiğini biliyorum - ancak yükleme sırasında önbelleğe alınmış veya belirlenmiş ve kodlanmış olup olmadığını gerçekten bilmiyorum.
bmike

2
sysctl -n hw.modelAşağıda belirtilen kullanmaya benzer şekilde ioreg -c IOPlatformExpertDevice -d 2 | awk -F\" '/IOPlatformSerialNumber/{print $(NF-1)}', seri numarasını almak için daha hızlı çalışacaktır.
n8felton

37

Komutu kullanabilirsiniz

system_profiler SPHardwareDataType | grep "Model Identifier"

Makinenizin model kimliğini almak için Terminal
Ardından, bu kimliğe , belirli bir modelin başlatıldığı ayı ve yılı listeleyen bu siteye girebilirsiniz .

Aşağıdaki yorumlarda belirtildiği gibi, aşağıdaki komut daha hızlıdır:

sysctl hw.model

4
system_profiler SPHardwareDataType | grep "Model Identifier"tam profilleyiciden çok daha hızlı çalışır ancak yine de OP'nin istediği gibi pazarlama adını döndürmez. Cevabınızın "arama" kısmı çevresinde çalışan bir komut için cevabımı terminal dostu bir şekilde inceleyin.
bmike


4
Aynı çıktı sysctl hw.modeliçin yukarıdaki komuttan daha hızlı.
Liyali

7

El Capitan ve Sierra'da, özel bir çerçevede, her bir model tanımlayıcı için bilgi dikte olan bir dosya var; Bu sözlük pazarlama ismini içerir (içinde model yılı vardır). Belirli bir dosyanın hangi işletim sistemi sürümüyle geldiğini bilmiyorum, ancak Snow Leopard'da (El Capitan'dan daha eski olan tek şey) DEĞİLDİR.

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

Yani, (veya bilmediğim püf noktalarını biliyorsanız, işletim sistemi sürümünü kontrol ettikten sonra diğer işletim sistemi sürümleri için benzer püf noktalarını kullanabilirsiniz) ve eğer uygulanabilir değilse, her zaman yaklaşıma geri dönebilirsiniz. İnternet erişimi gerektirir.

Bu, Mac hakkında
Pro'nun gösterdiği ile tam olarak aynı değil, benim durumumda MacBook Pro (Retina, 13 inç, 2015 Başı)
,
13 "Retina ekranlı MacBook Pro (2015 Başı)
ancak insan tarafından okunabilir şekilde , Bence yeterince yakın.


Bu cevabın 2 yaşın üzerinde olduğunun farkındayım, ancak kod tanımlayıcı model kodunu (satır 4, MacBookPro12,1) aldı, bu da her zaman 2015'in başlarında olduğunu iddia ettiği anlamına geliyor. 13 "mbp.
egid

Başka bir yol:/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

Oyuna geç, ama işte bir yaklaşım:

hardware_model () {

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

.

Bu fonksiyon bir plist dosyasını okur, CPU Namesbu dosyanın içinde arar :

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

, ardından sınırlayıcıyı kullanarak "dördüncü alanı ayrıştırır:

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

OS X'in şu anda desteklenen sürümleri üzerinde çalışmak üzere test edilmiştir.


Bu benim için Catalina'da işe yarayan en basit yaklaşım. Daha fazla oy alan diğer cevaplar internet erişimi gerektirir veya yanıltıcı olan Model Tanımlayıcıyı geri gönderir. Örneğin, "MacBookPro15,1", 2018 ve 2019 MBP'lere karşılık gelir. Ben sadece daha da basitleştirmek istiyorum, sadece: defaults read ~/Library/Preferences/com.apple.SystemProfiler.plist 'CPU Names' | cut -sd '"' -f 4 | uniq
Kamal

3

İşte PlistBuddy kullanarak bir grep, sed veya awk-wardness olmadan bir astar.

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

Bu şöyle bir şey döndürür:

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

-

PlistBuddy (küçük bir awk bitiyle) kullanarak, biraz farklı bir dize veren bir başka liner:

/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)

Bunun için yukarıdaki cevapların birçoğuna kredi verin.


1

Saaru’nun cevabını Richard Hamilton’un hata ayıklanmış bir sürümüyle birleştirerek , 10.12 ile 10.6 arasında çalışan (10.6’daki örneklem büyüklüğü sadece bir makine olmasına rağmen) ve muhtemelen daha erken / daha sonraki bir bağlantıya bağlı değildir. İnternet ve Apple'ın sunucuları değişmiyor

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

Buraya ulaşmak için keşfettiğim şeyler hakkında bazı notlar:

  • defaults10.6'da çalışması için etki alanından ".plist" i çıkarmamız gerekiyor ve bu nedenle kabuk -ftestlerine elle yeniden eklemeliyiz
  • -niçin bayrak sysctlbize biraz tasarruf, yalnızca değerini yazdırır demektir sedveya awkişi

0

Biz döndüren bazı 2019 Mbps sahip farklı bir yıl tarafından gönderildi iki tek gömlekleri için model tabrindle .

İlk tek-astarı (kullanıyor sysctl -n hw.model) 2019 modelinde 2018'i döndürür:

Yanlış: 15 "Thunderbolt 3 ve Dokunmatik ID ile MacBook Pro (Orta 2018)

Ancak ikinci bir astarı (kullanarak system_profiler SPHardwareDataType) doğru adı döndürür:

Sağ: MacBook Pro (15 inç, 2019)


-7

Bu yapmalı:

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
Listelediğiniz komutların hiçbiri, soru soran kişinin sorduğu şeyi yapmaz.
Saaru Lindestøkke
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.