2009-06-15 43 views
86

首先,我知道~/是主目录。 CDing到~~/带我到主目录。tilde在Linux bash中的含义(不是主目录)

但是,cd ~X带我到一个特殊的地方,其中X似乎是任何东西。

在bash,如果我打“cd ~”并按下Tab键,它显示了一堆可能~X选项,如~mail~postgres~ssh。去那些文件夹和做一个pwd告诉我,这些文件夹不在主目录;他们都在这个地方。

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

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

+0

〜X只是返回文字“〜X”,但〜返回$ HOME并且〜+返回$ PWD - 除了获取shell变量外,它们并不特别。即它们不存储这些值或执行查询它们的命令。它们已经被定义。你有没有试过〜 - ?我无法想到它的用途,但它再次返回一个shell变量$ OLDPWD – SDsolar 2017-07-31 02:00:07

回答

16

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

+2

确实它们是〜用户名是指定用户的主目录 – 2009-06-15 22:02:07

33

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

+1

它们不是符号链接,服务帐户没有主目录under/home – 2014-03-05 18:24:30

+0

我的情况最好的答案。另外,在我的特殊情况下,它是根目录/文件夹,而不是主文件夹。 – William 2017-12-27 09:22:04

13

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

CD〜用户名

带你到用户的,因为我有事情成立了回家的路上目录

+0

FTW。给予好评。 TNX清理那个。我不知道有多少个周期甚至是一个子壳。试想一下,如果你的系统有3K用户,就像一个小型的ISP一样。让人惊讶。 – SDsolar 2017-07-31 02:05:19

9

在我的机器,这样做的:

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

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

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

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


这可能是值得一提的是:

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

我不能马上找到“~+”一用,除非你做一些奇怪的东西,在路径移动的符号链接导致目前目录。

你也可以这样做:

cd - 

这意味着同~-

+1

关于`cd〜+`:你可以用它来检查你目前所在的目录是否仍然存在 - 即使它是一种非正统的方式。 – professorsloth 2013-03-20 08:52:13

56

这就是所谓的 “tilde expansion” Bash的功能。它是shell的功能,而不是操作系统。例如,你会得到与csh不同的行为。

要回答您关于信息来自何处的问题:您的主目录来自变量$HOME(无论您在那里存储什么内容),而使用getpwent()实时检索其他用户的家庭。该功能通常由NSS控制;因此默认情况下,值将从/etc/passwd中提取出来,尽管它可以配置为使用任何所需的源(例如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

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用户 “自动安装” 到你的home目录。

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

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

如果您键入标签您会看到机器上的用户列表。