web-dev-qa-db-ja.com

現在のユーザーのホームディレクトリへの標準のシンボリックリンクはありますか?

シェルは~をホームディレクトリに展開できます。 $HOMEは通常同じ取引をしますが、そのような拡張をサポートしていない可能性のあるコンテキストから現在のユーザーのホームディレクトリを参照したい場合がよくあります。

$HOMEが機能する設定ファイルがありますが、~は機能しません。その逆も同様です。

Fuseは、これらの線に沿って/var/myself-> $HOMEのようなものを提供できると思います。

それで、/var/myself/backdrops/pornography/wtf/yarly.jpgのようなものを指すように設定ファイルに値を置くことができました

このようなものはもうありますか?そうでない場合、このようなものがない理由はありますか?

9
Lerc

私はあなたの懸念を理解していますが、答えは「いいえ」です。そのようなことはありません。
通常の方法は、OSにユーザーのホームパスを尋ねるか、$ HOME変数を取得することです。

これらのオプションはすべて、常にアプリケーションからのコーディングが必要です。 bashのような多くのアプリケーションは、「エイリアス」を提供します〜(open(2)はそれを翻訳しません)。

もちろん、これを行うためにvfsまたはFuseモジュールを実装することもできます。おそらくそれをするために何かがあるでしょう、私はそれを尋ねるつもりです!

しかし、それは本当に必要ですか?次のような回避策を使用できます。

6
Keymon

Requestinユーザーのpidを取得し、彼/彼女のホームディレクトリのシステムに問い合わせることができます。だからそれは可能です。

ただし、FSを静的と見なすSUIDプログラムがないかどうかはわかりません。

編集:

struct Fuse_context *ctx = Fuse_get_context ();
struct passwd pwd, *ppwd;
char buffer[1024];
int status = getpwuid_r (ctx->ui, &pwd, buffer, sizeof(buffer), &ppwd);
if (status == 0) {
  if (ppwd == NULL) {
    // No record found
  } else {
    // Handle record
  }
} else {
    // Handle error
} 

上記のコードは理想的ではありませんが、一般的なケースでは機能するはずです。

0

(少なくともLinuxでは)1つのトリックは、アプリを実行する前にディレクトリを$HOMEに変更してから、構成ファイルで/proc/self/cwd/...を使用することです。

0
Neil Mayhew

ほとんどのプログラムでは、コマンドラインで構成ファイルへのパスを指定できます。したがって、標準の構成ファイルを受け取り、それをフィルター処理して現在のユーザーを$HOMEのように置き換え、変更された一時構成ファイルをプログラムに渡すラッパーを作成できます。

0
Neil Mayhew