web-dev-qa-db-ja.com

チルダ(「〜」、ホームディレクトリ)を再定義することは可能ですか?

ホームディレクトリを再定義することは可能ですか? から/ext1/username の代わりに /home/username、つまり~を別のディレクトリに(ユーザーのホームファイルが置かれている実際のホームディレクトリを変更するのではなく)。

(これは悪い習慣のように思われるため、この質問はほとんどが学術的なものです。また、トップ10を読んだにもかかわらず、cshを使用するかどうかについて私には選択肢がありません。)

13
Andrew Cheong

チルダ~はシェルによって解釈されます。シェルは~$HOMEの短縮形として解釈します。

(echo ~; HOME=foo; echo ~)をお試しください。 $HOMEに設定すると、最初に実際のホームディレクトリが表示され、その後に "foo"が表示されます。

$HOMEのデフォルト値は、システム構成から取得されます。 getent passwdを使用して、すべての既知のユーザーとそのホームディレクトリを一覧表示します。システム構成によっては、これらのエントリは/etc/passwdまたは任意のリモートディレクトリサービスから取得される場合があります。

一時的にホームディレクトリを再定義するだけの場合は、別の$HOMEを設定します。

永続的に変更したい場合は、passwdエントリを変更する必要があります。 /etc/passwdを手動で編集する。

28
michas

~に使用される値は、管理データベース(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 ~を入力したときに使用される値がどこから来るかです。

nsswitch

コマンド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へのファイルの移動と調整する必要があります。

参考文献

11
slm

理由が複数のファイルシステムにユーザーを分散させることである場合は、automounterを使用することもできます。また、ユーザー用に別の「ベース」ディレクトリを作成することもできます。

1
sleepyweasel