Linuxでは、「ln -sT」とはどういう意味ですか?

Linuxでは、「ln -sT」とはどういう意味ですか?

より正確に言えば、私は-sこのオプションが何を意味するのかを知っています。私はこのオプションを毎日使います。しかし、誰かがセキュリティを強化する/var/www/html/projectために自分のウェブサイトのドキュメントルートをからに移動したことをチュートリアルで見ました~/www/project(彼は後で権限などを変更しましたが、この場合は重要ではありませんでした)。その後、彼は次のようなシンボリックリンクを作成しました。

ln -sT ~/www/project /var/www/html/project

一般に、マンページでこのオプションに関する次の情報を得た-Tので、これが何に使用されるのか疑問に思います。-s-T

-T, --no-target-directory
     treat LINK_NAME as a normal file always

私はこれが何のためであるか本当に理解していません。シンボリックリンクを作成するとき、なぜ-Tこれらを結合するのですか?-sこれには大きな利点がありますか?

答え1

ln要約は次のとおりです。

ln [OPTION]... [-T] TARGET LINK_NAME   (1st form)
ln [OPTION]... TARGET                  (2nd form)
ln [OPTION]... TARGET... DIRECTORY     (3rd form)
ln [OPTION]... -t DIRECTORY TARGET...  (4th form)

それ以外の場合は、すでに存在し、ディレクトリ(または最終的にディレクトリとして検証されるように検証されたシンボリックリンク)-Tの場合、最初と3番目の形式はあいまいで3番目の形式が選択されます。リンクが作成されます。LINK_NAMEln~へ目次。だから

ln -s ~/www/project /var/www/html/project

後者がすでに存在する場合、projectinsideという名前のリンクが生成されます。/var/www/html/project

-Tあいまいさを取り除き、ln最初のフォームのみを考慮してください。リンクが存在しない場合、指定された名前でリンクが生成されます。指定された名前のファイルまたはディレクトリがすでに存在する場合、LINK_NAMEエラーがln発生します(-f指定しない限り)。 。

だから

ln -sT ~/www/project /var/www/html/project

/var/www/html/projectを指すリンク~/www/projectまたはエラーメッセージ(およびゼロ以外の終了コード)で終わることが保証されます。

答え2

あなたのルート(例では/var/www/html/project)が最終的なルートであることを確認するので、リンクが存在するか存在しないかに/var/www/html/projectかかわらず、100%存在します。/var/www/html/project/**project**/var/www/html/project

混乱する可能性があるため、違いを示す例

設定: cd /tmp; mkdir /tmp/aa; mkdir /tmp/bb;

ln -s /tmp/aa /tmp/bb新しいシンボリックリンクが作成されます/tmp/bb/aa -> /tmp/aa

しかし、

ln -sT /tmp/aa /tmp/bb結果は次のとおりです。ln: failed to create symbolic link '/tmp/bb': File exists

この-sパラメータはそれとは何の関係もありません。 (通常どおり)文書に記載されています。https://www.gnu.org/software/coreutils/manual/html_node/Target-directory.html

関連情報