ホームディレクトリを再定義することは可能ですか? 例から/ext1/username
の代わりに /home/username
、つまり~
を別のディレクトリに(ユーザーのホームファイルが置かれている実際のホームディレクトリを変更するのではなく)。
(これは悪い習慣のように思われるため、この質問はほとんどが学術的なものです。また、トップ10を読んだにもかかわらず、csh
を使用するかどうかについて私には選択肢がありません。)
チルダ~
はシェルによって解釈されます。シェルは~
を$HOME
の短縮形として解釈します。
(echo ~; HOME=foo; echo ~)
をお試しください。 $HOME
に設定すると、最初に実際のホームディレクトリが表示され、その後に "foo"が表示されます。
$HOME
のデフォルト値は、システム構成から取得されます。 getent passwd
を使用して、すべての既知のユーザーとそのホームディレクトリを一覧表示します。システム構成によっては、これらのエントリは/etc/passwd
または任意のリモートディレクトリサービスから取得される場合があります。
一時的にホームディレクトリを再定義するだけの場合は、別の$HOME
を設定します。
永続的に変更したい場合は、passwdエントリを変更する必要があります。 /etc/passwd
を手動で編集する。
~
に使用される値は、管理データベース(getent passwd
)から取得した値から決定されます。これは、通常、/etc/passwd
ファイルにあり、そこで定義されている各ユーザーのホームディレクトリ用です。
$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
sam:x:500:500:Sam Mingolelli:/home/sam:/bin/bash
tracy:x:501:501::/home/tracy:/bin/bash
このファイルの6番目の列は、誰かがcd ~
を入力したときに使用される値がどこから来るかです。
コマンドgetent passwd
を使用して、システムがユーザーのホームディレクトリに何を使用するかを確認できます。
$ getent passwd
root:x:0:0:root:/root:/bin/bash
sam:x:500:500:Sam Mingolelli:/home/sam:/bin/bash
tracy:x:501:501::/home/tracy:/bin/bash
これらを提供する「データベース」は、/etc/nsswitch.conf
で定義されているシステムリゾルバを通じて制御されます。
$ grep passwd /etc/nsswitch.conf
#passwd: db files nisplus nis
passwd: files
上記のファイルは/etc/passwd
を意味しますが、「データベース」は、LDAP、NIS、またはネットワーク上の他の場所などから取得される可能性があります。
この操作を実行することは、アカウントが作成された後で少しトリッキーです。アカウントを最初から作成する場合、ユーザーのホームディレクトリの場所を再定義するのは簡単です。 useradd
コマンドを実行するときに、ユーザーのホームディレクトリに使用する場所を指定できます。
$ useradd -d /ext1/acheong ...
manページからの抜粋
-d, --home HOME_DIR
The new user will be created using HOME_DIR as the value for the user’s
login directory. The default is to append the LOGIN name to BASE_DIR and
use that as the login directory name. The directory HOME_DIR does not
have to exist but will not be created if it is missing.
多くの場合、ユーザーのホームディレクトリのパスが構成ファイルに静的に含まれ、扱いにくくなるため、これはより外科的な操作になります。
$ grep home /home/sam/.*
/home/sam/.gtkrc-1.2-gnome2:include "/home/sam/.gtkrc.mine"
これらを修正するか、/home/sam
から新しい場所/ext1/sam
へのリンクを提供する必要があります。
/etc/passwd
でない場合の移動システムがLDAP、NISなどからホームディレクトリを取得している場合は、それらのシステムで再配置を実行し、/home/sam
から/ext1/sam
へのファイルの移動と調整する必要があります。
理由が複数のファイルシステムにユーザーを分散させることである場合は、automounter
を使用することもできます。また、ユーザー用に別の「ベース」ディレクトリを作成することもできます。