What directory is '~' when I type 'cd ~'?

前端 未结 11 1743
伪装坚强ぢ
伪装坚强ぢ 2021-01-05 20:32

I\'m only new to using SSH, but when I log in I end up in the directory ~, which in general is the same directory when FTPing in. I can still go to /, but I don\'t know what

相关标签:
11条回答
  • 2021-01-05 21:29

    ~ expands to your home directory, as has been pointed out, but I think it's worth noting that isn't a feature of ssh itself.

    ssh (among many other wonderful features!) lets you establish a remote shell, and this shell can provided by many different pieces of software.

    On a *nix system, your account will be associated with a particular shell, GNU bash is a popular choice. And it so happens than in bash, and most other POSIX compliant shells, the tilde character expands as a shortcut to your home directory.

    0 讨论(0)
  • 2021-01-05 21:29

    / is the root of the file system ~/ or ~ is the root of your profile, ~/ is always /home/username

    0 讨论(0)
  • 2021-01-05 21:34

    And home, in relation to /, isn't necessarily always in the same place. That's why the ~ shortcut is so useful. The path to home should be in $HOME. Try typing

    echo $HOME

    0 讨论(0)
  • 2021-01-05 21:35

    ~ is your home directory, yes. Which is very nice since your home directory is not always where you think it should be (/home/).

    Also, fun fact: You can use "cd ~myuser" to get to the home directory of the user "myuser".

    0 讨论(0)
  • 2021-01-05 21:35

    Different shells may or may not handle this differently, but Johnathan got the closest without coming out and saying it. The shell expands "~" to whatever's stored in the $HOME environment variable. The shell expands ~username to whatever's listed in the shell field of /etc/passwd for the given username. If you don't override it, the shell (or ssh, depending on the implementation) will set $HOME to be the home field from /etc/passwd, so they're both the same (assuming you're "username") until you change one.

    As to why you see a ~ in ssh...

    The prompt says "~" is your current directory most likely because you're using Bash as your shell, and the value of $PS1 (the prompt string you see - it's set in /etc/profile or /etc/profile.d/*, more than likely) contains a \w or a \W somewhere. The \w string in the prompt shows the current directory, and collapses to a "~" when you're in the directory specified by $HOME. Here's a little demo starting in my homedir - note how the "\w" gets replaced with either the current directory or with a ~, based on what the value of HOME is set to. Also note that the trailing slash doesn't work - HOME can't end with a slash for this to work. :)

    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!
    
    0 讨论(0)
提交回复
热议问题