Чи можна визначити модельний рік Mac за допомогою команди Terminal?


58

Хтось знає термінальну команду, яка дає мені модель мого Mac?

Наприклад - "MacBook Pro, Retina, 13-дюймовий, середина 2013" або "MacBook Pro, пізно 2009" або "Mac Mini, початок 2010 року".

Цієї інформації немає в SystemProfiler ( /usr/sbin/system_profiler SPHardwareDataType), але в OS X 10.7 та OS X 10.8 ви можете побачити цю інформацію, натиснувши "Більше інформації ..." у вікні "Про цей Mac".


1
Я не думаю, що існує команда ідентифікувати Mac як "пізній 2009" безпосередньо. Однак це може бути отримано з ідентифікатора моделі, пояснення див. У моїй відповіді. Що ви маєте на увазі під But in OS X 10.7 and 10.8...реченням? Коли я дивлюсь у вікно About This Mac, я не бачу нічого, що б написало кінець 2009 року чи щось подібне.
Saaru Lindestøkke

2
@BartArondson - на 10.8 на екрані About this Mac показано Mac Mini на одній лінії, потім наприкінці 2012 року на наступній
user151019

Ах, я це бачу зараз. Це коли ви натискаєте на About This Macі потім More Info.... Я не маю поняття, як отримати цю інформацію у своєму терміналі.
Saaru Lindestøkke

Відповіді:


69

Ви можете побічно отримати цю інформацію з веб-сторінки та команди curl. Раніше ця URL-адреса була знята і обмежена, і вона ставилася за якусь капчу, щоб запобігти цьому використанню, тому вам може знадобитися вдатися до інших проспектів, таких як https://checkcoverage.apple.com/ у цьому випадку.

Залежно від того, чи має серійний номер 11 або 12 символів, потрібно взяти останні 3 або 4 символи відповідно та подати його до наступної URL-адреси після частини ? Cc = XXXX . Якщо ваш серійний номер був 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 version = "1.0" encoding = "utf-8"?> <root> <name> Ім'я процесора </name> <configCode> iMac (27 -inch, пізно 2009) </configCode> <locale> en_US </locale> </root> ". Чи можна просто отримати" (27-дюймовий, кінець 2009)? "Танки: P
Mac

Отже, чи отримує екран "Більше інформації" (той, який згадує ОП) свою інформацію з он-лайн бази даних? Чи не зберігається маркетингова назва десь локально, якщо вона відображається там?
Saaru Lindestøkke

Я думаю, це на базі даних. Але в моєму випадку це не проблема: P Але якщо я можу отримати її без Інтернету, це було б здорово, звичайно. Але якщо мені вдасться отримати текст "(27 дюймів, пізно 2009)", це було б чудово! З повагою
Мак

Я здогадуюсь, що система кешує її під час реєстрації або є приватний внутрішній SDK для отримання інформації. Раніше він був у приватному фреймворку ServerKit - тому він явно недокументований і вже змінився. Я знаю, що Mac може відображати інформацію без підключення до Інтернету - але я не знаю, чи кешировано це чи визначено під час встановлення та жорстко закодовано.
bmike

2
Подібно до використання, sysctl -n hw.modelзазначеного нижче, ioreg -c IOPlatformExpertDevice -d 2 | awk -F\" '/IOPlatformSerialNumber/{print $(NF-1)}'працюватиме швидше для отримання серійного номера.
n8felton

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швидше, ніж наведена вище команда.
Ліялі

7

На Ель-Капітан і Сьєрра є файл-пліст у приватній рамці з вивіском інформації для кожного ідентифікатора моделі; цей диплом включає маркетингову назву (в якій є модельний рік). Я не знаю, з якою версією ОС потрапив цей конкретний файл, але він НЕ на Snow Leopard (єдине, що у мене є старше, ніж 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

Отже, ви можете використовувати ці (або інші подібні трюки для інших версій ОС після перевірки версії ОС, якщо ви знаєте ті хитрощі, яких я не знаю), і якщо це було не застосовано, ви завжди можете повернутися до підходу що вимагає доступу до Інтернету.

Це не зовсім те саме, що показує About This Mac, що в моєму випадку -
MacBook Pro (Retina, 13-дюймовий, початок 2015 року),
тоді як це показує
13 -дюймовий MacBook Pro з дисплеєм Retina (на початку 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
gregmac

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) 

Тестується для роботи над поточно підтримуваними версіями OS X.


Це найпростіший підхід, який насправді працював на мене на Каталіні. Інші відповіді з більшою кількістю голосів вимагають доступу до Інтернету або повернення ідентифікатора моделі, що вводить в оману. Наприклад, "MacBookPro15,1" відповідає MBP 2018 та 2019 року. Я б спростив це ще далі, лише з: defaults read ~/Library/Preferences/com.apple.SystemProfiler.plist 'CPU Names' | cut -sd '"' -f 4 | uniq
Камал

3

Ось один вкладиш, що використовує 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)

-

Ще один вкладиш, який дає дещо інший рядок, також використовуючи PlistBuddy (з крихітним шматочком 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)

Для цього можна покласти декілька вищезазначених відповідей.


1

Поєднуючи відповідь Саару з налагодженою версією Річарда Гамільтона , я отримую наступне, що працює 10,6 до 10,12 (хоча розмір вибірки на 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

Деякі примітки до того, що я виявив, щоб потрапити сюди:

  • Ми повинні позбавити ".plist" з домену, defaultsщоб працювати в 10.6, а тому повторно додати його вручну до -fтестів на оболонки
  • -nпрапор sysctlозначає , що він друкує тільки значення, заощадивши нам деякі sedабо awkроботу

0

У нас є 2019 Mbps, які повертають різний рік модель для двох однорядкових вивішених tabrindle .

Його перший однолінійний (використовуючи sysctl -n hw.model) повертає 2018 рік для моделі 2019 року:

Неправильно: 15 "MacBook Pro з Thunderbolt 3 та Touch ID (середина 2018 року)

Але його другий однокласник (використовуючи system_profiler SPHardwareDataType) повертає правильну назву:

Праворуч: MacBook Pro (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
Жодна з перерахованих команд не робить те, що задає запитання.
Saaru Lindestøkke
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.