md5sum कमांड बाइनरी और टेक्स्ट मोड


13

GNU md5sumकमांड में दो मोड हैं: बाइनरी मोड और टेक्स्ट मोड। मुझे लगता है कि अंतर केवल इस बात पर है कि न्यूलाइन वर्णों को कैसे संभाला जाता है? क्या मैं सही हू?

जीएनयू / लिनक्स पर, दो मोड हमेशा एक ही परिणाम उत्पन्न करते हैं, इसलिए फ़ाइल नाम से पहले उपयोग किए गए ध्वज ( या ) को इंगित करने के लिए केवल -bऔर -tविकल्पों का उपयोग होता है?*

किन परिस्थितियों में मोड अलग-अलग परिणाम दे सकते हैं? विंडोज / मैकओएस सिस्टम पर? (उपलब्ध इन प्लेटफार्मों के लिए संस्करण?)

जवाबों:


11

जीएनयू / लिनक्स पर, दो मोड हमेशा एक ही परिणाम उत्पन्न करते हैं

हाँ, स्पष्ट रूप से। से man md5sum:

नोट: [sic] GNU सिस्टम पर बाइनरी और टेक्स्ट मोड विकल्प के बीच कोई अंतर नहीं है।

यह md5sumजीएनयू कोर्यूटिल्स 8.21 वाले जहाजों के कार्यान्वयन से है ; मुझे लगता है कि पुराने संस्करण (8.12) में यह नोटिस नहीं है लेकिन मुझे लगता है कि वैसे भी सच होगा।

हालांकि AFAICT md5sumआधिकारिक तौर पर मानकीकृत नहीं है (उदाहरण के लिए, POSIX द्वारा), यह विभिन्न कार्यान्वयनों में विभिन्न प्लेटफार्मों पर उपलब्ध है और स्पष्ट रूप से सिस्टम के उपयोग में आसानी के लिए एक दूसरे के साथ इन अनुपालन को बनाने के लिए कुछ प्रयास है।

इसके संबंध में, आईएसओ / एएनएसआई सी स्टैंडर्ड में फाइलों तक पहुंचने के लिए उच्च स्तरीय स्ट्रीम फ़ंक्शन शामिल हैं। मानक के भाग के रूप में, ये किसी भी ऑपरेटिंग सिस्टम पर उपलब्ध होते हैं जो साझा पुस्तकालय या कंपाइलर के माध्यम से आईएसओ सी को लागू करता है। चूंकि बहुत अधिक सभी ऑपरेटिंग सिस्टम में यह उपलब्ध है (और स्वयं को सबसे अधिक बार C में लिखा गया है), यह एक प्रकार की सार्वभौमिक भाषा है जिसका उपयोग संभवतः बहुत पोर्टेबल सॉफ्टवेयर को लागू करने के लिए किया जाता है।

यह देखते हुए कि यह क्या करता है, यह पूरी तरह से संभव md5sumहोगा कि वह किसी भी ऑपरेटिंग सिस्टम पर संकलन और काम करे। मैं यह दावा नहीं कर रहा हूं कि यह GNU कोरुटिल्स संस्करण के बारे में सही है, लेकिन पहले बताई गई उच्च स्तरीय फाइल स्ट्रीम फ़ंक्शन में से एक है fopen(), जिसे आईएसओ सी द्वारा अनिवार्य किया गया है ताकि bयह इंगित करने के लिए फ़ाइल खोलने के लिए उपयोग किए जाने वाले स्विच को शामिल किया जा सके "बाइनरी के रूप में" फ़ाइल "। सिस्टम के लिए इसका मतलब या आवश्यकता नहीं हो सकती है , यह मानक द्वारा निर्धारित नहीं है , बस इसे अस्तित्व में रखने की आवश्यकता है, इसलिए इसका उपयोग सिस्टम पर किया जा सकता है जहां इसके लिए कुछ ( कोई ) कारण हो सकता है।

Linux / POSIX / * nix-style ऑपरेटिंग सिस्टम पर ऐसा कोई कारण नहीं है, इसलिए स्विच कुछ भी नहीं करता है। POSIX कल्पना से (आईएसओ सी का एक सुपरसेट) fopen () के लिए :

चरित्र 'बी' का कोई प्रभाव नहीं होगा, लेकिन आईएसओ सी मानक अनुरूपता के लिए अनुमति है।

इसलिए, एक पूरी तरह से पोर्टेबल md5sumकार्यान्वयन आईएसओ उच्च स्तर की फाइल स्ट्रीम फ़ंक्शन का उपयोग कर सकता है, क्योंकि आईएसओ सी में फ़ाइलों तक पहुंचने के लिए कोई अन्य विधियां नहीं हैं (अधिकांश प्लेटफॉर्म, जिनमें पोसिक्स शिकायत वाले भी शामिल हैं, अपने स्वयं के निचले स्तर के तरीके भी हैं, लेकिन इनका उपयोग कर सकते हैं। क्योंकि वे आईएसओ सी में नहीं हैं नहीं पोर्टेबल होना), और यह भी लागू करना चाहिए -bऔर -tझंडे को जोड़ने या नहीं जोड़ने के लिए bकरने के लिए विकल्प fopen()जब यह फ़ाइल पढ़ता है। उन प्रणालियों पर जहां यह अर्थहीन है, इससे कोई फर्क नहीं पड़ेगा।

फिर से, मैं यह नहीं कह रहा हूँ कि GNU के md5sum को पूरी तरह से पोर्टेबल तरीके से लिखा गया है या एक से प्राप्त किया गया है, लेकिन जाहिर है कि यह एक के साथ, अपनी संचालन क्षमता में, पालन करने की कोशिश कर रहा है। ध्यान दें कि एक ध्वज जिसके पास कुछ भी नहीं है वह ध्वज के समान नहीं है - पूर्व मामले में, यह ठीक है लेकिन कुछ भी नहीं करने के लिए निर्दिष्ट है, जबकि बाद के मामले में इसका उपयोग करने में त्रुटि हो सकती है या अपरिभाषित व्यवहार हो सकता है।


1
अगर वे बेकार हैं तो ये विकल्प क्यों जोड़े जाते हैं?
फ्रोजन-फ्लेम

1
मैंने इसके बारे में उपरोक्त कुछ पैराग्राफ जोड़े हैं (md5sum के संस्करणों के साथ शिकायत करने के लिए इसे TL (DR;> - जैसे अन्य ऑपरेटिंग सिस्टम, और बैच कोड इत्यादि से परिचित हो सकते हैं)।
गोल्डीलॉक्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.