Раздел: Админство

Безопасное удаление файла в контекстное меню linux

Во многих дистрибутивах Linux в контекстном меню правой кнопки мыши реализованы пункты «переместить в корзину» и «удалить». Здесь мы рассмотрим возможность добавления в контекстное меню linux скриптов, основанных на т.н. безопасном удалении данных.

Различные файловые системы при штатном «удалении» файлов ведут себя по-разному, на этом останавливаться подробно мы не будем. Во многих случаях, «удаление» подразумевает под собой лишь удаление записи о наличии файла в файловой системе (установлении пометки о том, что пространство свободно), а не фактическое удаление данных. В связи с этим, существует как множество методов восстановления «удаленных» данных, так и множество методов «реального» удаления данных, которые сводятся, в основном, к различным алгоритмам многократной перезаписи (метод Гутманна, DoD, ГОСТ Р 50739-95 и прочие).

Собственно, существует ряд утилит, которые реализуют тот или иной подход удалении файлов. Например, утилиты из пакета secure-delete работают по Гутманну. Поскольку утилиты консольные, было бы удобно иметь их в контекстном меню.

Установка утилит:

sudo apt-get install secure-delete

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

gedit /home/Имя_пользователя/.gnome2/nemo-scripts/SRM
Собственно, последние две директории тоже могут отличаться в зависимости от того, какая стоит среда рабочего стола и файловый менеджер. В Linux mint 17 Cinnamon путь именно такой: среда gnome2, менеджер — Nemo. Вместо SRM можно вписать что угодно, именно так будет называться пункт в вашем контекстном меню. Для меня он понятен, поскольку в данном примере мы будем использовать утилиту srm.

В открывшемся редакторе пишем код скрипта, который будет выполняться при нажатии на пункт «SRM»:

#!/usr/bin/env bash

while [ $# -gt 0 ]
	do
    gnome-terminal -e "srm -rv '$1'"
    shift
	done

Код весьма простой: цикл нужен на случай, если выделено более одного объекта, чтобы подавать их на вход утилиты srm. Параметр -r указывает на рекурсивное выполнение, если выбрана папка, -v это verbose.
Конструкция gnome-terminal -e нужна для того, чтобы мы могли видеть выполнение скрипта в открывшемся окне терминала. Без нее скрипт будет работать в фоновом режиме, что лично мне доставляет большое неудобство, когда нельзя посмотреть «ну долго ещё там?». У кого терминал называется по-другому, пишут соответствующие названия и параметры (например, Xterm -e «…» итд).

Сохраняем файл и обязательно делаем его исполняемым, либо в свойствах файла по щелчку правой кнопкой мыши, либо:

chmod u+x /home/Имя_пользователя/.gnome2/nemo-scripts/SRM

Готово!

По аналогии можно сделать, например, Shred:

gedit /home/Имя_пользователя/.gnome2/nemo-scripts/SHRED40

вставляем:

#!/usr/bin/env bash

while [ $# -gt 0 ]
	do
    gnome-terminal -e "shred -ufvz -n 40 '$1'"
    shift
	done

(да, 40 раз перезапись это когда совсем страшно).

Делаем файл исполняемым:

chmod u+x /home/Имя_пользователя/.gnome2/nemo-scripts/SHRED40

Оба пункта будут в контекстном меню правой кнопки мыши в разделе «Scripts».

p.s. Shred не умеет работать с директориями.

Комментировать

Комментарии

двадцать − 1 =

  1. Здравствуйте!
    А как можно сделать так, чтобы можно было задействовать программу Secure-delete в Linux Mint 18 из контекстного меню? В Вашей статье описывается, как это сделать на практике в Linux Mint 17, но тут упоминается каталог
    /home/Имя_пользователя/.gnome2/nemo-scripts/ , а я у себя не нашёл такого…. Как всё сделать по методике, описанной в Вашей статье для Linux Mint 18?

    • Отвечаю сам себе, хех! Погуглил и нашёл имя каталога (может кому-то поможет, в Linux Mint 18 Cinnamon) — такой путь для скрипта:
      /home/Имя_пользователя/.local/share/nemo/scripts/Имя_скрипта

        • Спасибо!
          А ещё вопрос — всё сделал по Вашей методике, но выявился один неудобный момент, а именно, созданный сценарий в контекстном меню проводника Nemo не может безопасно (да и вообще никак) удалить файлы, находящиеся в корзине… Можно их, конечно, повосстанавливать и пошрёдить поотдельности, но если их много, и они из разных каталогов, то это делать не очень удобно… Можно ли как-то решить эту проблемку?
          И ещё одно наблюдение — если выделить несколько файлов в какой-нибудь папке для удаления и применить сценарий для безопасного удаления (если всю папку целиком удалять не хочу, а только некоторые файлы), то запустится соответствующее количество терминалов для безоп. удаления… Кажется, не удобно… Можно ли что-то оптимизировать в этой ситуации?
          Спасибо!

          • Здравствуйте!
            По поводу нескольких файлов чтобы удалялись в одном терминале, наверное, надо сделать xfce4-terminal -e "shred -ufvz %F" или gnome-terminal -e "shred -ufvz %F" в зависимости от графической среды. Да, вероятно, это удобнее для последовательного удаления файлов, мне просто приятно видеть одновременное удаление кучи файлов, чисто субъективно.
            К сожалению, shred не умеет удалять папки, поэтому можно воспользоваться прогой wipe (отдельно установить sudo apt-get install wipe) и сделать такой скрипт:
            xfce4-terminal -e "wipe -fr %F"
            -f это чтобы не спрашивал подтверждений, -r это рекурсивное удаление

            Про корзину не знаю так сходу )

  2. Добрый день!
    С Linux Mint Cinnamon и файловым менеджером Nemo всё понятно. А как быть в случае с KDE и файловым менеджером Dolphin. Можно ли как-то интегрировать в него эти скрипты и/или добавить действие в контекстное меню? Там это как-то по-другому делается… Самому как-то можно действие создать вроде, если по сети не находится соответствующее…