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


98

Gần đây tôi vô tình làm rmmột tập hợp các tập tin và nó khiến tôi suy nghĩ chính xác những tập tin này ở đâ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. Tương đương với cái gì rmvà có cách nào để hoàn tác một rmlệnh không?


3
đây là một bản sao có thể hoàn tác trên linux . Nhưng tôi không thực sự chắc chắn rằng đó là nơi các tập tin đi khá khác so với việc có cách hoàn tác.
xenoterracide

Câu trả lời:


120

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 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-cliUbuntu, 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 một 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 tin thường được chuyển đến một nơi nào đó như ~/.local/share/Trash/files/khi rác. Các rmlệnh trên UNIX / Linux là tương đương với deltrên hệ điều hành DOS / Windows mà cũng xóa và không không di chuyển tập tin vào Recycle Bin. 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.


4
Cảm ơn rất nhiều cho lời giải thích rõ ràng. Tôi không phiền khi sử dụng CLI, tôi chỉ cần cẩn thận hơn một chút khi sử dụng ký tự đại diện. :)
boehj

16
Tôi nên thận trọng với việc sử dụng một cái gì đó như libtrashđể thay đổi hành vi của rm. Rất nhiều tập lệnh sử dụng rmđể dọn dẹp các tập tin và bạn không muốn những tập lệnh hiển thị trong Thùng rác. Tôi khuyên bạn nên sử dụng một lệnh chuyên dụng như trashtừ trash-cligói. @pedro Tôi nên thêm rằng tôi đã từng tạo một tệp * trong thư mục chính của mình. Tôi đã vô tình trích dẫn * khi tôi không nên tạo nó vì vậy tôi quyết định loại bỏ nó bằng rm * một cách tự nhiên. Khi tôi nhận ra những gì tôi đã làm, tôi nhanh chóng giết lệnh, nhưng nó đã xóa một số tệp trong thư mục nhà của tôi.
chim cánh cụt359

4
Rất hiếm khi có một cái gì đó như thùng rác trong vỏ, vì vậy nếu bạn thêm nó vào máy cục bộ của bạn và làm quen với nó hoặc thậm chí phụ thuộc vào nó trong công việc hàng ngày của bạn. Bạn có thể gặp rắc rối khi sử dụng một số 99% khác của unix: không có ai ...
Johan

3
Tôi nghĩ rằng thông điệp mang về nhà ở đây là tôi cần dừng CLI trong vài giờ và chú ý tốt hơn.
boehj

2
Theo cùng một dòng như những gì @Johan đã nói, RedHat đã sử dụng (vẫn vậy?) Đặt bí danh cho các lệnh như cp, và mv, cp -imv -ikhi chạy bằng root. Điều này thay đổi hành vi mặc định để những lệnh đó sẽ luôn hỏi trước khi ghi đè lên các tệp hiện có. Một số sysadins khuyên bạn nên loại bỏ các bí danh đó một cách cụ thể để cuối cùng bạn không mong đợi rằng hành vi đó có thể gây chết người khi trên một hệ thống khác tuân theo hành vi mặc định.
chim cánh cụt359

11

Đối với ext3 / ext4, bạn có thể thử khôi phục các file sử dụng các công cụ như extundelete hoặc ext3grep , hoặc thậm chí đi rối tung với các cấu trúc ở mức độ thấp bằng tay (không dành cho người yếu tim); đối với nhiều hệ thống tập tin, 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 vẫn còn 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 rmđã biến mất - bạn có thể thử tính năng cần thiết như những công cụ này cung cấp, như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ết 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 ...).


2
Đối với dữ liệu văn bản có giá trị cao, bạn luôn có thể sử dụng bất kỳ công cụ đa năng mạnh mẽ nào (thậm chí là emacs hoặc perl) để xem "thiết bị thô" cho đĩa chứa tệp đã xóa và tìm kiếm các chuỗi đã biết; Tôi đã khôi phục tài liệu Word cho mọi người theo cách này; họ mất đánh dấu, nhưng có thể phục hồi hầu hết các văn bản. Rõ ràng đây là phục hồi thảm họa, không phải "Hoàn tác".
alexis

Một hợp 'bằng tay' liên kết: web.archive.org/web/20131221183925/http://...
sjas

8

Về việc hoàn tác các tác dụ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, đó là bạn có roottrê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 đang 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)


Nó hơi phức tạp hơn một chút, ví dụ như bằng cách mở rộng ra các con trỏ khối trong nút, nhưng có, tìm kiếm các tệp trực tiếp có thể hoạt động - nếu chúng đủ nhỏ hoặc được phân bổ trong một khối liền kề. Điều này đôi khi được gọi là khắc tệp và có những công cụ như thế magicrescuecố gắng tìm hình ảnh hoặc âm thanh bằng các mẫu đặc biệt của chúng.
Piskvor

6

Bất cứ khi nào bạn xóa một tệp bằng rmlệnh, 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 rmlệnh, 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, ext3hầ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 nó 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 tin hoạt động


... Trừ khi tệp được đánh dấu rõ ràng bằng chattr +sthuộc tính ("shred"). Nó báo cho hệ thống tập tin ghi đè lên tập tin này một cách cụ thể bằng các số 0 khi xóa. Chỉ một số hệ thống tập tin sẽ hỗ trợ thuộc tính đó.
telcoM

3

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ự "tại" 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 hệ thống gọi để xóa các tập tin được gọi 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.


0

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


4
Điều này sẽ chỉ hoạt động nếu bạn có một số hệ thống tệp ma thuật cung cấp tính năng đó (như NetApp) hoặc nếu bạn đang sử dụng phiên bản rm đặc biệt.
mattdm
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.