末尾のスラッシュの有無にかかわらず、ディレクトリソフトリンクを作成できるのはなぜですか?

末尾のスラッシュの有無にかかわらず、ディレクトリソフトリンクを作成できるのはなぜですか?

フォルダへのシンボリックリンクを作成すると、入力に応じて末尾のスラッシュの有無にかかわらずシンボリックリンクが生成されることがわかりました。たとえば、

$ ln -sfv /ln-test/FOLDER/ test-tail
test-tail -> /ln-test/FOLDER/

$ ln -sfv /ln-test/FOLDER test-notail
test-notail -> /ln-test/FOLDER

$ ll /ln-test
total 16
drwxr-xr-x  2 user  wheel    68B  2 Aug 08:35 FOLDER
lrwxr-xr-x  1 user  wheel    15B  2 Aug 08:36 test-notail -> /ln-test/FOLDER
lrwxr-xr-x  1 user  wheel    16B  2 Aug 08:36 test-tail -> /ln-test/FOLDER/

私のMacとDebianシステムでテストした上記の例で生成されたリンクは、入力の末尾のスラッシュと一致します。

私が理解したところ、これは重要ではないかもしれませんが、最近のObjective-cで末尾のスラッシュが原因で発生するバグが発生しました。それでもこのエラーを追跡する必要がありますが、末尾のスラッシュなしでリンクを再生成すると問題は解決します。

だから私の実際の質問は、ディレクトリリンクにスラッシュがあるかどうかは重要ですか?

答え1

/シンボリックリンクを介してファイルにアクセスすることは、ファイルのベース名が(相対リンク)で始まらない場合はシンボリックリンクテキストに置き換えるか、シンボリックリンクが(フルパス)で始まる場合はシンボリックリンクテキストに置き換えるのと同じです。ファイル)/絶対リンク)。シンボリックリンクテキストに末尾のスラッシュがある場合は、そうします。

ファイル名の末尾のスラッシュは、「ファイルがディレクトリでなければならない」を意味します。リンクの宛先がディレクトリの場合、その中のファイルにアクセスすると、2つのスラッシュを含む計算パスが生成されます。 1つはシンボリックリンクテキストで、もう1つはディレクトリ区切り文字として使用されます。与えられた

lrwxr-xr-x  1 user  wheel    15B  2 Aug 08:36 test-notail -> /ln-test/FOLDER
lrwxr-xr-x  1 user  wheel    16B  2 Aug 08:36 test-tail -> /ln-test/FOLDER/

それではtest-notail/fooと同等で/ln-test/FOLDER/foo同等test-tail/fooです/ln-test/FOLDER//foo

複数のスラッシュは1つのスラッシュと同じです。(例外が1つあります。一部のシステムでは、パスは正確に2つのスラッシュで始まります。)したがって、ディレクトリシンボリックリンクの末尾のスラッシュ(または複数の後続のスラッシュ)はシステムに影響を与えません。

追加のスラッシュがアプリケーションに影響を与える場合、これはアプリケーションのバグです。

答え2

アプリケーションの場合はいいえ。これは重要ではありません。後ろにスラッシュがないリンク(一般的に考えるより低いレベル)は次のとおりです。文書と呼ばれるFOLDERファイルはディレクトリです。明示的に末尾のスラッシュ点があるリンク目次反例として、次のようになりますFOLDER

$ mkdir test
$ cd test
$ touch foo
$ ll
drwxrwxr-x.   2 jwbernin jwbernin  4096 Aug  2 09:33 .
drwx------. 102 jwbernin jwbernin 20480 Aug  2 09:33 ..
-rw-rw-r--.   1 jwbernin jwbernin     0 Aug  2 09:33 foo
$ ln -s foo/ TRAIL
$ ll
drwxrwxr-x.   2 jwbernin jwbernin  4096 Aug  2 09:33 .
drwx------. 102 jwbernin jwbernin 20480 Aug  2 09:33 ..
-rw-rw-r--.   1 jwbernin jwbernin     0 Aug  2 09:33 foo
lrwxrwxrwx.   1 jwbernin jwbernin     4 Aug  2 09:33 TRAIL -> foo/

色の強調表示は表示されませんが、最後のリンクが失われました。これにより、ln -s foo NOTRAILそのNOTRAILエントリはファイルへの有効なリンクになりますfoofooディレクトリではないため、末尾のスラッシュを使用するリンクは最終的に切断されます。

すべてのディレクトリは(オペレーティングシステム用)ファイルですが、すべてのファイルはディレクトリではありません。

関連情報