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

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

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

$ 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つのスラッシュで始まります。)したがって、ディレクトリシンボリックリンクの末尾のスラッシュ(または複数の後続のスラッシュ)はシステムに影響を与えません。

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

おすすめ記事