Bashのコマンドプロンプトで次のことを試しました。
Sudo cat << EOF > /etc/yum.repos.d/some-name.repo
#Content
#....
#...
EOF
文句を言いました:
-bash: /etc/yum.repos.d/some-name.repo: Permission denied
その後、Sudo su
とSudo
の前のcat
を除いてまったく同じことを試みましたが、問題なく動作しました。上記で何が欠けていますか?
出力リダイレクト(例:>)は、UIDで実行中にcatではなくbashによって実行されます。ルートのUIDで実行するには、Sudoを使用します。
Sudo bash -c 'cat << EOF > /etc/yum.repos.d/some-name.repo
line1
line2
line3
EOF'
別のオプションはティーです。
cat << EOF | Sudo tee -a /etc/yum.repos.d/some-name.repo
...
EOF
@Yuriy Nazarovの答えのバリエーションとして、パイプ出力のみをSudo
で上げる必要があります。パイプでつながれた入力は、高くならないままにすることができます。
Sudo bash -c 'cat > /etc/yum.repos.d/some-name.repo' << EOF
line1
line2
line3
EOF
これは、コマンドの非常に小さな部分を引用して_Sudo
に送信する必要があることを意味します。
他の人が指摘したように、シェルのリダイレクトはcatではなく現在のシェルによって行われます。 Sudoは、リダイレクトを実行するシェルではなく、実行されるプログラムの権限のみを変更します。これに対する私の解決策は、リダイレクトを回避することです。
Sudo dd of=/etc/yum.repos.d/some-name.repo << EOF
テキスト内で 'を使用している場合は、次を使用できます。
$ Sudo bash -c "cat > /etc/postfix/mysql-virtual_forwardings.cf << EOF
user = mail_admin
password = password
dbname = mail
query = SELECT destination FROM forwardings WHERE source='%s'
hosts = 127.0.0.1
EOF
"
これは、Googleクラウドの仮想サーバーcentos 7.0でテストされています