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

16

За несколько лет в моем $HOMEкаталоге появилось много скрытых файлов и каталогов.

Я хотел бы постоянно удалять ненужные.

Как я могу узнать, какие приложения создали эти скрытые файлы и каталоги.

Как я могу быть уверен, что безопасно удалить скрытые файлы и каталоги, и ничего важного не будет потеряно и ничто, зависящее от них, не перестанет работать?

xralf
источник
2
Выяснить, какие приложения создали папки и файлы, может быть сложно. Обычно соотносить файлы, связанные с приложениями, созданными достойными разработчиками, просто, но это не всегда так. Если вы найдете хороший ответ, я хотел бы знать, что это такое.
0xSheepdog
2
@ 0xSheepdog audd для будущего - для истории, почти ничего.
Дженни Д
Убедитесь, что у вас есть резервная копия файлов, прежде чем удалять их. (Это включает проверку того, что вы можете восстановить файлы.)
Дженни Д
1. Вы используете Linux? Какая версия ядра? (только основные / второстепенные, пожалуйста) 2. SELinux включен или вы можете включить его? 3. У вас есть root-доступ?
Отей

Ответы:

15

Вы можете просто временно сместить их.

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

Это позволит найти все файлы в вашем $HOMEкаталоге - без повторения в дочерних каталогах - к которым не было доступа в течение года. Это обновит время доступа для всех них прямо сейчас, а затем переместит их все в каталог с именем .trash. Если вы столкнетесь с какими-либо проблемами между временем запуска и временем, когда вы решите начать удаление старых файлов, ~/.trashвы можете попытаться переместить некоторые из них назад и посмотреть, не было ли причиной того, что вы положили в корзину.

mikeserv
источник
Хотя это технически не отвечает на вопрос, я думаю, что это довольно хороший обходной путь.
Джесси К
1
@JesseKeilson - я думаю , что это технически ответ на вопрос: Как я могу быть уверен , что это безопасно , чтобы удалить скрытые файлы и каталоги , и ничего важного будут потеряны , и ничего в зависимости от них не перестанет работать?
mikeserv
1
Некоторые файловые системы монтируются с опцией «noatime». Atime никогда не будет изменен, даже если mtime или ctime. Это приведет к неправильному перемещению последних файлов.
Адриен М.
@AdrienM. - это правда. по большому счету, однако, каждый здравомыслящий fs, с которым я вступаю в контакт, использует relatimeвместо этого. from man mount:: relatimeобновить время доступа к индоду относительно времени изменения или изменения. Время доступа обновляется только в том случае, если предыдущее время доступа было раньше, чем текущее время изменения или изменения. (Аналогично noatime, но это не нарушает работу muttдругих приложений, которым необходимо знать, был ли файл прочитан с момента последнего изменения.) И в любом случае использовать -mи -mtimeдля работы с modtime. или что угодно.
mikeserv
Он не отвечает на часть вопроса « и каталоги ». Для этого вам нужно пройтись по каждому .directory и проверить, что все файлы старше года.
naught101
6

Если вы являетесь пользователем вашей системы, вы можете использовать функцию ядра аудита, чтобы получить максимальную информацию о том, кто / когда / что получил доступ / создал / изменил файлы. посмотрите этот учебник для примеров со вкусом Debian

Если у вас нет root-доступа, вы можете использовать crontab или скрипт с бесконечным циклом + sleep для запуска файлов lsof & grep в вашем homedir. Смотрите man-страницу lsof . Тем не менее, он будет отображать только те приложения, которые имеют файловый дескриптор, открытый в момент запуска lsof. Если приложение откроет файл, отредактирует его, затем закроет, вы не увидите этого изменения в lsof.

один-лайнер, как это должно сделать работу: lsof -u $(id -u) 2>/dev/null |grep -P $HOME'/[^\s]*$'

Другой способ - использовать API ядра inotify для проверки доступа к файлу. Увы, это асинхронная система, и у вас не будет таких деталей, как «какое приложение», «когда именно», «какой пользователь». У вас будет только обратный вызов «этот файл был изменен / доступен ...». Некоторые приложения (Inotify, FAM, Gamin) предоставляет вам простой доступ к API

Адриен М.
источник
Я просто пытался использовать inotifyдля запуска lsof. Система просто слишком быстра, чтобы эта идея работала: процесс часто завершается или закрывает файл до запуска lsof. В некоторых случаях это все еще может работать, но, вероятно, очень мало.
Отей
AuditD Это единственная система, которая предоставляет вам все детали, ничего не упуская, так как использует определенный путь кода в ядре. Все остальные инструменты будут пропускать информацию, данные будут пропущены, поскольку процесс будет остановлен / закрыт fd.
Адриен М.
Согласовано. Я просто вставляю inotify в тест и подтверждаю, что он действительно не будет выполнять работу, требуемую здесь.
Отей
3

Вы можете искать atimeи удалять файлы, которые долгое время не использовались (при условии, что вы не настраивали свою систему так, чтобы она не использовалась atime), но это довольно рискованно (посмотрите tmpreaper, хотите ли вы пойти по этому пути).

Вместо этого я бы предложил Bleachbit , интерактивную программу с графическим интерфейсом для удаления хлама.

Радован Гарабик
источник