क्या मैक का मॉडल वर्ष टर्मिनल कमांड के साथ निर्धारित किया जा सकता है?


58

क्या कोई टर्मिनल कमांड जानता है जो मुझे मेरे मैक का मॉडल देता है?

उदाहरण के लिए - "मैकबुक प्रो, रेटिना, 13-इंच, मिड 2013" या "मैकबुक प्रो, लेट 2009" या "मैक मिनी, अर्ली 2010"।

यह जानकारी SystemProfiler ( /usr/sbin/system_profiler SPHardwareDataType) में मौजूद नहीं है , लेकिन OS X 10.7 और OS X 10.8 में आप "इस बारे में मैक" विंडो में "अधिक जानकारी ..." पर क्लिक करने पर उस जानकारी को देख सकते हैं।


1
मुझे नहीं लगता कि मैक को "लेट 2009" के रूप में सीधे पहचानने के लिए एक कमांड मौजूद है। हालाँकि इसे मॉडल आइडेंटिफायर से लिया जा सकता है, स्पष्टीकरण के लिए मेरा उत्तर देखें। But in OS X 10.7 and 10.8...वाक्य से आपका क्या अभिप्राय है ? जब मैं इस मैक विंडो के बारे में देखता हूं तो मुझे ऐसा कुछ नहीं दिखाई देता है जो 2009 के अंत या कुछ इसी तरह का हो।
सारू लिंडस्टोक

2
@BartArondson - 10.8 पर स्क्रीन इस मैक के बारे में मैक मिनी को एक लाइन पर दिखाता है फिर 2012 के अंत में
user151019

आह मैं अब इसे देखता हूं। यह तब होता है जब आप पर About This Macऔर फिर पर क्लिक करते हैं More Info...। मुझे इस बात का कोई सुराग नहीं है कि आपके टर्मिनल में उस जानकारी को कैसे प्राप्त किया जाए।
सरयू लिंडस्टोक

जवाबों:


69

आप अप्रत्यक्ष रूप से एक वेब पेज और कर्ल कमांड से यह जानकारी प्राप्त कर सकते हैं। पूर्व में इस URL को सीमित और दर सीमित कर दिया गया था और इस उपयोग को रोकने के लिए किसी प्रकार के कैप्चा के पीछे रखा गया था, इसलिए आपको उस मामले में https://checkcoverage.apple.com/ जैसे अन्य उपायों का सहारा लेना पड़ सकता है ।

इस पर निर्भर करता है कि क्या आपका सीरियल अंक 11 या 12 अक्षर लंबा है, क्रमशः अंतिम 3 या 4 अक्षर लेते हैं, और उस URL को 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 (और शायद पहले) के रूप में चला गया था, इसलिए उपरोक्त चाल केवल एक ही है जो मुझे पता है कि वर्तमान ओएस पर काम करता है तीसरे पक्ष के पुस्तकालयों के बिना।

कुछ अच्छी थर्ड पार्टी लीबररीज इस पर नज़र डालती हैं:

ध्यान दें कि नवंबर 2017 तक, Apple ने इस सेवा के लिए httpsओवर के उपयोग को मजबूर कर दिया है http


एक और प्रश्न। अगर मैं आपको अंतिम विकल्प देता हूं जो आपने मुझे टर्मिनल में दिया है तो मुझे यह मिलता है: <? Xml संस्करण = "1.0" एन्कोडिंग = "ut-8"?> <Root> <name> CPU नाम </ name> <configCode> iMac (27) -इनच, 2009 के अंत में) </ configCode> <locale> en_US </ locale> </ root> "। क्या यह सिर्फ" 27 इंच (2009 के अंत में) "संभव है? टैंक: पी
मैक

तो, क्या अधिक जानकारी स्क्रीन (एक ओपी उल्लेख) को ऑन लाइन डेटाबेस से इसकी जानकारी मिलती है? क्या विपणन नाम स्थानीय स्तर पर संग्रहीत नहीं है अगर यह वहां प्रदर्शित होता है?
सारु लिंडस्टोक

मुझे लगता है कि यह एक डेटाबेस पर है। लेकिन मेरे मामले में यह कोई समस्या नहीं है: पी लेकिन अगर मैं इसे इंटरनेट के बिना प्राप्त कर सकता हूं तो यह बहुत अच्छा होगा। लेकिन अगर मैं केवल पाठ प्राप्त कर सकता हूं "(27 इंच, 2009 के अंत में)" जो बहुत अच्छा होगा! सादर
मैक

मेरा अनुमान है कि सिस्टम पंजीकरण के दौरान इसे कैश करता है या जानकारी प्राप्त करने के लिए एक निजी आंतरिक एसडीके है। यह निजी ढांचे ServerKit में हुआ करता था - इसलिए यह स्पष्ट रूप से अनिर्दिष्ट है और पहले से ही बदल गया है। मुझे पता है कि मैक इंटरनेट कनेक्शन के बिना जानकारी दिखा सकता है - लेकिन मुझे वास्तव में नहीं पता है कि क्या यह स्थापित या हार्ड कोडित समय पर कैश या निर्धारित किया गया है।
bmike

2
sysctl -n hw.modelनीचे उल्लिखित उपयोग के समान , ioreg -c IOPlatformExpertDevice -d 2 | awk -F\" '/IOPlatformSerialNumber/{print $(NF-1)}'क्रम संख्या प्राप्त करने के लिए तेजी से काम करेगा।
n8felton 18

37

आप कमांड का उपयोग कर सकते हैं

system_profiler SPHardwareDataType | grep "Model Identifier"

