Intereting Posts
инструменты редактирования потока: вывод, что очищается Как остановить apt от удаления пакетов при обновлении Как отслеживать вызовы системы после ввода команды? Не удалось подключить файловую систему UFS от Sparc Solaris до x86_64 Linux CentOS 7 – переименование сетевого интерфейса без перезагрузки Получить установочный файл для уже установленного RPM Используйте MC, MV, MA для копирования, вставки, выбора всех Может ли пользователь AIX, который появляется в etc / group, но не etc / passwd, все еще регистрируется на сервере? Довольно печатать в VIM? Куда идут сквозняки, когда мут падает? Восстановление текстового файла (known_hosts) Когда вы будете использовать дополнительный дескриптор файла? запустить хром без флеш-плагина Какие утилит нужны для начала разработки Android на Ubuntu? Как скрипт может выполнять привилегированные команды на удаленной системе без паролей sudo или ssh?

Редактирование файла без разрешения перезаписи

Можно ли установить разрешения для файла, чтобы он был доступен для редактирования, но без разрешения на перезапись?

Я имею в виду возможность редактировать файл с помощью текстового редактора, но отрицая любую попытку заменить файл путем перезаписи. Пользователь root . Я знаю, что это не общая структура разрешения файла unix, но я ищу сложный подход.

У меня есть пакет файлов, так как некоторые из них были отредактированы / настроены из исходной версии. При обновлении пакета с новой версией я хочу заменить любой нетронутый файл, но защищать настроенные файлы (не пропустить редактирование). В настоящее время я должен сделать это вручную: запись файла, который был отредактирован, а не заменен в новом обновлении.

Поскольку все пакеты будут пытаться полностью переопределить файл конфигурации, вы можете установить файл в режиме добавления только,

chattr +a bb

Таким образом, вы не можете удалить / усечь файл, просто добавьте его.

Но в этом случае вы остановите менеджера пакетов из системы обновления.

Если вы просто не хотите, чтобы менеджер пакетов переопределял ваши настроенные файлы, вы могли бы держать пакет на debian / ubuntu, вы могли бы сделать:

echo package-name hold | dpkg --set-selections

Таким образом, этот пакет не будет обновлен, ваши файлы сохранены.

Это зависит от того, что именно означает «перезаписать». Если это означает изменение данных существующего файла, то это невозможно, потому что операционная система не имеет возможности отличить «редактирование» от «перезаписывания» – они оба изменяют данные файла. Если это означает удаление и создание нового файла с тем же именем (или переименование нового файла на это имя), это может быть достигнуто путем удаления разрешения на запись из каталога, содержащего файл. Очевидно, это применимо ко всем файлам в этом каталоге, но не к одному конкретному файлу.

Прежде всего, сделайте дег из важных файлов пакета. Затем обновите. После того, как вы установили новую версию, отмените сохранение в другом каталоге и откорректируйте файлы, которые вы редактировали с помощью новых пакетов. Таким образом, вы увидите, что новые файлы также не имеют важных вещей, которые нужно добавить / изменить (т. Е. Разработчики могут также внести изменения в файлы, которые вы редактировали, и эти изменения также должны быть сохранены. просто замените файлы new-from-new-package своими старыми изменениями, не проверяя сначала, если эти новые файлы не содержат новую важную информацию)

Как root:

 chattr +i foo.txt 

Затем попробуйте:

 vim foo.txt 

измените файл в vim и попытайтесь его сохранить.

Пример использования – chattr + i /etc/resolv.conf, так что ваш отвратительный сервис сетевого менеджера не перезаписывает его каким-то загрузочным файлом, который он получает из неправильно сконфигурированного домашнего / офисного маршрутизатора.

Вы можете отменить его:

 chattr -i foo.txt 

В модели файловой системы Linux это лучшее, что вы можете сделать. Другого решения нет.