chown не меняет символическую ссылку


312

Я пытаюсь изменить пользователя / группу символической ссылки с помощью команды:

$ chown -h myuser:mygroup mysymbolic/ 

Но это не меняется. Я вошел как root. Текущий пользователь / группа имеет значение root: root. Что пошло не так?


Какую операционную систему вы используете? Согласно странице руководства, опция -h влияет только на системы, которые могут изменить владельца символической ссылки.
Jichao

Вы на монтировании NFS?
Ортомала Локни

Все, что заканчивается /каталогом. Вы имеете в виду mysymbolic, что это символическая ссылка, а не mysymbolic/каталог, на который она указывает.
Дэвид Шварц

Ответы:


381

Я поставил косую черту в конце цели:

chown -h myuser:mygroup mysymbolic/ 

просто убрал косую черту в конце и работает. Вот правильный путь:

 chown -h myuser:mygroup mysymbolic

9
не работает для меня на Ubuntu
Radek

2
Вау, это заняло у меня несколько часов, чтобы найти.
определяет

54
@Radek Это работало для меня в Ubuntu, пока я помнил -hфлаг.
IQAndreas

29
У меня работает на Ubuntu с -h и без косой черты.
Friederbluemle

8
Я не могу поверить, что через 4 года я столкнулся с тем, что в прошлом страдал от той же самой проблемы, скучаю "-h"!
Энтони д'Андреа

29

Я попробовал это сам, и это работает для меня. Если у вас есть ключ -h, он меняет владельца символической ссылки, но если нет, то он меняет владельца самого файла, а не ссылки.

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


2
Что бы это ни стоило, справочная страница в OS X намного понятнее в опции -h, чем в (Arch) Linux. «-H Если файл является символической ссылкой, измените идентификатор пользователя и / или идентификатор группы самой ссылки». «-H, --no-dereference влияет на символические ссылки вместо любого ссылочного файла (полезно только при системы, которые могут изменить владельца символической ссылки) »
Matijs

6

Я был не в chownсостоянии каталог даже с -hиспользованием полного пути работал.

# ls -al
drwxr-xr-x 2 deploy deploy 4096 Dec 30 10:29 .
drwxr-xr-x 3 deploy deploy 4096 Dec 30 08:59 ..
lrwxrwxrwx 1 root   root     32 Dec 30 09:02 apps -> /u/apps/
# chown -h deploy:deploy apps
# ls -al
drwxr-xr-x 2 deploy deploy 4096 Dec 30 10:29 .
drwxr-xr-x 3 deploy deploy 4096 Dec 30 08:59 ..
lrwxrwxrwx 1 root   root     32 Dec 30 09:02 apps -> /u/apps/
# chown -h deploy:deploy apps/
# ls -al
drwxr-xr-x 2 deploy deploy 4096 Dec 30 10:29 .
drwxr-xr-x 3 deploy deploy 4096 Dec 30 08:59 ..
lrwxrwxrwx 1 root   root     32 Dec 30 09:02 apps -> /u/apps/
# pwd 
/var/www/html
# chown -h deploy:deploy /var/www/html/apps
# ls -al
drwxr-xr-x 2 deploy deploy 4096 Dec 30 10:29 .
drwxr-xr-x 3 deploy deploy 4096 Dec 30 08:59 ..
lrwxrwxrwx 1 deploy deploy   32 Dec 30 09:02 apps -> /u/apps/

5

Является ли цель файлом или каталогом?

Если это каталог, тогда попробуйте -H (верхний регистр H)


целью является каталог

см. мой отредактированный ответ о справочнике

6
Извините за некромантию потока, но я хотел бы отметить, что правильный синтаксис - строчная буква h.


3

Восстановите эту ссылку myuser в доме myuser и передайте эту ссылку на целевое местоположение с помощью sudo.

Например: (как myuser), ln -s somedir/ linkname (будет неработающей ссылкой, если somedir / не существует в каталоге пользователя)

Затем sudo mv linkname targetlocation(станет действительной ссылкой при условии, что targetlocation/somedir/существует)


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

1

У меня была похожая проблема. Для меня я не мог chmod символическую ссылку, даже как root независимо от того, как я вызвал chmod. Чтобы запутать это, nautilus показывал владельца / группу как ничего. Владелец был просто пустым. Поэтому я попытался изменить символическую ссылку, используя nautilus, работающий от имени пользователя root, поскольку chmod не работал и nautilus аварийно завершил работу !!

Но я думаю, что понял проблему. Каталог, на который указывала символическая ссылка, имел другие права доступа, чем символическая ссылка. Поэтому я изменил целевой каталог (используя -h) на имя пользователя / группы. Затем chmod'ed символическую ссылку на то же самое, и это сработало! И просмотр информации о символической ссылке в nautilus (с правами root) теперь больше не дает сбоя.

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


1

Обратите внимание, что изменение ownerсимволической ссылки может работать только в том случае, если цель доступна для нового пользователя, которому вы хотите назначить ее.

Например, если ваша цель находится внутри папки, для которой пользователь, которому вы хотите назначить ее, не обладает достаточными правами, ln -s commandповедение таково, что она вообще ничего не будет делать.


1

Для Solaris (проверено на S11.3) для символической ссылки на каталог, который вам нужно будет запустить

root@ac11x017:/var/tmp$ ls -lal dumpdir
lrwxrwxrwx   1 root     root          16 Jun 15 09:08 dumpdir -> /data/dumpdir/
root@ac11x017:/var/tmp$ chown -RP oracle:oinstall dumpdir
lrwxrwxrwx   1 oracle   oinstall      16 Jun 15 09:09 dumpdir -> /data/dumpdir/
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.