シンボリックリンクの権限の変更

シンボリックリンクの権限の変更

次の権限を持つシンボリックリンクがあります。

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を含む関連システム)に-hchmod

chmod -h 777 npm

答え2

リンクに対して権限設定を使用しようとしている場合、chmod実際に行うことはリンク先の権限を設定することです。リンクされた権限は意味がありません。

答え3

次のリンクがある場合:

link -> foo/bar

次のように変更したいと思います。

link -> new/target

考慮すべき2つの状況があります。

  1. foo/barディレクトリが存在しない、存在しない、または検索権限がありませんfoo。それから

    ln -s new/target link
    

    既に存在するため失敗しますlinkが、標準を使用してこの問題を克服することができます。

    ln -fs new/target link
    
  2. foo/barはディレクトリです(あなたにはfooこれがfoo/barディレクトリであることを確認する検索権限があります)。この場合は、次のようにします。

    ln -s new/target link
    

    または

    ln -fs new/target link
    

    これは、ディレクトリ内に新しいシンボリックリンクをtarget作成すると考えることができます(ディレクトリへのシンボリックリンクなので、ディレクトリです)。したがって、実際には次のようになります。linklinkfoo/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 -hOS / X)があります。

所有権は、上記のようにほとんどのシステムでシンボリックリンクが指すファイルへのアクセスとは何の関係もありませんが、t親ディレクトリまたはクォータビットに関連する他の依存関係があります。)これを変更する標準コマンドがあります。

chown -h user[:group] the-link
chgrp -h group the-link

答え4

-R実際にシンボリックリンク権限を変更する必要がある場合(他の回答で書かれているように一般的に無意味です)、次のオプションを正常に使用しましたchown

chown -R myuser:mygroup link

使用しない場合、-R権限は変更されません。

関連情報