プロセスが同じファイル名を持つ別のファイルを読み取るようにします。

プロセスが同じファイル名を持つ別のファイルを読み取るようにします。

ファイルを読み取るアプリケーションがあります。そう呼ぶプロセス名とファイル~/.構成。いつプロセス名実行すると常に読みます。~/.構成そして別の方法で構成することはできません。以前とそれ以降に「~/.configuration」に依存する他のアプリケーションがありますが、それ以降はそうではありません。プロセス名ランニング。

パッケージプロセス名コンテンツを置き換えるスクリプトで~/.構成オプションですが、最近停電(内容が置き換えられたとき)が発生し、ファイルの以前の内容が失われたため、お勧めできません。

LD_DEBUG=files processname特定のファイルを読み取ろうとするときにプロセスが他のものを読むように欺く方法(おそらく関連性の高いものを使用するかもしれません)はありますか?実行可能ファイル内でファイル名を検索して変更することは、やや侵害的ですが、うまくいくでしょう。

呼び出しを引き継ぐためにカーネルモジュールを書くことが可能であることを知っていますopen()https://news.ycombinator.com/item?id=2972958)、しかし、より簡単でクリーンな方法はありますか?

編集:検索するとき~/.構成内部にプロセス名実行可能ファイルを読み取る前に別のファイル名を読み取ろうとしました。~/.構成。問題が解決しました。

ベストアンサー1

最新バージョンのLinuxでは、次のことができます。共有をキャンセルこれマウントネームスペース。つまり、仮想ファイルシステムを別々に表示するプロセス(別々にマウントされたファイルシステム)を起動できます。

これはを通じて行うことができますが、chrootあなたunshareの場合にはより適しています。

同様に、名前空間をマウントするにはスーパーユーザー権限がchroot必要です。unshare

~/.configurationだから、あなたがファイルを持っているとしましょう~/.configuration-for-that-cmd

実際にバインドマウントプロセスを開始して実行でき~/.configurationます~/.configuration-for-that-cmdthat-cmd

良い:

sudo unshare -m sh -c "
   mount --bind '$HOME/.configuration-for-that-cmd' \
                '$HOME/.configuration' &&
     exec that-cmd"

that-cmdすべてのサブプロセスは互いに異なって表示されます~/.configuration

that-cmd上記は次のように実行されますrootsudo -u another-user that-cmd必要に応じて、次のように実行されます。他のユーザー

おすすめ記事