リンク「..」は、親ディレクトリの外部で他の奇妙なfs動作を実行します。

リンク「..」は、親ディレクトリの外部で他の奇妙なfs動作を実行します。

「..」エントリを親ディレクトリ以外の場所にリンクできますか? 「tar」が奇妙に動作するようにすることは可能ですか?

シナリオ:tar.gzファイルとして配布された組み込みシステム用のコンパイラがあり、Ubuntu 10.04で完全に実行されます。 VirtualBox VMからUbuntu 12.04へのアップグレードをテストすると、一部のヘッダーファイルが見つかりません。問題の原因を見つけるためにファイルを閲覧している間に、「/a/somewhat/convolved/../../path/../full/of/up/../references/」の後にファイルがありませんでした。 。 。もう少し詳しく見てみると、いくつかの奇妙な動作が見つかりました。

  • "ls /that/strange/../../path" はファイルを期待どおりに表示します。

  • bashに「ls /that/strange/../../path」と入力して、「/that/strange/../../path」内のファイルのリストを取得します(つまり、ファイル名の完成をトリガーする」 ls"を実行しない)。他のファイルのリストを表示します。

  • 「..」を解釈するパスを手動で変更すると、両方の出力は同じです。

「ls」とファイル名のワイルドカードは、ファイルを別の方法(opendir / readdir、globなど)を探して、ファイルシステムエラーでこれらの手順の1つを探しているようです。仮想マシンでfsckを実行したときに例外が発生しませんでした。新しい仮想マシンにコンパイラを再インストールしても、結果は同じです。 「tar」はエラーを返しません。そのような問題が発生した人はいますか?

ベストアンサー1

パスの「ディレクトリ」の1つが実際に別のディレクトリへのシンボリックリンクですか?その場合、..シンボリックリンクを含むディレクトリではなく、ターゲットディレクトリの親ディレクトリに移動します。

..Bashはこの問題をシンボリックリンクを含むディレクトリに再解釈して「修正」しようとします。この迷惑な動作を解除する方法があると確信しています。しかし、個人的にこの問題を最後に処理しなければならなかった時が覚えていないので、便利に使用することはできません。

おすすめ記事