it-swarm-vi.com

Chúng ta có hoàn tác trong Linux không?

Tôi đã đổi tên một vài tập tin trong một tập lệnh bó. Có cách nào để hoàn tác các thay đổi mà không phải đổi tên chúng lại không?

Linux có cung cấp một số cách riêng của undoing không?

55
Lazer

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 Fuse 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, Subversion, ...). 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ó.

17
postfuturist

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ũng có thể đượ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.

10
xenoterracide

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 dưới dạng rm -imv -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 tập lệnh khởi động (ví dụ: ~/.bashrc hoặc là /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ờ).

8
vdboor

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 đến 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à điều đầu tiên được ghi đè ngay lập tức bởi dữ liệu mới cho hiệu quả.

4
djsumdog

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ế.

2
Deano

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.

2
Stephen Jazdzewski

GitFS là một hệ thống tệp dựa trên Fuse, tự động tính toán diffs 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

Tài liệu: https://www.presslabs.com/gitfs/docs/usage/

1
test30