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
rizidoro
источник
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.
4

просто.

chown -h myuser:mygroup <symlink> [without trailing slash]

должно хватить и работать!  

Азиз Зоаиб
источник
3

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

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

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

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

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

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

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

cgrey
источник
1

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

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

AnomalySmith
источник
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/
RaamEE
источник