Здравствуй, дорогой читатель! Наверняка у тебя есть такие файлы с данными, потеря которых абсолютно нежелательна и ты хотел бы защитить такие файлы от случайного удаления. Особенно это актуально для тех кто только осваивает систему Ubuntu и много экспериментирует с терминалом и различными утилитами и командами. Конечно можно воспользоваться командой chmod, чтобы установить права на изменение файла только определенным пользователям, но это не спасет от случайного удаления файла от имени суперпользователя.

Для файловых систем семейства ext* (ext2, 3, 4) существует программный пакет e2fsprogs в состав которого входит утилита chattr, которая позволяет управлять атрибутами файлов. И использование данной утилиты поможет сделать файл действительно защищенным от удаления либо перезаписи данных, ведь удалить или изменить его не сможет даже суперпользователь.

Пакет e2fsprogs поставляется вместе со сборкой Ubuntu и не требует отдельной установки, но если он по какой-либо причине отсутствует в системе — установить его можно с помощью команды:

sudo apt install e2fsprogs

Итак, с помощью утилиты chattr мы будем устанавливать на файл атрибут «i» — неизменяемый.

Откроем терминал и попробуем создать файл и установить на него атрибут неизменяемого:

Создадим пустой файл:

touch file.ext

Установим атрибут:

sudo chattr +i ./file.ext

Теперь попробуем удалить файл:

rm ./file.ext

Ответ в терминале:

rm: невозможно удалить './file.ext': Операция не позволена

Попробуем удалить файл от имени суперпользователя:

sudo rm ./file.ext

Ответ все тот-же:

rm: невозможно удалить './file.ext': Операция не позволена
Также, если попробовать открыть файл в любом редакторе, при попытке его сохранить мы получим отказ:

Для того, чтобы снова разрешить изменение файла нужно снять поставленный атрибут:

sudo chattr -i ./file.ext

Таким образом можно защитить не только файл, но и целый каталог вместе со всеми вложенными в него файлами:
$ mkdir ./test
$ touch ./test/file.ext
$ sudo chattr +i ./test/
$ sudo rm ./test/file.ext
rm: невозможно удалить './test/file.ext': Операция не позволена

Если необходимо проверить, установлен ли на файле либо каталоге атрибут, то можно воспользоваться командой:

lsattr ./file.ext

----i---------e--- ./file.ext