ฉันสามารถใช้คำสั่งใดเพื่อดึงข้อมูลหมายเลขซีเรียลของระบบจากบรรทัดคำสั่ง unix ขณะที่uname
ส่งออกจะข้อมูลบางอย่างเกี่ยวกับซอฟต์แวร์และฮาร์ดแวร์ที่ฉันต้องการที่จะดึงหมายเลขจากคำสั่งที่จะใช้ในสคริปต์
ฉันสามารถใช้คำสั่งใดเพื่อดึงข้อมูลหมายเลขซีเรียลของระบบจากบรรทัดคำสั่ง unix ขณะที่uname
ส่งออกจะข้อมูลบางอย่างเกี่ยวกับซอฟต์แวร์และฮาร์ดแวร์ที่ฉันต้องการที่จะดึงหมายเลขจากคำสั่งที่จะใช้ในสคริปต์
คำตอบ:
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)}'
ยังใช้งานได้ ...
ioreg -l | grep IOPlatformSerialNumber
awk
รุ่นเพื่อตัดออก 600 บรรทัดที่ioreg
เราไม่ต้องการเห็น (เช่น - อย่ารังเกียจผู้มีสิทธิ์ลงคะแนนเสียง - บางคนไม่ชอบคำตอบสั้น ๆ หรือลืมว่าไม่มีใครรู้ว่า grep และ awk ทำงานอย่างไร)
เพื่อให้ง่ายต่อการจดจำให้ใช้การค้นหาแบบตัวเล็กและตัวเล็ก:
ioreg -l | grep -i serialnumber | grep -i platform
ตัวอย่าง 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;
}
ioreg
หนึ่งทันทีที่อยู่ใกล้ใน MBPR ของฉันsystem_profiler
แม้ว่าจะเร็วกว่าสำหรับ mac นี้มากกว่ารุ่นเก่าของฉันก็ช้ากว่ามาก