这是相当微不足道的,我只是好奇为什么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,尽管通常是。