Эта команда:
ln -sf abcd xyz
не перезаписывает содержимое xyz
содержимым abcd
, как вы думаете. Символическая ссылка не является файлом, поэтому она не содержит никакого содержимого.
Если вы хотите временно связать xyz
с abcd
, не теряя при этом его содержимого, вам нужно каким-то образом сохранить содержимое.
Теперь я продемонстрирую последний. У вас есть abcd
и xyz
, как объяснено в вашем вопросе.
Жесткая -связь xyz
с zyx
, чтобы содержимое сохранялось в zyx
, позволяя вам управлять xyz
.
$ ln xyz zyx
На данный момент xyz
и zyx
являются двумя жесткими ссылками inode , содержащими данные xyz
, как описано в вашем вопросе. Вы можете проверить это с помощью:
$ cat zyx
xyz
Теперь, когда zyx
на месте, вы можете принудительно связать xyz
с abcd
.
$ ln -sf abcd xyz
zyx
по-прежнему сохраняет символы xyz
. Вы можете проверить это с помощью:
$ cat zyx
xyz
В то время как xyz
теперь является программным -, связанным с abcd
.Для проверки запустите это:
$ cat xyz
abcd
Если вы хотите восстановить начальное состояние, повторно свяжите xyz
с исходным содержимым. То есть перелинковать его с исходным индексным узлом.
$ ln -f zyx xyz
Чтобы проверить, работает ли:
$ cat xyz
xyz
И теперь вы можете отвязать дополнительную жесткую -связь zyx
с:
$ rm zyx
Или сохраните его для будущих операций. В любом случае xyz
по-прежнему содержит то, что было в начале.
$ rm zyx
$ cat xyz
xyz
Вероятно, программа, которую вы используете для редактирования файла, создает новый файл при его сохранении, заменяя старый файл. Вновь созданный файл всегда будет принадлежать создавшему его пользователю.
Чтобы обойти это (, если у программы нет очевидного способа изменить свое поведение ), сохраните файл под новым именем, а затем запустите
cat newname >oldname
, чтобы заменить содержимое старого файла(oldname
)содержимым нового файла (newname
). Он делает это, усекая и перезаписывая содержимое без создания нового файла. Метаданные, такие как разрешения и права собственности, не изменятся. Затем удалите newname
.
Другим более очевидным решением является использование чего-то вроде git
или какой-либо другой системы контроля версий для совместной работы. Это позволило бы каждому пользователю извлекать свою собственную копию файлов локально, работать с ними, а затем возвращать их в центральный репозиторий. Владение и права доступа к файлам больше не будут проблемой,и вы получите возможность видеть, кто и когда вносил какие изменения (и откатывать изменения или разветвлять разработку на отдельные ветки ).
Производственная проверка файлов может быть выполнена в производственной системе (с ), в то время как изменения вносятся на локальных машинах пользователей. Новая производственная копия будет проверена, когда тестирование покажет, что она работает должным образом (независимо от того, что вы делаете ).
Если вы установите бит «set group id» (SGID )для каталога, файлы, созданные в каталоге, наследуют идентификатор группы каталога, а не идентификатор основной группы создавшего пользователя. Для новых подкаталогов также автоматически устанавливается бит SGID, поэтому вам не нужно делать это вручную; однако существующие подкаталоги должны быть изменены вручную.