1

Есть ли способ проверить, что было недавно удалено с помощью команды rm ?

4 ответа4

3

Несколько разных решений

Журнала нет, но если хотите ...

Следите за удаленными записями и войдите

Вы можете использовать библиотеки inotify в рекурсивном режиме и в режиме мониторинга :

inotifywait -e delete --timefmt %c --format '%T %_e %w %f' -r -m / >/path/logfile
Setting up watches.  Beware: since -r was given, this may take a while!
Watches established.
Fri Jul 19 11:57:39 2013 DELETE /tmp/ testfiletodelete
Fri Jul 19 11:57:46 2013 DELETE /home/user/ testfiletodelete

Это системный подход: все пользователи, все каталоги и подключенные точки ...

Предупреждение, что это может быть немного излишним, внимательно прочитайте справочную страницу и добавьте некоторые опции, такие как --exclude

Команда Patch rm

Вы можете добавить что-то в свой .bashrc ...

Преобразуйте rm из delete для перехода в корзину

mkdir -p $HOME/.Trashcan
rm() {
    local destdir=$(mktemp -d $HOME/.Trashcan/trash-XXXXXXXXX);
    mkdir $destdir/files
    echo $0 $@ >$destdir/command
    set >$destdir/environ
    mv -t $destdir/files $@
} 

Таким образом, каждый раз, когда вы нажимаете rm в вашем bash, файлы будут перемещаться в каталог, команда и окружение также будут сохраняться.

Поскольку каждый rm будет создавать новый каталог с правильной датой, нет необходимости использовать date .

Добавление шага журнала в команду rm .

Но если вы просто хотите записать свою операцию, на рычаге пользователя:

rm() {
   date >>$HOME/.rm.log +"%a %d %b %Y %T: rm $@"
   /bin/rm $@
}

мог бы сделать работу.

Нота 1

Как правильно сказал @slhck: переопределение обычных команд может создать плохую практику для новых пользователей, поэтому, если вы изменяете такие стандартные команды, вы не должны забывать об этом, когда работаете в другой системе!

Nota 2

В этом патче только команда rm запускаемая интерактивной пользовательской оболочкой. Вы можете отредактировать /etc/bashrc для создания их для всех пользователей, но это может повлиять только на инструменты bash .

Если файлы удаляются с помощью unlink в perl для примера, это не будет зарегистрировано этим.

Или даже если вместо bash вызывается ksh , dash или другое ... нет логов.

Nota 3

Для доступа к исходной команде вместо alias или персональной function необходимо указать полный путь: /bin/rm myfile удалит myfile но, минуя функцию rm , ничего не будет зарегистрировано.

3

Если это вы случайно удалили файлы и ваша оболочка поддерживает историю, вы можете вывести историю обратно так:

history | grep rm

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

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

Но на самом деле, как предлагают другие ответы, нет журнала. Просто средство сканирования поверхности на предмет удаленных, еще не перезаписанных файлов.

Кстати, используя файловую систему Copy-on-write, такую как ZFS или btrfs, вы можете отслеживать удаленные файлы между "состояниями" накопителя во времени, которые называются моментальными снимками.

Вы можете запустить задачу cron с необходимой детализацией по времени, чтобы обеспечить наличие достаточно недавнего снимка, а затем провести различие между снимком и текущим состоянием.

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

0

Нет. К сожалению, такого журнала нет. Однако существует несколько инструментов для восстановления удаленных файлов.

0

Нет, такого журнала нет. То, что удалено, просто удалено.

Если у вас есть резервные копии, вы можете сравнить файлы в резервной копии с файлами, которые в настоящее время находятся на компьютере. Это даст вам список файлов, удаленных за промежуток времени между резервным копированием и сейчас.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .