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


9

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

私は$HOME動作する設定ファイルを持っていますが、動作~しませんし、逆も同様です。

私はfuseがこれらの線に沿って何かを提供することができると思います/var/myself->$HOME

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

このようなものはもうありますか?そうでない場合、このようなものが存在しないことには十分な理由がありますか?


2
これは実際には本当に良いアイデアのように思える、と私は正しくインターフェイスを覚えていればヒューズはかなり自明これを行うことができます
マイケルMrozek

回答:


6

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

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

もちろん、vfsまたはfuseモジュールを実装してこれを行うことができます。たぶん何かすることがあるので、お願いします!

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


私は、VFSツールを尋ねる:unix.stackexchange.com/questions/1811/...
Keymon

0

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


私はこれのハッキングが好きですが、おそらくプロセスが現在のディレクトリを変更すると問題が発生します。最初の作業ディレクトリとして/ proc / PID / iwdが必要です。
Lerc、2009

...さらに
言えば

@ Lerc、PIDがどうなるかを事前に知ることができないため、構成ファイルで行われる場合は、設定されて/proc/selfいない必要があり/proc/PIDます。
Neil Mayhew

@Lerc、はい、プロセスがディレクトリを変更した場合、プロセスは失敗しますが、通常、プログラムは起動時に構成ファイルを一度読み取り、値をメモリにキャッシュします。それはすべて、使用しているプログラムに依存し、プログラムがコマンドラインまたは構成ファイルの構文のいずれかで十分な柔軟性を提供しない場合、行き詰まります。
Neil Mayhew

ええ、私は/ proc / PID / homeがすべてのproc / PID
ディレクトリが

0

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


そうすることで、ユーザーから離れて構成ファイルへのパスを指定できるようになります。あなたがラッパーexeでラリーファンシーを得るなら、実行可能かもしれません。
Lerc、2009

0

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
} 

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


どのユーザーであるかを知った後、彼のホームディレクトリをどのように見つけますか?
WhyNotHugo 2010

getpwuidまたはを使用しgetpwuid_rます。
Maciej Piechotka
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.