Очистити каталог $ HOME


17

За кілька років у моєму $HOMEкаталозі з’явилося багато прихованих файлів та каталогів.

Я б хотів постійно видаляти непотрібні.

Як я можу дізнатися, які програми створювали ці приховані файли та каталоги.

Як я можу бути впевненим, що безпечно видаляти приховані файли та каталоги, і нічого важливого не буде втрачено, і нічого в залежності від них не перестане працювати?


2
Визначити, які програми створювали папки та файли, може бути складним. Зазвичай співвіднесення файлів, пов’язаних із програмами, створеними гідними розробниками, є простим, але це не завжди так. Якщо ви знайдете хорошу відповідь, я хотів би знати, що це таке.
0xШепдог

2
@ 0xSheepdog перевіряється на майбутнє - за історію, майже нічого.
Jenny D

Переконайтеся, що у вас є резервна копія файлів, перш ніж їх видалити. (Це включає перевірку того, що ви можете відновити файли.)
Jenny D

1. Ви використовуєте Linux? Яка версія ядра? (тільки основний / другорядний, будь ласка) 2. Чи ввімкнено SELinux чи ви можете його включити? 3. У вас є кореневий доступ?
Отей

Відповіді:


15

Ви можете просто тимчасово їх перемістити.

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

Це знайде всі файли у вашому $HOMEкаталозі - без повторного потрапляння в дочірні каталоги - до яких не можна було користуватися протягом року. Він оновлює час доступу для всіх їх прямо зараз, а потім перемістить їх у каталог з іменем .trash. Якщо у вас виникли проблеми між часом його запуску і тим часом, коли ви вирішите почати видаляти старі файли, ~/.trashви можете спробувати перенести деякі з них назад і побачити, чи є причиною хтось із тих, хто ви помістили в смітник.


Хоча це технічно не відповідає на питання, я думаю, що це досить вдале вирішення.
Джессі К

1
@JesseKeilson - я думаю , що це технічно відповідь на питання: Як я можу бути впевнений , що це безпечно , щоб видалити приховані файли і каталоги , і нічого важливого будуть втрачені , і нічого в залежності від них не перестане працювати?
mikeserv

1
Деякі файлові системи змонтовані за допомогою опції "noatime". Atime ніколи не буде змінено, навіть якщо mtime або ctime. Це призведе до неправильного переміщення останніх файлів.
Адріан М.

@AdrienM. - це правда. За великим рахунком, однак, кожен здоровий фейс стикається з використанням relatime. від man mount:: relatimeОновіть час доступу inode щодо зміни або зміни часу. Час доступу оновлюється лише в тому випадку, якщо попередній час доступу був раніше, ніж поточний час зміни або зміни. (Подібно до noatime, але він не ламає muttчи інші програми, які повинні знати, чи був файл прочитаний з останнього разу, коли він був змінений.) І в будь-якому разі, використовувати -mта -mtimeпрацювати без мод. або що завгодно.
mikeserv

Він не відповідає частині запитання " та каталогів ". Для цього вам потрібно буде пройти кожен .директорій та перевірити, чи всі файли старші року
naught101

6

Якщо ви є коренем вашої системи, ви можете використовувати функцію ядра аудиту, щоб мати максимальну інформацію про те, хто / коли / до чого звертався / створював / модифікував файли. дивіться цей підручник для прикладів із смаком для debian

Якщо у вас немає кореневого доступу, ви можете використовувати crontab або скрипт з нескінченним циклом + сон для запуску файлів lsof & grep у своєму homedir. Див. Манжинг lsof . Однак він відображатиме лише ваші програми, у яких запущено fileescriptor у момент запуску lsof. Якщо програма відкриє файл, відредагує його та закрийте, ви не побачите цієї зміни в lsof.

Один з таких лайнерів повинен виконувати цю роботу: lsof -u $(id -u) 2>/dev/null |grep -P $HOME'/[^\s]*$'

Інший спосіб - використовувати API inotify kernel, щоб перевірити, до якого файлу можна отримати доступ. На жаль, це система асинхронізації, і ви не будете мати деталі, як "що додаток", "саме коли", "який користувач". Ви матимете лише зворотний дзвінок про "цей файл був змінений / доступний ...". Деякі програми (Inotify, FAM, gamin) надають вам простий доступ до api


Я просто намагався використовувати inotifyдля запуску lsof. Система просто занадто швидка, щоб ця ідея спрацювала: процес часто проходить або закриває файл до запуску lsof. У деяких випадках це все ще може працювати, але, мабуть, дуже мало.
Отей

auditd Це єдина система, яка надає всі деталі, не пропускаючи нічого, оскільки використовує певний шлях коду в ядрі. Усі інші інструменти пропустять інформацію, пропустять дані, оскільки процес буде припинено / закрили фд.
Адріан М.

Домовились. Я просто ставив ініціювати тест і підтверджував, що він справді не виконає потрібну роботу.
Отей

3

Ви можете шукати atimeта видаляти файли, які не використовувались тривалий час (за умови, що ви не налаштували систему не використовувати atime), але це досить ризиковано (див., tmpreaperЯкщо ви хочете піти цим шляхом).

Замість цього я б запропонував Bleachbit , інтерактивну програму GUI для видалення сукупності.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.