ฉันจะหาหมายเลขซีเรียลในเครื่อง Mac จากโปรแกรมเทอร์มินัลได้อย่างไร


37

ฉันสามารถใช้คำสั่งใดเพื่อดึงข้อมูลหมายเลขซีเรียลของระบบจากบรรทัดคำสั่ง unix ขณะที่unameส่งออกจะข้อมูลบางอย่างเกี่ยวกับซอฟต์แวร์และฮาร์ดแวร์ที่ฉันต้องการที่จะดึงหมายเลขจากคำสั่งที่จะใช้ในสคริปต์

คำตอบ:


55

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

system_profiler SPHardwareDataType เป็นชนิดข้อมูลที่มีข้อมูลฮาร์ดแวร์หลักและคุณสามารถใช้ grep หรือ awk เพื่อตัดสิ่งต่าง ๆ ตามที่ต้องการ:

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

หรือ

ioreg -l | awk '/IOPlatformSerialNumber/ { print $4;}'

คำสั่งทั้งสองนั้นใช้เวลาระหว่าง 0.5 และ 0.2 วินาทีในการรันบน SSD Mac ที่ทันสมัยดังนั้นหากคุณต้องการเพิ่มประสิทธิภาพของคำสั่งและลบ "คุณสามารถมีคำตอบใน 0.005 หรือมากกว่านั้น:

ioreg -c IOPlatformExpertDevice -d 2 | awk -F\" '/IOPlatformSerialNumber/{print $(NF-1)}'

2
ioregหนึ่งทันทีที่อยู่ใกล้ใน MBPR ของฉัน system_profilerแม้ว่าจะเร็วกว่าสำหรับ mac นี้มากกว่ารุ่นเก่าของฉันก็ช้ากว่ามาก
markhunte

system_profile ช้ามาก ioreg เร็วสุด ๆ
user1735921

14

ยังใช้งานได้ ...

ioreg -l | grep IOPlatformSerialNumber

แน่นอนว่าพิมพ์ได้ง่ายกว่าawkรุ่นเพื่อตัดออก 600 บรรทัดที่ioregเราไม่ต้องการเห็น (เช่น - อย่ารังเกียจผู้มีสิทธิ์ลงคะแนนเสียง - บางคนไม่ชอบคำตอบสั้น ๆ หรือลืมว่าไม่มีใครรู้ว่า grep และ awk ทำงานอย่างไร)
bmike

ตกลงขอบคุณ bmike มันดูเหมือนง่ายสำหรับฉัน แต่ไม่ได้คาดหวังลงคะแนนสำหรับคำตอบที่ถูกต้อง ดีแล้วที่รู้.
MrPool

1
@MrPool เมื่อมันทำซ้ำสิ่งที่อยู่ในคำตอบก่อนหน้านี้และไม่ปรับปรุงในหนึ่งก่อนหน้านี้
user151019

1
พวกเขาไม่ได้ลงคะแนนผิดต่อ se แม้แต่การลงคะแนนเสียงก็ดีเพราะพวกเขาบอกว่ามีคนสนใจพอที่จะลงมือ นอกจากนี้ฉันพยายามที่จะแสดงความคิดเห็นหรือโพสต์เพื่อแชทเมื่อฉันเห็นคะแนนที่ไม่ได้ตีฉันโดยรวมอย่างยุติธรรม ข่าวดีก็คือการโหวตขึ้นอยู่กับ +10 และลงคะแนนเพียง -2 ดังนั้นถ้าคุณโพสต์สิ่งที่ขัดแย้ง (เช่นนี้ศูนย์สมดุลกับ +2 และ -2 ยังคงเป็น 16 ตัวแทน) ยินดีต้อนรับสู่อินเทอร์เน็ต ;-)
bmike

1
และเครื่องหมายถูกต้องหากผู้ใช้ทุกคนโพสต์เฉพาะการเปลี่ยนแปลงล่าช้าสั้น ๆ เล็กน้อยโดยไม่อธิบาย (ถ้าฉันเดาจุดของคุณ - การพิมพ์ grep มีความชัดเจนสั้นและดีพอสำหรับหลาย ๆ คน) ฉันอาจ ping ผู้ใช้นั้นและถาม พวกเขาเคาะมันออก ผู้ใช้ที่มีชื่อเสียงส่วนใหญ่จะแสดงความคิดเห็นกับคำตอบของฉัน แต่เราไม่สามารถคาดหวังผู้ใช้ใหม่ที่มี 1 ตัว
แทนที่จะ

2

เพื่อให้ง่ายต่อการจดจำให้ใช้การค้นหาแบบตัวเล็กและตัวเล็ก:

ioreg -l | grep -i serialnumber | grep -i platform

คำเตือน: นี่จะส่งคืนบรรทัด | "IOPlatformSerialNumber" = "YourSerialNumber" ใช้ได้ดี แต่ถ้าคุณใช้ในสคริปต์คุณจะต้องเชื่อมต่อไปยัง awk
jasonology

1

ตัวอย่าง C ++:

#include <CoreFoundation/CoreFoundation.h>
#include <IOKit/IOKitLib.h>

std::string 

getSerialNumber()

{

   CFStringRef serial;
    char buffer[32] = {0};
    std::string seriaNumber;

io_service_t platformExpert = IOServiceGetMatchingService(kIOMasterPortDefault,
                                                          IOServiceMatching("IOPlatformExpertDevice"));
if (platformExpert)
{
    CFTypeRef serialNumberAsCFString = IORegistryEntryCreateCFProperty(platformExpert,
                                                                       CFSTR(kIOPlatformSerialNumberKey),
                                                                       kCFAllocatorDefault, 0);
    if (serialNumberAsCFString) {
        serial = (CFStringRef)serialNumberAsCFString;
    }
    if (CFStringGetCString(serial, buffer, 32, kCFStringEncodingUTF8)) {
        seriaNumber = buffer;
    }

    IOObjectRelease(platformExpert);
}
return seriaNumber;
}

ยินดีต้อนรับสู่ถามที่แตกต่างกัน โปรดเข้าใจว่าการโพสต์คำตอบที่มีรหัสเป็นหลักเท่านั้นโดยไม่มีคำแนะนำใด ๆ เกี่ยวกับสิ่งที่ต้องทำหรือวิธีการใช้คำตอบนั้นไม่ได้มีไว้สำหรับคำตอบที่มีคุณภาพ โปรดสละเวลาอ่านฉันจะเขียนคำตอบที่ดีได้อย่างไร จากนั้นแก้ไขคำตอบของคุณเพื่อรวมคำแนะนำในการรวบรวมรหัสและวิธีใช้ นอกจากนี้ยังใช้เวลาทัวร์
user3439894

เป็นที่น่าสังเกตว่านี่มาจากเอกสารทางเทคนิคของ Apple ซึ่งมีคำอธิบายอยู่: developer.apple.com/library/archive/technotes/tn1103/…
Cinder Biscuits
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.