md5sum চেকসামে '\' প্রিপেন্ড করে


22

"\" নামে একটি ফাইলের চেকসামটি খুঁজে বের করার সময় কেন এমডি 5সাম চেকসামের সামনে "\" প্রিপেন্ড করছে?

$ md5sum /tmp/test\\test
\d41d8cd98f00b204e9800998ecf8427e  /tmp/test\\test

অন্যান্য প্রতিটি ইউটিলিটির জন্য একই জিনিসটি লক্ষ্য করা যায়।


কেবল রেফারেন্সের জন্য, জিএনইউ কোর্টিলগুলিতে অন্যান্য *sumইউটিলিটিগুলি (যেমন md5sum, পরিবারের মতো , ই, জি, sha1sumইত্যাদি) একই কাজ করে।
কুসালানন্দ

আমি এই আচরণটি দেখছি না, ইউটিলিটির সংস্করণটি কী:md5sum --version
কিউই

@ কুসালানন্দ এটি কোর্টিল সংস্করণ নির্দিষ্ট হতে পারে; CentOS 7 এ cksumনা; যেমন% cksum test\\test 3915528286 4 test\test
স্টিফেন হ্যারিস

@StephenHarris যে সম্ভবত কারণ cksumএকটি POSIX ইউটিলিটি এবং তার বৈশিষ্ট হয়। এটি অনুমতি দেয় না।
কুসালানন্দ

উত্তর:


33

এই হয় নথিভুক্ত , Coreutils জন্য ' md5sum:

যদি ফাইলটিতে ব্যাকস্ল্যাশ বা নিউলাইন থাকে তবে লাইনটি ব্যাকস্ল্যাশ দিয়ে শুরু করা হয় এবং ফাইল নামের প্রতিটি সমস্যাযুক্ত অক্ষর ব্যাকস্ল্যাশ দিয়ে পালিয়ে যায়, এমনকি নির্বিচারে ফাইলের নামের উপস্থিতিতে আউটপুটটিকে দ্ব্যর্থহীন করে তোলে।

( ফাইল হ'ল ফাইলের নাম, ফাইলের বিষয়বস্তু নয়)।

b2sum, sha1sumএবং বিভিন্ন SHA-2 সরঞ্জামগুলি সেভাবে আচরণ করে md5sumsumএবং cksumনা; sumশুধুমাত্র পিছন-সঙ্গতির জন্য প্রদান করা হয় (এবং তার পূর্বপুরুষদের আউটপুট না উদ্ধৃত উৎপন্ন কর), এবং cksumহয় POSIX দ্বারা নির্দিষ্ট এবং আউটপুট এই ধরনের অনুমতি দেয় না।

এই আচরণটি নভেম্বর 2015 সালে চালু হয়েছিল এবং নিম্নলিখিত NEWSএন্ট্রি সহ 8.25 (জানুয়ারী 2016) সংস্করণে প্রকাশিত হয়েছিল :

md5sumলাইনের শুরুতে '\' ব্যবহার করে এবং '\ n' দিয়ে কোনও নতুন লাইন প্রতিস্থাপন করে স্ট্যান্ডার্ড আউটপুটটিতে স্ট্যাটাসের জন্য এখন ফাইলের জন্য একক লাইন নিশ্চিত করে। এটাও প্রভাবিত sha1sum, sha224sum, sha256sum, sha384sumএবং sha512sum

লাইনের শুরুতে ব্যাকস্ল্যাশ একটি পতাকা হিসাবে কাজ করে: ফাইলের নামগুলিতে এস্কেপগুলি কেবল তখনই প্রক্রিয়া করা হয় যদি লাইনটি ব্যাকস্ল্যাশ দিয়ে শুরু হয়। (আনস্কেপিং ডিফল্ট আচরণ হতে পারে না: এটি কোরেটিলসের পুরানো সংস্করণ সহ \\বা স্টোরেজ থাকা \nফাইলের নামগুলি সহ উত্পন্ন পরিমাণগুলি ভাঙবে ))


