【手品】Linux shell ホームディレクトリのトリック

こんにちは!

いきなりですが、 下記はとあるDockerコンテナ(Ubuntuイメージ)内で実行したコマンドと実行結果になります。

$ id -un
root

$ echo ~/
/tmp/

$ echo ~root/
/root/

これ不思議じゃないですか? 自分は最初あれってなりました。 まず、そもそもコマンドの意味が分からない分からなかった方々のために、一行ずつ見ていきます。


  • 下記で、コマンドを実行しているユーザは「root」ということを表してます。
$ id -un
root

  • 下記で、ホームディレクトリは「/tmp」ということを表してます。
$ echo ~/
/tmp/

  • 下記で、rootユーザのホームディレクトリは「/root」ということを表してます。
$ echo ~root/
/root/

つまり、実行しているユーザは「root」で、rootユーザのホームディレクトリは「/root」のはずなのに、 現状のホームディレクトリは「/tmp」という表示になってます。






これには、タネもシカケも有りません・・・。







タネあかしをします・・・。







LinuxにはHOMEという環境変数があり、 下記のようにするとホームディレクトリ(~)だけを「/tmp」にすることが出来ます!
$ export HOME=/tmp

このやり方でホームディレクトリを変更したため、不思議な状態になっていました。




最後に余談ですが、ユーザのホームディレクトリ(~user名)の方を変更したい場合は、下記のコマンドを使います。

usermod -d [ディレクトリパス] [ユーザ名]

少しでもお楽しみ頂けていれば幸いです。
もしよければちょっとした宴会芸としてお使い下さい(?)

以上です。

Linux  Bash  Docker