สามารถกำหนดปีรูปแบบของ Mac ด้วยคำสั่ง Terminal ได้หรือไม่?


58

ใครรู้คำสั่งเทอร์มินัลที่ให้รูปแบบของ Mac ของฉันหรือไม่

ตัวอย่างเช่น - "MacBook Pro, Retina, 13 นิ้ว, Mid 2013" หรือ "MacBook Pro, ปลายปี 2009" หรือ "Mac Mini, 2010 ก่อน"

ไม่มีข้อมูลดังกล่าวใน SystemProfiler ( /usr/sbin/system_profiler SPHardwareDataType) แต่ใน OS X 10.7 และ OS X 10.8 คุณจะเห็นข้อมูลนั้นเมื่อคุณคลิก "More Info ... " ในหน้าต่าง "About This Mac"


1
ฉันไม่คิดว่าจะมีคำสั่งให้ระบุ Mac เป็น "ปลายปี 2009" โดยตรง อย่างไรก็ตามสามารถหาได้จากตัวระบุรุ่นดูคำตอบของฉันสำหรับคำอธิบาย But in OS X 10.7 and 10.8...ประโยคนี้มีความหมายอย่างไร เมื่อฉันดูในหน้าต่าง About This Mac ฉันไม่เห็นสิ่งใดที่ระบุว่าปลายปี 2009 หรืออะไรที่คล้ายกัน
Saaru Lindestøkke

2
@BartArondson - วันที่ 10.8 หน้าจอสำหรับเกี่ยวกับ Mac นี้แสดง Mac Mini ในหนึ่งบรรทัดจากนั้นจะถึงปลายปี 2012 ในวันถัดไป
user151019

ฉันเห็นแล้วตอนนี้ ก็เมื่อคุณคลิกที่และจากนั้นในAbout This Mac More Info...ฉันไม่มีเงื่อนงำเกี่ยวกับวิธีการรับข้อมูลนั้นในเทอร์มินัลของคุณ
Saaru Lindestøkke

คำตอบ:


69

คุณสามารถรับข้อมูลนี้ทางอ้อมจากเว็บเพจและคำสั่ง curl ในอดีตที่ผ่าน URL นี้ได้ถูกนำตัวลงและอัตราการ จำกัด และใส่หลังเรียงลำดับของการแจ้งลบความคิดเห็นบางส่วนเพื่อป้องกันการใช้นี้ดังนั้นคุณอาจต้องรีสอร์ทเพื่อลู่ทางอื่น ๆ เช่นhttps://checkcoverage.apple.com/ในกรณีที่

ขึ้นอยู่กับว่า numer อนุกรมของคุณเป็น 11 หรือ 12 ตัวยาวใช้เวลาช่วง 3 หรือ 4 ตัวอักษรตามลำดับและอาหารที่ยัง URL ต่อไปนี้หลังจากซีซี = 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 (และอาจก่อนหน้านี้) ดังนั้นเคล็ดลับข้างต้นเป็นสิ่งเดียวที่ฉันรู้ว่าทำงานบนระบบปฏิบัติการปัจจุบัน ไม่มีห้องสมุดบุคคลที่สาม

libararies ของบุคคลที่สามบางคนให้มองสิ่งนี้:

โปรดทราบว่า ณ เดือนพฤศจิกายน 2560 แอปเปิ้ลได้บังคับใช้httpsเกินhttpสำหรับบริการนี้


อีกหนึ่งคำถาม หากฉันใส่ตัวเลือกสุดท้ายที่คุณให้กับฉันในเทอร์มินัลฉันจะได้รับสิ่งนี้: <? xml version = "1.0" encoding = "utf-8"?> <root> <name> ชื่อ CPU </name> <configCode> iMac (27 นิ้ว, ปลายปี 2009) </configCode> <locale> en_US </locale> </root> "เป็นไปได้หรือไม่ที่จะได้รับ" (27 นิ้ว, ปลาย 2009) "ถัง: P
Mac

ดังนั้นหน้าจอ More Info (หนึ่งใน OP ที่กล่าวถึง) จะได้รับข้อมูลจากฐานข้อมูลออนไลน์หรือไม่ ชื่อทางการตลาดไม่ได้ถูกจัดเก็บไว้ในที่นั้น ๆ
Saaru Lindestøkke

ฉันคิดว่ามันอยู่ในฐานข้อมูล แต่ในกรณีของฉันมันไม่ใช่ปัญหา: P แต่ถ้าฉันสามารถหาได้โดยไม่ใช้อินเทอร์เน็ตมันจะเป็นเรื่องที่ยอดเยี่ยมแน่นอน แต่ถ้าฉันได้รับข้อความ "(27 นิ้ว, ปลายปี 2009)" นั่นจะยอดเยี่ยมมาก! ขอแสดงความนับถือ
Mac