30
এটি লজ্জাজনক বিষয় যা সম্পূর্ণরূপে অপ্রয়োজনীয় কিছু যেমন manপৃষ্ঠায় নথিভুক্ত নয় । (এবং হ্যাঁ, আমি সচেতন জিএনইউ চাইছে সবাই এর infoপরিবর্তে তাদের
প্রত্যয়যুক্ত

3
@ মুখের রেখার শুরুতে ব্যাকস্ল্যাশ একটি পতাকা হিসাবে কাজ করে যা ইঙ্গিত করে যে ফাইলনামের ব্যাকস্ল্যাশগুলি পালিয়ে গেছে; অন্যথায় আপনি \nআক্ষরিক বা পলায়ন হিসাবে ইত্যাদি প্রক্রিয়াজাতকরণ করতে পারবেন না ।
স্টিফেন কিট 16'18

3
@ মুখের মুখোমুখি যদি এটি ফাইলের নামের শুরুতে হয় তবে এটি পতাকা, বা কোনও ফাইল নাম সত্যিকার অর্থে ব্যাকস্ল্যাশ দিয়ে শুরু হচ্ছে কিনা তা আপনি জানার কোনও উপায় পান নি ...
স্টিফেন কিট

1
@ স্টেফেনকিট আমি মনে করি না যে নেতৃত্ব \ অসম্পূর্ণতার জন্য রয়েছে। যদি আউটপুটটি সর্বদা ব্যাকস্ল্যাশ এবং নিউলাইনগুলি থেকে অব্যাহতিপ্রাপ্ত হিসাবে ডকুমেন্ট করা হয় তবে কোনও অস্পষ্টতা নেই । এটি সেখানে রয়েছে যাতে প্রয়োজনে ডি-এস্কেপিংয়ের প্রয়োজন হয় না। আপনি অবশ্যই এটির মূল্যবান কিনা তা বিতর্ক করতে পারেন (ব্যক্তিগতভাবে আমি মনে করি এটি এটি নয় তবে আমি কোনও coreutilsসহযোগী নই )।
টাইপিয়া

1
ডকুমেন্টেশনের এই বাক্যটি "ফাইল নামের প্রতিটি সমস্যাযুক্ত চরিত্রটি ব্যাকস্ল্যাশ দিয়ে পালিয়ে গেছে" ভুল; একটি নিউলাইন এর সাথে প্রতিস্থাপন করা \nব্যাকস্ল্যাশ দিয়ে একটি নতুন লাইন ছেড়ে পালানোর মতো নয়!
রুখ

17

স্টিফেন কিটের উত্তরটি কী এবং আমি কেন এই পরিবর্তনটি কার্যকর করা হয়েছিল তা কভার করার চেষ্টা করব covers প্রথমত, কেউ পালন করে একটি ফাইলের নাম নতুন লাইন ধারণকারী 1 হতে পারে দ্ব্যর্থক আউটপুট । উদাহরণস্বরূপ, এই আউটপুট বিবেচনা করুন:

d41d8cd98f00b204e9800998ecf8427e  foo
25af89c92254a806b2e93fffd8ac1814  bar

এর অর্থ কি এখানে দুটি ফাইল fooএবং bar, বা কেবলমাত্র একটি ফাইল যার ফাইলের নাম রয়েছে "foo\n25af89c92254a806b2e93fffd8ac1814 bar"? মঞ্জুর, এই পরবর্তী সম্ভাবনা অত্যন্ত অসম্ভব, তবে এটি সম্ভব। অস্পষ্টতা সমাধানের জন্য বিকাশকারীরা ব্যাকস্ল্যাশ ( \) দিয়ে নিউলাইনগুলি এড়াতে বেছে নিয়েছিল । আউটপুট তখন স্বতন্ত্র হয়ে যায়। তবে, এরপরে আরও একটি অস্পষ্টতা রয়েছে:

764efa883dda1e11db47671c4a3bbd9e  foo\nbar

এই ফাইলটির নামটিতে কি নতুন লাইন, বা একটি ব্যাকস্ল্যাশ রয়েছে n? এটি সমাধান করার জন্য আমাদের খুব পিছন দিক থেকে পালাতে হবে, যাতে পরবর্তী ঘটনাটি হয়ে যায়:

764efa883dda1e11db47671c4a3bbd9e  foo\\nbar

অবশেষে, তারা প্রতিটি আউটপুট লাইনটি পূর্বে সংশোধন \\করার সিদ্ধান্ত নিয়েছে যাতে কোনও পার্সারকে এটি নির্ধারণ করা সহজ হয় যে পলায়নের কাজ হয়েছে কিনা তা সনাক্ত করা সহজ করে তোলে such সম্ভবত এটি পার্সারগুলিকে বহির্গমন সংস্করণগুলি md5sumএবং নন-এস্কেটিং সংস্করণগুলি (নন-জিএনইউ) থেকে উভয়ই আউটপুট পরিচালনা করতে দেয় was পতাকাটির অর্থ হ'ল "ব্যয়বহুল" আন-এস্কেটিং প্রয়োজন হয় না যখন প্রয়োজন হয় না। আপনি md5sum.cনিজে পদক্ষেপে এই পার্সিংয়ের একটি উদাহরণ দেখতে পাচ্ছেন (সংযুক্ত সংস্করণে 382 লাইন)।


1 নিউলাইনের দ্বারা আমি এমন চরিত্রটি বোঝাই \nযা মাঝে মাঝে নির্দিষ্টভাবে লাইনফিড বা এলএফ হিসাবেও উল্লেখ করা হয় ; দেখতে md5sum.c


1
অবশ্যই বুদ্ধিমান আচরণটি হ'ল একটি নতুন লাইন থাকা প্রতিটি ফাইলকে সম্পূর্ণ নিষিদ্ধ করা । কেবল এগুলি প্রক্রিয়া করতে অস্বীকার করুন।
পাইপ

1
@ পাইপ এটি উন্মাদ আচরণ। পসিক্স এ জাতীয় ফাইলের নাম দেয় এবং ইচ্ছাকৃতভাবে বৈধ ফাইলগুলির সাথে কাজ করতে অস্বীকৃত ইউটিলিটিগুলি খারাপ এবং অবশ্যই তাকে আগুন দিয়ে হত্যা করতে হবে।
রুসলান

2
@ রুসলান পয়েন্টটি হ'ল এই জাতীয় অসামাজিক নাম অনুমোদনের জন্য পসিক্সের বিরুদ্ধে প্রতিবাদ করা । এই জাতীয় অক্ষরগুলি মঞ্জুর করার ফলে এই জাতীয় বিশেষ সমস্যাগুলি হ্যান্ডেল করার জন্য সম্ভবত প্রচুর পরিমাণে সুরক্ষা সমস্যা এবং কোড ব্লাট হয়েছে।
পাইপ

@ পাইপ যখন কোনও ফাইলের নামের এলএফ প্রকৃতপক্ষে অসামাজিক, আপনার লিঙ্কে উল্লিখিত অন্যান্য জিনিসগুলি অনেক বেশি বিতর্কিত - যেমন ফাঁকা স্থান, ল্যাটিন অক্ষর ইত্যাদি letters
রুসলান

প্রকৌশলী দ্বারা ক্লাসিক ওভার ইঞ্জিনিয়ারিং। পাঠ (এখনও আবার): ইঞ্জিনিয়ারদের প্রয়োজনীয় ড্রাইভের অনুমতি দেবেন না। তারা সবচেয়ে অস্পষ্ট এবং সংঘাতযুক্ত কেসটি খুঁজে পাবে এবং এটিকে আধিপত্যের মামলায় উন্নীত করবে এবং সবাইকে বিভ্রান্ত করবে।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.