Hoàn tác lệnh rác Linux


24

Chúng ta có thể hoàn tác các hoạt động được thực hiện trong một thiết bị đầu cuối, ví dụ, xóa tệp qua rmkhông?

Giải pháp thu được:

  1. Răng cưa
  2. Tiện ích phục hồi
  3. Tiện ích sao lưu
  4. LibTrash
  5. Phiên bản (FUSE)

1
Bật rm: Nó hủy liên kết một tệp từ nó inode. Câu hỏi: "Tập tin sẽ đi đâu khi rmlệnh được ban hành" -> unix.stackexchange.com/questions/10883/ cũng có thể là một cách đọc tốt cho bạn.
erch

Câu trả lời:


62

Không có "hoàn tác" chung cho mọi hoạt động trong thiết bị đầu cuối. Nếu bạn muốn khôi phục một tập tin sau khi sử dụng, rmbạn sẽ cần xem xét phần mềm khôi phục.

Một tùy chọn để ngăn bạn khỏi những sai lầm trong tương lai là tạo aliases cho các lệnh thay thế để xóa tệp. Thêm chúng vào của bạn ~/.bashrcvà tập thói quen sử dụng chúng thay vì rm.

  1. bí danh rmi = 'rm -i'

    Nếu bạn sử dụng rmi, bạn sẽ được nhắc xác nhận xóa trong tương lai. Cố gắng tránh phát triển thói quen nhấn yngay sau khi bạn ra rmilệnh, vì điều đó sẽ đánh bại mục đích.

  2. Bạn cũng có thể di chuyển các tệp bị xóa bởi trshlệnh trong thiết bị đầu cuối vào thùng rác của bạn (trên KDE và Gnome):

    alias trsh='mv --target-directory="$HOME/.Trash"'
    

    Nếu bạn sử dụng trsh, bạn sẽ có khả năng "phục hồi" hạn chế. Coi chừng

    trsh dir1/file1 dir2/file1
    

    vẫn có thể gây mất dữ liệu không thể phục hồi.


3
+1 cho câu trả lời tốt hơn nhiều so với của tôi =)
Cách thực hiện

9
bí danh thứ hai là rất, rất thông minh. +1.
LiraNuna

3
thùng rác () {mv $ @ ~ / .Trash; } # bash function, không phải bí danh. Thay đổi hành vi dự kiến ​​của rm là một ý tưởng tồi, IMHO.
Richard Hoskins

20
Nguy cơ với răng cưa rmđể rm -ilà bạn làm quen với mạng lưới an toàn mà nó mang lại cho bạn. Sau đó, bạn đi vào một máy khác, không có bí danh đó ...
Dentrasi

3
Vì những lý do mà Richard và Dentrasi đề cập, tôi thích tạo một chức năng tùy chỉnh hoặc bí danh rmi-> rm -i. Đó thực sự là một sai lầm khi chỉ đơn giản là cản trở một chương trình hiện có bằng cách đặt bí danh cho nó.
Telemachus

6

Không có thùng rác cho dòng lệnh.

Bạn có thể thử một số tiện ích chưa được phục hồi khác nhau, nhưng không có gì đảm bảo rằng chúng sẽ hoạt động.


Vâng, có một thùng rác cho dòng lệnh. Xem thùng rác trong câu trả lời khác.
Sparhawk

Trash-cli rất tốt :) và sử dụng Trashlib, tốt hơn là chỉ đơn giản là di chuyển tệp.
m3nda

5

Bạn có thể sử dụng thùng rác nếu bạn sử dụng KDE khi bạn chạy gui. Đây là tiện ích dòng lệnh để xóa / khôi phục bằng cách sử dụng các tiện ích rác KDE.


1
thùng rác-cli cũng cung cấp hoạt động với thùng rác Gnome và nó được thiết kế để cung cấp khả năng tương thích tùy chọn rm (cho bí danh).
Andrea Francia

Đừng quên để alias rm=trashcác ốc vít dòng lệnh thông thường của bạn đi kèm với các nút hoàn tác.
Ryan C. Thompson

Tôi nghĩ alias rm=trashlà có khả năng nguy hiểm, nếu có bất kỳ cơ hội nào bạn sẽ sử dụng hệ thống của người khác một ngày và quên (hoặc ssh). An toàn hơn nhiều khi chỉ quen với việc viết trashthay vì rm.
Sparhawk

4

Bạn có thể tạo rmbí danh cho trashlệnh (Bạn sẽ cần cài đặt trashtrước.) Thêm phần này vào ~/.bashrc:

alias rm='trash'

