在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
等,与pushd
和popd
一起使用。
这些是用户的主目录。 试试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 -
这意味着~-
。
在Bash的Tilde扩展:
http://bash-hackers.org/wiki/doku.php/syntax/expansion/tilde
如果您使用的是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,你会看到你机器上的用户列表。