【发布时间】:2009-02-14 08:01:32
【问题描述】:
我只是刚接触SSH,但是当我登录时,我最终进入目录〜,这通常是FTP进入时的同一个目录。我仍然可以去/,但我不知道什么~的意思。家?它与 / 有什么关系,或者我怎么能找到?
【问题讨论】:
-
(如何)这个问题与编程有关吗? (试图找出在stackoverflow上接受什么样的问题......)
标签: linux unix shell command-line
我只是刚接触SSH,但是当我登录时,我最终进入目录〜,这通常是FTP进入时的同一个目录。我仍然可以去/,但我不知道什么~的意思。家?它与 / 有什么关系,或者我怎么能找到?
【问题讨论】:
标签: linux unix shell command-line
~ 是当前登录用户主目录的别名。要找出它的真正位置,请在登录后立即输入pwd(代表:打印工作目录),这应该会为您提供相对于/ 的位置。大概是这样的:
/home/myusername
【讨论】:
~ 是你的主目录,是的。这非常好,因为您的主目录并不总是您认为应该在的位置(/home/)。
另外,有趣的事实:您可以使用“cd ~myuser”进入用户“myuser”的主目录。
【讨论】:
正如其他人评论的那样,波浪号表示您当前的$HOME 目录。这可能与您的用户名的~username 的值相同,也可能不同。在我的机器上,$HOME 和 ~ 都指的是/work1/jleffler。但是,~jleffler 是对 NFS 挂载目录 /u/jleffler 的引用,如 /etc/passwd 文件(或任何等效数据库 - POSIX 标准根据 getpwnam() 函数定义的行为;见下文) .我的个人资料仔细设置$HOME。找出哪些软件包使用了错误的主目录定义是很有趣的(也就是令人恼火的)。
对于大多数人来说,~ 和 ~username 的用户名相同,但这不是必需的。鉴于您提出的问题,几乎可以肯定~ 和~username 是相同的。
引用 POSIX.1-2008 的第 2.6.1 节“波浪号扩展”:
“波浪号前缀”由单词开头的不带引号的
<tilde>字符组成,后跟单词中第一个不带引号的<slash>之前的所有字符,或者单词中的所有字符(如果有)不是<slash>。 [...] 如果登录名为空(即波浪号前缀仅包含波浪号),波浪号前缀将替换为变量 HOME 的值。如果 HOME 未设置,则未指定结果。否则,波浪号前缀应替换为与使用getpwnam()函数[...] 获得的登录名相关联的初始工作目录的路径名。如果系统无法识别登录名,则结果未定义。
【讨论】:
你可以试试realpath
realpath ~
【讨论】:
是的,它是您登录用户的主目录。您可以使用命令pwd(打印工作目录)查看它在文件系统上的位置。
【讨论】:
~ 正如已经指出的那样,会扩展到您的主目录,但我认为值得注意的是,这不是 ssh 本身的功能。
ssh(还有很多其他很棒的功能!)让你建立一个远程shell,这个shell可以由许多不同的软件提供。
在 *nix 系统上,您的帐户将与特定的 shell 相关联,GNU bash 是一个流行的选择。它比 bash 和大多数其他 POSIX 兼容的 shell tilde character expands as a shortcut to your home directory 更是如此。
【讨论】:
/ 是文件系统的根 ~/ 或 ~ 是您个人资料的根目录,~/ 始终是 /home/username
【讨论】:
不同的 shell 可能会或可能不会以不同的方式处理这个问题,但 Johnathan 没有站出来说出来就最接近了。 shell 将“~”扩展为存储在 $HOME 环境变量中的任何内容。 shell 将 ~username 扩展为给定用户名的 /etc/passwd 的 shell 字段中列出的任何内容。如果您不覆盖它,shell(或 ssh,取决于实现)会将 $HOME 设置为 /etc/passwd 中的主字段,因此它们都是相同的(假设您是“用户名”)直到你换一个。
至于为什么你会在 ssh 中看到 ~...
提示说“~”很可能是您的当前目录,因为您使用 Bash 作为 shell,并且 $PS1 的值(您看到的提示字符串 - 它设置在 /etc/profile 或 /etc/profile .d/*,很可能)在某处包含 \w 或 \W。提示符中的 \w 字符串显示当前目录,并在您位于 $HOME 指定的目录时折叠为“~”。这是一个从我的 homedir 开始的小演示 - 请注意“\w”如何被当前目录或 ~ 替换,这取决于 HOME 的值设置为什么。另请注意,尾部斜杠不起作用 - HOME 不能以斜杠结尾以使其起作用。 :)
danny@machine ~ > export PS1='\w > ' # change my prompt (effective on next line)
~ > cd /tmp # move to /tmp to demonstrate
/tmp > export HOME=/tmp/ # set HOME to include trailing /
/tmp > export HOME=/tmp # try again without trailing /
~ > # notice that this works
~ > cd /home/danny # back to homedir
/home/danny > export HOME=/home/danny # see how it's /home/danny, not ~
~ > export PS1='danny@machine \w > ' # after resetting $HOME, it should work ok
danny@machine ~ > # hooray!
【讨论】:
~ 是你的主目录。查看路径类型:
echo ~
在终端中
【讨论】:
与 / 相关的 home 不一定总是在同一个地方。这就是 ~ 快捷方式如此有用的原因。回家的路径应该在 $HOME 中。尝试输入
echo $HOME
【讨论】:
主目录不必像kigurai 所指出的那样位于/home 下。
【讨论】: