chown nie zmienia dowiązania symbolicznego

312

Próbuję zmienić użytkownika / grupę dowiązania symbolicznego za pomocą polecenia:

$ chown -h myuser:mygroup mysymbolic/ 

Ale to się nie zmienia. Jestem zalogowany jako root. Bieżący użytkownik / grupa jest ustawiona na root: root. Co poszło nie tak?


źródło
Z jakiego systemu operacyjnego korzystasz? Na stronie manaul opcja -h wpływa tylko na systemy, które mogą zmienić własność dowiązania symbolicznego.
Jichao
Czy jesteś na mountie NFS?
Ortomala Lokni
Wszystko, co kończy się na, /to katalog. Masz na myśli mysymbolic, który jest dowiązaniem symbolicznym, a nie mysymbolic/katalogiem, na który wskazuje.
David Schwartz,

Odpowiedzi:

381

Umieszczałem slash na końcu celu:

chown -h myuser:mygroup mysymbolic/ 

właśnie usunąłem ukośnik na końcu i działa. Oto poprawny sposób:

 chown -h myuser:mygroup mysymbolic
rizidoro
źródło
9
nie działa dla mnie na Ubuntu
Radek,
2
Wow, zajęło mi to godziny.
określa
54
@Radek Działa dla mnie na Ubuntu, dopóki pamiętałem -hflagę.
IQAndreas,
29
Działa dla mnie na Ubuntu z końcowym ukośnikiem -hi bez niego.
friederbluemle
8
Nie mogę uwierzyć, że po 4 latach wpadłem na siebie, cierpiąc na ten sam problem, tęsknotę -h!
Antony D'Andrea,
29

Próbowałem tego sam i to działa dla mnie. Jeśli masz opcję -h, zmienia ona właściciela dowiązania symbolicznego, ale jeśli nie, zmienia właściciela samego pliku, a nie łącza.

Ale wydaje się, że nie działa link symboliczny jest połączony z katalogiem

Arto Uusikangas
źródło
2
Pod względem wartości strona podręcznika w systemie OS X jest o wiele wyraźniejsza w opcji -h niż strona w (Arch) Linux. „-H Jeśli plik jest dowiązaniem symbolicznym, zmień identyfikator użytkownika i / lub identyfikator grupy samego łącza.” Vs. „-h, - brak dereferencji wpływa na dowiązania symboliczne zamiast na dowolny plik odniesienia (przydatne tylko w systemy, które mogą zmienić własność dowiązania symbolicznego) ”
Matijs,
6

Nie mogłem chownznaleźć katalogu nawet przy -hużyciu pełnej ścieżki.

# 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/
Steve Tauber
źródło
5

Czy cel jest plikiem czy katalogiem?

Jeśli jest to katalog, spróbuj -H (wielkie litery H)


źródło
celem jest katalog
zobacz moją zredagowaną odpowiedź na temat katalogu
6
Przepraszam za nekromancję wątku, ale chciałbym zauważyć, że poprawna składnia to mała litera „h”.
4

po prostu.

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

powinno wystarczyć i pracować!  

Aziz Zoaib
źródło
3

Odtwórz ten link przez myuser w domu myuser i prześlij ten link do lokalizacji docelowej przez sudo.

Na przykład: (jako mój użytkownik), ln -s somedir/ linkname (będzie niedziałający link, jeśli somedir / nie istnieje w katalogu użytkownika)

Następnie sudo mv linkname targetlocation(stanie się prawidłowym linkiem, targetlocation/somedir/istnieje)

Wangdong
źródło
Twoja odpowiedź jest bez szczegółów i trudna do zrozumienia. Rozważ zmianę swojej odpowiedzi, aby podać więcej szczegółów.
James Mertz
1

Miałem podobny problem. Dla mnie nie mogłem chmod link symboliczny nawet jako root, niezależnie od tego, jak nazwałem chmod. Aby dodać zamieszanie, nautilus pokazywał właściciela / grupę jako nic. Właściciel był po prostu pusty. Próbowałem więc zmienić łącze symboliczne, używając nautilusa działającego jako root, ponieważ chmod nie działał i nautilus się zawiesił !!

Ale myślę, że odkryłem problem. Katalog, na który wskazywał dowiązanie symboliczne, miał inne uprawnienia niż dowiązanie symboliczne. Więc przeskoczyłem do katalogu docelowego (używając -h) do nazwy mojego użytkownika / grupy. Następnie chmod'ed symboliczny link do tego samego i zadziałało! A przeglądanie szczegółów dowiązania symbolicznego w nautilusie (z uprawnieniami roota) nie powoduje już awarii.

Dlatego w przypadku innych osób mających podobny problem sprawdź uprawnienia do docelowego katalogu / pliku i upewnij się, że jest on zgodny z uprawnieniami, dla których ustawiasz dowiązanie symboliczne.

Cgrey
źródło
1

Pamiętaj, że zmiana ownerdowiązania symbolicznego może działać tylko wtedy, gdy cel jest dostępny dla nowego użytkownika, któremu chcesz go przypisać.

Na przykład, jeśli cel znajduje się w folderze, do którego użytkownik, do którego chcesz go przypisać, nie ma wystarczających uprawnień, ln -s commandzachowanie jest takie, że nic nie zrobi.

AnomaliaSmith
źródło
1

W przypadku systemu Solaris (zweryfikowanego w wersji S11.3) dla dowiązania symbolicznego do katalogu należy uruchomić

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
źródło