Việc phát hành rm-safely , một shell wrapper được thiết kế để ngăn chặn việc xóa file vô tình trên macOS , đã châm ngòi cho một cuộc thảo luận sôi nổi trong cộng đồng developer về sự đánh đổi giữa tính an toàn và khả năng tương thích đa hệ thống. Công cụ này thay thế lệnh rm
tiêu chuẩn bằng một phiên bản an toàn hơn, di chuyển các file vào thùng rác thay vì xóa vĩnh viễn chúng.
Phương thức cài đặt:
- Thông qua curl:
curl -fsSL https://raw.githubusercontent.com/zdk/rm-safely/main/rm-safely | bash -s install
- Thông qua homebrew:
brew install zdk/tools/rm-safely
Vấn đề về ký ức cơ bắp
Mối quan ngại lớn nhất được các developer đưa ra tập trung vào những nguy hiểm tiềm ẩn của việc tạo ra thói quen bảo mật giả tạo. Khi người dùng quen với lệnh rm an toàn trên hệ thống cục bộ của họ, họ có thể phát triển thói quen xóa bất cẩn có thể chứng minh là thảm khốc khi làm việc trên các server từ xa hoặc hệ thống không có safety wrapper được cài đặt. Điều này tạo ra một nghịch lý khi các công cụ được thiết kế để tăng cường an toàn thực sự có thể khiến người dùng dễ bị tổn thương hơn trong các môi trường khác nhau.
Cộng đồng đã xác định điều này là một phần của mô hình rộng hơn với các công cụ an toàn - chúng có thể làm giảm sự chú ý và cảnh giác của người dùng, những yếu tố thường là quan trọng nhất trong việc ngăn chặn sai lầm.
Ngoài rm: Những thủ phạm thực sự
Thú vị là, cuộc thảo luận tiết lộ rằng rm
có thể không phải là mối đe dọa lớn nhất đối với tính an toàn của file. Nhiều developer báo cáo rằng phần lớn việc mất file vô tình của họ đến từ việc sử dụng bất cẩn các lệnh mv
và cp
, có thể ghi đè các file hiện có một cách im lặng. Những thao tác này thường gây mất dữ liệu nhiều hơn các lệnh xóa vì chúng xảy ra mà không có cảnh báo và có thể làm hỏng các file quan trọng bằng cách thay thế nội dung của chúng.
Ít nhất đối với tôi, hơn 90% việc xóa file không chủ ý là do mv và cp chứ không phải rm. Việc bất cẩn với chúng có thể dễ dàng dẫn đến việc ghi đè nội dung của một file bằng file khác.
Các phiên bản GNU của những lệnh này cung cấp các tùy chọn an toàn như cờ --no-clobber
, --backup
, và --update
, nhưng chúng không được áp dụng rộng rãi hoặc đặt bí danh theo mặc định.
Các phương pháp thay thế và giải pháp hiện có
Cuộc thảo luận của cộng đồng đã làm nổi bật nhiều lựa chọn thay thế hiện có cho rm-safely , cho thấy đây là một không gian vấn đề đã được khám phá kỹ lưỡng. Các công cụ như trash-cli , trash-rs , và rip2 cung cấp chức năng tương tự trên các hệ điều hành khác nhau. Một số developer thích các phương pháp bảo vệ toàn diện hơn, chẳng hạn như các giải pháp cấp filesystem như btrfs snapshots với snapper , bảo vệ chống lại tất cả các loại sai lầm của hệ thống file, không chỉ việc xóa.
Một số người dùng đề cập đến việc thích các lệnh chuyên dụng với tên riêng biệt hơn là đặt bí danh cho các lệnh hiện có, sử dụng các công cụ với tên như trash
, recycle
, hoặc j
(để điều hướng thư mục) để tránh nhầm lẫn với các lệnh Unix tiêu chuẩn.
Các Công Cụ Thay Thế Được Đề Cập:
- trash-cli: Tiện ích thùng rác đa nền tảng
- trash-rs: Công cụ dựa trên Rust hỗ trợ Windows, macOS và Linux
- rip2: Công cụ xóa thay thế với khái niệm nghĩa địa
- btrfs snapshots với snapper: Bảo vệ ở cấp độ hệ thống tập tin
Mối quan ngại về triển khai kỹ thuật
Từ góc độ kỹ thuật, một số developer chỉ trích cách tiếp cận của rm-safely trong việc kết hợp nhiều chức năng vào một executable duy nhất, cho rằng điều này vi phạm các nguyên tắc thiết kế Unix . Công cụ này bao gồm các chức năng save, restore, và list tất cả trong giao diện lệnh rm, điều mà một số người xem là trộn lẫn quá nhiều mục đích vào một công cụ.
Ngoài ra, các reviewer kỹ thuật đã lưu ý các vấn đề với xử lý lỗi, cụ thể là việc ngăn chặn đầu ra stderr có thể che giấu các vấn đề thực sự hoặc cung cấp trải nghiệm người dùng không hữu ích.
Bài học rộng hơn từ cuộc thảo luận này dường như là trong khi các công cụ an toàn có vị trí của chúng, việc bảo vệ hiệu quả nhất chống mất dữ liệu vẫn là sự kết hợp của thói quen cẩn thận, sao lưu đúng cách, các hệ thống kiểm soát phiên bản như git , và các chiến lược sao lưu toàn diện thay vì chỉ dựa vào các safety wrapper dòng lệnh.
Tham khảo: rm-safely