ฉันเดาว่าระบบแคชระหว่างการลงทะเบียนหรือมี 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"

ใน Terminal เพื่อรับรหัสรุ่นของเครื่องของคุณ
จากนั้นคุณสามารถป้อนรหัสนั้นในเว็บไซต์นี้ซึ่งจะแสดงรายการเดือนและปีที่มีการเปิดตัวรุ่นเฉพาะ

ดังที่ได้กล่าวไว้ในความคิดเห็นด้านล่างคำสั่งต่อไปนี้เร็วกว่ามาก:

sysctl hw.model

4
system_profiler SPHardwareDataType | grep "Model Identifier"ทำงานเร็วกว่าตัวสร้างโปรไฟล์แบบสมบูรณ์มาก แต่ก็ยังไม่ส่งคืนชื่อทางการตลาดตามที่ OP ถาม ดูคำตอบของฉันสำหรับคำสั่งที่ทำงานรอบส่วน "ค้นหา" ของคำตอบของคุณในลักษณะที่เป็นมิตรขั้ว
bmike

1
คำตอบของคุณน่าจะเป็นจุดสนใจสำหรับapple.stackexchange.com/questions/40243/…อย่างไรก็ตาม ;-)
bmike

4
สำหรับเอาต์พุตเดียวกันsysctl hw.modelนั้นเร็วกว่าคำสั่งด้านบน
Liyali

7

ใน El Capitan และ Sierra มีไฟล์ plist ในเฟรมเวิร์กส่วนตัวพร้อมข้อมูลสำหรับตัวระบุรุ่นแต่ละตัว dict นั้นรวมถึงชื่อทางการตลาด (ซึ่งมีโมเดลปีอยู่ด้วย) ฉันไม่ทราบว่ามีไฟล์เวอร์ชั่นใดที่มาพร้อมกับ OS แต่มันไม่ใช่ 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

ดังนั้นคุณสามารถใช้มัน (หรือลูกเล่นอื่น ๆ ที่คล้ายกันสำหรับเวอร์ชันระบบปฏิบัติการอื่น ๆ หลังจากตรวจสอบเวอร์ชัน OS หากคุณรู้ว่าลูกเล่นเหล่านั้นซึ่งฉันไม่ได้ทำ) และหากไม่สามารถใช้งานได้ ที่ต้องการการเข้าถึงอินเทอร์เน็ต

มันไม่เหมือนกับสิ่งที่เกี่ยวกับ Mac เครื่องนี้ซึ่งในกรณีของฉันคือ
MacBook Pro (Retina, 13 นิ้ว, ต้นปี 2015)
ในขณะนี้แสดง
13 "MacBook Pro พร้อมจอแสดงผล Retina (ต้นปี 2015)
แต่ในแง่ที่มนุษย์อ่านได้ ฉันคิดว่ามันใกล้พอ


ฉันรู้ว่าคำตอบนี้มีอายุมากกว่า 2 ปี แต่ได้รับตัวระบุรุ่น hardcoded (บรรทัดที่ 4 MacBookPro12,1) ซึ่งหมายความว่าจะอ้างว่าคุณอยู่ในช่วงต้นปี 2015 13 "mbp.
egid

วิธีอื่น:/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)
}

.

ฟังก์ชั่นนี้อ่านไฟล์ plist ค้นหาCPU Namesในไฟล์นั้น:

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

จากนั้นใช้ตัวคั่น"แยกวิเคราะห์ฟิลด์ที่สี่:

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

ผ่านการทดสอบการทำงานกับ OS X เวอร์ชั่นที่รองรับในปัจจุบัน


นี่เป็นวิธีที่ง่ายที่สุดที่ใช้กับ Catalina ได้จริง คำตอบอื่น ๆ ที่มีการโหวตมากขึ้นจำเป็นต้องเชื่อมต่ออินเทอร์เน็ตหรือส่งคืน Model Identifier ซึ่งทำให้เข้าใจผิด ตัวอย่างเช่น "MacBookPro15,1" สอดคล้องกับ 2018 และ 2019 MBP ฉันจะทำให้มันง่ายขึ้นยิ่งขึ้นเพียง: defaults read ~/Library/Preferences/com.apple.SystemProfiler.plist 'CPU Names' | cut -sd '"' -f 4 | uniq
Kamal

3

นี่คือหนึ่งสายการบินที่ใช้ PlistBuddy โดยไม่มี grep, sed หรือ 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

ส่งคืนสิ่งที่ต้องการ:

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

การรวมคำตอบของSaaru เข้ากับRichard Hamiltonรุ่น debugged ฉันได้รับสิ่งต่อไปนี้ซึ่งใช้งานได้ตั้งแต่ 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

ขณะนี้มีบางส่วน 2,019 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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.