/homeそれは普遍的な慣習でさえありません。

/homeそれは普遍的な慣習でさえありません。

/homeDebian や Ubuntu などのディストリビューションで通常割り当てられるディレクトリの機能を、別のディレクトリに (完全に) 与えることは可能ですか? たとえば、これが可能で、 に変更した場合/xyz、新しい人間所有のユーザー ディレクトリはすべて の下にインストールされます(たとえば、Sally のデスクトップ パスは の代わりに に/xyzなり、存在する必要はなくなります)。/xyz/Sally/Desktop/home/Sally/Desktop/home

私は、パスを保存して読み込むポータブル プログラムに取り組んでいます。 にないホーム ディレクトリを持つ別のコンピュータで使用する場合/home(したがって はなく/home、その機能を持つ別のパスが存在する場合)、パスが読み込まれたときに、新しいコンピュータの適切なホーム ディレクトリの場所が含まれるようにパスを調整する必要があります。

答え1

ホーム ディレクトリを に配置する必要はありません。/homeすべてのホーム ディレクトリが共通の親を共有している、またはその親に という名前が付けられているなどの想定をプログラムに組み込んでいる場合、プログラムは誤りです/home

/homeそれは普遍的な慣習でさえありません。

/homeは、Unix が発明されてからかなり経ってから考え出されたアイデアです。初期の Unix では、他のディレクトリが使用されていました。これは、FreeBSD (およびその派生) などのオペレーティング システムで今でも見られます。FreeBSD では、 は/homeシンボリック リンクであり、ユーザー ディレクトリは実際には の下に存在します/usr/home

Solaris も同様に「実際の」ホーム ディレクトリを配置し、自動 NFS マウントなどでいっぱいになるよう/export/homeにします。/home

/home多くの一般的なホーム ディレクトリの親ではありません。

に存在しないホームディレクトリが多数あります/home

  • 最も明白な例は/root、スーパーユーザーのホーム ディレクトリである です。これは、/ルートの個人ファイルと「ドット」ファイルによってルート ディレクトリが乱雑にならないように、以前の場所 から に移動されましたが、他のディスク ボリュームのマウントが失敗した場合でもスーパーユーザーがログインできるように、ルート ボリューム上に保持されています。
  • さまざまなデーモン ソフトウェアには、それらのデーモンが実行される専用アカウント用のホーム ディレクトリが他の場所に存在します。
    • qmailのさまざまなデーモンアカウントは/var/qmail、たとえば または を使用します/var/qmail/alias。後者は、一般的に とも呼ばれ~alias設計~alias/.qmail他の(実際の)ユーザーのホームディレクトリと同じファイルを含むホームディレクトリになります。
    • さまざまな HTTP(S) および FTP(S) サーバー ソフトウェアには、(公式または非公式の) 規則があります。たとえば、専用のシステム アカウントを持つ仮想ホストのホーム ディレクトリは、/var/wwwまたはになります/var/www/$VHOST
    • /var/unboundその他のソフトウェアは、、、/var/db/mysqlおよびなどの非個人ユーザー アカウント用のホーム ディレクトリを使用するさまざまなオペレーティング システムで見つかります/var/db/tor
    • 従来のさまざまな非個人ユーザー アカウントには、、、、、、などのホーム/sbinディレクトリ/var/adm/var/spool/lpdあり/var/spool/mailます。/var/spool/news/var/spool/uucp
  • OpenBSD では、システム オペレータ アカウントにホーム ディレクトリがあり/operator、さまざまな非個人ユーザー アカウント/var/emptyにもホーム ディレクトリがあります。

ホーム ディレクトリは に残しておく必要はありません/home

Linux オペレーティング システムでは、コマンド に-d( --home) および-m( --move-home) オプションを使用して、アカウント作成後にホーム ディレクトリを移動できます。usermod

OpenBSD にも同じオプションがあります。( FreeBSD、TrueOS/PC-BSD などのコマンドusermodでは同じことを行わないでください。これらの組み合わせは微妙に異なる意味を持ちます。)pw usermod-m -d

ホーム ディレクトリを に作成する必要はありません/home

アカウント作成時に使用する従来の親ディレクトリも変更可能であり、必ずしも である必要はありません/home

LinuxオペレーティングシステムおよびOpenBSDでは、useraddコマンドの-b( )オプションは、 ()--base-dirで明示的に指定されていない場合にホームディレクトリが作成される親を指定します。-d--homeデフォルトベース ディレクトリは、 OpenBSD ではbase_dirの変数であり/etc/usermgmt.conf、多くの Linux ではHOMEの変数です/etc/default/useradd。システム管理者は、これを自由に変更できます。

FreeBSD、TrueOS/PC-BSD などでは、コマンド-bに同様のオプションがありpw useradd、そのデフォルトは のhome変数を介して変更できます/etc/pw.conf

これに対処する

プログラムでは、ホーム ディレクトリまたはその親の場所に関する期待を一切ハードコードしないでください。

  • 現在ログインしているユーザーのホーム ディレクトリを知りたい場合は、環境変数を使用します。これは、、またはログイン アカウントが に切り替えられたときにHOMEなどのプログラムによって設定されます。環境変数がない場合は、プログラムを実行するにはログイン セッション環境変数が必要であるという理由で、中止するだけでも設計上は妥当です。それ以外の場合は、プロセスの有効/実際の (適切な) UID を取得し、パスワード データベースを照会することができます。loginuserenvsystemdHOME
  • 特定のユーザーのホームディレクトリを知りたい場合は、getpwnam()/getpwnam_r()またはgetpwuid()/getpwiud_r()ライブラリ関数を使用してパスワードデータベースを照会し、フィールドを取得しますpw_dir。(このフィールドはNULLにすることも、長さがゼロの文字列を指すこともできます。
  • ユーザーのホーム ディレクトリを、実際の場所とは無関係に記号で表したい場合は、シェルのようなチルダ展開の規則を採用できます: ~JdeBP。多くのプログラムが から までこれを実行しvimますmailx

参考文献

答え2

ユーザーのホームディレクトリの場所を他の場所に変更したい場合は、この回答を参照してください。

https://stackoverflow.com/questions/20797819/command-to-change-the-default-home-directory-of-a-user

関連情報