フォルダへのシンボリックリンクを作成すると、入力に応じて末尾のスラッシュの有無にかかわらずシンボリックリンクが生成されることがわかりました。たとえば、
$ 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
エントリはファイルへの有効なリンクになりますfoo
。foo
ディレクトリではないため、末尾のスラッシュを使用するリンクは最終的に切断されます。
すべてのディレクトリは(オペレーティングシステム用)ファイルですが、すべてのファイルはディレクトリではありません。