Корзина в линуксе.

Как известно, ос линукс не имеет функции "корзины" для файловых систем. А это значит, что любой удаленный файл в системе больше не подлежит восстановлению. Исключение составляют лишь файловые системы ext2, но уже в файловой системе ext3 файл уже невозможно восстановить. Графические оболочки как Гном или КДЕ имеют свою собственную реализацию корзины, однако на уровне консоли эта корзина не действует. Как же решить эту проблему? Ведь случайно или по ошибке удаленные файлы, в следствие своих действий или действий программы иногда приносят немало смертей нервным клеткам владельца удаленных файлов. Можно конечно повышать самодисциплину – внимательно обдумывать каждое свое действие при удалении файлов. Можно пытаться использовать примочки для команды/программы rm, заменяя ее на нечто похожее команде mv, но это лишь припарки - они мало эффективны и помогают на уровне команд в консоли и скриптов которые используют rm для удаления файлов. Увы, но если вы работаете в mc или используете программу которая во время работы удаляет файлы, то примочки к rm уже не помогут. Потому что на программном уровне идет не обращение к программе rm, а обращение к функции ядра – unlink, которая удаляет файл. Ниже речь пойдет о программе recycled4linux. Эта программа состоит из двух частей: программа которая работает с корзиной и модуль для ядра. Ее модуль для ядра заменяет функцию unlink и не удаляет файл, а переносит в корзину, откуда уже в дальнейшем его можно удалить. Есть поддержка пользователей, квот, и прочих опций для удаляемых файлов.

{
Примечание автора:
Программа еще в стадии разработки (статус Бета) и поэтому могут быть проблемы. Так что если вы решите установить эту программу на сервер занятый важной задачей, то пеняйте на себя. Соответственно возможны security holes и прочие неприятные вещи. Пишу не для того что бы напугать, а для того что бы не было бессмысленного флуда о том что чем меньше всякого в ядре – тем лучше. Я лишь описываю проблему и одно из ее решений. Для тестирования и для пользования можно ставить на десктопе.
}

Официальный сайт проекта - http://shirka.org

Теперь речь пойдет об сборке этой программы.
Для сборки рекомендую использовать cvs версию так как в ней например есть поддержка ядра 2.6.7 (появилась после моих баг репортов).

Итак откройте ваш любимый терминал и впишите:
1.cvs -d:pserver:anonymous@cvs.shirka.org:/var/cvsroot login
2.cvs -z3 -d:pserver:anonymous@cvs.shirka.org:/var/cvsroot checkout recycled
3.cd recycled
4.make -f Makefile.cvs
5../configure --enable-debug --enable-kdebug ( + опции )
6.make
7.make install

Выше указанными действиями вы скачаете последнюю версию R4L, соберете ее (с опциями для дебага), а также проинcталлируете.
Программа требует исходники ядра для сборки, так как она создает модуль для ядра.

R4L использует конфигурационный файл (/etc/recycled.conf) для настройки.
Давайте же глянем что в нем прописано.

[General]

# Name of recycled directory
{
Название папка для корзины.
Если у вас есть mount point то в каждом смонтированном разделе будет использоваться папка корзины.
!!! Также незабудьте создать папку для корзины, поскольку автоматически папка не создается !!!
# mkdir /.recycled
}
Recycled_Name = .recycled

# Apply default configuration for this users
{
Использовать стандартную конфигурацию для ниже указанных пользователей.
}
#Users = duclos, root

# or use this syntax for apply for all users
{
Можно также указать *All_Users* для применения параметров для всех пользователей.
}
Users = *All_Users*

# Protect dangerous root user
{
Защищать опасного суперпользователя.
}
Root_Protected = Yes

# Root don't protect these filesystem types
{
Не использовать корзину для ниже указанных файловых систем.
}
FS_Type_Exclude = proc, usbfs, usbdevfs, devfs, devpts, tmpfs

# mkdir UID dir in recycled directory
# example :
# mkdir /.recycled/501 for fist user (501 is uid of first user on Linux Mandrake)
# mkdir /.recycled/502 for second user (502 is uid of second user on Linux Mandrake)
# mkdir /.recycled/0 for root user (0 is uid of root user on all Linux)
{
Использовать номер пользователя для удаленных файлов.
}
Append_UID = Yes

# General Quota
{
Использовать квоты для корзины.
}
Quota = On
Quota_Limit = 10%
Quota_Alert = 80%

# Laps time between two calls INIT script
InitTime = 1800s
# Laps time between two calls scripts
LapsTime = 30s

#
# Default configuration for all users
#
[Default]
{
Директории обрабатываемые r4l.
}
# Includes directories for recycled
# example :
# Includes = /bin:/usr/bin (absolutes paths)
# Includes = ~/Prj:~/Documents (relatifs paths to home directory of user)
Includes = ~/
{
Директории необрабатываемые r4l.
}
# Excludes directories for recycled
# Idem with Includes
Excludes = ~/tmp

{
Активировать сервис корзины.
}
# Yes : recycled is active
# No : recycles is not active
Active = Yes

{
Перемещать ли в корзину файлы нулевой длины.
}
# Yes : save zero size files
# No : don't save zero size files
Zero_Size = No

{
Сохранять ли скрытые файлы.
}
# Yes : save dot files
# No : don't save dot files
Dot_File = No

{
Сохранять ли скрытые директории.
}
# Yes : save files in dot dir
# No : don't save files in dot dir
Dot_Dir = No

{
Сохранять ли файлы меньше определенного размера.
}
# Don't save file with him size < Min_Size
# A value 0, ignore
# Prefix Kk (value * 1024), Mm (value * 1024 * 1024), Gg(value * 1024 * 1024 * 1024)
Min_Size = 0

