Centos 上の nginx の手順に従って、SSL 証明書 (GoDaddy) をインストールしようとしていました。GoDaddy からダウンロードした zip には、プライマリ証明書、中間証明書、PEM ファイルの 3 つのファイルが含まれています。Ubuntu
VPS のルート アクセス権を持っています。
しかし、私が
sudo cat f84e19a2f44c6386.crt gd_bundle-g2-g1.crt >> coolexample.crt
私は
bash: coolexample.crt: Permission denied.
答え1
が実行されるとsudo cat a
、ファイル1つのの内容は、sudo
権限を持って標準出力に読み込まれ、印刷されました。テキストのリダイレクトはシェルによって処理され、ファイルに追加されます。b(>>
が使用されているため)。この特定のケースでは、ファイルにスーパーユーザー以外のユーザーによる変更権限がなかったようです。
sudo su
この制限を克服するには、sudo -i
またはを使用してシェルをルートとして実行するsudo -s
のがよい考えのように思えますが、しかし推奨されません。シェルがsudo
特権で実行されていて、知らないうちにルート シェルを終了せずに他のコマンドが使用される可能性があります。そのコマンドを誤って入力すると、システムに重大な損害を与える可能性があります。
このような場合、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 なしでコマンドを再度実行してください。
動作しない理由は、リダイレクトが cat ではなくシェルによって実行されるためです。詳細については、次の回答を参照してください。https://askubuntu.com/a/230482