是否可以重新定义波浪号('~',主目录)?

And*_*ong 15 solaris csh home

是否可以重新定义主目录?例如/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.

  • 要永久更改它,您还可以使用`usermod -d` (3认同)

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 ~来源。

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
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

参考