我尝试按照他们在 Centos 上针对 nginx 的说明安装 SSL 证书 (GoDaddy)。我从 GoDaddy 下载的 zip 包含 3 个文件 - 一个主证书、一个中级证书和一个 PEM 文件。
我对我的 Ubuntu VPS 具有 root 访问权限。
但是当我使用
sudo cat f84e19a2f44c6386.crt gd_bundle-g2-g1.crt >> coolexample.crt
我明白了
bash: coolexample.crt: Permission denied.
答案1
sudo cat a
运行时,文件A的内容被读取并打印在 stdout 上,具有sudo
权限。文本的重定向由 shell 处理,并将附加到文件b(因为>>
已使用)。在此特定情况下,似乎该文件没有非超级用户修改的权限。
sudo su
尽管使用或以 root 身份运行 shellsudo -i
似乎sudo -s
是克服此限制的好主意,但不建议这么做。可能会发生这样的情况:shell 以sudo
特权运行,并且在不知情的情况下未退出 root shell,就使用了其他命令。如果该命令输入错误,可能会对系统造成严重损害。
在这种情况下,cat
的输出可以通过管道传输,tee
可以使用。它是一个实用程序,它从标准输入读取输入并输出到文件和标准输出。由于您想要附加文件,-a
可以使用选项。因此,命令将如下所示:
sudo cat f84e19a2f44c6386.crt gd_bundle-g2-g1.crt | sudo tee -a coolexample.crt
我以为f84e19a2f44c6386.crt和gd_bundle-g2-g1.crt没有普通用户阅读的权限。
答案2
尝试以超级用户身份登录
sudo -s
然后在开始时不使用 sudo 再次尝试您的命令。
它不起作用的原因是重定向是由 shell 而不是 cat 完成的。有关更多信息,请参阅此答案:https://askubuntu.com/a/230482