Answers:
代字号~
由您的shell解释。您的shell将解释~
为的简写形式$HOME
。
尝试(echo ~; HOME=foo; echo ~)
。这应该首先打印您的真实主目录,然后打印“ foo”(如您所设)$HOME
。
默认值$HOME
来自您的系统配置。使用getent passwd
列出所有已知用户和他们的主目录。根据您的系统配置,这些条目可能来自/etc/passwd
或来自任何远程目录服务。
如果只想临时重新定义主目录,只需设置另一个$HOME
。
如果您要永久更改它,则必须更改passwd条目,例如通过手动编辑/etc/passwd
。
csh
是相关变量是$home
(小写),您不能setenv HOME /ext1/acheong
-只能set home=/ext1/acheong
,并且对我有用。)
usermod -d
vipw
(或操作系统提供的任何GUI)而不是/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
该文件的第六列是某人键入内容时使用的值所在的位置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 ...
手册页摘录
-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
。
~
到实际主目录以外的其他目录?