Di mana file pergi ketika perintah rm dikeluarkan?

98

Baru-baru ini saya tidak sengaja melakukan rmpada satu set file dan itu membuat saya berpikir di mana tepatnya file-file ini berakhir?

Dengan kata lain, ketika bekerja dengan GUI, file yang dihapus pergi ke Sampah. Untuk apa persamaannya rmdan apakah ada cara untuk membatalkan rmperintah?

boehj
sumber
3
inilah kemungkinan duplikat. batalkan di linux . Tapi saya tidak begitu yakin itu karena ke mana file pergi sangat berbeda dari apakah ada cara untuk membatalkan.
xenoterracide

Jawaban:

120

Tidak ada tempat, hilang, lenyap. Nah, lebih khusus lagi, file tersebut akan dibatalkan tautannya. Data masih duduk di sana di disk, tetapi tautan ke sana dihapus. Dulu dimungkinkan untuk mengambil data, tetapi saat ini metadata dihapus dan tidak ada yang dapat dipulihkan.

Tidak ada tempat sampah untuk rm, tidak seharusnya ada. Jika Anda membutuhkan tempat sampah, Anda harus menggunakan antarmuka tingkat yang lebih tinggi. Ada utilitas baris perintah di trash-clidalam Ubuntu, tetapi sebagian besar waktu file manager GUI seperti Nautilus atau Dolphin digunakan untuk menyediakan Trash can standar. Tempat sampah adalah standar itu sendiri. File yang dibuang di Dolphin akan terlihat di Sampah dari Nautilus.

File biasanya dipindahkan ke suatu tempat seperti ~/.local/share/Trash/files/saat dibuang. The rmperintah pada UNIX / Linux sebanding dengan delpada DOS / Windows yang juga menghapus dan tidak tidak memindahkan file ke Recycle Bin. Hal lain yang perlu disadari adalah bahwa memindahkan file di seluruh sistem file seperti ke disk USB Anda dari hard disk drive Anda benar-benar 1) salinan data file diikuti oleh 2) memutuskan tautan file asli. Anda tidak ingin Sampah Anda diisi dengan salinan tambahan ini.

penguin359
sumber
4
Terima kasih banyak atas penjelasan yang jelas. Saya tidak keberatan menggunakan CLI, saya hanya perlu sedikit lebih berhati-hati saat menggunakan wildcard. :)
boehj
16
Saya akan berhati-hati dengan menggunakan sesuatu seperti libtrashuntuk mengubah perilaku rm. Banyak skrip digunakan rmuntuk membersihkan file dan Anda tidak ingin yang muncul di Sampah. Saya merekomendasikan menggunakan perintah khusus seperti trashdari trash-clipaket. @pedro Saya harus menambahkan bahwa saya pernah membuat file * di direktori home saya. Saya tidak sengaja mengutip * ketika saya tidak seharusnya membuatnya jadi saya memutuskan untuk menghapusnya dengan rm * secara alami. Ketika saya menyadari apa yang saya lakukan, saya dengan cepat membunuh perintah, tetapi sudah menghapus sejumlah file di direktori rumah saya.
penguin359
4
Sangat jarang memiliki sesuatu seperti tempat sampah di shell, jadi jika Anda menambahkannya pada mesin lokal Anda dan terbiasa dengannya atau bahkan bergantung padanya dalam pekerjaan sehari-hari Anda. Anda bisa mendapat masalah ketika menggunakan 99% unix yang lain: tanpa satu ...
Johan
3
Saya pikir pesan yang bisa dibawa pulang di sini adalah bahwa saya harus berhenti CLI'ing di dini hari dan memberikan perhatian yang lebih baik.
boehj
2
Sepanjang baris yang sama dengan apa yang dikatakan @Johan, RedHat dulu (masih?) Mengatur alias untuk perintah seperti cp, dan mv, ke cp -idan mv -iketika dijalankan sebagai root. Ini mengubah perilaku default sehingga perintah-perintah itu akan selalu bertanya sebelum menimpa file yang ada. Beberapa sysadmin merekomendasikan untuk secara khusus menghapus alias tersebut sehingga Anda tidak mengharapkan perilaku yang mungkin berakhir mematikan ketika di sistem lain yang mengikuti perilaku default.
penguin359
11

Untuk ext3 / ext4, Anda dapat mencoba memulihkan file menggunakan alat seperti extundelete atau ext3grep , atau bahkan bermain - main dengan struktur tingkat rendah secara manual (bukan untuk yang lemah hati); untuk banyak sistem file, Anda dapat mencoba mencari blok yang belum ditimpa oleh pola tertentu (mis. magicrescue dapat mencari header JPEG, di antara hal-hal lain). Perhatikan bahwa ini menggunakan heuristik untuk memulihkan file dari metadata yang tertinggal, sehingga pemulihan penuh tidak dijamin - ini lebih merupakan taruhan peluang terakhir (karena mengharuskan beberapa jejak file tetap ada di jurnal, dan bahwa blok belum ditimpa).

