外部構成を持つサードパーティのソフトウェアがあり、入力パラメータとして「ファイルへのパス」を受け取ります。残念ながら、このソフトウェアは指定されたパスを何らかの定義済みパスと連結します。たとえば、パラメータとして「data/images」を想定し、「/Users/someuser/work/source/data/images」を使用します。絶対パスを指定したいのですが、このソフトウェアに「/tmp/images」のようなものを指定すると、存在しないパス「/Users/someuser/work/source//tmp/images」が使用されることになります。これは、「..」と一緒に使用できるパストリックであり、ソフトウェアがsomething
それを定義済みパスと連結した後に絶対パスになるソフトウェアを提供できます。「..」を使用すると機能しますが、パス構成は静的であり、定義済みパスソフトウェアの使用は変更される可能性があるため、あまり良い解決策ではありません。
答え1
/Users/someuser/work/source/XXX
Linux では、任意の場所を指すようにするための無数の可能性があります。
シンボリックリンクを使用する - 次のようにします:
ln -s /wherever/you/want /Users/someuser/work/source/XXX
/Users/someuser/work/source/XXX
はディレクトリとして表示されます。何らかのソフトウェアがそこに移動し、そこにファイルを書き込むと、それらは になります/wherever/you/want
。に他のファイルシステムをマウントします
XXX
。mount /dev/something /Users/someuser/work/source/XXX
この方法では、アプリケーションが書き込むディレクトリに /dev/something デバイスがマウントされます。
「バインド マウント」を実行します。つまり、他のファイルシステム (すでにマウントされている) の一部を次のように再バインドします
XXX
。mount -o bind /wherever/you/want /Users/someuser/work/source/XXX
これはシンボリックリンクとよく似ていますが、アプリケーションによる検出ははるかに困難です。アプリケーションはターゲットディレクトリがシンボリックリンクであるかどうかを簡単にチェックし、そこに書き込みを拒否しますが、バインドマウント方式は通常のディレクトリを提供しますが、その内容は
unionfsのようなファイルシステムを使用する。ユニオンまたはアウフス- この方法では、複数のファイルシステムを 1 つのディレクトリに同時にマウントするなど、「統合」することができます (つまり、
XXX
)open()
LD_PRELOADや、、などのメソッドをオーバーライドするライブラリを使ってトリックを試してみてください。fopen()
最も有名なのはヒューズつまり、次のことをチェックしてみてくださいFUSE 用の Union のようなファイルシステム。
答え2
(ルート)/Users/someuser/work/source/
にシンボリックリンクする場合/
work$ ln -s / source
そこにあるすべてのパスはルートに基づきます:
/Users/someuser/work/source/tmp/images
指し示す
/tmp/images
確認するには
work$ ls source/tmp/images