Batalkan perintah tempat sampah Linux

24

Bisakah kita membatalkan operasi yang dilakukan di terminal, misalnya, penghapusan file melalui rm?

Solusi yang diperoleh:

  1. Mengasingkan
  2. Batalkan penghapusan utilitas
  3. Utilitas cadangan
  4. LibTrash
  5. Versi (FUSE)
cdb
sumber
1
Pada rm: Ini memutuskan tautan file dari itu inode. Pertanyaan: "Di mana file pergi ketika rmperintah dikeluarkan" -> unix.stackexchange.com/questions/10883/… mungkin juga menjadi bacaan yang baik untuk Anda.
erch

Jawaban:

62

Tidak ada "pembatalan" umum untuk setiap operasi di terminal. Jika Anda ingin memulihkan file setelah menggunakan, rmAnda harus melihat ke dalam perangkat lunak pemulihan.

Pilihan untuk mencegah Anda dari kesalahan di masa depan adalah membuat aliasperintah alternatif untuk menghapus file. Tambahkan mereka ke Anda ~/.bashrcdan biasakan menggunakannya bukan rm.

  1. alias rmi = 'rm -i'

    Jika Anda menggunakan rmi, Anda akan diminta untuk konfirmasi penghapusan di masa mendatang. Cobalah untuk menghindari mengembangkan kebiasaan menekan ysegera setelah Anda mengeluarkan rmiperintah, karena itu akan mengalahkan tujuan.

  2. Anda juga dapat memindahkan file yang dihapus oleh trshperintah di terminal ke recycle bin Anda (di KDE dan Gnome):

    alias trsh='mv --target-directory="$HOME/.Trash"'
    

    Jika Anda menggunakan trsh, Anda akan memiliki kemampuan "hapus" yang terbatas. Waspadalah itu

    trsh dir1/file1 dir2/file1
    

    masih dapat menyebabkan kehilangan data yang tidak dapat dipulihkan.

John T
sumber
3
+1 untuk jawaban yang jauh lebih baik daripada saya =)
The How-To Geek
9
alias kedua sangat, sangat cerdas. +1.
LiraNuna
3
trash () {mv $ @ ~ / .Trash; } # fungsi bash, bukan alias. Mengubah perilaku yang diharapkan dari rm adalah ide yang buruk, IMHO.
Richard Hoskins
20
Risiko dengan aliasing rmto rm -iadalah Anda terbiasa dengan jaring pengaman yang memberi Anda. Kemudian Anda pergi ke komputer lain, yang tidak memiliki alias yang ...
Dentrasi
3
Untuk alasan yang disebutkan oleh Richard dan Dentrasi, saya lebih suka membuat fungsi khusus atau ke alias rmi-> rm -i. Benar-benar sebuah kesalahan untuk menghalangi program yang sudah ada dengan mengabaikannya.
Telemakus
6

Tidak ada tempat sampah daur ulang untuk baris perintah.

Anda dapat mencoba beberapa utilitas yang tidak terhapus, tetapi tidak ada jaminan bahwa mereka akan berhasil.

The How-To Geek
sumber
Ya, ada tempat sampah untuk baris perintah. Lihat trash-cli dalam jawaban lain.
Sparhawk
Trash-cli sangat bagus :) dan menggunakan Trashlib, lebih baik daripada hanya memindahkan file.
m3nda
5

Anda bisa menggunakan trash-cli jika Anda menggunakan KDE saat menjalankan gui. Ini adalah utilitas baris perintah untuk menghapus / mengembalikan menggunakan fasilitas tempat sampah KDE.

joe
sumber
1
trash-cli juga berfungsi dengan GNOME trash dan dirancang untuk memberikan kompatibilitas opsi rm (untuk aliasing).
Andrea Francia
Jangan lupa untuk melakukannya alias rm=trashsehingga perintah-perintah khas pada baris perintah Anda dilengkapi dengan tombol undo.
Ryan C. Thompson
Saya pikir alias rm=trashberpotensi berbahaya, jika ada kemungkinan Anda akan menggunakan sistem orang lain suatu hari dan lupa (atau ssh). Jauh lebih aman untuk terbiasa menulis trashsaja rm.
Sparhawk
4

Anda bisa membuat rmalias untuk trashperintah (Anda harus menginstal trashdulu.) Tambahkan ini ke ~/.bashrc:

alias rm='trash'

Ini lebih disukai alias rm='mv --target-directory=$HOME/.Trash'karena ~ / .Trash BUKAN folder tempat sampah untuk gnome. Lebih baik IMHO untuk trashmencari tahu di mana folder sampah yang sebenarnya.

btw saya akan memposting ini dalam komentar tapi saya tidak punya cukup perwakilan.

Alvin Row
sumber
5
+1 untuk "sejak ~ / .Trash BUKAN folder tempat sampah untuk gnome." Namun, rm juga tidak boleh alias dibuang ke tempat sampah. Anda hanya perlu menggunakan sampah daripada rm jika itu yang Anda inginkan.
nagul
Benar, tetapi bagi sebagian orang kebiasaan lama sangat sulit.
Alvin Row
'rmtrash' adalah pilihan lain.
Itachi
3

Dua solusi teknis lainnya belum disebutkan:

  1. libtrash : Pustaka dinamis yang dapat dimuat di dalam shell Anda yang memotong menghapus / menghapus dan memindahkan file ke folder tempat sampah (mirip seperti alias tetapi berfungsi untuk aplikasi apa pun saat dimuat).
  2. Sistem file versi. Jika Anda menghapus (atau mengedit, atau menyalin, atau ...) file, Anda bisa kembali ke kondisi lama. Ini dapat dilakukan dengan sistem file FUSE dan salah satu sistem file versinya .
Joseph
sumber
3

Ada pertanyaan yang lebih besar di sini yang perlu ditangani. Perintah Shell tidak cerewet (mereka tidak mengecek apa yang Anda inginkan), dan mereka berharap Anda tahu apa yang Anda lakukan. Ini mendasar bagaimana mereka dirancang . Ini fitur, bukan bug.

Beberapa orang merasa macho ketika mereka menggunakan perintah seperti itu, yang saya pikir cukup konyol, tetapi adalah penting untuk memahami bahaya. Anda dapat melakukan banyak kerusakan di terminal, bahkan jika Anda tidak melakukan root. Saya pikir Anda mungkin benar-benar hanya peduli rm, tetapi karena Anda mengatakan "Bisakah kita membatalkan operasi yang dilakukan di terminal", saya pikir ini layak untuk dikatakan. Jawaban umum adalah tidak, Anda tidak bisa.

Telemakus
sumber
2

Opsi 1: Lihat Membatalkan File Linux dari Sistem File ext2 . Halaman ini menunjuk ke sebuah program, yang ditulis oleh Sebastian Hetze dari perusahaan LunetIX, yang (seperti judulnya) membatalkan penghapusan file yang baru-baru ini dihapus dari sistem file ext2. Contoh penggunaan:

# undelete -d /dev/hdc3 -a 10

Peringatan:

  • Situs web asli hilang. Tautan di atas adalah ke Internet Archive.
  • Situs ini dalam campuran bahasa Inggris dan Jerman.
  • Seperti yang dinyatakan di atas, alat ini dirancang khusus untuk sistem file ext2. Sepertinya tidak akan berfungsi pada tipe sistem file lain; terutama bukan yang selain ext N .

Opsi 2: Saya menjalankan rsnapshot (rsync) di mesin saya yang membuat snapshot setiap jam dari folder yang saya pilih. Secara bertahap hal ini dilakukan setiap jam, 2 jam atau apa pun yang Anda minta CRON lakukan. Setelah sehari penuh, foto-foto ini akan didaur ulang menjadi satu snapshot harian dan setelah 7 hari dalam seminggu, dan seterusnya. Ini membuat saya dapat kembali ke masa sekitar satu bulan atau lebih untuk setiap jam! Ini cukup bagus dengan ruang disk karena membuat tautan simbolis ke file yang tidak pernah berubah ...

Lubang
sumber
Hanya untuk memperjelas, # 1 khusus untuk sistem file ext2. Itu tidak akan bekerja pada sistem file ext3.
nagul
1