Điều này thích hợp hơn alias rm='mv --target-directory=$HOME/.Trash'vì ~ / .Trash KHÔNG phải là thư mục rác cho gnome. IMHO tốt hơn là để trashtìm ra nơi thư mục rác thực sự.

btw Tôi đã đăng bài này trong một bình luận nhưng tôi không có đủ đại diện.


5
+1 cho "vì ~ / .Trash KHÔNG phải là thư mục rác cho gnome." Tuy nhiên, rm không nên được đặt bí danh vào thùng rác. Bạn chỉ nên sử dụng thùng rác thay vì rm nếu đó là những gì bạn muốn.
nagul

Đúng, nhưng đối với một số người thói quen cũ chết cứng.
Alvin Row

'rmtrash' là một lựa chọn khác.
Itachi

3

Hai giải pháp kỹ thuật nữa chưa được nêu tên:

  1. libtrash : Một thư viện động có thể được tải sẵn trong trình bao của bạn để chặn việc xóa / xóa các tòa nhà và thay vào đó chuyển các tệp vào một thư mục rác (giống như bí danh nhưng hoạt động cho mọi ứng dụng khi được tải trước).
  2. Một hệ thống tập tin phiên bản. Nếu bạn xóa (hoặc chỉnh sửa hoặc sao chép hoặc ...) một tệp, bạn có thể trở lại trạng thái cũ. Điều này có thể được thực hiện với một hệ thống tập tin FUSE và một trong các hệ thống tập tin phiên bản của nó .

3

Có một câu hỏi lớn hơn ở đây đó là giá trị giải quyết. Các lệnh Shell không phải là trò chuyện (họ không kiểm tra lại những gì bạn muốn) và họ mong bạn biết bạn đang làm gì. Đây là cơ bản cho cách chúng được thiết kế . Đây là một tính năng, không phải là một lỗi.

Một số người cảm thấy trượng phu khi họ sử dụng các lệnh như vậy, điều mà tôi nghĩ là khá ngớ ngẩn, nhưng điều quan trọng phải hiểu được những nguy hiểm. Bạn có thể gây ra một thiệt hại lớn trong một thiết bị đầu cuối, ngay cả khi bạn không root. Tôi nghĩ rằng bạn có thể thực sự quan tâm rm, nhưng vì bạn đã nói "Chúng ta có thể hoàn tác các hoạt động được thực hiện trong thiết bị đầu cuối không", tôi nghĩ rằng điều này đáng để nói. Câu trả lời chung là không, bạn không thể.


2

Tùy chọn 1: Xem Phục hồi các tệp Linux từ Hệ thống tệp ext2 . Trang này trỏ đến một chương trình, được viết bởi Sebastian Hetze của công ty LunetIX, rằng (như tiêu đề gợi ý) xóa các tệp đã bị xóa gần đây khỏi hệ thống tệp ext2. Ví dụ sử dụng:

# undelete -d /dev/hdc3 -a 10

Cảnh báo:

  • Các trang web ban đầu đã biến mất. Liên kết, ở trên, là đến Lưu trữ Internet.
  • Các trang web trong một hỗn hợp của tiếng Anh và tiếng Đức.
  • Như đã nêu ở trên, công cụ này được thiết kế dành riêng cho hệ thống tập tin ext2. Nó không có khả năng làm việc trên bất kỳ loại hệ thống tập tin khác; đặc biệt là không những không phải là ext N .

Tùy chọn 2: Tôi có rsnapshot (rsync) đang chạy trên máy của mình, giúp tạo ảnh chụp nhanh hàng giờ trong các thư mục đã chọn. Nó tăng dần làm điều này mỗi giờ, 2 giờ hoặc bất cứ điều gì bạn bảo CRON làm. Sau một ngày, nó sẽ tái chế các ảnh chụp nhanh này thành một ảnh chụp nhanh hàng ngày và sau 7 ngày trong một tuần, v.v. Điều này khiến tôi có thể quay ngược thời gian trong khoảng một tháng hoặc lâu hơn mỗi giờ! Nó khá tốt với không gian đĩa vì nó tạo ra các liên kết tượng trưng đến các tệp không bao giờ thay đổi ...


Chỉ cần làm rõ, # 1 là dành riêng cho hệ thống tập tin ext2. Nó sẽ không hoạt động trên một hệ thống tập tin ext3.
nagul


1

Tồn tại các tiện ích chưa được phục hồi cho ext2, nhưng hầu hết các hệ thống tệp Linux khác bị kẹt trong Thời kỳ đồ đá và không có bất kỳ tính năng sử dụng nâng cao nào. Tình trạng đáng buồn khi xem xét các ổ đĩa khổng lồ có đủ dung lượng để không bao giờ xóa tệp lại là điều phổ biến.

