/home普遍的な条約ではありません。

/home普遍的な条約ではありません。

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

パスを保存してロードするポータブルプログラムを開発しています。ホームディレクトリがない他のシステムで使用されている場合/home(したがって、その機能を持つ他のパスはありませんが/home)、パスがロードされたときに正しいホームディレクトリの場所を持つようにパスを調整したいと思います。それは新しいコンピュータで動作します。

ベストアンサー1

ホームディレクトリを配置する必要がなく、プログラムが/homeそのような仮定(たとえば、すべてのホームディレクトリが共通の親ディレクトリを共有するか、親ディレクトリの名前が付けられている)をハードワイヤーする場合、プログラムは間違っています/home

/home普遍的な条約ではありません。

/homeこのアイデアはUnixが発明され、しばらくして出てきました。以前のUnicesでは、別のディレクトリが使用されていました。これは今日でもFreeBSD(およびその派生バージョン)などのオペレーティングシステムで見ることができます。ここで/homeシンボリックリンクとユーザーディレクトリは実際には/usr/home

Solarisはまた、自動NFSマウントなどで埋められるように、/export/home「実際の」ホームディレクトリを配置します。/home

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

にないホームディレクトリがたくさんあります/home

  • 最も明白なのは、ルートのプライベートファイルと「ドット」ファイルがルートディレクトリを複雑にしないように、スーパー/rootユーザーのホームディレクトリが以前の場所から移動されたが/ルートボリュームに残っているため、スーパーユーザーがログに失敗する可能性があることです。別のディスクボリュームをマウントします。
  • さまざまなデーモンソフトウェアには、これらのデーモンが実行される専用アカウントのホームディレクトリが別の場所にあります。
    • /var/qmailキューメールを使用するためのさまざまなデーモンアカウント/var/qmail/alias。後者は一般的に呼び出されます~aliasデザイン済みホームディレクトリとして、その~alias/.qmailファイルは他の(実際の)ユーザーのホームディレクトリにあるファイルと同じです。
    • さまざまなHTTP(S)およびFTP(複数可)サーバーソフトウェアには(公式または非公式)ルールがあります。たとえば、専用システムアカウントを持つ仮想ホストのホームディレクトリは、またはに/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

OpenBSDusermodにも同じオプションがあります。 (pw usermodFreeBSD、TrueOS / PC-BSDなどのコマンドで同じことをしないでください。-m -dその組み合わせの意味は若干異なります。)

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

アカウントの作成時に使用される既存の親ディレクトリも変更できますが、必ずしもそうではありません/home

LinuxオペレーティングシステムとOpenBSDでは、useraddこのコマンドの-b()オプションは、--base-dir()を使用して明示的に名前を指定しなかった場合にホームディレクトリが作成される親ディレクトリを指定します。これ-d--home基本base_dirデフォルトディレクトリはOpenBSDと多くのLinuxシステムの変数です。システム管理者はこの設定を自由に変更できます。/etc/usermgmt.confHOME/etc/default/useradd

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

これを扱う

あなたのプログラムは、ホームディレクトリまたは親ディレクトリの場所について何も期待しないでください。

  • 現在ログインしているユーザーのホームディレクトリを知りたい場合は、HOME環境変数を使用してください。 、などのプログラムによって設定されたとき、またはloginログインアカウントを切り替えるuserenvときに設定されます。プログラムを実行するにはログインセッション環境変数が必要であるため、環境変数がsystemdない場合は中断することが有効な設計選択です。HOMEそれ以外の場合は、プロセスの有効/実際の(適切な)UIDを取得し、パスワードデータベースのクエリに依存する可能性があります。
  • getpwnam()特定のユーザーのホームディレクトリを知りたい場合は、/getpwnam_r()またはgetpwuid()/ライブラリ機能を使用してパスワードデータベースを照会し、getpwiud_r()そのpw_dirフィールドを抽出してください。 (知っているフィールドはNULLまたは長さ0の文字列を指すことができます。.)
  • 実際の場所とは無関係にユーザーのホームディレクトリをシンボリックに表現するには、シェルチルダ拡張などの規則を使用できます~JdeBPvimからの多くのプログラムでこれを行いますmailx

追加読書

おすすめ記事