Jadi, untuk semua maksud dan tujuan, file yang dihapus rmsudah tidak ada - Anda bisa mencoba necromancy seperti yang ditawarkan alat ini, tetapi jangan bergantung padanya: ini adalah alat untuk mencoba ketika semuanya gagal. Lebih baik gali cadangan terbaru Anda (Anda telah membuat cadangan, bukan? Oh well, hidup dan pelajari ...).

Piskvor
sumber
2
Untuk data teks bernilai tinggi, Anda selalu dapat menggunakan alat serba guna yang kuat (bahkan emacs atau perl) untuk melihat "perangkat mentah" untuk disk yang berisi file yang dihapus, dan mencari string yang dikenal; Saya telah memulihkan dokumen Word untuk orang-orang dengan cara ini; mereka kehilangan mark-up, tetapi dapat memulihkan sebagian besar teks. Jelas ini pemulihan bencana, bukan "Undo".
alexis
Tautan 'manual' yang tepat: web.archive.org/web/20131221183925/http://…
sjas
8

Mengenai membatalkan efek dari rm:

Karena sebagian besar sistem file hanya menghapus referensi ke data dan menunjukkan bahwa blok-blok itu gratis, Anda dapat mencoba mencari lokasi pembacaan data Anda langsung dari perangkat. Dengan sedikit keberuntungan, blok yang berisi file Anda belum diklaim untuk hal lain.

Ini mengasumsikan Anda memiliki sesuatu yang cukup unik untuk dicari, yang Anda miliki rootpada sistem dan saya kira menyatukan apa pun yang mencakup lebih dari satu blok sistem file (mungkin 4k) mungkin berakhir sangat melelahkan jika sistem file tidak mengelola untuk meletakkan file di blok yang berdekatan.

Saya telah berhasil memulihkan isi beberapa file teks biasa dengan menjalankan string pada perangkat sistem file itu, dan menggunakan grepmencari sesuatu dari file-file dengan konteks yang besar ( -C). (Dan tak lama setelah kejadian itu, perusahaan memutuskan untuk menghabiskan beberapa sumber daya untuk mengimplementasikan cadangan)

Kjetil Jorgensen
sumber
Ini sedikit lebih rumit misalnya dengan ext3 mem-zero-out pointer blok di inode, tapi ya, mencari file secara langsung mungkin berhasil - jika mereka cukup kecil atau dialokasikan di blok yang berdekatan. Ini kadang-kadang disebut ukiran file dan ada alat-alat seperti magicrescueitu yang mencoba untuk menemukan gambar atau suara dengan pola khas mereka.
Piskvor
6

Setiap kali Anda menghapus file menggunakan rmperintah, data file tidak pernah dihapus. Dengan kata lain blok dalam sistem file yang berisi data masih ada.

Apa yang terjadi adalah ketika Anda menjalankan rmperintah, sistem menandai inode milik file itu sebagai tidak terpakai dan blok data file itu juga tidak digunakan (tetapi tidak dihapuskan). Namun ext3nol sebagian besar bidang dalam inode, ketika file dihapus.

Penandaan normal yang tidak digunakan ini dilakukan untuk kecepatan ... Jika tidak, penghapusan akan memakan waktu lebih lama. Itu sebabnya Anda mungkin mencatat menghapus bahkan file besar lebih cepat (Anda dapat memulihkan data jika blok data tidak ditimpa).

Info Lebih Lanjut: Struktur Inode , Cara kerja penghapusan file

sarath
sumber
... kecuali file secara eksplisit ditandai dengan chattr +satribut ("rusak"). Ini memberitahu filesystem untuk secara spesifik menimpa file ini dengan nol pada penghapusan. Hanya beberapa filesystem yang akan mendukung atribut itu.
telcoM
3

Dalam sistem file Unix-style (termasuk di Linux), file tidak benar-benar "di" tempat tertentu. Alih-alih, sistem menggunakan hardlink untuk menunjukkan kepingan-kepingan apa yang jumlahnya besar. Jadi ketika Anda membuat file, Anda juga membuat hardlink pertamanya: yang benar-benar berada di tempat Anda "menyimpan" file tersebut. Jika Anda membuat lebih banyak hardlink, maka sejauh yang diketahui sistem, file tersebut sebenarnya ada di beberapa tempat sekaligus.

Ketika Anda "menghapus" suatu file, biasanya Anda sebenarnya hanya menghapus hardlink yang ada di tempat yang Anda tentukan. Inilah sebabnya mengapa panggilan sistem untuk menghapus file disebut unlink(). Sistem tidak akan benar-benar menghapus file sampai tidak ada hardlink yang tersisa. Tetapi begitu hardlink terakhir dimusnahkan, begitu pula datanya.

Jadi, ke mana file yang Anda hapus pergi? Jika masih ada hardlink, file tersebut ada di mana pun hardlink yang tidak Anda hapus. Jika tidak ada hardlink yang tersisa, file-file tersebut hilang.

Spooniest
sumber
0

Lihat juga ~ / .snapshot jika file tersebut baru saja dihapus.

Andy
sumber
4
Ini hanya akan berfungsi jika Anda memiliki beberapa filesystem ajaib yang menyediakan fitur itu (seperti NetApp) atau jika Anda menggunakan versi khusus rm.
mattdm