Скасуйте команду для сміття Linux


24

Чи можна скасувати операції, виконані в терміналі, наприклад, видалення файлу через rm?

Отримані рішення:

  1. Збудження
  2. Скасувати видалення утиліт
  3. Резервні утиліти
  4. LibTrash
  5. Версія (FUSE)

1
Увімкнено rm: від’єднує файл від нього inode. Питання: "Куди йдуть файли, коли rmкоманда видається" -> unix.stackexchange.com/questions/10883/… також може бути корисним для вас.
ерч

Відповіді:


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 за набагато кращу відповідь, ніж моя =)
The How-To Geek

9
другий псевдонім дуже-дуже розумний. +1.
LiraNuna

3
trash () {mv $ @ ~ / .Trash; } # функція bash, а не псевдонім. Зміна очікуваної поведінки rm - погана ідея, IMHO.
Річард Хоскінс

20
Ризик, пов'язаний зі споживанням, полягає rmв rm -iтому, що ви звикаєте до захисної сітки, яку вона вам дає. Потім ви переходите на іншу машину, у якої немає цього псевдоніма ...
Dentrasi,

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

6

Для командного рядка немає кошика.

Ви можете спробувати деякі з видалених утиліт, але немає гарантії, що вони працюватимуть.


Так, для командного рядка є сміття. Дивіться кошик для сміття в іншій відповіді.
Sparhawk

Trash-cli настільки хороший :) і використовує Trashlib, краще, ніж просто переміщувати файли.
м3нда

5

Ви можете використовувати trash-cli, якщо ви використовуєте KDE під час запуску gui. Це утиліта командного рядка для видалення / відновлення за допомогою сміття 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. Краще IMHO дозволити trashз'ясувати, де знаходиться фактична папка сміття.

btw Я б опублікував це в коментарі, але мені не вистачає представника.


5
+1 для "оскільки ~ / .Trash НЕ папка сміття для gnome." Однак, і rm не має бути чужим для сміття. Вам слід просто використовувати сміття замість rm, якщо це те, що ви хочете.
nagul

Щоправда, але для деяких людей старі звички важко вмирають.
Елвін Роу

'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.
nagul


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 modern. Нові файлові системи використовують більш складні формати на диску, ніж 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і це тому, що він поміщений у локальну папку бін користувача, щоб він затіняв систему rm, але все ж не впливав на неї та не вимикав її використання

це вдосконалений підхід, але не втрачаючи жодної функції


1
Було б добре, якщо ви можете додати пояснення щодо того, що це робить, і як це стосується питання, можливо, додати приклад тощо.
slhck


0

Для мене (openuse стрибок 42.2, NTFS pendrive) PhotoRec - також testdiskтворці - працював :) Однак він не відновив імена файлів.

PhotoRec - це програмне забезпечення для відновлення даних, призначене для відновлення втрачених файлів, включаючи відео, документи та архіви з жорстких дисків, компакт-дисків та втрачених фотографій (таким чином, ім'я відновлення фотографій) з пам'яті цифрової камери. PhotoRec ігнорує файлову систему та переходить за основними даними, тому вона все ще працюватиме, навіть якщо файлова система вашого медіа була сильно пошкоджена або переформатована.

Я встановив його за допомогою стандартних сховищ у OpenSUSE

інструкція


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