/home
Debian や 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
- qmailのさまざまなデーモンアカウントは
- 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 を取得し、パスワード データベースを照会することができます。login
userenv
systemd
HOME
- 特定のユーザーのホームディレクトリを知りたい場合は、
getpwnam()
/getpwnam_r()
またはgetpwuid()
/getpwiud_r()
ライブラリ関数を使用してパスワードデータベースを照会し、フィールドを取得しますpw_dir
。(このフィールドはNULLにすることも、長さがゼロの文字列を指すこともできます。。 - ユーザーのホーム ディレクトリを、実際の場所とは無関係に記号で表したい場合は、シェルのようなチルダ展開の規則を採用できます:
~JdeBP
。多くのプログラムが から までこれを実行しvim
ますmailx
。
参考文献
- 「/export/home」と「/home」の違い
- ジョナサン・デ・ボイン・ポラード。
userenv
. nosh ツールセットのマニュアル ページ。 - ジョナサン・デ・ボイン・ポラード(2016年)。デーモン環境に関する誤った記述「」。 systemd ドキュメントの正誤表よくある質問。
答え2
ユーザーのホームディレクトリの場所を他の場所に変更したい場合は、この回答を参照してください。
https://stackoverflow.com/questions/20797819/command-to-change-the-default-home-directory-of-a-user