次の権限を持つシンボリックリンクがあります。
lrwxrwxrwx 1 myuser myuser 38 Aug 18 00:36 npm -> ../lib/node_modules/npm/bin/npm-cli.js*
シンボリックリンクは.tar.gzアーカイブにあります。 mavenを使用してtar.gzアーカイブを解凍すると、シンボリックリンクは機能しなくなりました。だからシンボリックリンクを書き直そうとしています。まず、次のようにシンボリックリンクを作成します。なぜならしかし、元のシンボリックリンクと同じ権限を設定するには?
答え1
新しいシンボリックリンクを作成して、以前のリンク位置に移動できます。
ln -s <new_location> npm2
mv -f npm2 npm
これによりリンクの所有権が維持されます。または、chown
リンクの所有権を手動で設定することもできます。
chown -h myuser:myuser npm
ほとんどのシステムでは、シンボリックリンク権限は重要ではありません。シンボリックリンクを使用すると、シンボリックリンクのターゲットコンポーネントに対する権限が検証されます。しかし、一部のシステムでは重要です。 MacOS ではリンクに対する読み取り権限が必要ですreadlink
が、NetBSD のsymperm
マウントオプションは読み取りとナビゲーションの両方に対してリンク権限を強制的に確認します。これらのシステム(およびFreeBSDとOpenBSDを含む関連システム)に-h
。chmod
chmod -h 777 npm
答え2
リンクに対して権限設定を使用しようとしている場合、chmod
実際に行うことはリンク先の権限を設定することです。リンクされた権限は意味がありません。
答え3
次のリンクがある場合:
link -> foo/bar
次のように変更したいと思います。
link -> new/target
考慮すべき2つの状況があります。
foo/bar
ディレクトリが存在しない、存在しない、または検索権限がありませんfoo
。それからln -s new/target link
既に存在するため失敗します
link
が、標準を使用してこの問題を克服することができます。ln -fs new/target link
foo/bar
はディレクトリです(あなたにはfoo
これがfoo/bar
ディレクトリであることを確認する検索権限があります)。この場合は、次のようにします。ln -s new/target link
または
ln -fs new/target link
これは、ディレクトリ内に新しいシンボリックリンクを
target
作成すると考えることができます(ディレクトリへのシンボリックリンクなので、ディレクトリです)。したがって、実際には次のようになります。link
link
foo/bar
foo/bar/target -> new/target
この問題を克服するために、GNUには、リンクが作成されたディレクトリではなくリンク名を常にリンク名として扱うようにするオプションが
ln
あります。-T
したがって、GNUの場合ln
:ln -fsT new/target link
動作します。以前と同様に、元の
link
シンボリックリンクを削除してnew/target
ターゲットとして再生成します(プロセスのeuidとegidを所有者として使用)。GNUにはオプション
ln
もあります-n
。実際には実際のディレクトリである-T
場合を除いて、動作は異なりますlink
。この場合、エラーのために失敗するのではなく、そのディレクトリ内にシンボリックリンクを作成し続けます。移植可能な最善の方法は、まずリンクを削除してから再作成することです。
rm -f link && ln -s new/target link
ほとんどのシステムでは、シンボリックリンクに対する権限は無視され、通常はrwxrwxrwx
。
シンボリックリンク権限が重要なシステム(たとえば、ターゲットを確認するためにシンボリックリンクへの読み取り権限が必要なOS / Xなど)には、通常これを変更する方法(chmod -h
OS / X)があります。
所有権は、上記のようにほとんどのシステムでシンボリックリンクが指すファイルへのアクセスとは何の関係もありませんが、t
親ディレクトリまたはクォータビットに関連する他の依存関係があります。)これを変更する標準コマンドがあります。
chown -h user[:group] the-link
chgrp -h group the-link
答え4
-R
実際にシンボリックリンク権限を変更する必要がある場合(他の回答で書かれているように一般的に無意味です)、次のオプションを正常に使用しましたchown
。
chown -R myuser:mygroup link
使用しない場合、-R
権限は変更されません。