У меня есть символическая ссылка с этими разрешениями:
lrwxrwxrwx 1 myuser myuser 38 Aug 18 00:36 npm -> ../lib/node_modules/npm/bin/npm-cli.js*
Симлинк находится в архиве .tar.gz. Теперь, когда я распаковываю архив tar.gz, используя maven, символическая ссылка больше не действительна. Поэтому я пытаюсь восстановить символическую ссылку. Сначала я создаю символическую ссылку с помощью ln, но как мне установить те же разрешения, что и у исходной символической ссылки?
Когда вы пытаетесь использовать
chmod
для установки разрешений ссылки, на самом деле вы устанавливаете разрешения цели ссылки. Разрешения ссылки не имеют смысла.источник
test
с-rw-rw-r-- root root
, для которогоrm test
я получаю приглашениеrm: remove write-protected regular empty file 'test'?
Решение состоит в том, чтобы поместить конфиденциальные файлы в каталоги, для которых пользователи имеют доступ только для чтения.Когда у вас есть ссылка, как:
и хочу изменить это на:
Есть два случая для рассмотрения:
foo/bar
не является каталогом или не существует, или у вас нет доступа к поискуfoo
. затемпотерпит неудачу, потому что
link
уже существует, но вы можете преодолеть это, используя стандарт:foo/bar
каталог (и у вас есть разрешение на поиск,foo
чтобы определить, чтоfoo/bar
это каталог). В том случае, когда вы делаете:или
Это понимается как создание новой
target
символической ссылки внутриlink
каталога (link
это каталог, потому что это символическая ссылка наfoo/bar
каталог). Итак, вы на самом деле создадите:Чтобы преодолеть это, в GNU
ln
есть-T
возможность, чтобы имя ссылки всегда рассматривалось как имя ссылки, а не как каталог для создания ссылки (ей). Итак, с GNUln
:буду работать. Как и раньше, он удалит исходную
link
символическую ссылку и создаст ее заново,new/target
указав в качестве цели (а также euid и egid процесса в качестве владельца).У GNU
ln
также есть-n
опция. Он работает так,-T
за исключением случаев, когдаlink
фактически является реальным каталогом, и в этом случае он все равно будет создавать символическую ссылку внутри этого каталога (вместо сбоя с ошибкой).Как правило, лучше всего сначала удалить ссылку, а затем воссоздать ее:
В большинстве систем разрешения для символических ссылок игнорируются и обычно фиксируются на
rwxrwxrwx
.В системах, где разрешения символической ссылки имеют значение (например, OS / X, где вам нужно разрешение на чтение символической ссылки, чтобы иметь возможность разрешить ее цель), обычно есть способ изменить их (
chmod -h
в OS / X).Владение, хотя, как и выше, не имеет отношения к доступу к файлу, на который указывает символическая ссылка, в большинстве систем, может иметь какую-то другую значимость по отношению к
t
битам родительского каталога или квот ... ), и есть стандартная команда для его изменения:источник
Если вам действительно нужно изменить разрешение символических ссылок (как правило, бессмысленно, как написано в других ответах), я успешно использовал
-R
параметрchown
:Если
-R
не был использован, разрешения не были изменены.источник
chown
потому что-R
подразумевается-P
там, однако это не гарантировано и не будет работать в некоторых других реализациях chown. Стандартный способ изменить владельца символической ссылки с помощью-h
опции. Я только что обновил принятый ответ, который был неверным.