अपनी मशीन का मॉडल आईडी प्राप्त करने के लिए टर्मिनल में।
फिर आप इस साइट पर उस आईडी को दर्ज कर सकते हैं जो उस महीने और वर्ष को सूचीबद्ध करेगा जो विशेष मॉडल लॉन्च किया गया था।

जैसा कि नीचे टिप्पणी में कहा गया है, निम्नलिखित आदेश बहुत तेज है:

sysctl hw.model

4
system_profiler SPHardwareDataType | grep "Model Identifier"फुल प्रोफाइलर की तुलना में बहुत तेज चलता है, लेकिन फिर भी ओपी के पूछे जाने पर मार्केटिंग नाम वापस नहीं करता है। एक टर्मिनल फ्रेंडली तरीके से अपने उत्तर के "लुक अप" भाग के आसपास काम करने वाली कमांड के लिए मेरा उत्तर देखें।
bmike

1
आपके उत्तर के लिए स्थान पर होगा apple.stackexchange.com/questions/40243/... हालांकि ;-)
bmike

4
समान आउटपुट के लिए, sysctl hw.modelउपरोक्त कमांड से तेज है।
Liyali

7

एल कैपिटन और सिएरा पर, प्रत्येक मॉडल पहचानकर्ता के लिए जानकारी का एक तानाशाही के साथ एक निजी ढांचे में एक फ़ाइल है; उस हुकुम में मार्केटिंग नाम (जिसमें मॉडल वर्ष है) शामिल है। मुझे नहीं पता कि OS संस्करण क्या है जो विशेष रूप से फ़ाइल के साथ आया था, लेकिन यह स्नो लेपर्ड पर नहीं है (केवल एक चीज जो मेरे पास Eliniini से पुरानी है)।

#! /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 संस्करण की जाँच करने के बाद अन्य ओएस संस्करणों के लिए (या अन्य समान चालें) का उपयोग कर सकते हैं, यदि आप उन चालों को जानते हैं, जो मैं नहीं जानता हूं), और यदि यह लागू नहीं हुआ, तो आप हमेशा दृष्टिकोण पर वापस आ सकते हैं। इसके लिए इंटरनेट का उपयोग आवश्यक है।

यह बिल्कुल वैसा नहीं है जैसा कि इस मैक शो के बारे में है, जो मेरे मामले में
मैकबुक प्रो (रेटिना, 13-इंच, अर्ली 2015) है,
जबकि यह
13 "मैकबुक प्रो रेटिना डिस्प्ले (अर्ली 2015) से पता चलता है,
लेकिन मानव-पठनीय शब्दों में , मुझे लगता है कि यह काफी करीब है।


मुझे लगता है कि यह उत्तर 2 साल से अधिक पुराना है, लेकिन यह मॉडल पहचानकर्ता हार्डकोड (लाइन 4 MacBookPro12,1) है , जिसका अर्थ है कि यह हमेशा दावा करता है कि आप 2015 की शुरुआत में 13 mbp पर हैं।
उदाहरणार्थ

दूसरा तरीका:/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

खेल के लिए देर, लेकिन यहाँ एक दृष्टिकोण है:

hardware_model () {

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

यह फ़ंक्शन एक फ़ाइल को पढ़ता है, CPU Namesउस फ़ाइल के लिए खोज करता है:

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

, फिर "चौथे क्षेत्र को सीमांकित पार्स का उपयोग करते हुए :

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

ओएस एक्स के वर्तमान में समर्थित संस्करणों पर काम करने के लिए परीक्षण किया गया।


यह सबसे सरल दृष्टिकोण है जो वास्तव में मेरे लिए कैटालिना पर काम करता था। अधिक वोटों के साथ अन्य उत्तरों के लिए इंटरनेट एक्सेस की आवश्यकता होती है या मॉडल आइडेंटिफ़ायर की वापसी होती है, जो भ्रामक है। उदाहरण के लिए, "मैकबुकप्रो 15,1" 2018 और 2019 एमबीपी से मेल खाती है। मैं इसे और भी सरल करूँगा, बस: defaults read ~/Library/Preferences/com.apple.SystemProfiler.plist 'CPU Names' | cut -sd '"' -f 4 | uniq
कमल

3

यहाँ बिना किसी grep, sed या awk-वार्डनेस के, PlistBuddy का उपयोग करके एक लाइनर है।

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

-

एक और एक लाइनर जो थोड़ी अलग स्ट्रिंग पैदा करता है, वह भी प्लिस्टबडी का उपयोग करके (थोड़े थोड़े समय के साथ):

/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 'का एक डिबग संस्करण के साथ रों जवाब रिचर्ड हैमिल्टन की मैं निम्नलिखित है, जो 10.12 के माध्यम से 10.6 काम करता है (हालांकि 10.6 पर नमूने का आकार सिर्फ एक मशीन है) हो जाते हैं और संभवतः पहले / बाद में, और एक कनेक्शन पर निर्भर नहीं करता इंटरनेट और 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 एमबीपी हैं जो टैब्रिंडल द्वारा पोस्ट किए गए दो वन-लाइनर्स के लिए अलग-अलग वर्ष के मॉडल लौटाते हैं

sysctl -n hw.model2019 मॉडल के लिए 2018 में उनका पहला वन-लाइनर (उपयोग करके ) रिटर्न:

गलत: 15 "मैकबुक प्रो थंडरबोल्ट 3 और टच आईडी (मिड 2018) के साथ

लेकिन उसका दूसरा वन-लाइनर (उपयोग करके system_profiler SPHardwareDataType) सही नाम देता है:

राइट: मैकबुक प्रो (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
आपके द्वारा सूचीबद्ध कोई भी आदेश वह नहीं है जो प्रश्न पूछने वाला पूछता है।
सारू लिंडस्टोक 10
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.