chownはシンボリックリンクを変更していません


312

次のコマンドでシンボリックリンクのユーザー/グループを変更しようとしています。

$ chown -h myuser:mygroup mysymbolic/ 

しかし、それは変わりません。私はルートとしてログインしています。現在のユーザー/グループはroot:rootに設定されます。何が悪かったのか?


どのオペレーティングシステムを使用しますか?manaulページに従って、-hオプションは、シンボリックリンクの所有権を変更できるシステムにのみ影響します。
Jichao

NFSマウントを使用していますか?
Ortomala Lokni

で終わるもの/はすべてディレクトリです。あなたは意味mysymbolicシンボリックリンク、されていない、mysymbolic/おそらくそれが指すディレクトリです。
デビッドシュワルツ

回答:


381

ターゲットの最後にスラッシュを入れていました。

chown -h myuser:mygroup mysymbolic/ 

最後にスラッシュを削除して動作します。正しい方法は次のとおりです。

 chown -h myuser:mygroup mysymbolic

9
Ubuntuで私のために動作しません
Radek

2
うわー、これを見つけるのに何時間もかかった。
定義されて

54
@Radek -hフラグを覚えていれば、Ubuntuでも機能しました。
IQAndreas

29
末尾にスラッシュを付け -hも付けなくても Ubuntu 動作ます。
friederbluemle 14

8
4年後、私は信じられません。同じ問題、ミスイン '-h'に苦しんでいる過去の自分にぶつかりました!
アントニー

29

私は自分でこれを試してみましたが、それは私のために機能します。-hを指定すると、シンボリックリンクの所有者が変更されますが、削除しない場合は、リンクではなくファイル自体の所有者が変更されます。

しかし、シンボリックリンクはディレクトリにリンクされているので機能していないようです


2
価値のあることとして、OS Xのmanページは、(h)Linuxのmanページよりも-hオプションのほうがはるかに明確です。「-hファイルがシンボリックリンクの場合、リンク自体のユーザーIDまたはグループID、あるいはその両方を変更します。」vs.「-h、-no-dereferenceは、参照されているファイルの代わりにシンボリックリンクに影響します(シンボリックリンクの所有権を変更できるシステム)」
Matijs 14

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によってターゲットの場所にmvします。

例:(myuserとして)、ln -s somedir/ linkname (somedir /がユーザーのディレクトリに存在しない場合、壊れたリンクになります)

次に、sudo mv linkname targetlocationtargetlocation/somedir/存在する場合は有効なリンクが提供されます)


あなたの答えは詳細がなく、完全に理解するのは困難です。詳細を提供するために回答を修正することを検討してください。
ジェームズメルツ

1

同様の問題がありました。私にとっては、chmodの呼び出し方法に関係なく、シンボリックリンクをルートとしてもchmodできませんでした。これに混乱を加えるために、nautilusは所有者/グループを何も表示していませんでした。所有者はただ空白でした。それで、chmodが機能せず、nautilusがクラッシュしたため、rootとして実行されているnautilusを使用してシンボリックリンクを変更しようとしました。

しかし、私は問題を理解したと思います。シンボリックリンクが指しているディレクトリには、シンボリックリンクとは異なる権限がありました。そこで、ターゲットディレクトリを(-hを使用して)ユーザー/グループ名にchmodしました。次に、同じものへのシンボリックリンクをchmodし、それが機能しました!また、nautilusでシンボリックリンクの詳細を表示(ルート権限を使用)してもクラッシュしなくなりました。

したがって、同様の問題を抱えている他のユーザーについては、ターゲットディレクトリ/ファイルのアクセス許可を確認し、シンボリックリンクを設定するアクセス許可と互換性があることを確認してください。


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/
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.