การเปิดตัวของ rm-safely ซึ่งเป็น shell wrapper ที่ออกแบบมาเพื่อป้องกันการลบไฟล์โดยไม่ตั้งใจบน macOS ได้จุดประกายการถกเถียงอย่างเข้มข้นในชุมชนนักพัฒนาเกี่ยวกับการแลกเปลี่ยนระหว่างความปลอดภัยและความสามารถในการใช้งานข้ามระบบ เครื่องมือนี้จะแทนที่คำสั่ง rm
มาตรฐานด้วยเวอร์ชันที่ปลอดภัยกว่า ซึ่งจะย้ายไฟล์ไปยังถังขยะแทนการลบถาวร
วิธีการติดตั้ง:
- ผ่าน curl:
curl -fsSL https://raw.githubusercontent.com/zdk/rm-safely/main/rm-safely | bash -s install
- ผ่าน homebrew:
brew install zdk/tools/rm-safely
ปัญหาของ Muscle Memory
ความกังวลที่สำคัญที่สุดที่นักพัฒนายกขึ้นมาคือความเสี่ยงที่อาจเกิดขึ้นจากการสร้างนิสัยความปลอดภัยที่ผิดพลาด เมื่อผู้ใช้คุ้นเคยกับคำสั่ง rm ที่ปลอดภัยในระบบท้องถิ่นของตน พวกเขาอาจพัฒนานิสัยการลบไฟล์อย่างไม่ระมัดระวัง ซึ่งอาจกลายเป็นหายนะเมื่อทำงานบนเซิร์ฟเวอร์ระยะไกลหรือระบบที่ไม่มี safety wrapper ติดตั้งไว้ สิ่งนี้สร้างความขัดแย้งที่เครื่องมือที่ออกแบบมาเพื่อเพิ่มความปลอดภัยอาจทำให้ผู้ใช้มีความเสี่ยงมากขึ้นในสภาพแวดล้อมที่แตกต่างกัน
ชุมชนได้ระบุว่าสิ่งนี้เป็นส่วนหนึ่งของรูปแบบที่กว้างขึ้นกับเครื่องมือความปลอดภัย - พวกมันสามารถลดความใส่ใจและความระมัดระวังของผู้ใช้ ซึ่งมักเป็นปัจจัยสำคัญที่สุดในการป้องกันความผิดพลาด
นอกเหนือจาก rm: ตัวการตัวจริง
น่าสนใจที่การถกเถียงเผยให้เห็นว่า rm
อาจไม่ใช่ภัยคุกคามที่ใหญ่ที่สุดต่อความปลอดภัยของไฟล์ นักพัฒนาหลายคนรายงานว่าการสูญเสียไฟล์โดยไม่ตั้งใจส่วนใหญ่มาจากการใช้คำสั่ง mv
และ cp
อย่างไม่ระมัดระวัง ซึ่งสามารถเขียนทับไฟล์ที่มีอยู่แล้วโดยไม่มีเสียงเตือน การดำเนินการเหล่านี้มักทำให้เกิดการสูญเสียข้อมูลมากกว่าคำสั่งลบ เพราะมันเกิดขึ้นโดยไม่มีคำเตือนและสามารถทำลายไฟล์สำคัญได้โดยการแทนที่เนื้อหา
อย่างน้อยสำหรับผม การลบไฟล์โดยไม่ตั้งใจมากกว่า 90% เกิดจาก mv และ cp มากกว่า rm การใช้งานอย่างไม่ระมัดระวังสามารถเขียนทับเนื้อหาของไฟล์ด้วยไฟล์อื่นได้อย่างง่ายดาย
การใช้งาน GNU ของคำสั่งเหล่านี้มีตัวเลือกความปลอดภัยเช่น --no-clobber
, --backup
, และ --update
flags แต่สิ่งเหล่านี้ไม่ได้รับการยอมรับอย่างกว้างขวางหรือถูกตั้งเป็น alias โดยค่าเริ่มต้น
แนวทางทางเลือกและโซลูชันที่มีอยู่
การถกเถียงในชุมชนเน้นทางเลือกที่มีอยู่มากมายของ rm-safely ซึ่งบ่งบอกว่านี่เป็นพื้นที่ปัญหาที่ได้รับการสำรวจอย่างดี เครื่องมือเช่น trash-cli, trash-rs, และ rip2 มีฟังก์ชันการทำงานที่คล้ายกันในระบบปฏิบัติการที่แตกต่างกัน นักพัฒนาบางคนชอบวิธีการป้องกันที่ครอบคลุมมากขึ้น เช่น โซลูชันระดับไฟล์ระบบเช่น btrfs snapshots กับ snapper ซึ่งป้องกันความผิดพลาดของไฟล์ระบบทุกประเภท ไม่ใช่แค่การลบเท่านั้น
ผู้ใช้หลายคนกล่าวถึงการชอบคำสั่งเฉพาะที่มีชื่อที่แตกต่างกันมากกว่าการตั้ง alias คำสั่งที่มีอยู่ โดยใช้เครื่องมือที่มีชื่อเช่น trash
, recycle
, หรือ j
(สำหรับการนำทางไดเรกทอรี) เพื่อหลีกเลี่ยงความสับสนกับคำสั่ง Unix มาตรฐาน
เครื่องมือทางเลือกที่กล่าวถึง:
- trash-cli: ยูทิลิตี้ถังขยะข้ามแพลตฟอร์ม
- trash-rs: เครื่องมือที่พัฒนาด้วย Rust รองรับ Windows, macOS และ Linux
- rip2: เครื่องมือลบไฟล์ทางเลือกที่มีแนวคิดสุสาน
- btrfs snapshots with snapper: การป้องกันในระดับระบบไฟล์
ข้อกังวลการใช้งานทางเทคนิค
จากมุมมองทางเทคนิค นักพัฒนาบางคนวิจารณ์แนวทางของ rm-safely ในการรวมฟังก์ชันหลายอย่างเข้าไว้ในไฟล์ปฏิบัติการเดียว โดยโต้แย้งว่ามันละเมิดหลักการออกแบบของ Unix เครื่องมือนี้รวมฟังก์ชัน save, restore, และ list ทั้งหมดไว้ในอินเทอร์เฟซคำสั่ง rm ซึ่งบางคนมองว่าเป็นการผสมวัตถุประสงค์หลายอย่างเข้าไว้ในเครื่องมือเดียว
นอกจากนี้ ผู้ตรวจสอบทางเทคนิคยังสังเกตปัญหาเกี่ยวกับการจัดการข้อผิดพลาด โดยเฉพาะการระงับ stderr output ที่อาจซ่อนปัญหาจริงหรือให้ประสบการณ์ผู้ใช้ที่ไม่เป็นประโยชน์
บทเรียนที่กว้างขึ้นจากการถกเถียงนี้ดูเหมือนจะเป็นว่าแม้เครื่องมือความปลอดภัยจะมีที่ของมัน แต่การป้องกันการสูญเสียข้อมูลที่มีประสิทธิภาพที่สุดยังคงเป็นการผสมผสานของนิสัยที่ระมัดระวัง การสำรองข้อมูลที่เหมาะสม ระบบควบคุมเวอร์ชันเช่น git และกลยุทธ์การสำรองข้อมูลที่ครอบคลุม มากกว่าการพึ่งพา command-line safety wrappers เพียงอย่างเดียว
อ้างอิง: rm-safely