सबसे पहले, कृपया ध्यान दें कि CPUID निश्चित रूप से है नहीं बाद में एक इंटेल पेंटियम III से किसी भी प्रणाली के लिए एक सामान्य सुलभ विशिष्ट पहचान करने मार्कर। मैक पते के साथ हैशिंग होने पर, निश्चित रूप से अद्वितीय मार्कर हो सकते हैं, यह केवल एमएसीएस के अद्वितीय गुणों के कारण होता है और उस मामले में सीपीयूआईडी परिस्थितिजन्य से अधिक कुछ नहीं है। इसके अलावा, परिणामी हैश मदरबोर्ड के यूयूआईडी की तुलना में कोई अधिक अद्वितीय होने की संभावना नहीं है, और इसे पुनर्प्राप्त करना बहुत आसान है और इस प्रक्रिया के गलत होने की संभावना बहुत कम है। से wikipedia.org/wiki/cpuid :
EAX = 3 : प्रोसेसर सीरियल नंबर
इसे भी देखें: पेंटियम III Pent गोपनीयता के मुद्दों पर विवाद
यह प्रोसेसर के सीरियल नंबर को लौटाता है। प्रोसेसर सीरियल नंबर इंटेल पेंटियम III पर पेश किया गया था, लेकिन गोपनीयता की चिंताओं के कारण, यह सुविधा अब बाद के मॉडल (पीएसएन फीचर बिट हमेशा साफ हो जाती है) पर लागू नहीं होती है। Transmeta के इफिसन और क्रूसो प्रोसेसर भी इस सुविधा को प्रदान करते हैं। एएमडी सीपीयू हालांकि, इस सुविधा को किसी भी सीपीयू मॉडल में लागू नहीं करते हैं।
आप एक पार्स क्युपिड अपने आप को देख कर cat /proc/cpuinfo
या बस कर सकते हैं lscpu
।
यह आपको लिनक्स कर्नेल द्वारा मान्यता प्राप्त नेटवर्क इंटरफेस के लिए मैक पते के सभी मिलता है, मुझे लगता है:
ip a | sed '\|^ *link[^ ]* |!d;s|||;s| .*||'
उस सूची को फ़िल्टर करना आवश्यक हो सकता है यदि इसमें बेतरतीब ढंग से उत्पन्न मैक के साथ आभासी nics शामिल हो सकते हैं। आप ip
सीधे कॉल में झंडे के साथ ऐसा कर सकते हैं । ip a help
ऐसा करने के बारे में जानकारी के लिए देखें ।
यह भी ध्यान रखें कि ip
यदि आप उपयोग करते हैं ifconfig
, तो यह समस्या अद्वितीय नहीं है और इससे भी निपटा जाना चाहिए , लेकिन यह अधिक विश्वसनीय तरीके से नियंत्रित किया जा सकता है ip
- जो iproute2
नेटवर्क सूट का हिस्सा है और इसे सक्रिय रूप से बनाए रखा जाता है - इसके साथ ifconfig
- जो एक सदस्य है के net-tools
पैकेज और पिछले देखा एक लिनक्स 2001 में रिलीज । अपनी अंतिम रिलीज़ के बाद से कर्नेल में बदलती विशेषताओं के कारण, कुछ नेटवर्किंग सुविधा फ़्लैगifconfig
को गलत पहचानने के लिए जाना जाता है और यदि संभव हो तो इसके उपयोग से बचा जाना चाहिए।
हालांकि, समझें, जैसे कर्नेल इंटरफ़ेस नामों के साथ फ़िल्टर करना eth[0-9]
ऐसा करने का एक विश्वसनीय साधन नहीं है, क्योंकि ये udev
बूट प्रक्रिया के दौरान समानता का पता लगाने के उनके आदेश के आधार पर बदल सकते हैं । कृपया उस पर अधिक के लिए प्रिडिक्टेबल नेटवर्क नाम देखें ।
क्योंकि dmidecode
मेरे सिस्टम पर पहले से स्थापित नहीं है क्योंकि मैंने हार्ड डिस्क धारावाहिकों की एक सूची बनाई है जैसे:
lsblk -nro SERIAL
क्या lsblk --help
है कि सूची को परिष्कृत करने पर कुछ सुराग के लिए - डिस्क प्रकार के आधार पर, कहते हैं। भी विचार करें lspci
और / या lsusb
हो सकता है।
उनका संयोजन आसान है:
{ ip a | sed ... ; lsblk ... ; } | #abbreviated... for brevity...
tr -dc '[:alnum:]' | #deletes all chars not alphanumeric - including newlines
sha256sum #gets your hash
जैसा कि आपने मुझे सूचित किया है कि आप अपने अनूठे आईडी से उपयोगकर्ता के संसाधनों को समाप्त कर रहे हैं, और हार्ड डिस्क पर भरोसा नहीं किया जा सकता है क्योंकि मैंने सोचा था कि मैं अपनी फीस को बदल दूंगा।
माना जाता है, मैंने फिर से फाइल सिस्टम में देखा और /sys/class/dmi/id
फ़ोल्डर पाया । मैंने कुछ फ़ाइलों की जाँच की:
cat ./board_serial ./product_serial
###OUTPUT###
To be filled by O.E.M.
To be filled by O.E.M.
हालांकि, यह एक बहुत अच्छा लगता है, लेकिन मैं आउटपुट प्रकाशित नहीं करूंगा:
sudo cat /sys/class/dmi/id/product_uuid
मुझे उम्मीद है कि जहां dmidecode
भी इसकी जानकारी मिलती है, वास्तव में यह ऐसा दिखता है । के अनुसार man dmidecode
आप भी तर्क निर्दिष्ट करने के द्वारा एक महान सौदा है कि उपकरण के आपके उपयोग को आसान बनाने में कर सकते हैं:
dmidecode -s system-uuid
अधिक सरल अभी भी, आप बस फ़ाइल पढ़ सकते हैं। ध्यान दें कि यह विशेष फ़ाइल विशेष रूप से एक मदरबोर्ड को पहचानती है। यहाँ 2007 कर्नेल पैच से एक अंश है जो मूल रूप से /sysfs
आभासी फ़ाइल सिस्टम में इन निर्यातों को लागू करता है :
+DEFINE_DMI_ATTR_WITH_SHOW(bios_vendor, 0444, DMI_BIOS_VENDOR);
+DEFINE_DMI_ATTR_WITH_SHOW(bios_version, 0444, DMI_BIOS_VERSION);
+DEFINE_DMI_ATTR_WITH_SHOW(bios_date, 0444, DMI_BIOS_DATE);
+DEFINE_DMI_ATTR_WITH_SHOW(sys_vendor, 0444, DMI_SYS_VENDOR);
+DEFINE_DMI_ATTR_WITH_SHOW(product_name, 0444, DMI_PRODUCT_NAME);
+DEFINE_DMI_ATTR_WITH_SHOW(product_version, 0444, DMI_PRODUCT_VERSION);
+DEFINE_DMI_ATTR_WITH_SHOW(product_serial, 0400, DMI_PRODUCT_SERIAL);
+DEFINE_DMI_ATTR_WITH_SHOW(product_uuid, 0400, DMI_PRODUCT_UUID);
+DEFINE_DMI_ATTR_WITH_SHOW(board_vendor, 0444, DMI_BOARD_VENDOR);
+DEFINE_DMI_ATTR_WITH_SHOW(board_name, 0444, DMI_BOARD_NAME);
+DEFINE_DMI_ATTR_WITH_SHOW(board_version, 0444, DMI_BOARD_VERSION);
+DEFINE_DMI_ATTR_WITH_SHOW(board_serial, 0400, DMI_BOARD_SERIAL);
+DEFINE_DMI_ATTR_WITH_SHOW(board_asset_tag, 0444, DMI_BOARD_ASSET_TAG);
+DEFINE_DMI_ATTR_WITH_SHOW(chassis_vendor, 0444, DMI_CHASSIS_VENDOR);
+DEFINE_DMI_ATTR_WITH_SHOW(chassis_type, 0444, DMI_CHASSIS_TYPE);
+DEFINE_DMI_ATTR_WITH_SHOW(chassis_version, 0444, DMI_CHASSIS_VERSION);
+DEFINE_DMI_ATTR_WITH_SHOW(chassis_serial, 0400, DMI_CHASSIS_SERIAL);
+DEFINE_DMI_ATTR_WITH_SHOW(chassis_asset_tag, 0444, DMI_CHASSIS_ASSET_TAG);
आप सिस्टम की पहचान करने के लिए अकेले उस डेटा का उपयोग करने में सक्षम हो सकते हैं - यदि मदरबोर्ड पर्याप्त है। लेकिन आप इस जानकारी को सिस्टम के एमएसीएस के साथ उसी तरह से जोड़ सकते हैं जैसे मैंने दिखाया कि आप हार्ड डिस्क के साथ क्या कर सकते हैं:
sudo sh <<\CMD | tr -dc '[:alnum:]' | sha256sum
ip a | sed '\|^ *link[^ ]* |!d;s|||;s| .*||'
cat /sys/class/dmi/id/product_uuid
CMD
लिनक्स कर्नेल भी आपके लिए UUIDs उत्पन्न कर सकता है:
cat /proc/sys/kernel/random/uuid #new random uuid each time file is read
या:
cat /proc/sys/kernel/random/boot_id #randomly generated per boot
दी, यह अनियमित रूप से उत्पन्न होता है और आपको आईडी असाइनमेंट को पुनर्विचार करना होगा, लेकिन यह कम से कम प्राप्त करने के लिए जितना आसान हो उतना आसान है । और यह बहुत ठोस होना चाहिए यदि आप इसे कुंजी करने का साधन पा सकते हैं।
अंतिम, UEFI सिस्टम पर यह करना बहुत आसान हो जाता है - क्योंकि हर EFI फर्मवेयर पर्यावरण चर में अपना UUID शामिल होता है। पर्यावरण चर {Platform,}LangCodes-${UUID}
हर यूईएफआई प्रणाली पर मौजूद होना चाहिए, रिबूट और यहां तक कि सबसे फर्मवेयर उन्नयन और संशोधनों को बनाए रखना चाहिए , और efivarfs
लोड किए गए मॉड्यूल के साथ कोई भी लिनक्स सिस्टम या तो दोनों नामों को सूचीबद्ध कर सकता है:
printf '%s\n' /sys/firmware/efi/efivars/*LangCodes-*
पुराना रूप - LangCodes-${UUID}
जाहिर तौर पर अब पदावनत हो गया है , और नए सिस्टम पर होना चाहिए PlatformLangCodes-${UUID}
, लेकिन कल्पना के अनुसार, प्रत्येक यूईएफआई प्रणाली में एक या दूसरे को उपस्थित होना चाहिए। थोड़े से प्रयास से, आप अपने स्वयं के रिबूट लगातार चर को परिभाषित कर सकते हैं, और शायद कर्नेल के यूयूआईडी जनरेटर का अधिक उपयोग उस तरह से कर सकते हैं। यदि रुचि है, तो एफईआईटूलस में देखें ।