Tôi đã vô tình xóa một tập tin bằng cách chạy:
rm -rf ./Desktop/myScript.sh
Tôi nghĩ rằng nó có thể khôi phục tập tin, bởi vì rm
lệnh tạm thời loại bỏ. Làm cách nào tôi có thể khôi phục tệp đã xóa trên Mac OSX?
Tôi đã vô tình xóa một tập tin bằng cách chạy:
rm -rf ./Desktop/myScript.sh
Tôi nghĩ rằng nó có thể khôi phục tập tin, bởi vì rm
lệnh tạm thời loại bỏ. Làm cách nào tôi có thể khôi phục tệp đã xóa trên Mac OSX?
Câu trả lời:
MacOS là một hệ điều hành Unix và rm
có nghĩa là "tạm biệt". Giao diện GUI cho phép bạn di chuyển một tệp vào thùng rác (sau đó bạn có thể khôi phục) nhưng đó không phải là những gì bạn đã làm. Nếu bạn có một bản sao lưu (ví dụ: bạn có Time Machine đang chạy) thì bạn đã được lưu.
Làm rõ
Nói một cách nghiêm túc (như @ire_and_curses chỉ ra) một rm
cách đơn giản là xóa mục nhập thư mục cho tệp trong khi để các khối đĩa được sử dụng, không bị ảnh hưởng. Nếu bạn có thể kiểm tra hệ thống tệp trong đó tệp đã có, có các phương pháp nâng cao mà bạn có thể thử khám phá lại các nội dung khối đó. Ngoài ra còn có một số công cụ phục hồi có thể được mua để phục hồi tổn thất. Vấn đề trung tâm là không có gì khác sử dụng lại bất kỳ khối đĩa nào được biểu thị bằng tệp của bạn.
MacOS cũng có một lệnh remove an toàn ( srm
) ghi đè lên một tập tin trước khi nó được chỉnh sửa unlink
khiến nó không thể phục hồi được. Tôi sử dụng unlink
thuật ngữ này vì đây là lệnh gọi hệ thống cơ bản được liên kết với rm
lệnh của shell . Điều này đặt sân khấu cho phần tiếp theo của cuộc thảo luận này, bên dưới.
Sidenote
[Tôi nên nhanh chóng thêm rằng ngay cả khi bạn ghi quá nhiều đĩa, có nhiều cách để đọc những gì đã được viết hàng chục lần trở lên trước đó. Để vệ sinh đúng cách một đĩa để xử lý thực sự cần một bồn tắm axit, một cái búa lớn và máy hủy tài liệu. ]
unlink
ing một tập tin làm giảm số lượng liên kết inode của tập tin. Nếu giá trị này bằng 0, tệp sẽ bị xóa khỏi thư mục hệ thống tệp và các khối đĩa của nó được giải phóng để sử dụng lại. Điều này chỉ xảy ra khi không có quá trình nào mở tệp. Các quản trị viên thường bối rối khi thấy rằng một hệ thống tập tin đang sử dụng một lượng không gian rất lớn không thể tính được bằng cách tính tổng các khối đĩa đơn giản (với một cái gì đó như du
). Thông thường lý do là một tệp đang mở đã bị xóa, do đó nó không còn được thể hiện trong thư mục của nó. Lý do là các khối đĩa vẫn không sử dụng cho đến khi quá trình cuối cùng sử dụng tệp kết thúc.
Mở một tệp và ngay lập tức unlink
ing nó thực sự là một cách phổ biến để tạo các tệp tạm thời, an toàn. Các công cụ như lsof
có thể hiển thị các tệp vô hình này nếu bạn tìm các tệp có số liên kết (NLINK) bằng không.
Trong Unix và Linux (trong đó MacOS là một Unix có thương hiệu), rm
theo triết lý "làm điều đó" của Unix mà không cần phô trương nếu có thể. Đó là, nếu bạn có quyền xóa một tệp (tức là thư mục của bạn cho phép viết) thì rm
sẽ thực hiện đúng những gì bạn yêu cầu. Bạn có thể muốn tạo một bí danh shell rm='rm -i'
nhắc bạn xác nhận trước khi thực hiện thao tác. Sử dụng -f
chuyển đổi với rm
ghi đè mà nếu cần thiết. Một bí danh rm
là hữu ích nhất khi bạn glob
loại bỏ thích rm *.log
. Đó là, bạn có tùy chọn bỏ qua một tệp trong danh sách.
Tùy thuộc vào nội dung của bạn, nhưng bạn có thể sử dụng các phần mềm bên thứ 3 khác nhau để làm điều đó, ví dụ:
và nhiều thứ khác nữa.
Bạn có thể tìm thấy nhiều ứng dụng hơn bằng cách nhập 'phục hồi dữ liệu' trong App Store.
Cách nâng cao hơn là khởi động OSX của bạn ở chế độ phục hồi (hoặc bỏ qua phân vùng của bạn nếu bạn có thể) và tìm nó theo cách thủ công (nếu bạn nhớ một số văn bản cụ thể từ tập lệnh của mình).
Một số ví dụ:
diskutil list
sudo cat /dev/disk0s2 | strings | grep -C20 "my_stuff"