Năm mô hình của máy Mac có thể được xác định bằng Lệnh Terminal không?


58

Có ai biết một lệnh thiết bị đầu cuối cung cấp cho tôi mô hình máy Mac của tôi không?

Ví dụ: "MacBook Pro, Retina, 13 inch, Mid 2013" hoặc "MacBook Pro, cuối năm 2009" hoặc "Mac Mini, đầu năm 2010".

Thông tin đó không tồn tại trong SystemProfiler ( /usr/sbin/system_profiler SPHardwareDataType), nhưng trong OS X 10.7 và OS X 10.8, bạn có thể thấy thông tin đó khi bạn nhấp vào "Thông tin thêm ..." trong cửa sổ "Giới thiệu về máy Mac này".


1
Tôi không nghĩ có tồn tại lệnh xác định máy Mac là "Cuối năm 2009". Tuy nhiên, nó có thể được lấy từ Mã định danh mẫu, xem câu trả lời của tôi để được giải thích. Bạn có ý gì trong But in OS X 10.7 and 10.8...câu? Khi tôi nhìn vào cửa sổ About This Mac, tôi không thấy bất cứ điều gì nói vào cuối năm 2009 hoặc một cái gì đó tương tự.
Saaru Lindestøkke

2
@BartArondson - vào ngày 10.8, màn hình Giới thiệu về máy Mac này hiển thị Mac Mini trên một dòng sau đó vào cuối năm 2012 trên tiếp theo
user151019

Ah tôi thấy nó bây giờ. Đó là khi bạn nhấp vào About This Macvà sau đó vào More Info.... Tôi không biết làm thế nào để có được thông tin đó trong thiết bị đầu cuối của bạn.
Saaru Lindestøkke

Câu trả lời:


69

Bạn có thể gián tiếp lấy thông tin này từ một trang web và lệnh curl. Trước đây, URL này đã bị gỡ xuống và đánh giá giới hạn và đặt đằng sau một số loại hình xác thực để ngăn chặn việc sử dụng này, vì vậy bạn có thể cần phải sử dụng các con đường khác như https://checkcoverage.apple.com/ trong trường hợp đó.

Tùy thuộc vào việc số sê-ri của bạn dài 11 hoặc 12 ký tự, lần lượt lấy 3 hoặc 4 ký tự cuối cùng và đưa số đó vào URL sau sau phần ? Cc = XXXX . Nếu số sê-ri của bạn là 12 ký tự và kết thúc bằng DJWR, bạn sẽ ban hành lệnh này:

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

Để lấy số sê-ri của bạn, hãy sử dụng lệnh sau:

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

Do đó, bạn có thể có một lệnh phức tạp để truy vấn internet nếu bạn cần một lệnh duy nhất:

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

và sau đó chạy đầu ra của nó thông qua sed để cắt đến phần chính

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

Đã từng có một tệp thư viện riêng với các ánh xạ này để bạn có thể tham khảo nó ngoại tuyến, nhưng tôi nhận thấy nó đã biến mất vào ngày 10.8.3 (và có lẽ trước đó), vì vậy, mẹo trên là cách duy nhất tôi biết hoạt động trên HĐH hiện tại không có thư viện bên thứ ba.

Một số lời nói dối của bên thứ ba tốt đẹp cung cấp một cái nhìn về điều này:

Lưu ý rằng kể từ tháng 11 năm 2017, Apple đã buộc phải sử dụng httpshơn httpcho dịch vụ này.


Thêm một câu hỏi nữa. Nếu tôi đặt tùy chọn cuối cùng mà bạn đưa cho tôi vào thiết bị đầu cuối, tôi sẽ nhận được: <? Xml version = "1.0" oding = "utf-8"?> <Root> <name> Tên CPU </ name> <configCode> iMac (27 -inch, Cuối năm 2009) </ configCode> <locale> en_US </ locale> </ root> ". Có thể chỉ cần lấy" (27 inch, Cuối năm 2009) "? Tanks: P
Mac

Vì vậy, màn hình Thông tin thêm (màn hình mà OP đề cập) có nhận thông tin từ cơ sở dữ liệu trực tuyến không? Không phải tên tiếp thị được lưu trữ cục bộ ở đâu đó nếu nó được hiển thị ở đó?
Saaru Lindestøkke

Tôi nghĩ rằng nó là trên một cơ sở dữ liệu. Nhưng trong trường hợp của tôi thì đó không phải là vấn đề: P Nhưng nếu tôi có thể lấy nó mà không cần internet thì tất nhiên sẽ rất tuyệt. Nhưng nếu tôi chỉ có thể nhận được văn bản "(27 inch, cuối năm 2009)" thì thật tuyệt! Trân trọng
Mac

Tôi đoán là hệ thống lưu trữ nó trong quá trình đăng ký hoặc có một SDK nội bộ riêng để lấy thông tin. Nó từng nằm trong khung riêng ServerKit - vì vậy nó rõ ràng không có giấy tờ và đã thay đổi. Tôi biết Mac có thể hiển thị thông tin mà không cần kết nối internet - nhưng tôi thực sự không biết liệu nó được lưu trong bộ nhớ cache hay được xác định khi cài đặt và mã hóa cứng.
bmike

2
Tương tự như việc sử dụng sysctl -n hw.modelđược đề cập dưới đây, ioreg -c IOPlatformExpertDevice -d 2 | awk -F\" '/IOPlatformSerialNumber/{print $(NF-1)}'sẽ hoạt động nhanh hơn để có được số sê-ri.
n8felton