Vì vậy, bạn đang bị mắc kẹt với ba tùy chọn:

  1. Hãy sao lưu thường xuyên, ví dụ với một lệnh như:

    rsync -axvRP --backup --backupdir=/backup/incr/$(date -I) /home/ /backup/root/

  2. Sử dụng một công cụ kiểm soát phiên bản như gitcho tất cả công việc của bạn. Mặc dù điều này sẽ không bảo vệ chống lại một kẻ điên rm -rgiết chết kho lưu trữ, nhưng nó sẽ bảo vệ chống lại những rắc rối thông thường vì bạn sẽ sử dụng git rmkhông thô rm.

  3. Hãy cẩn thận và không tin tưởng quá nhiều vào rm -i, trash-clivà bạn bè, như hầu hết các dữ liệu bạn sẽ mất trên vỏ bạn sẽ không mất bởi tình cờ rm, nhưng bởi ống sai địa chỉ, tập tin đầu ra gõ sai, sai địa mvvà các công cụ, ví dụ, điều đó sẽ ghi đè lên dữ liệu của bạn, không chỉ xóa nó.

Làm cả ba cho số lượng an toàn tối đa.


Thật là vui nhộn khi gọi ext2 hiện đại. Các hệ thống tệp mới hơn sử dụng các định dạng trên đĩa phức tạp hơn ext2 / 3 và phải từ bỏ các vị trí dễ tìm nơi bạn có thể tìm thấy các tệp để xóa. Chúng được thiết kế cho những người tạo bản sao lưu những thứ họ quan tâm. BTW, tôi luôn sử dụng mv và cp -i, vì tôi thường không muốn ghi đè bất cứ thứ gì. Tôi thường gõ \ rm, vì tôi cũng có bí danh là rm -i, nhưng tôi không muốn trả lời câu hỏi của nó.
Peter Cordes

0

kiểm tra cái này ... có thể hữu ích http://artmees.github.io/rm/

giả sử bạn đã làm

rm very_important_file

từ thiết bị đầu cuối. phục hồi tập tin này là một quá trình tẻ nhạt và không phải lúc nào cũng thành công

thay vào đó nếu bạn sử dụng tập lệnh được đề cập lên. bạn không phải lo lắng về điều này bởi vì

rm very_important_file
mv very_important_file ~/.Trash/

là tương đương. tập lệnh xử lý nhiều trường hợp hơn và hoàn toàn không làm thay đổi hệ thống của bạn rmvà đó là vì nó được đưa vào thư mục bin cục bộ của người dùng để nó làm mờ hệ thống rm và không ảnh hưởng đến nó hoặc vô hiệu hóa sử dụng nó

Đây là một cách tiếp cận răng cưa tinh tế nhưng không mất bất kỳ tính năng nào


1
Sẽ tốt hơn nếu bạn có thể thêm một số lời giải thích về những gì nó làm và cách áp dụng cho câu hỏi, có thể thêm một ví dụ, v.v.
slhck


0

Đối với tôi (openuse leap 42.2, NTFS Pendrive) PhotoRec - cũng bởi testdiskngười tạo - đã hoạt động :) Tuy nhiên, nó không khôi phục được tên tệp.

PhotoRec là phần mềm khôi phục dữ liệu tệp được thiết kế để khôi phục các tệp bị mất bao gồm video, tài liệu và lưu trữ từ đĩa cứng, CD-ROM và hình ảnh bị mất (do đó là tên Phục hồi ảnh) từ bộ nhớ máy ảnh kỹ thuật số. PhotoRec bỏ qua hệ thống tệp và theo dõi dữ liệu cơ bản, vì vậy nó sẽ vẫn hoạt động ngay cả khi hệ thống tệp của phương tiện của bạn đã bị hỏng nghiêm trọng hoặc được định dạng lại.

Tôi đã cài đặt nó bằng cách sử dụng các kho lưu trữ tiêu chuẩn trong openSUSE

chỉ dẫn


1
Chào mừng bạn đến với Siêu người dùng! Vui lòng đọc Cách giới thiệu phần mềm để biết thông tin tối thiểu và đề xuất về cách đề xuất phần mềm trên Super User. Để giữ cho câu trả lời của bạn hữu ích ngay cả khi (các) liên kết được cung cấp phá vỡ các chi tiết này nên được chỉnh sửa thành câu trả lời của bạn.
Tôi nói Phục hồi Monica
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.