Есть ли способ проверить, что было недавно удалено с помощью команды rm
?
4 ответа
Несколько разных решений
Журнала нет, но если хотите ...
Следите за удаленными записями и войдите
Вы можете использовать библиотеки 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 Bash 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
, ничего не будет зарегистрировано.
Если это вы случайно удалили файлы и ваша оболочка поддерживает историю, вы можете вывести историю обратно так:
history | grep rm
Конечно, вам нужно выполнить проницательный поиск по истории, чтобы узнать, где вы удалили файл.
Если это был другой пользователь, возможно, его / ее ~/.bash_history
или подобный файл (для любой оболочки, которую использует пользователь) может иметь эту информацию, если они не удалили ее оттуда.
Но на самом деле, как предлагают другие ответы, нет журнала. Просто средство сканирования поверхности на предмет удаленных, еще не перезаписанных файлов.
Кстати, используя файловую систему Copy-on-write, такую как ZFS или btrfs, вы можете отслеживать удаленные файлы между "состояниями" накопителя во времени, которые называются моментальными снимками.
Вы можете запустить задачу cron с необходимой детализацией по времени, чтобы обеспечить наличие достаточно недавнего снимка, а затем провести различие между снимком и текущим состоянием.
Есть другой способ. Вы можете составить свой собственный гт двоичный, который делает сохранить следы того , что он это сделал.
Нет. К сожалению, такого журнала нет. Однако существует несколько инструментов для восстановления удаленных файлов.
Нет, такого журнала нет. То, что удалено, просто удалено.
Если у вас есть резервные копии, вы можете сравнить файлы в резервной копии с файлами, которые в настоящее время находятся на компьютере. Это даст вам список файлов, удаленных за промежуток времени между резервным копированием и сейчас.