Bersihkan direktori $ HOME

16

Selama beberapa tahun, di $HOMEdirektori saya banyak file dan direktori tersembunyi muncul.

Saya ingin terus menghapus yang tidak dibutuhkan.

Bagaimana saya bisa mengetahui aplikasi mana yang membuat file dan direktori tersembunyi itu.

Bagaimana saya bisa yakin bahwa itu aman untuk menghapus file dan direktori tersembunyi dan tidak ada yang penting akan hilang dan tidak ada yang bergantung pada mereka tidak akan berhenti bekerja?

xralf
sumber
2
Memastikan aplikasi apa yang membuat folder dan file bisa rumit. Biasanya mengkorelasikan file yang terkait dengan aplikasi yang dibuat oleh pengembang yang baik sangatlah mudah, tetapi hal ini tidak selalu terjadi. Jika Anda menemukan jawaban yang baik, saya ingin tahu apa itu.
0xSheepdog
2
@ 0xSheepdog auditd untuk masa depan - untuk sejarah, hampir tidak ada.
Jenny D
Pastikan Anda memiliki cadangan file sebelum Anda menghapusnya. (Ini termasuk memverifikasi bahwa Anda dapat memulihkan file.)
Jenny D
1. Apakah Anda menggunakan Linux? Versi kernel apa? (hanya utama / minor saja) 2. Apakah SELinux diaktifkan atau dapatkah Anda mengaktifkannya? 3. Apakah Anda memiliki akses root?
Otheus

Jawaban:

15

Anda bisa memindahkan mereka untuk sementara waktu.

cd ~
mkdir .trash
find . ! -name . -prune ! -type d -atime +365 -exec \
    sh -c 'touch -a -- "$@"
           mv -- "$@" ~/.trash
    ' --   {} +

Itu akan menemukan semua file di $HOMEdirektori Anda - tanpa berulang ke direktori anak - yang belum diakses selama setahun. Ini akan memperbarui waktu akses untuk mereka semua sekarang, dan kemudian memindahkan semuanya ke direktori bernama .trash. Jika Anda mengalami masalah antara waktu Anda menjalankannya dan kapan pun Anda memutuskan untuk mulai menghapus file lama, ~/.trashAnda dapat mencoba memindahkan beberapa dari mereka kembali dan melihat apakah ada yang Anda masukkan ke tempat sampah.

mikeserv
sumber
Meskipun ini tidak secara teknis menjawab pertanyaan, saya pikir itu solusi yang cukup bagus.
Jesse K
1
@JesseKeilson - saya berpikir bahwa itu tidak secara teknis menjawab pertanyaan: Bagaimana saya bisa yakin bahwa itu aman untuk menghapus file tersembunyi dan direktori dan tidak penting akan hilang dan tidak tergantung pada mereka tidak akan berhenti bekerja?
mikeserv
1
Beberapa sistem file dipasang dengan opsi "noatime". Atime tidak akan pernah dimodifikasi, bahkan jika mtime atau ctime adalah. Ini akan menyebabkan temuan Anda salah memindahkan file terbaru.
Adrien M.
@AdrienM. - itu benar. Namun, pada umumnya, setiap orang waras saya berhubungan dengan penggunaan relatime. from man mount:: relatimePerbarui waktu akses inode relatif untuk mengubah atau mengubah waktu. Waktu akses hanya diperbarui jika waktu akses sebelumnya lebih awal dari waktu modifikasi atau perubahan saat ini. (Mirip dengan noatime, tetapi tidak rusak muttatau aplikasi lain yang perlu tahu apakah file telah dibaca sejak terakhir kali dimodifikasi.) Dan lagi pula, gunakan -mdan -mtimeuntuk bekerja dengan modtime. atau apapun yang kamu suka.
mikeserv
Itu tidak menjawab bagian ' dan direktori "dari pertanyaan. Untuk itu, Anda harus menjalankan setiap direktori., Dan memeriksa semua file yang lebih tua dari setahun.
naught101
6

Jika Anda adalah root dari sistem Anda, Anda dapat menggunakan audit fitur kernel untuk memiliki informasi maksimum tentang siapa / kapan / apa yang diakses / dibuat / diubah file. lihat tutorial ini untuk contoh rasa debian

Jika tidak memiliki akses root, Anda bisa menggunakan crontab atau skrip dengan loop infinite + sleep untuk menjalankan lsof & grep file di homedir Anda.Lihat halaman dari lsof . Namun, itu hanya akan menampilkan aplikasi Anda yang memiliki deskriptor dibuka pada saat Anda meluncurkan lsof. Jika aplikasi membuka file, edit, lalu tutup, Anda tidak akan melihat perubahan ini di lsof.

one-liner seperti ini harus melakukan pekerjaan: lsof -u $(id -u) 2>/dev/null |grep -P $HOME'/[^\s]*$'

Cara lain adalah dengan menggunakan API kernel inotify untuk memeriksa kapan file diakses. Sayangnya, ini adalah sistem async, dan Anda tidak akan memiliki detail seperti "aplikasi apa", "kapan tepatnya", "pengguna apa". Anda hanya akan mendapat panggilan balik tentang "file ini diubah / diakses ...". Beberapa aplikasi (Inotify, FAM, gamin) memberi Anda akses mudah ke api

Adrien M.
sumber
Saya hanya mencoba menggunakan inotifyuntuk memicu lsof. Sistem ini terlalu cepat untuk ide ini untuk berfungsi: prosesnya sering hilang atau telah menutup file sebelum lsof dapat dijalankan. Dalam beberapa kasus, ini mungkin masih berfungsi, tetapi mungkin sangat sedikit.
Otheus
auditd Ini satu-satunya sistem yang memberikan Anda semua detail, tanpa melewatkan apa pun, karena menggunakan jalur kode spesifik di kernel. Semua alat lain akan kehilangan informasi, kehilangan data karena proses akan dihentikan / telah menutup fd.
Adrien M.
Sepakat. Saya baru saja memberikan tes dan memastikan bahwa itu tidak akan benar-benar melakukan pekerjaan yang diperlukan di sini.
Otheus
3

Anda dapat mencari atimedan menghapus file yang tidak digunakan dalam waktu lama (asalkan Anda tidak mengkonfigurasi sistem Anda untuk tidak menggunakan atime), tetapi itu agak berisiko (lihat tmpreaperapakah Anda ingin pergi dengan cara ini).

Alih-alih, saya menyarankan Bleachbit , program GUI interaktif untuk menghapus cruft.

Radovan Garabík
sumber