首先,我知道~/
是主目录。 CD转到~
或~/
会将我带到主目录。
但是,cd ~X
将我带到了一个特殊的地方,X
似乎是任何地方。
在bash中,如果我点击“cd ~
”并点击标签,它会显示一堆可能的~X
选项,例如~mail
和~postgres
以及~ssh
。转到这些文件夹并执行pwd
向我显示这些文件夹不在主目录中;他们到处都是。
它们不是别名。我查过了。
它们不是env.
变量,否则它们需要$
。
设置这些链接是什么,我在哪里可以找到这些链接的位置?
答案 0 :(得分:66)
这是一个名为“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
等与pushd
和popd
一起使用。
答案 1 :(得分:33)
这些是用户的主目录。例如,尝试cd ~(your username)
。
答案 2 :(得分:16)
它们是/etc/passwd
中用户的主目录吗? postgres,sendmail,apache等服务可以像普通用户一样创建具有主目录的系统用户。
答案 3 :(得分:13)
那些是用户,请检查您的/ etc / passwd
cd~username
带你到那个用户家庭目录
答案 4 :(得分: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 -
这意味着与~-
相同。
答案 5 :(得分:5)
答案 6 :(得分:1)
如果您正在使用autofs
,则扩展实际上可能来自/etc/auto.home
(或类似于您的发行版)。例如,我的/etc/auto.master
看起来像:
/home2 auto.home --timeout 60
和/etc/auto.home
看起来像:
mgalgs -rw,noquota,intr space:/space/mgalgs
答案 7 :(得分:0)
您可能会看到OpenDirectory / ActiveDirectory / LDAP用户“自动安装”到您的主目录中。
在* nix中,~
将解析到您的主目录。同样,~X
将解析为“用户X”。
与目录的automount类似,OpenDirectory / ActiveDirectory / LDAP在较大/企业环境中用于自动挂载用户目录。这些用户可能是实际用户,也可能是为了提供各种功能而创建的计算机帐户。
如果您输入〜 Tab ,您将看到计算机上的用户列表。