Как остановить изменение прав доступа к файлам при сохранении документа в другой учетной записи пользователя?

Эта команда:

ln -sf abcd xyz

не перезаписывает содержимое xyzсодержимым abcd, как вы думаете. Символическая ссылка не является файлом, поэтому она не содержит никакого содержимого.

Если вы хотите временно связать xyzс abcd, не теряя при этом его содержимого, вам нужно каким-то образом сохранить содержимое.

  • Вы можете скопировать содержимое во временный файл. Думаю, для этого не нужна иллюстрация.
  • Вы также можете использовать память, то есть хранить содержимое в переменной.
  • Вы можете использовать жесткую ссылку.

Теперь я продемонстрирую последний. У вас есть abcdи xyz, как объяснено в вашем вопросе.

  1. Жесткая -связь xyzс zyx, чтобы содержимое сохранялось в zyx, позволяя вам управлять xyz.

    $ ln xyz zyx
    

    На данный момент xyzи zyxявляются двумя жесткими ссылками inode , содержащими данные xyz, как описано в вашем вопросе. Вы можете проверить это с помощью:

    $ cat zyx
    xyz
    
  2. Теперь, когда zyxна месте, вы можете принудительно связать xyzс abcd.

    $ ln -sf abcd xyz
    

    zyxпо-прежнему сохраняет символы xyz. Вы можете проверить это с помощью:

    $ cat zyx
    xyz
    

    В то время как xyzтеперь является программным -, связанным с abcd.Для проверки запустите это:

    $ cat xyz
    abcd
    
  3. Если вы хотите восстановить начальное состояние, повторно свяжите xyzс исходным содержимым. То есть перелинковать его с исходным индексным узлом.

    $ ln -f zyx xyz
    

    Чтобы проверить, работает ли:

    $ cat xyz
    xyz
    

    И теперь вы можете отвязать дополнительную жесткую -связь zyxс:

    $ rm zyx
    

    Или сохраните его для будущих операций. В любом случае xyzпо-прежнему содержит то, что было в начале.

    $ rm zyx
    $ cat xyz
    xyz
    

0
04.08.2019, 11:52
2 ответа

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

Чтобы обойти это (, если у программы нет очевидного способа изменить свое поведение ), сохраните файл под новым именем, а затем запустите

cat newname >oldname

, чтобы заменить содержимое старого файла(oldname)содержимым нового файла (newname). Он делает это, усекая и перезаписывая содержимое без создания нового файла. Метаданные, такие как разрешения и права собственности, не изменятся. Затем удалите newname.


Другим более очевидным решением является использование чего-то вроде gitили какой-либо другой системы контроля версий для совместной работы. Это позволило бы каждому пользователю извлекать свою собственную копию файлов локально, работать с ними, а затем возвращать их в центральный репозиторий. Владение и права доступа к файлам больше не будут проблемой,и вы получите возможность видеть, кто и когда вносил какие изменения (и откатывать изменения или разветвлять разработку на отдельные ветки ).

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

1
28.01.2020, 02:22

Если вы установите бит «set group id» (SGID )для каталога, файлы, созданные в каталоге, наследуют идентификатор группы каталога, а не идентификатор основной группы создавшего пользователя. Для новых подкаталогов также автоматически устанавливается бит SGID, поэтому вам не нужно делать это вручную; однако существующие подкаталоги должны быть изменены вручную.

2
28.01.2020, 02:22

Теги

Похожие вопросы