37

Bạn có thể sử dụng lệnh

system_profiler SPHardwareDataType | grep "Model Identifier"

trong Terminal để lấy ID kiểu máy của bạn.
Sau đó, bạn có thể nhập ID đó trên này trang web đó sẽ liệt kê các tháng và năm mô hình cụ thể đã được đưa ra.

Như đã đề cập trong các ý kiến ​​dưới đây, lệnh sau nhanh hơn nhiều:

sysctl hw.model

4
system_profiler SPHardwareDataType | grep "Model Identifier"chạy nhanh hơn nhiều so với trình hồ sơ đầy đủ, nhưng vẫn không trả lại tên tiếp thị như OP yêu cầu. Xem câu trả lời của tôi cho một lệnh hoạt động xung quanh phần "tra cứu" câu trả lời của bạn theo cách thân thiện với thiết bị đầu cuối.
bmike

1
Câu trả lời của bạn sẽ là chỗ trên cho apple.stackexchange.com/questions/40243/... tuy nhiên ;-)
bmike

4
Đối với cùng một đầu ra, sysctl hw.modelnhanh hơn lệnh trên.
Liyali

7

Trên El Capitan và Sierra, có một tệp nguyên bản trong một khung riêng với một thông tin chính xác cho từng định danh mô hình; dict đó bao gồm tên tiếp thị (có năm mô hình trong đó). Tôi không biết phiên bản hệ điều hành mà tệp cụ thể đó đi kèm, nhưng KHÔNG phải trên Snow Leopard (điều duy nhất tôi có cũ hơn 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

Vì vậy, bạn có thể sử dụng (hoặc các thủ thuật tương tự khác cho các phiên bản HĐH khác sau khi kiểm tra phiên bản HĐH, nếu bạn biết những thủ thuật đó, tôi không biết) và nếu không áp dụng được, bạn luôn có thể quay lại cách tiếp cận yêu cầu truy cập Internet.

Điều này không hoàn toàn giống với những gì About This Mac thể hiện, trong trường hợp của tôi là
MacBook Pro (Retina, 13 inch, đầu năm 2015)
trong khi điều này hiển thị
13 "MacBook Pro với màn hình Retina (đầu năm 2015)
nhưng ở khía cạnh dễ đọc với con người , Tôi nghĩ rằng nó đủ gần.


Tôi nhận ra câu trả lời này là hơn 2 tuổi, nhưng nó nhận được mã nhận dạng mô hình hardcoded (dòng 4, MacBookPro12,1) có nghĩa là nó luôn luôn khẳng định bạn đang ở trên một đầu 2015 13" MBP.
egid

Một cách khác:/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

Muộn trò chơi, nhưng đây là một cách tiếp cận:

hardware_model () {

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

.

Hàm này đọc một tệp plist, tìm CPU Namestrong tệp đó:

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

, sau đó sử dụng phân tách dấu "phân tách ra trường thứ tư:

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

Đã thử nghiệm để hoạt động trên các phiên bản hiện được hỗ trợ của OS X.


Đây là cách tiếp cận đơn giản nhất thực sự hiệu quả với tôi trên Catalina. Các câu trả lời khác có nhiều phiếu hơn yêu cầu truy cập internet hoặc trả về Mã định danh mẫu, gây hiểu nhầm. Ví dụ: "MacBookPro15,1" tương ứng với MBP 2018 và 2019. Tôi sẽ đơn giản hóa hơn nữa, chỉ với: defaults read ~/Library/Preferences/com.apple.SystemProfiler.plist 'CPU Names' | cut -sd '"' -f 4 | uniq
Kamal

3

Đây là một lớp lót sử dụng PlistBuddy, không có grep, sed hay awk-Wardness.

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

cái này trả về một cái gì đó như:

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

-

Một lớp lót khác mang lại một chuỗi hơi khác, cũng sử dụng PlistBuddy (với một chút 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)

Tín dụng cho một số câu trả lời ở trên cho điều này.


1

Kết hợp câu trả lời của Saaru với phiên bản gỡ lỗi của Richard Hamilton , tôi nhận được như sau, hoạt động từ 10.6 đến 10.12 (mặc dù kích thước mẫu trên 10.6 chỉ là một máy) và có thể sớm hơn / muộn hơn và không phụ thuộc vào kết nối với Internet và máy chủ của Apple không thay đổi

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

Một số lưu ý về những gì tôi khám phá ra ở đây:

  • Chúng tôi phải loại bỏ ".plist" khỏi miền defaultsđể hoạt động trong 10.6 và do đó thêm lại thủ công vào các -fkiểm tra trình bao
  • các -nlá cờ để sysctlphương tiện nó in chỉ có giá trị, tiết kiệm chúng tôi một số sedhoặc awkcông việc

0

Chúng tôi có một số MBP 2019 trả về các mô hình năm khác nhau cho hai lớp lót được đăng bởi tabrindle .

Chiếc áo lót đầu tiên (sử dụng sysctl -n hw.model) của anh ấy trả về 2018 cho mẫu 2019:

Sai: MacBook Pro 15 "với Thunderbolt 3 và Touch ID (Giữa năm 2018)

Nhưng lớp lót thứ hai (sử dụng system_profiler SPHardwareDataType) của anh ta trả về tên chính xác:

Phải: MacBook Pro (15 inch, 2019)


-7

Điều này nên làm điều đó:

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
Không có lệnh nào bạn liệt kê làm những gì người hỏi yêu cầu.
Saaru Lindestøkke
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.