Я пытался установить SSL-сертификат (GoDaddy), следуя их инструкциям для nginx на Centos. ZIP-архив, который я скачал с GoDaddy, содержит 3 файла: основной сертификат, промежуточный сертификат и файл PEM.
У меня есть root-доступ к моему Ubuntu VPS.
Но когда я использую
sudo cat f84e19a2f44c6386.crt gd_bundle-g2-g1.crt >> coolexample.crt
я получил
bash: coolexample.crt: Permission denied.
решение1
При sudo cat a
запуске файлааСодержимое 's было прочитано и выведено на stdout с sudo
привилегиями. Перенаправление текста было обработано оболочкой и будет добавлено в файлб(поскольку >>
использовался). В данном конкретном случае, похоже, файл не имел разрешения на изменение пользователем, не являющимся суперпользователем.
Хотя запуск оболочки от имени пользователя root с помощью sudo su
, sudo -i
или sudo -s
кажется хорошей идеей для преодоления этого ограничения,ноэто не рекомендуется. Может случиться, что shell запущен с sudo
привилегиями и неосознанно, не выходя из root shell, используется какая-то другая команда. И если эта команда введена неправильно, это может нанести серьезный вред системе.
В таких случаях cat
вывод может быть передан по конвейеру иtee
можно использовать. Это утилита, которая считывает ввод из стандартного ввода и вывод в файл и стандартный вывод. Поскольку вы хотите добавить файл, -a
можно использовать option. Таким образом, команда будет выглядеть так:
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