Ada utilitas yang tidak terhapus untuk ext2, tetapi kebanyakan sistem file Linux lainnya macet di Zaman Batu dan tidak memiliki fitur kegunaan lanjutan. Sedih keadaan mengingat drive raksasa dengan ruang yang cukup untuk tidak pernah menghapus file lagi adalah hal biasa.

Jadi, Anda terjebak dengan tiga opsi:

  1. Lakukan backup secara teratur, misalnya dengan perintah seperti:

    rsync -axvRP --backup --backupdir=/backup/incr/$(date -I) /home/ /backup/root/

  2. Gunakan alat kontrol versi seperti gituntuk semua pekerjaan Anda. Meskipun ini tidak akan melindungi terhadap orang gila rm -ryang membunuh repositori, itu akan melindungi terhadap masalah biasa karena Anda akan menggunakan git rmtidak mentah rm.

  3. Berhati-hatilah dan jangan terlalu percaya rm -i, trash-clidan teman-teman, karena sebagian besar data Anda akan hilang di shell Anda tidak akan hilang secara tidak sengaja rm, tetapi dengan pipa yang salah arah, file output salah ketik, salah arah mvdan hal-hal lain, yaitu hal-hal yang akan ditimpa data Anda, bukan hanya menghapusnya.

Lakukan ketiganya untuk keamanan maksimal.

Grumbel
sumber
Cukup lucu untuk memanggil ext2 modern. Sistem file yang lebih baru menggunakan format on-disk yang lebih rumit daripada ext2 / 3, dan harus menyerahkan lokasi yang mudah ditemukan di mana Anda mungkin menemukan file untuk dihapus. Mereka dirancang untuk orang-orang yang membuat cadangan dari hal-hal yang mereka pedulikan. BTW, saya selalu menggunakan mv dan cp -i, karena saya biasanya tidak ingin mengalahkan apa pun. Saya biasanya mengetik, karena saya juga alias ke rm -i, tetapi saya tidak ingin menjawab pertanyaannya.
Peter Cordes
0

periksa ini ... mungkin sangat membantu http://artmees.github.io/rm/

Andaikan Anda melakukannya

rm very_important_file

dari terminal. Memulihkan file ini adalah proses yang membosankan dan tidak selalu berhasil

alih-alih jika Anda menggunakan skrip yang disebutkan. Anda tidak perlu khawatir karena ini

rm very_important_file
mv very_important_file ~/.Trash/

adalah setara. skrip menangani lebih banyak kasus dan tidak mengubah sistem Anda rmsama sekali dan itu karena itu dimasukkan ke folder bin lokal pengguna sehingga membayangi sistem rm namun tidak mempengaruhi atau menonaktifkan menggunakannya

ini adalah pendekatan aliasing halus tetapi tanpa kehilangan fitur apa pun

a14m
sumber
1
Akan lebih baik jika Anda dapat menambahkan beberapa penjelasan tentang apa yang dilakukan dan bagaimana ini berlaku untuk pertanyaan, mungkin menambahkan contoh, dll.
slhck
0

TestDisk dapat membatalkan penghapusan file dari sistem file FAT, exFAT, NTFS dan ext2 .

Cristian Ciupitu
sumber
0

Bagi saya (opensuse leap 42.2, NTFS flashdisk) PhotoRec - juga oleh testdiskpencipta - bekerja :) Namun ia belum memulihkan nama file.

PhotoRec adalah perangkat lunak pemulihan data file yang dirancang untuk memulihkan file yang hilang termasuk video, dokumen dan arsip dari hard disk, CD-ROM, dan gambar yang hilang (dengan demikian nama Pemulihan Foto) dari memori kamera digital. PhotoRec mengabaikan sistem file dan mengejar data yang mendasarinya, sehingga akan tetap berfungsi bahkan jika sistem file media Anda telah rusak parah atau diformat ulang.

Saya telah menginstalnya menggunakan repositori standar di openSUSE

petunjuk

boczniak767
sumber
1
Selamat Datang di Pengguna Super! Silakan baca Cara merekomendasikan perangkat lunak untuk informasi minimum yang diperlukan dan saran tentang cara merekomendasikan perangkat lunak pada Pengguna Super. Agar jawaban Anda bermanfaat bahkan jika tautan yang disediakan memecah detail ini harus diedit ke dalam jawaban Anda.
Saya katakan Reinstate Monica