在Linux bash(不是主目录)中代字符的含义

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

不过, cd ~X把我带到了一个特殊的地方,那里的X好像是什么东西。

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

他们不是别名。 我查过了 他们不env. variables,否则他们会需要一个$

什么是设置这些链接,我在哪里可以find这些设置?

这是一个名为“ 波浪扩展 ”的Bash特性。 这是一个shell的function,而不是操作系统。 例如,您将获得与csh不同的行为。

要回答你关于信息来自哪里的问题:你的主目录来自variables$HOME (不pipe你在那里存储什么),而其他用户的家庭是使用getpwent()实时检索的。 这个function通常由NSS控制; 所以默认情况下,值被从/etc/passwd取出,尽pipe它可以被configuration为使用任何所需的源(如NIS,LDAP或SQL数据库)来检索信息。

Tilde扩展比主目录查找更多。 这里有一个总结:

 ~ $HOME ~fred (freds home dir) ~+ $PWD (same effect as ./) ~- $OLDPWD (your previous directory) ~1 `dirs +1` ~2 `dirs +2` ~-1 `dirs -1` 

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

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

它们是/etc/passwd中用户的主目录吗? 诸如postgres,sendmail,apache等服务可以像普通用户一样创build拥有主目录的系统用户。

那些是用户,请检查你的/ etc / passwd

cd〜用户名

把你带到那个用户家里

在我的机器上,因为我设置的方式,做:

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

第一个注意环境variables$HOME的值; 我故意将我的$HOME设置为本地文件系统,而不是NFS安装的文件系统。 第二个从密码文件中读取(近似地,NIS使事情变得复杂一些),并且发现密码文件说我的主目录是/u/jleffler并且改变到那个目录。

恼人的是,大多数软件的行为如上(和POSIX规范的壳需要这种行为)。 我使用了一些软件(我没有太多select使用它)将密码文件中的信息视为$ HOME的当前值,这是错误的。

正如其他人所指出的那样,将“ cd ~x ”应用到用户“x”的主目录,更一般地说,每当代字符扩展完成时, ~x表示用户“x”的主目录(如果用户'x'不存在则是错误的)。


值得一提的是:

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

我不能马上find' ~+ '的用法,除非你在通往当前目录的path中移动符号链接来做一些奇怪的事情。

你也可以这样做:

 cd - 

这意味着~-

如果您使用的是autofs那么扩展实际上可能来自/etc/auto.home (或者类似于您的发行版)。 例如,我的/etc/auto.master看起来像:

 /home2 auto.home --timeout 60 

/etc/auto.home看起来像:

 mgalgs -rw,noquota,intr space:/space/mgalgs 

您可能会将OpenDirectory / ActiveDirectory / LDAP用户“自动安装”到您的主目录中。

在* nix中, ~会parsing到你的主目录。 同样, ~X将parsing为“用户X”。

与用于目录的automount类似,OpenDirectory / ActiveDirectory / LDAP用于大型企业环境中以自动安装用户目录。 这些用户可能是真实的用户,也可能是为创build各种function而创build的计算机帐户。

如果你input〜Tab,你会看到你机器上的用户列表。