
通常、ディレクトリ(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 usermod
FreeBSD、TrueOS / PC-BSDなどのコマンドで同じことをしないでください。-m -d
その組み合わせの意味は若干異なります。)
ホームディレクトリがにある必要はありません/home
。
アカウントの作成時に使用される既存の親ディレクトリも変更できますが、必ずしもそうではありません/home
。
LinuxオペレーティングシステムとOpenBSDでは、useradd
このコマンドの-b
()オプションは、--base-dir
()を使用して明示的に名前を指定しなかった場合にホームディレクトリが作成される親ディレクトリを指定します。これ-d
--home
基本base_dir
デフォルトディレクトリはOpenBSDと多くのLinuxシステムの変数です。システム管理者はこの設定を自由に変更できます。/etc/usermgmt.conf
HOME
/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の文字列を指すことができます。.)- 実際の場所とは無関係にユーザーのホームディレクトリをシンボリックに表現するには、シェルチルダ拡張などの規則を使用できます
~JdeBP
。vim
からの多くのプログラムでこれを行いますmailx
。
追加読書
- 「/export/home」と「/home」の違い
- ジョナサン・デ・ボーインポラード。
userenv
。 nosh ツールセットのマニュアルページ。 - ジョナサンデボインポラード(2016)。 」デーモン環境の誤った説明」。 systemd doco 正誤表。よく与えられる答えです。
答え2
ユーザーのホームディレクトリの場所を別の場所に変更するには、この回答を参照してください。
https://stackoverflow.com/questions/20797819/command-to-change-the-default-home-directory-of-a-user