Câu trả lời:
Linux (giống như các đơn vị khác) thực sự không cung cấp tính năng hoàn tác. Triết lý là nếu nó biến mất, nó sẽ biến mất. Nếu nó là quan trọng, nó đã được sao lưu.
Có một hệ thống tập tin cầu chì tự động giữ các bản sao của các phiên bản cũ: copyfs , có sẵn trong tất cả các bản phân phối tốt. Tất nhiên, điều đó có thể sử dụng rất nhiều tài nguyên.
Cách tốt nhất để bảo vệ chống lại các tai nạn như vậy là sử dụng hệ thống kiểm soát phiên bản (cvs, bazaar, darcs, git, mercurial, lật đổ, ...). Phải mất một ít thời gian để tìm hiểu, nhưng nó mang lại kết quả khủng khiếp trong trung và dài hạn.
Tiếc là không có.
-i
tùy chọn rm
bật theo mặc định. Các hệ thống Unix của tôi không nên nắm tay tôi.
Không, không có phép thuật hoàn tác trong bất kỳ Unix. Unix giả định rằng bạn biết những gì bạn đang làm. Để hỗ trợ Hoàn tác, hãy sử dụng một VCS (trình soạn thảo văn bản của bạn có thể cũng được tích hợp sẵn).
Hầu hết các hệ thống tập tin không có khả năng thực hiện nó trong suốt.
Khôi phục hệ thống và máy thời gian trên mac và windows tương ứng chỉ là hệ thống kiểm soát sao lưu / thay đổi.
Không có hoàn tác trong dòng lệnh. Tuy nhiên, bạn có thể chạy các lệnh như rm -i
và mv -i
. Điều này sẽ nhắc bạn với một "bạn có chắc không?" câu hỏi trước khi họ thực hiện lệnh.
Cũng có thể thêm bí danh cho nó vào tập lệnh khởi động (ví dụ: ~/.bashrc
hoặc /etc/bash.bashrc
):
alias remove='rm -i'
alias move='mv -i'
Chỉnh sửa: bằng các gợi ý bên dưới, tôi đã xóa lời khuyên của mình để đặt bí danh cho các lệnh mặc định. Thay vào đó, nó giới thiệu các lệnh mới bây giờ).
mv -i
chỉ nhắc khi nó ghi đè lên một tệp (làm cho nó hữu ích và không đáng ghét). Trong cùng một tĩnh mạch , alias cp='cp -i'
.
Lý do các hệ thống Linux / Unix không có nguồn gốc chưa hoàn chỉnh xuất phát từ cách hầu hết các hệ thống tập tin lưu trữ thông tin của chúng. Tất cả thông tin meta tập tin được lưu trữ ở phía trước đĩa với các tham chiếu đến các nút trên phần còn lại của đĩa. Thông thường, hầu hết các hệ thống tệp phân bổ 10 khối cho một tệp trong vùng meta này. 7 đầu tiên đề cập đến 7 nút đầu tiên. Thứ 8 và thứ 9 đi đến danh sách các nút (các khối được liên kết đôi) và thứ 10 đi đến một danh sách các danh sách (các khối được liên kết ba lần). Điều này thay đổi từ hệ thống tệp sang hệ thống tệp (ext4, jfs, xfs, v.v.) nhưng các danh sách khối này thường có thể giải quyết kích thước tệp ở bất cứ đâu từ 2GB đến vài TB.
Nhưng vì tất cả thông tin này được lưu trữ ở phía trước đĩa, khi một tệp bị xóa, không có cách nào để tham chiếu các nút trên đĩa với dữ liệu meta mà chúng sử dụng để thuộc về. Ngược lại, FAT32 và NTFS thực sự lưu trữ một số thông tin tiêu đề với chính các tệp giúp dễ dàng xác định tập tin khối nào được sử dụng (miễn là không gian đó chưa được thu hồi bởi các tệp mới hơn). Trong công việc Linux, khi bạn xóa một cái gì đó, gần như luôn luôn là thứ đầu tiên được ghi đè ngay lập tức bởi dữ liệu mới cho hiệu quả.
Nếu bạn thực sự muốn một tính năng hoàn tác, hãy sử dụng kiểm soát nguồn. Subversion thực sự hoạt động rất tốt trên một máy người dùng. Tôi sử dụng nó để kiểm soát tất cả các tệp cá nhân của tôi trên hệ thống nhà của tôi. Nó có vẻ như quá mức cần thiết, cho đến khi thảm họa, một kịch bản lừa đảo hoặc một lỗi đánh máy dòng lệnh.
rm -r .
mặc dù. ;)
rm -r project.git
. May mắn thay nếu bạn giữ một phiên bản khác trên một máy chủ từ xa không có khả năng xảy ra
rm -r .
. Thực sự ngu ngốc của tôi.
Một điều mà tôi muốn thêm vào .bashrc của mình là chức năng sao chép và xóa. Cái gì đó như:
cprm(){
cp -p $1 ~/deleted/$1
rm $1
}
Nhưng bạn phải tập thói quen gõ cprm chứ không phải rm.
Rõ ràng bạn sẽ cần phải giữ trên đầu của khu vực bị xóa nếu bạn có không gian đĩa hạn chế.
"$1"
.
GitFS là một hệ thống tệp dựa trên cầu chì, tự động tính toán diff
giữa các phiên bản và cho phép khôi phục / duyệt qua chúng.
Trang web: https://www.presslabs.com/gitfs