シンボリックリンクは一見無効な場所を指しているように見えますが、実際には機能します

シンボリックリンクは一見無効な場所を指しているように見えますが、実際には機能します

frameworks/av私が作業しているもののルート フォルダーが であり、このフォルダーに次のコンテンツが含まれていると仮定します。

-rw-rw-r--  1 <user> <user>    94 Mar 21 14:34 Android.bp
drwxrwxr-x  8 <user> <user>  4096 Mar 21 14:34 camera/
-rw-rw-r--  1 <user> <user>  5394 Jul 16  2018 CleanSpec.mk
drwxrwxr-x  4 <user> <user>  4096 Jul 16  2018 cmds/
drwxrwxr-x  8 <user> <user>  4096 Jul 16  2018 drm/
drwxrwxr-x  2 <user> <user>  4096 Mar 26 21:30 .git/
drwxrwxr-x  8 <user> <user>  4096 Mar 21 14:34 include/
drwxrwxr-x 25 <user> <user>  4096 Mar 21 14:34 media/
-rw-rw-r--  1 <user> <user>     0 Mar  2  2018 MODULE_LICENSE_APACHE2
-rw-rw-r--  1 <user> <user> 17680 Mar  2  2018 NOTICE
-rw-rw-r--  1 <user> <user>    76 Jul 16  2018 OWNERS
drwxrwxr-x  3 <user> <user>  4096 Mar 21 14:34 packages/
drwxrwxr-x 14 <user> <user>  4096 Mar 21 14:34 services/
drwxrwxr-x  2 <user> <user>  4096 Jul 16  2018 soundtrigger/
drwxrwxr-x  3 <user> <user>  4096 Mar 21 14:34 tools/

frameworks/av/include/media/stagefright、 というリンクを見つけました。foundation説明によると、このリンクは を指しているはずですframeworks/av/foundation/...:

lrwxrwxrwx 1 <user> <user> 57 Jul 16 2018 foundation -> ../../../foundation/include/media/stagefright/foundation//

foundation本当に困惑しているのは、にはフォルダが存在しないのにframeworks/av、リンクをたどることはできるということです。 によって指定される実際のターゲットreadlink -f foundationは ですframeworks/av/media/libstagefright/foundation/include/media/stagefright/foundation

ここで何が起こっているのでしょうか? どうすればfoundation魔法のように に変換できるのでしょうかmedia/libstagefright/foundation?

答え1

そこへ降りていくと、frameworks/av/include/media/stagefright少なくとも 1 つのシンボリック リンクを通過します。実際には、論理パスは存在しますframeworks/av/include/media/stagefrightが、物理パスは存在しません。

次に、問題のシンボリックリンクは../../../そこから 3 レベル上 ( ) およびさらに上に進みますが、これは明らかに認識していない物理ディレクトリ構造を使用します。ただし、シェルは依然として論理パスを追跡する可能性があります。

比較するls ..シンボリック リンク ディレクトリ内にいるのに、実際の親コンテンツが表示されるのはなぜですか?

関連情報