it-swarm-vi.com

Các tập tin đi đâu khi lệnh rm được ban hành?

Gần đây, tôi đã vô tình làm rm trên một tập hợp các tệp và nó khiến tôi suy nghĩ chính xác những tệp này kết thúc ở đâu?

Điều đó có nghĩa là, khi làm việc với GUI, các tệp đã bị xóa sẽ chuyển đến Thùng rác. Cái gì tương đương với rm và có cách nào để hoàn tác lệnh rm không?

108
boehj

Không nơi nào, biến mất, biến mất. Vâng, cụ thể hơn, các tập tin được bỏ liên kết. Dữ liệu vẫn còn ở đó trên đĩa, nhưng liên kết đến nó đã bị xóa. Trước đây, nó có thể truy xuất dữ liệu, nhưng ngày nay siêu dữ liệu bị xóa và không có gì có thể phục hồi được.

Không có Thùng rác nào cho rm, cũng không nên có. Nếu bạn cần một Thùng rác, bạn nên sử dụng giao diện cấp cao hơn. Có một tiện ích dòng lệnh trong trash-cli trên Ubuntu, nhưng hầu hết các trình quản lý tệp GUI như Nautilus hoặc Dolphin được sử dụng để cung cấp Thùng rác tiêu chuẩn. Thùng rác có thể là tiêu chuẩn của chính nó. Các tệp được lưu trong Cá heo sẽ hiển thị trong Thùng rác từ Nautilus.

Các tệp thường được chuyển đến một nơi nào đó như ~/.local/share/Trash/files/ khi đổ rác. Lệnh rm trên UNIX/Linux có thể so sánh với del trên DOS/Windows cũng xóa và không không di chuyển tệp vào Thùng rác. Một điều khác cần nhận ra là việc di chuyển một tệp qua các hệ thống tệp như vào đĩa USB của bạn từ ổ đĩa cứng thực sự là 1) bản sao dữ liệu tệp theo sau là 2) hủy liên kết tệp gốc. Bạn sẽ không muốn Thùng rác của mình được lấp đầy bằng những bản sao bổ sung này.

126
penguin359

Đối với ext3/ext4, bạn có thể thử khôi phục các tệp bằng các công cụ như extundelete hoặc ext3grep hoặc thậm chí đi lộn xộn với các cấu trúc cấp thấp - thủ công (không dành cho người yếu tim); đối với nhiều hệ thống tệp, bạn có thể cố gắng tìm kiếm các khối chưa được ghi đè bằng các mẫu nhất định (ví dụ: magicresTHER có thể tìm kiếm các tiêu đề JPEG, trong số những thứ khác). Lưu ý rằng những điều này đang sử dụng phương pháp phỏng đoán để khôi phục các tệp từ siêu dữ liệu bị bỏ lại, do đó, việc khôi phục hoàn toàn không được đảm bảo - đó là đặt cược cơ hội cuối cùng (vì chúng yêu cầu một số dấu vết của các tệp trong tạp chí và các khối đó chưa được ghi đè lên).

Vì vậy, đối với tất cả ý định và mục đích, các tệp bị xóa bằng rm đã biến mất - bạn có thể thử như các công cụ này cung cấp, nhưng không Không phụ thuộc vào nó: đây là những công cụ để thử khi mọi thứ khác không thành công. Tốt hơn hãy tìm ra các bản sao lưu mới nhất của bạn (bạn đã tạo các bản sao lưu, phải không? Ồ, sống và học hỏi ...).

11

Về việc hoàn tác các hiệu ứng của rm:

Vì hầu hết các hệ thống tập tin chỉ xóa tham chiếu đến dữ liệu và chỉ ra rằng các khối là miễn phí, bạn có thể cố gắng xác định vị trí đọc dữ liệu của mình trực tiếp từ thiết bị. Với một chút may mắn, các khối chứa (các) tệp của bạn chưa được yêu cầu cho thứ khác.

Điều này giả định rằng bạn có một thứ khá độc đáo để tìm kiếm, rằng bạn có root trên hệ thống và tôi đoán việc ghép bất cứ thứ gì kéo dài hơn một khối hệ thống tệp (có thể là 4k) có thể sẽ khá tốn công nếu hệ thống tệp không quản lý để đặt (các) tệp trong các khối liền kề.

Tôi đã khôi phục thành công nội dung của một vài tệp văn bản thuần bằng cách chạy các chuỗi trên thiết bị mà hệ thống tệp đã bật và sử dụng grep tìm kiếm thứ gì đó từ các tệp có ngữ cảnh lớn (-C). (Và ngay sau sự cố đó, công ty đã quyết định dành một số nguồn lực để thực hiện sao lưu)

8
Kjetil Jorgensen

Bất cứ khi nào bạn xóa một tệp bằng lệnh rm, dữ liệu của tệp sẽ không bao giờ bị xóa. Nói cách khác, các khối trong hệ thống tệp chứa dữ liệu vẫn còn đó.

Điều gì xảy ra là khi bạn chạy lệnh rm, hệ thống đánh dấu inode thuộc về tệp đó là không sử dụng và các khối dữ liệu của tệp đó cũng không được sử dụng (nhưng không bị xóa). Tuy nhiên ext3 không có hầu hết các trường trong nút, khi một tệp bị xóa.

Việc đánh dấu bình thường này không được sử dụng được thực hiện cho tốc độ ... Nếu không để xóa sẽ mất thêm thời gian. Đó là lý do tại sao bạn có thể lưu ý xóa ngay cả các tệp lớn nhanh hơn (bạn có thể khôi phục dữ liệu nếu khối dữ liệu đó không bị ghi đè).

Thông tin thêm: Cấu trúc inode , Cách xóa tệp hoạt động

6
sarath

Trong các hệ thống tệp kiểu Unix (bao gồm cả trên Linux), các tệp không thực sự "ở" bất kỳ vị trí cụ thể nào. Thay vào đó, hệ thống sử dụng các liên kết cứng để chỉ ra các phần của một lượng lớn dữ liệu. Vì vậy, khi bạn tạo một tệp, bạn cũng tạo liên kết cứng đầu tiên của nó: tệp thực sự nằm ở nơi bạn "lưu" tệp. Nếu bạn tạo ra nhiều liên kết cứng hơn, thì theo như hệ thống biết, tập tin thực sự tồn tại ở một vài nơi cùng một lúc.

Khi bạn "xóa" một tệp, thông thường bạn thực sự chỉ xóa các liên kết cứng tồn tại ở nơi bạn đã chỉ định. Đây là lý do tại sao lệnh gọi hệ thống để xóa các tệp được gọi là unlink(). Hệ thống sẽ không thực sự xóa tệp cho đến khi không còn liên kết cứng nào với nó. Nhưng một khi liên kết cứng cuối cùng bị phá hủy, dữ liệu cũng vậy.

Vì vậy, các tập tin bạn xóa đi đâu? Nếu vẫn còn các liên kết cứng, các tệp đó sẽ ở bất cứ nơi nào mà các liên kết cứng bạn không xóa. Nếu không còn liên kết cứng, các tập tin sẽ biến mất.

3
The Spooniest

Cũng xem vào ~/.snapshot nếu tệp bị xóa gần đây.

0
Andy