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

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

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

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

  • Поиск файлов в соответствии с метатегами PNG
  • Основной / младший номер устройства для удаленной файловой системы
  • Поведение Rsync с измененными файлами
  • Как перемещать все файлы (исключая подкаталоги) из одного каталога в другой?
  • Невозможно прочитать файл / proc / pid / stack даже с соответствующими разрешениями
  • Полный путь в glob в Zsh
  • Почему файлы иногда меняются, но не являются inode или наоборот?
  • Почему ошибки OS X `install` на перенаправленном входе, когда одна и та же версия` install` на linux работает нормально?
  • 4 Solutions collect form web for “Редактирование файла без разрешения перезаписи”

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

    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 это лучшее, что вы можете сделать. Другого решения нет.

    Linux и Unix - лучшая ОС в мире.