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

22822
cdb

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

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

  1. Aliasing
  2. Восстановить утилиты
  3. Утилиты резервного копирования
  4. LibTrash
  5. Управление версиями (FUSE)
23
На `rm`: он * отменяет связь * файла с его` inode`. Вопрос: «Куда идут файлы, когда выдается команда` rm` »-> http://unix.stackexchange.com/questions/10883/where-do-files-go-when-the-rm-command-is Выданный также может быть хорошим чтением для вас. erch 10 лет назад 1

12 ответов на вопрос

61
John T

Нет общего «отмены» для каждой операции в терминале. Если вы хотите восстановить файл после использования, 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 

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

+1 за гораздо лучший ответ, чем мой =) The How-To Geek 15 лет назад 3
второй псевдоним очень, очень умный. +1. LiraNuna 15 лет назад 9
Как вы делаете это на Mac? ~. / Trash - это мусор, но у mv нет переключателя целевого каталога ... Rich Bradshaw 15 лет назад 0
@Rich: вы можете определить функцию: rm () mouviciel 15 лет назад 1
trash () # функция bash, а не псевдоним. Изменение ожидаемого поведения rm - плохая идея, ИМХО. Richard Hoskins 15 лет назад 3
Да, я бы не перегружал rm - думаю, он не поддерживает флаги -r или -f, поэтому он не идентичен. Rich Bradshaw 15 лет назад 0
Риск наложения псевдонима `rm` на` rm -i` состоит в том, что вы привыкаете к системе безопасности, которую он вам дает. Затем вы переходите на другую машину, у которой нет этого псевдонима ... Dentrasi 15 лет назад 19
По причинам, которые упоминают Ричард и Дентрази, я предпочитаю создавать пользовательские функции или использовать псевдоним `rmi` ->` rm -i`. Это действительно ошибка - просто мешать существующей программе, создавая псевдонимы для нее. Telemachus 15 лет назад 3
Я бы не рекомендовал использовать псевдоним `rm` как безопасное или хорошее решение, особенно псевдоним` mv`. Это просто способствует ложной безопасности. Как вы думаете, что происходит, когда вы удаляете `file1` в` dir1`, а затем `file1` в` dir2`? Это также не сработает для таких людей (или сценариев), как я, которые привыкли запускать `\ command` вместо` command`. Вы должны явно рекомендовать использовать команду типа `trsh` /` trash` или `rm`, если требуется возможность восстановления. nagul 15 лет назад 1
Люди, кажется, немного взволнованы по поводу алиасинга. Когда я использую систему других лиц, первое, о чем я думаю, это то, что все мои маленькие программы и ярлыки пропали, поэтому для меня это не проблема. Но я буду редактировать. John T 15 лет назад 2
@John: не большое дело, но, говоря, что мы «взволнованы», мы звучим как потерянные туристы. Мы не согласны с вашим оригинальным методом, и мы привели причины, почему. Там нет волнений. (Тем не менее, я удалил свое downvote, так как вы переключились на rmi. Спасибо за серьезное рассмотрение комментариев.) Telemachus 15 лет назад 1
@ Джон: Спасибо за редактирование. Надеюсь, это подтолкнет людей в правильном направлении. +1 от меня. nagul 15 лет назад 0
Я бы также не рекомендовал `rm -i`, не из-за других систем, а просто потому, что он научил вас действительно быстро нажимать` y` после того, как вы вызвали `rm`. Таким образом, это не обеспечивает никакой дополнительной безопасности, так как большую часть времени вы поймете, что через секунду после того, как нажмете `y`, это не было хорошей идеей. Grumbel 15 лет назад 1
я здесь с grumbel: избегайте псевдонима 'rm -i', потому что вы быстро выработаете привычку нажимать 'y' .. просто автоматически. функция trash () намного умнее. у меня / tmp установлен как tmpfs (ramdrive) .. поэтому я указываю мой мусор () в направлении / temp. если я допустил ошибку, я восстановил бы это .. если нет, следующая перезагрузка сотрет все это. есть ограничение по размеру для того, что вписывается в эти «трахи» явно :) akira 15 лет назад 0
У меня всегда есть псевдонимы rm, mv и cp для добавления -i. Это наиболее полезно для mv и cp, потому что вы, как правило, не хотите ничего с ними стучать. Никогда не заводите rm *, а затем отвечайте да / нет. Как уже говорили другие, однажды этой сети безопасности не будет, и вы пожалеете об этом. Peter Cordes 14 лет назад 1
6
The How-To Geek

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

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

Да, есть мусор для командной строки. Смотрите trash-cli в другом ответе. Sparhawk 10 лет назад 0
Trash-cli очень хорош :) и использует Trashlib, а не просто перемещает файлы. erm3nda 8 лет назад 0
5
joe

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

trash-cli также работает с мусором GNOME и предназначен для обеспечения совместимости параметров rm (для псевдонимов). Andrea Francia 14 лет назад 1
Не забудьте `alias rm = trash`, так что ваши типичные ошибки в командной строке идут с кнопками отмены. Ryan Thompson 14 лет назад 0
Я думаю, что `alias rm = trash` потенциально опасен, если есть шанс, что вы однажды будете использовать чужую систему и забудете (или ssh). Намного безопаснее просто привыкнуть писать `trash` вместо` rm`. Sparhawk 10 лет назад 0
4
Alvin Row

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

alias rm='trash' 

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

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

+1 за "поскольку ~ / .Trash НЕ является папкой для мусора для gnome." Тем не менее, rm также не должен связываться с мусором. Вы должны просто использовать корзину вместо rm, если вы этого хотите. nagul 15 лет назад 5
Правда, но для некоторых людей старые привычки тяжело умирают. Alvin Row 15 лет назад 0
«rmtrash» - это еще один вариант. Itachi 9 лет назад 0
3
Telemachus

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

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

3
joschi

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

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

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

# undelete -d /dev/hdc3 -a 10 

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

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

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

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

Восстановление с помощью grep on /dev/partition( Linux или Unix Восстановление удаленных файлов - восстановление файлов ),

grep -b 'search-text' /dev/partition > file.txt 

Просто попробуйте.

1
Grumbel

Для 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, но не хочу отвечать на его вопрос. Peter Cordes 14 лет назад 0
0
a14m

check this ... migh be helpful http://artmees.github.io/rm/

suppose you did

rm very_important_file 

from the terminal. recovering this file is a tedious and not always successful process

instead if you used the script mentioned up. you don't have to worry about this because

rm very_important_file mv very_important_file ~/.Trash/ 

are equivalent. the script handles more cases and doesn't alter your system rm at all and that is because it's put into the user local bin folder so it shadows the system rm and yet doesn't affect it or disable using it

this is a refined aliasing approach but without losing any feature

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

Похожие вопросы