Làm cách nào tôi có thể tìm thấy số sê-ri trên máy mac từ thiết bị đầu cuối?


37

Tôi có thể sử dụng lệnh nào để lấy số sê-ri của hệ thống từ dòng lệnh unix? Vì unamesẽ xuất ra một số thông tin về phần mềm và phần cứng, tôi muốn lấy số sê-ri từ một lệnh để sử dụng trong tập lệnh.

Câu trả lời:


55

Lệnh system_profiler cung cấp một câu trả lời trực tiếp dễ đọc cho con người (giả sử bạn đang ở 10.3 hoặc mới hơn), nhưng bạn cũng có thể sử dụng ioreg cho nhiệm vụ vì nó thường hoàn thành nhanh hơn.

system_profiler SPHardwareDataType là kiểu dữ liệu chứa thông tin phần cứng cốt lõi và bạn có thể sử dụng grep hoặc awk để giảm bớt mọi thứ khi cần:

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

hoặc là

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

Cả hai lệnh này mất từ ​​0,5 đến 0,2 giây để chạy trên máy Mac SSD hiện đại, vì vậy nếu bạn muốn tối ưu hóa lệnhxóa " bạn có thể có câu trả lời của mình sau 0,005 giây hoặc lâu hơn:

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

2
Một ioregcái gần như ngay lập tức trên MBPR của tôi. system_profilermặc dù nhanh hơn trên mac này so với máy cũ của tôi chậm hơn nhiều.
markhunte

system_profile rất chậm, ioreg siêu nhanh.
dùng1735921

14

Điều này cũng hoạt động

ioreg -l | grep IOPlatformSerialNumber

Chắc chắn dễ dàng nhập hơn awkphiên bản để loại bỏ 600 dòng ioregđầu ra mà chúng tôi không muốn thấy. (cũng - đừng bận tâm đến những người bỏ phiếu - một số người thực sự không thích câu trả lời ngắn hoặc quên rằng không phải ai cũng biết grep và awk hoạt động như thế nào.)
bmike

Ok, cảm ơn bmike, nó có vẻ đơn giản hơn với tôi, nhưng không mong đợi phiếu bầu cho một câu trả lời chính xác. Tốt để biết.
MrPool

1
@MrPool khi nó lặp lại những gì trong câu trả lời trước đó và không cải thiện câu trả lời trước
user151019

1
Họ không sai phiếu mỗi se. Ngay cả phiếu bầu xuống cũng tốt vì chúng cho thấy ai đó quan tâm đủ để hành động. Ngoài ra, tôi cố gắng bình luận hoặc đăng bài để trò chuyện khi tôi thấy những phiếu bầu không đánh tôi là hoàn toàn công bằng. Tin tốt là số phiếu tăng lên là +10 và chỉ có phiếu giảm xuống -2 vì vậy nếu bạn đăng một cái gì đó gây tranh cãi (như số dư bằng 0 này với +2 và -2 vẫn là +16 đại diện.) Chào mừng bạn đến với internet ;-)
bmike

1
Và đánh dấu là chính xác, nếu tất cả người dùng thực hiện chỉ đăng bài muộn, ngắn, thay đổi nhỏ mà không giải thích (nếu tôi đoán điểm của bạn - gõ grep thì rõ ràng hơn, ngắn hơn và đủ tốt cho nhiều người) Tôi có thể ping người dùng đó và hỏi họ đánh gục nó Hầu hết người dùng có uy tín cao sẽ nhận xét về câu trả lời của tôi, nhưng chúng tôi không thể mong đợi một người dùng mới có 1 đại diện để làm điều đó, bây giờ chúng tôi có thể :-)
bmike

2

Để dễ nhớ hơn, hãy sử dụng tìm kiếm không phân biệt chữ hoa chữ thường:

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

Cảnh báo: điều này trả về một dòng | "IOPl platformSerialNumber" = "YourSerialNumber" Điều đó trực quan tốt nhưng nếu bạn sử dụng nó trong một kịch bản, bạn sẽ cần phải chuyển nó thành awk.
jasonology

1

Ví dụ về 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;
}

Chào mừng bạn đến hỏi khác nhau. Vui lòng hiểu rằng việc đăng một câu trả lời về cơ bản chỉ chứa mã mà không có hướng dẫn nào về việc phải làm gì với nó hoặc làm thế nào để sử dụng nó không tạo ra một câu trả lời chất lượng. Xin vui lòng dành thời gian để đọc Làm thế nào để tôi viết một câu trả lời tốt? và sau đó chỉnh sửa câu trả lời của bạn để bao gồm hướng dẫn biên dịch mã và cách sử dụng nó. Cũng đi theo Tour .
dùng3439894

Điều đáng chú ý là điều này đã được lấy từ Tài liệu kỹ thuật của Apple, trong đó có một lời giải thích: developer.apple.com/l
Library / archive / technotes / tn1103 / Lỗi
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.