md5sum คำสั่งไบนารีและโหมดข้อความ


13

md5sumคำสั่งGNU มีสองโหมด: โหมดไบนารีและโหมดข้อความ ฉันเดาว่าความแตกต่างนั้นขึ้นอยู่กับการจัดการอักขระบรรทัดใหม่เท่านั้น ฉันถูกไหม?

บน GNU / Linux ทั้งสองโหมดจะให้ผลลัพธ์เหมือนกันเสมอดังนั้นการใช้-bและ-tตัวเลือกเพียงอย่างเดียวคือการระบุการตั้งค่าสถานะ ( *หรือ) ที่ใช้ก่อนหน้าชื่อไฟล์

โหมดสามารถให้ผลลัพธ์ที่แตกต่างในสถานการณ์ใดบ้าง บนระบบ Windows / MacOS? (มีเวอร์ชั่นสำหรับแพลตฟอร์มเหล่านี้หรือไม่)

คำตอบ:


11

บน GNU / Linux ทั้งสองโหมดจะให้ผลลัพธ์เหมือนกันเสมอ

ใช่อย่างชัดเจน จากman md5sum:

หมายเหตุ:ไม่มีความแตกต่างระหว่างตัวเลือกไบนารีและโหมดข้อความในระบบ [sic] GNU

นี่คือจากการmd5sumใช้งานที่มาพร้อมกับ GNU coreutils 8.21; ฉันสังเกตเห็นว่ารุ่นที่เก่ากว่า (8.12) ไม่มีการแจ้งเตือนนี้ แต่ฉันคิดว่าเหมือนกันจะเป็นจริงอยู่ดี

แม้ว่า AFAICT md5sumจะไม่ได้มาตรฐานอย่างเป็นทางการ (เช่นโดย POSIX) แต่ก็มีอยู่ในแพลตฟอร์มต่าง ๆ ในการนำไปใช้งานที่หลากหลายและมีความพยายามอย่างชัดเจนที่จะทำให้สอดคล้องกับสิ่งเหล่านี้เพื่อความสะดวกในการใช้งานข้ามระบบ

ในความสัมพันธ์กับสิ่งนี้มาตรฐาน ISO / ANSI Cรวมถึงฟังก์ชั่นสตรีมระดับสูงสำหรับการเข้าถึงไฟล์ ในฐานะส่วนหนึ่งของมาตรฐานสิ่งเหล่านี้จะมีอยู่ในระบบปฏิบัติการใด ๆ ที่ใช้ ISO C ผ่านทางไลบรารี่ที่แชร์หรือคอมไพเลอร์ เนื่องจากระบบปฏิบัติการทั้งหมดมีให้ใช้งานได้ (และมักเขียนด้วยภาษา C) จึงเป็นภาษาสากลที่ใช้ในการพัฒนาซอฟต์แวร์พกพาที่อาจเป็นไปได้

เมื่อพิจารณาถึงสิ่งที่ทำมันจะเป็นไปได้โดยสิ้นเชิงที่จะเขียนสิ่งmd5sumที่จะรวบรวมและทำงานบนระบบปฏิบัติการใด ๆ ฉันไม่ได้อ้างว่านี่เป็นความจริงของ GNU coreutils แต่หนึ่งในฟังก์ชั่นสตรีมไฟล์ระดับสูงที่กล่าวถึงก่อนหน้านี้คือfopen()ISO C ซึ่งได้รับคำสั่งให้รวมbสวิตช์ที่ใช้ในการเปิดไฟล์เพื่อระบุว่ามันถูกเปิด "เป็นไบนารี ไฟล์". สิ่งที่อาจหมายถึงหรือต้องของระบบไม่ได้ถูกกำหนดโดยมาตรฐานก็เพียงที่จำเป็นในการมีชีวิตอยู่เพื่อที่จะสามารถนำมาใช้ในระบบที่อาจจะมีบางคน ( ใด ๆ ) เหตุผลสำหรับมัน

ไม่มีเหตุผลดังกล่าวในระบบปฏิบัติการสไตล์ linux / POSIX / * nix ดังนั้นสวิตช์จึงไม่ทำสิ่งใด จากข้อมูลจำเพาะ POSIX (superset ของ ISO C) สำหรับfopen () :

อักขระ 'b' จะไม่มีผลกระทบ แต่ได้รับอนุญาตให้สอดคล้องกับมาตรฐาน ISO C

ดังนั้นการmd5sumใช้งานแบบพกพาอย่างสมบูรณ์อาจใช้ฟังก์ชั่นสตรีมไฟล์ ISO ระดับสูงเนื่องจากไม่มีวิธีอื่นสำหรับการเข้าถึงไฟล์ใน ISO C (แพลตฟอร์มส่วนใหญ่รวมถึง POSIX ร้องเรียน) มีวิธีการระดับล่างของตัวเองเช่นกัน ไม่สามารถพกพาได้เนื่องจากไม่ได้อยู่ใน ISO C) และควรใช้-bและติด-tธงและเพื่อเพิ่มหรือไม่เพิ่มbตัวเลือกfopen()เมื่ออ่านไฟล์ สำหรับระบบที่ไม่มีความหมายมันจะไม่สร้างความแตกต่างใด ๆ

อีกครั้งฉันไม่ได้บอกว่า md5sum ของ GNU นั้นเขียนด้วยวิธีพกพาอย่างสมบูรณ์หรือมาจากที่กล่าวมา แต่ก็เห็นได้ชัดว่ามันพยายามที่จะปฏิบัติตาม โปรดทราบว่าการมีการตั้งค่าสถานะซึ่งไม่มีอะไรไม่เหมือนกับการไม่มีการตั้งค่าสถานะ - ในกรณีก่อนหน้านี้ถูกระบุว่าไม่เป็นไร แต่ไม่ทำอะไรเลยในขณะที่การใช้งานในภายหลังอาจเป็นข้อผิดพลาดหรือนำไปสู่พฤติกรรมที่ไม่ได้กำหนด .


1
ทำไมตัวเลือกเหล่านี้ถึงถูกเพิ่มเข้ามาถ้ามันไร้ประโยชน์?
เปลวไฟแช่แข็ง

1
ฉันได้เพิ่มย่อหน้าบางส่วนข้างต้นเกี่ยวกับเรื่องนี้ (TL; DR -> เพื่อให้มีการร้องเรียนกับผู้ใช้ md5sum เวอร์ชันที่คุ้นเคยกับระบบปฏิบัติการอื่นและรหัสชุดงาน ฯลฯ ที่เขียนขึ้นสำหรับเรื่องนี้)
goldilocks
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.