113

首先,我知道那~/是主目录。CDing 到~~/带我到主目录。

然而,cd ~X把我带到了一个特殊的地方,那里X似乎有什么东西。

在 bash 中,如果我点击 " cd ~" 并点击 tab,它会显示一堆可能的~X选项,比如~mailand~postgres~ssh。去那些文件夹并做一个pwd告诉我这些文件夹不在主目录中;他们到处都是。

它们不是别名。我已经检查过了。它们不是env.变量,否则它们需要一个$.

是什么设置了这些链接,我在哪里可以找到这些链接的设置位置?

4

8 回答 8

81

这是一个称为“波浪号扩展”的 Bash 功能。这是外壳的功能,而不是操作系统。例如,您将使用 csh 获得不同的行为。

要回答有关信息来自何处的问题:您的主目录来自变量$HOME(无论您在那里存储什么),而其他用户的主目录是使用getpwent(). 该功能通常由NSS控制;因此默认情况下会从 中提取值/etc/passwd,尽管可以将其配置为使用所需的任何源检索信息,例如 NIS、LDAP 或 SQL 数据库。

波浪号扩展不仅仅是主目录查找。这是一个摘要:

~              $HOME
~fred          (freds home dir)

~+             $PWD       (your current working directory)
~-             $OLDPWD    (your previous directory)
~1             `dirs +1`
~2             `dirs +2`
~-1            `dirs -1`

dirs~1,等与和~-1一起使用。pushdpopd

编辑添加:

正如Sean Bright在评论中指出的那样,关于主目录的基线波浪号行为被编入符合 POSIX 标准的shell 的标准行为。此外,还指定了wordexp() C API 函数来实现此行为。虽然,显然,谨慎使用。

于 2009-11-02T08:41:14.887 回答
36

这些是用户的主目录。cd ~(your username)例如,尝试。

于 2009-06-15T22:01:16.680 回答
17

它们是用户的主目录/etc/passwd吗?postgres、sendmail、apache 等服务创建的系统用户与普通用户一样具有主目录。

于 2009-06-15T22:00:23.593 回答
15

那些是用户。检查您的/etc/passwd.

cd ~username将您带到该用户的主目录。

于 2009-06-15T22:02:04.337 回答
9

在我的机器上,由于我的设置方式,正在执行:

cd ~             # /work1/jleffler
cd ~jleffler     # /u/jleffler

首先注意环境变量的值$HOME;我故意将 my 设置$HOME为本地文件系统,而不是 NFS 挂载的文件系统。第二个从密码文件中读取(大约;NIS 使事情变得有点复杂)并发现密码文件说我的主目录是/u/jleffler并且更改到该目录。

烦人的事情是大多数软件的行为都与上述相同(并且 shell 的 POSIX 规范需要这种行为)。我使用了一些软件(而且我没有太多选择使用它)将密码文件中的信息视为 $HOME 的当前值,这是错误的。

将此应用于问题 - 正如其他人指出的那样,' cd ~x'进入用户'x'的主目录,更一般地说,每当波浪号扩展完成时,~x意味着用户'x'的主目录(这是一个错误如果用户“x”不存在)。


可能值得一提的是:

cd ~-       # Change to previous directory ($OLDPWD)
cd ~+       # Change to current directory ($PWD)

我无法立即找到 ' ~+' 的用途,除非您在通向当前目录的路径中移动符号链接来做一些奇怪的事情。

你也可以这样做:

cd -

这意味着与 相同~-

于 2009-06-15T22:37:54.860 回答
5

Bash 中的波浪号扩展:

http://bash-hackers.org/wiki/doku.php/syntax/expansion/tilde

于 2009-06-15T23:03:40.727 回答
1

如果您正在使用,autofs那么扩展实际上可能来自/etc/auto.home(或类似的发行版)。例如,我的/etc/auto.master样子:

/home2 auto.home --timeout 60

看起来/etc/auto.home像:

mgalgs -rw,noquota,intr space:/space/mgalgs
于 2014-11-21T18:43:23.073 回答
0

您可能会看到 OpenDirectory/ActiveDirectory/LDAP 用户“自动挂载”到您的主目录中。

在 *nix 中,~将解析到您的主目录。同样~X将解析为“用户 X”。

与目录的自动挂载类似,OpenDirectory/ActiveDirectory/LDAP 在较大/企业环境中用于自动挂载用户目录。这些用户可能是真实的人,也可能是为提供各种功能而创建的机器帐户。

如果您键入~Tab,您将看到计算机上的用户列表。

于 2016-04-27T18:06:13.470 回答