38406
VirtualBox にCentOSを入れてみました。  
初めにrootでログインしたんですが、`root@localhost ~`となっています。`~` って何だろうと思って `cd ..` してから `ls`
すると以下のファイル群が並んでいます。

```

    bin dev home lib64 mnt proc run srv tmp var
    boot etc lib media opt root sbin sys usr
    
```

ここには、`~` が並んでいないんですが、半信半疑で試しに `cd ~` とすると、また `root@localhost ~` に戻ってこれます。

この `~` とは何なんでしょうか？
CC BY-SA 4.0
2017-10-04T02:01:36.477
38405
2020-07-25T06:16:39.730
2020-07-25T06:16:39.730
3060
question
linux centos shell
"cd ~" で指定する ~ の意味は？
`~` とは、シェル (bash/sh/zsh)
に対する引数において、ホームディレクトリとして展開してくれ、という指示を表す省略記号のようなものです。正式名称は [Tilde
Expansion](https://www.gnu.org/software/bash/manual/html_node/Tilde-
Expansion.html) です。プロンプトで表示される `root@localhost ~` は、逆にシェルが、「今 `root` で
localhost  
にログインしていて、カレントディレクトリは `~` (つまりホームディレクトリ) だよ」ということを伝えてきています。

一般的な linux ディストリビューションにおいては、 root ユーザーのホームディレクトリは `/root` に設定されています。なので、

  * `~` から `cd ..`: カレントディレクトリがルートディレクトリ(`/`) になる。
  * `cd ~`: `cd /root` と等価。

`bin` や `dev` は、ルートディレクトリ直下のディレクトリ群です。
CC BY-SA 3.0
2017-10-04T02:07:14.430
38406
2017-10-04T02:07:14.430
754
38405
answer
単に`~`を入力した場合は **自分自身が現在ログインしているユーザー** のホームディレクトリを指しますが、  
`~USER`のようにチルダに続けてユーザー名を入力すると **指定したユーザ** のホームディレクトリを指すこともできます。

rootユーザーのみホームが`/root`に設定されていますが、一般ユーザーは`/home/`の下にサブディレクトリとしてホームが設定されることが多いので、例えば`taro`というユーザーが存在した場合は以下いずれかの形で参照することができます。

  * /home/taro
  * ~taro
CC BY-SA 3.0
2017-10-04T06:57:16.717
38416
2017-10-04T06:57:16.717
3060
38405
answer