Отменить команду Linux Trash


24

Можем ли мы отменить операции, выполненные в терминале, например, удаление файла через rm?

Полученные решения:

  1. Aliasing
  2. Восстановить утилиты
  3. Утилиты резервного копирования
  4. LibTrash
  5. Управление версиями (FUSE)

1
Вкл . rm: Он отменяет связь с файлом inode. Вопрос: «Куда идут файлы при вводеrm команды» -> unix.stackexchange.com/questions/10883/… также может быть полезным для вас.
erch

Ответы:


62

Нет общего «отмены» для каждой операции в терминале. Если вы хотите восстановить файл после использования, rmвам нужно поискать программное обеспечение для восстановления.

Чтобы предотвратить возможные ошибки в будущем, нужно aliasуказать альтернативные команды для удаления файлов. Добавьте их к себе ~/.bashrcи получите привычку использовать их вместо rm.

  1. псевдоним rmi = 'rm -i'

    Если вы используете rmi, вам будет предложено подтвердить удаление в будущем. Старайтесь не развивать привычку нажимать yсразу после того, как вы выполните rmiкоманду, так как это победит цель.

  2. Вы также можете переместить файлы, удаленные trshкомандой в терминале, в вашу корзину (в KDE и Gnome):

    alias trsh='mv --target-directory="$HOME/.Trash"'
    

    Если вы используете trsh, у вас будет ограниченная возможность «восстановить». Остерегайтесь этого

    trsh dir1/file1 dir2/file1
    

    все еще может вызвать невосстановимую потерю данных.


3
+1 за гораздо лучший ответ, чем мой =)
How-To Geek

9
второй псевдоним очень, очень умный. +1.
LiraNuna

3
trash () {mv $ @ ~ / .Trash; } # функция bash, а не псевдоним. Изменение ожидаемого поведения rm - плохая идея, ИМХО.
Ричард Хоскинс

20
Риск с альясинга rmв rm -iтом , что вы привыкнете к сети безопасности , что она дает вам. Затем вы переходите на другую машину, у которой нет этого псевдонима ...
Dentrasi

3
По причинам, которые упоминают Ричард и Дентрази, я предпочитаю создавать пользовательские функции или псевдоним rmi-> rm -i. Это действительно ошибка - просто мешать существующей программе, создавая псевдонимы для нее.
Телемах

6

Для командной строки нет корзины.

Вы можете попробовать различные утилиты, но нет гарантии, что они будут работать.


Да, есть мусор для командной строки. Смотрите trash-cli в другом ответе.
Sparhawk

Trash-cli очень хорош :) и использует Trashlib, а не просто перемещает файлы.
m3nda

5

Вы можете использовать trash-cli, если вы используете KDE при запуске графического интерфейса. Это утилита командной строки для удаления / восстановления с использованием средств KDE.


1
trash-cli также работает с мусором GNOME и предназначен для обеспечения совместимости параметров rm (для псевдонимов).
Андреа Франсия

Не забудьте, alias rm=trashчто ваши типичные ошибки в командной строке идут с кнопками отмены.
Райан Томпсон

Я думаю, что alias rm=trashэто потенциально опасно, если есть шанс, что вы однажды будете использовать чужую систему и забудете (или ssh). Намного безопаснее просто привыкнуть к письму trashвместо rm.
Sparhawk

4

Вы можете сделать rmпсевдоним для trashкоманды ( trashсначала вам нужно будет установить .) Добавьте это к вашему ~/.bashrc:

alias rm='trash'

Это предпочтительнее, alias rm='mv --target-directory=$HOME/.Trash'поскольку ~ / .Trash НЕ является папкой для мусора для gnome. ИМХО лучше дать trashпонять, где находится папка с мусором.

Кстати, я бы написал это в комментарии, но мне не хватает представителя.


5
+1 за "так как ~ / .Trash - это НЕ мусорная папка для gnome." Тем не менее, rm также не должен связываться с мусором. Вы должны просто использовать корзину вместо rm, если вы этого хотите.
Нагуль

Правда, но для некоторых людей старые привычки тяжело умирают.
Элвин Роу

«rmtrash» - это еще один вариант.
Итачи

3

Еще два технических решения пока не названы:

  1. libtrash : динамическая библиотека, которая может быть предварительно загружена в вашу оболочку, которая перехватывает удаление / удаление системных вызовов и вместо этого перемещает файлы в корзину (во многом как псевдоним, но работает для любого приложения при предварительной загрузке).
  2. Файловая система управления версиями. Если вы удаляете (или редактируете, или копируете, или ...) файл, вы можете просто вернуться к старому состоянию. Это может быть сделано с файловой системой FUSE и одной из ее файловых систем управления версиями .

3

Здесь есть более крупный вопрос, который стоит рассмотреть. Команды оболочки не болтливы (они не проверяют дважды, что вы хотите), и они ожидают, что вы будете знать, что вы делаете. Это имеет основополагающее значение для их дизайна . Это особенность, а не ошибка.