{
Сохранять ли файлы больше определенного размера.
}
# Don't save file with him size > Max_Size
# A value 0, ignore
# Prefix Kk (value * 1024), Mm (value * 1024 * 1024), Gg(value * 1024 * 1024 * 1024)
Max_Size = 0

{
Квоты корзины.
}
# Quota
Quota = On
Quota_Limit = 10%
Quota_Alert = 80%
Quota_AddAlert = -10%

# Laps time between two calls INIT script
InitTime = 1800s
# Laps time between two calls scripts
LapsTime = 30s

{
Путь к скриптам r4l.
}
# Notify scripts
Script_Alert = /etc/recycled/alert.sh
Script_Limit = /etc/recycled/limit.sh

После настроек конфигурации можно приступить к запуску сервиса.
После инсталляции r4l создает в init.rc свой сервис. Для red-hat (rh..fc) можно для запуска использовать команду service recycled start, а для остановки service recycled stop. Ну а после запуска можно проверить работу корзины.

Изображение пользователя Pavel19.

Спасибо

Однозначно полезная  инфа!

честно говоря,

честно говоря, никогда таких проблем не возникало
этож надо написать rm, потом путь к файлу, до этого уже 10 раз поймешь, что надо удалять, а что нет
к тому же, есть такая штука - архивация, еще лучше, если она автоматическая
здесь уже 100% ничего важного не пропадет

Автору спасибо

Автору спасибо очень познавательно

Спасибо,

Спасибо, очень интересно.

Изображение пользователя den2007.

Привык без корзины

Нужная вещь, но 100% надежды на корзину быть никогда не должно. И восстанавливаются они как? Уж поделитесь опытом. Хранит ли корзина пути? Или угадай что откуда?

Сам ставить не хочу, привык я уже без корзины, да и в KDE у меня настроено так, чтоб можно было удалять минуя корзину. По опыту работы в Windows, корзина вечно копится и не чистишь, пока система не напомнит о том, что места не осталось зарезервированного под корзину, потом чистишь и удивляешься чего этот хлам столько валяется.

А после того, как удалишь что-то нужное по ошибке, дисциплинированность возрастает многократно.

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

Угробить файл можно не только удалением, банально перезаписав и корзина не спасёт,
А работая в консоли от имени рута можно угрохать вообще всю систему еще быстрее, чем сказать УПС и не обязательно удалять файлы.
Недавний пример, писал программу, хотел права рекурсивно поменять в каталоге конфигурационных файлов программы, поменял... и... поменял все права в /etc, в общем смотреть надо было в каком каталоге находился, прежде чем что-то делать.

Для сохранения своих настроек в /etc

от случайных и не очень изменений давно придумали etckeeper. Это такая надстройка над git-ом, которая например, перехватывает установку аптом всех пакетов и дает возможность откатить изменения, если пакет оказался не рабочий...
Но, тут надо уметь пользоваться git. Впрочем тот, кто _пишет_ программы сделает себе огромный +, если научится им пользоваться.

Изображение пользователя Школяр.

Аха, точно!

у меня лично корзина отключена ВЕЗДЕ, и в КДЕ, и винде, именно потому что диск дороже хлама :)

А как в виндоус

А как в виндоус отключить корзину не подскажете?

Изображение пользователя Школяр.

Просто отключить

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

Спасибо! Выбрал

Спасибо! Выбрал независимую конфигурацию для всех дисков и на нужных отключил корзину.

Изображение пользователя Школяр.

Тема интересная

не столько реализацией (понятное дело, что при наличии энтузиазма и свободного времени можно приваять к linux и черта в ступе), сколько концептуально. С одной стороны давно уж глубоко почитаемый мной господин Яновский тонко подметил, что не каждый пользователь, даже после хорошего пинка и в тихую погоду, долетит до середины консоли. Но если уж долетел - то быстро научается там не нервничать, сдуру удалив нужных файлов, а просто их не удалять. И этой именно особенностью консольного бытия линуксовое сообщество гордится с особым прилежанием.
ОДНАКО - есть вторая сторона проблемы. Linux все чаще и шире обнаруживает свое присутствие в таких областях деятельности, как авиация, космос, ядерная энергетика, военное дело, то есть в областях деятельности человека, в которых безопасность поставлена на первое место. И один из уже общепринятых постулатов этой самой безопасности - возможность в системе немедленно отменить одно ошибочное действие без фатальных последствий (та самая корзина, аха!). Вот такой вот гоголь-моголь :)

Не думаю, что в описанных у школяра

областях, связанных с обработкой real-time событий вообще используется линукс... Там используются системы с определенным временем реакции на событие (что-то типа QNX)...
Но вот вам недавняя история с автором этого коммента...
У меня есть "большая флешка" (на 500 гб), на которой я храню свой хомяк. И тут срочно меня попросили ее дать для очень важного дела. Вспомнив, что там могут лежать мои ключи и пароли, я зашел в консоль и решил стереть хомяк... Короче, пришлось восстанавливать сначала домашний раздел с флешки, а потом уже снова стирать флешку.
Как говорится и на старуху бывает...
Так что сама идея подстраховки хороша, да реализация этого "велосипеда" требует явно большего продумывания, чем есть сейчас. Что стоит одно только создания "помойки" в корне системы! Какие тогда к черту квоты, если вы рискуете оставить систему без "кислорода"!

Спасибо

Спасибо интересный материал

Изображение пользователя Школяр.

black, сэр!

Я бы попросил без инсинуаций :) Если мы говорим про авиацию, или ядерную энергетику, то это вовсе не обязательно real-time. А про военное применение я и вовсе промолчу, это не обязательно красная кнопка ядерных боеголовок. Тут, как говориться, технология безоткатная, нажал так нажал. Так что вот так :)

Большое

Большое спасибо, очень интересно.