Linux bash中波浪符号的含义(不是主目录)


106

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

但是,cd ~X带我到一个特别的地方,那里X似乎什么都没有。

在bash中,如果我按“ cd ~”并按Tab,它将显示许多可能的~X选项,例如~mail~postgres~ssh。转到这些文件夹并执行一个操作,pwd向我显示这些文件夹不在主目录中。他们到处都是。

它们不是别名。我查过 它们不是env.变量,否则需要$

设置这些链接的方式是什么?在哪里可以找到设置这些链接的位置?


〜X只是返回文字“〜X”,但是〜返回$ HOME,而〜+返回$ PWD-除了获取shell变量以外,它们没有其他区别。也就是说,它们不存储值或执行命令来查找它们。它们已经定义。您尝试过〜-吗?我想不出它的用处,但同样,它会返回一个shell变量$ OLDPWD
SDsolar

Answers:


71

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

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

Tilde扩展不仅仅是主目录查找。总结如下:

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


请注意,除了普通的波浪号(〜)以外,不支持任何其他

他们为什么要提出~+?似乎没有用。
cregox

3
〜+与大致相同。但是,要使用./file之类的东西,必须进入文件系统并找出其中的位置。位于-需要几个周期。使用〜+通过简单地返回遍历文件系统时已经定义的shell变量$ PWD的内容来节省工作。
SDsolar '17

32

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


1
它们不是符号链接,服务帐户在/ home下没有主目录
Ana Betts 2014年

就我而言,最好的答案。另外,在我的特定情况下,它是根目录/文件夹,而不是主文件夹。
wlwl2

16

它们是用户的主目录/etc/passwd吗?诸如postgres,sendmail,apache等服务可创建具有普通用户目录的系统用户。


2
实际上,它们是
〜username

14

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

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


FTW。赞成。TNX对此进行了清理。我不知道该循环涉及多少个循环,甚至可能涉及一个子外壳。试想一下,如果您的系统有3K用户,例如小型ISP。kes
SDsolar '17

9

在我的机器上,由于我进行设置的方式,因此请执行以下操作:

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

首先关注环境变量的价值$HOME; 我故意将其设置$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 -

这与的含义相同~-


1
关于cd ~+:您可能会用它来检查您当前所在的目录是否仍然存在-即使这是一种非常不合常规的方式。
Professorsloth


1

如果您正在使用,autofs则扩展实际上可能来自/etc/auto.home(或与您的发行版相似)。例如,我/etc/auto.master看起来像:

/home2 auto.home --timeout 60

/etc/auto.home看起来像:

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

0

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

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

与目录的自动挂载相似,OpenDirectory / ActiveDirectory / LDAP在大型/公司环境中用于自动挂载用户目录。这些用户可以是真实的人,也可以是创建以提供各种功能的机器帐户。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.