为什么 `mkdir ~root/.ssh` 与 `mkdir /root/.ssh` 相同?

为什么 `mkdir ~root/.ssh` 与 `mkdir /root/.ssh` 相同?

这是相当微不足道的,我只是好奇为什么mkdir ~root/.ssh与 相同mkdir /root/.ssh?我正在查看以下 docker 文件,创建者使用它mkdir ~root/.ssh来创建.ssh目录:

https://github.com/macropin/docker-sshd/blob/master/Dockerfile

其中一种相对于另一种有什么优势吗?当我第一次读到它时,我认为它~root会扩展到/rootroot.

答案1

~USER只是 user 主目录的简写符号USER。对于普通用户来说,通常是/home/USER,但对于 root 用户来说,通常是/root

至于您的问题是否优于另一个:唯一的区别是~root动态扩展到根目录的主目录,而 是/root不经过任何扩展过程的绝对路径。您想要什么取决于您的特定用例。如果您希望脚本在 root 的主目录位于除 之外的其他位置的计算机上运行/root,​​请使用~root。如果您想确保/root始终使用绝对路径,请使用/root

实际上,在大多数情况下它应该没有任何区别,尽管我个人觉得使用更安全,/root除非我有理由期望我的脚本将在 root 的主目录不存在的计算机上运行/root

答案2

符号“~”是一个特殊的快捷字符,可用于指代您的主目录。

~root将等于root用户主目录,即/root.
~代表登录用户的主目录,如果您使用~user它,将返回您user的主目录。

答案3

有一个明显的优势mkdir ~root/.ssh——mkdir/root/.ssh前者可以灵活地扩展~root到 root 用户实际的主目录。如果您决定希望 root 用户的主目录为 /root2 或 /home/root 或 /root 之外的任何目录,该怎么办?

答案4

正如其他答案中已经提到的,这取决于您打算在哪里创建新目录。 “mkdir /root/.ssh”形式明确地在该绝对路径处创建它(假设目录 /root 已经存在并且没有其他错误)。但是,由于您打算创建目录 .ssh,该目录通常用于存储 ssh 所需的信息,因此我的看法是您应该更喜欢其他形式的“mkdir ~root/.ssh”,因为它(假设没有其他错误)创建新目录 .ssh 恰好位于 ssh 命令所期望的位置 - 在 root 用户的主目录中,无论它位于文件系统中的确切位置,并且不一定总是 /root,尽管通常是。

相关内容