【问题标题】:What directory is '~' when I type 'cd ~'?当我输入“cd ~”时,“~”是什么目录?
【发布时间】:2009-02-14 08:01:32
【问题描述】:

我只是刚接触SSH,但是当我登录时,我最终进入目录〜,这通常是FTP进入时的同一个目录。我仍然可以去/,但我不知道什么~的意思。家?它与 / 有什么关系,或者我怎么能找到?

【问题讨论】:

  • (如何)这个问题与编程有关吗? (试图找出在stackoverflow上接受什么样的问题......)

标签: linux unix shell command-line


【解决方案1】:

~ 是当前登录用户主目录的别名。要找出它的真正位置,请在登录后立即输入pwd(代表:打印工作目录),这应该会为您提供相对于/ 的位置。大概是这样的:

/home/myusername

【讨论】:

  • 您的配置文件链可以很容易地在提示出现之前更改您当前的工作目录。更可靠的方法是“(cd ; pwd)”,在子shell中切换到您的主目录,然后打印出工作目录。
  • 实际上,这也不是真的,因为 .bashrc 也会为每个子 shell 运行(因此可以更改目录)。甚至可以修改 $HOME :-)。最安全的是检查 /etc/passwd 中的条目。
  • ~ 始终是 $HOME 设置的任何值,因此 ctrl 的“echo ~”建议将起作用,“echo $HOME”或“cd;pwd”也将起作用(因为 cd 默认更改为 $家)。你不应该怀疑自己,pax。 :)
  • 检查 /etc/passwd 仅当您的系统真正使用 /etc/passwd 时才会起作用 - 例如,基于 LDAP 的身份验证可能不是这种情况。 .
【解决方案2】:

~ 是你的主目录,是的。这非常好,因为您的主目录并不总是您认为应该在的位置(/home/)。

另外,有趣的事实:您可以使用“cd ~myuser”进入用户“myuser”的主目录。

【讨论】:

  • 有一次它不会是你“认为”它应该在 OS X 上的位置——“~”扩展为“/Users/myuser”而不是“/home/myuser”。使用“~”很好,所以我们 OS X 用户仍然可以获得相同的功能!
  • 较旧的 Unix 系统通常没有 /home 目录,因此主目录位于 /usr/users 之类的目录下。使用“~”也适用于他们。
【解决方案3】:

正如其他人评论的那样,波浪号表示您当前的$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() 函数[...] 获得的登录名相关联的初始工作目录的路径名。如果系统无法识别登录名,则结果未定义。

【讨论】:

  • 这篇关于 /etc/passwd 和 ~ 的帖子多么奇怪,但这不是公认的答案。
  • 迟到了一个小时:D
【解决方案4】:

你可以试试realpath

realpath ~

【讨论】:

    【解决方案5】:

    是的,它是您登录用户的主目录。您可以使用命令pwd(打印工作目录)查看它在文件系统上的位置。

    【讨论】:

      【解决方案6】:

      ~ 正如已经指出的那样,会扩展到您的主目录,但我认为值得注意的是,这不是 ssh 本身的功能。

      ssh(还有很多其他很棒的功能!)让你建立一个远程shell,这个shell可以由许多不同的软件提供。

      在 *nix 系统上,您的帐户将与特定的 shell 相关联,GNU bash 是一个流行的选择。它比 bash 和大多数其他 POSIX 兼容的 shell tilde character expands as a shortcut to your home directory 更是如此。

      【讨论】:

        【解决方案7】:

        / 是文件系统的根 ~/ 或 ~ 是您个人资料的根目录,~/ 始终是 /home/username

        【讨论】:

        • 它并不总是 /home/username,因为您不必将主目录放在 /home 下。我建议在您获得 -1 之前澄清这一点:-)
        • 并且不强制是密码文件中列出的目录。通常是这样。
        【解决方案8】:

        不同的 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!
        

        【讨论】:

          【解决方案9】:

          ~ 是你的主目录。查看路径类型:

          echo ~
          

          在终端中

          【讨论】:

            【解决方案10】:

            与 / 相关的 home 不一定总是在同一个地方。这就是 ~ 快捷方式如此有用的原因。回家的路径应该在 $HOME 中。尝试输入

            echo $HOME

            【讨论】:

              【解决方案11】:

              主目录不必像kigurai 所指出的那样位于/home 下。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2014-07-29
                • 1970-01-01
                • 2021-12-11
                • 1970-01-01
                • 2014-07-24
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多