是否可以重新定义主目录?例如,/ext1/username
代替/home/username
,即扩展~
到另一个目录(而不是更改用户主文件所在的实际主目录)。
(这个问题主要是学术性的,因为这样做似乎是不好的做法。csh
尽管阅读了前 10 名,我在使用 的问题上也别无选择。)
mic*_*has 33
波浪号~
由您的 shell 解释。您的 shell 将解释~
为$HOME
.
试试(echo ~; HOME=foo; echo ~)
。这应该首先打印您的真实主目录,然后打印“foo”,正如您设置$HOME
的那样。
的默认值$HOME
来自您的系统配置。使用getent passwd
列出所有已知用户和他们的主目录。根据您的系统配置,这些条目可能来自/etc/passwd
或任何远程目录服务。
如果您只想临时重新定义您的主目录,只需设置另一个$HOME
.
如果您永久想要更改它,您必须更改 passwd 条目,例如通过手动编辑/etc/passwd
.
slm*_*slm 11
用于~
的值是根据您从管理数据库 ( 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
Run Code Online (Sandbox Code Playgroud)
此文件中的第 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
Run Code Online (Sandbox Code Playgroud)
提供这些的“数据库”是通过您的系统解析器控制的,在/etc/nsswitch.conf
.
$ grep passwd /etc/nsswitch.conf
#passwd: db files nisplus nis
passwd: files
Run Code Online (Sandbox Code Playgroud)
上面的文件意味着/etc/passwd
,但“数据库”可能来自 LDAP、NIS 或网络上的其他位置,例如。
创建帐户后执行此操作有点棘手。如果您从头开始创建帐户,那么重新定义用户在其主目录中的位置是微不足道的。运行该useradd
命令时,您可以指定用于用户主目录的位置。
$ useradd -d /ext1/acheong ...
Run Code Online (Sandbox Code Playgroud)
摘自手册页
-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.
Run Code Online (Sandbox Code Playgroud)
这更像是一种外科手术,因为用户主目录的路径经常被静态包含在配置文件中,使其变得更加棘手。
$ grep home /home/sam/.*
/home/sam/.gtkrc-1.2-gnome2:include "/home/sam/.gtkrc.mine"
Run Code Online (Sandbox Code Playgroud)
这些要么需要修复,要么您必须提供指向/home/sam
新位置的链接/ext1/sam
。
/etc/passwd
如果系统正从LDAP,NIS等的主目录,那么你就需要在[执行这些系统的搬迁,以及将文件从移动坐标/home/sam
到/ext1/sam
。
归档时间: |
|
查看次数: |
10423 次 |
最近记录: |