Некоторые люди чувствуют себя мачо , когда они используют такие команды, которые я думаю , это довольно глупо, но это важно понимать опасность. Вы можете нанести большой урон в терминале, даже если вы не root. Я думаю, что вы, вероятно, действительно заботились rm, но так как вы сказали: «Можем ли мы отменить операции, выполняемые в терминале», я подумал, что это стоит сказать. Общий ответ - нет, вы не можете.


2

Вариант 1. См. Восстановление файлов Linux из файловой системы ext2 . Эта страница указывает на программу, написанную Себастьяном Хетце из компании LunetIX, которая (как следует из названия) восстанавливает недавно удаленные файлы из файловой системы ext2. Пример использования:

# undelete -d /dev/hdc3 -a 10

Предупреждения:

  • Оригинальный веб-сайт исчез. Ссылка выше на интернет-архив.
  • Сайты на английском и немецком языках.
  • Как указано выше, инструмент разработан специально для файловой системы ext2. Это вряд ли будет работать на любом другом типе файловой системы; особенно не другие , чем те , внутр N .

Вариант 2: у меня на компьютере работает rsnapshot (rsync), который ежечасно делает снимки выбранных папок. Он постепенно делает это каждый час, 2 часа или все, что вы скажете CRON. После целого дня он перерабатывает эти снимки в один ежедневный снимок, а через 7 дней в неделю, и так далее, и так далее. Это позволяет мне возвращаться во времени примерно на месяц или около того на каждый час! Это довольно хорошо с дисковым пространством, поскольку он создает символические ссылки на файлы, которые никогда не менялись ...


Просто чтобы уточнить, # 1 специфичен для файловых систем ext2. Это не будет работать на файловой системе ext3.
Нагуль


1

Для ext2 существуют утилиты для восстановления, но большинство других файловых систем Linux застряли в каменном веке и не имеют каких-либо расширенных функциональных возможностей. Печальное положение дел, когда гигантские диски имеют достаточно места, чтобы никогда больше не удалять файл, являются обычным явлением.

Итак, вы застряли с тремя вариантами:

  1. Регулярно делайте резервное копирование, например, с помощью такой команды:

    rsync -axvRP --backup --backupdir=/backup/incr/$(date -I) /home/ /backup/root/

  2. Используйте инструмент контроля версий, например, gitдля всей вашей работы. Хотя это не защитит от сумасшедшего rm -r, убивающего хранилище, оно защитит от обычных неприятностей, так как вы будете использовать git rmне сырье rm.

  3. Будьте предельно осторожны и не доверяйте слишком многим rm -i, trash-cliдрузьям, так как большую часть данных, которые вы потеряете в оболочке, вы потеряете не случайно rm, а из-за неверно перенаправленных каналов, ошибочно набранных выходных файлов, неверного направления mvи прочего, т. Е. Вещей, которые будут перезаписаны ваши данные, а не просто удалить их.

Сделайте все три для максимальной безопасности.


Довольно забавно называть ext2 современным. Более новые файловые системы используют более сложные форматы на диске, чем ext2 / 3, и им пришлось отказаться от мест, где легко найти файлы, которые можно удалить. Они предназначены для людей, которые делают резервные копии вещей, которые им небезразличны. Кстати, я всегда использую mv и cp -i, так как обычно я не хочу ничего обмывать. Обычно я набираю \ rm, потому что я тоже имею псевдоним rm -i, но я не хочу отвечать на его вопрос.
Питер Кордес

0

отметьте это ... может быть полезным http://artmees.github.io/rm/

Предположим, вы сделали

rm very_important_file

из терминала. восстановление этого файла - утомительный и не всегда успешный процесс

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

rm very_important_file
mv very_important_file ~/.Trash/

эквивалентны. скрипт обрабатывает больше случаев и не изменяет вашу систему rmвообще, потому что он помещается в локальную папку bin пользователя, поэтому он затеняет системный rm, но не влияет на него и не отключает его использование

это усовершенствованный подход к псевдонимам, но без потери какой-либо функции


1
Было бы хорошо, если бы вы могли добавить некоторые объяснения относительно того, что это делает и как это относится к вопросу, возможно, добавить пример и т. Д.
slhck


0

Для меня (opensuse leap 42.2, NTFS pendrive) PhotoRec - также testdiskсоздателями - работал :) Однако он не восстановил имена файлов.

PhotoRec - это программа для восстановления файловых данных, предназначенная для восстановления потерянных файлов, включая видео, документы и архивы, с жестких дисков, компакт-дисков и потерянных изображений (отсюда и название Photo Recovery) из памяти цифровой камеры. PhotoRec игнорирует файловую систему и работает с исходными данными, поэтому он все равно будет работать, даже если файловая система вашего носителя была серьезно повреждена или переформатирована.

Я установил его, используя стандартные репозитории в openSUSE

инструкция


1
Добро пожаловать в Супер пользователя! Пожалуйста, прочтите Как рекомендовать программное обеспечение для получения минимальной необходимой информации и предложений о том, как рекомендовать программное обеспечение для Super User. Чтобы ваш ответ был полезным, даже если приведенная ссылка не работает, эти данные следует отредактировать в вашем ответе.
Я говорю, восстановите Монику
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.