it-swarm.com.de

sudo cat << EOF> Datei funktioniert nicht, Sudo su funktioniert nicht

Ich habe Folgendes auf der Eingabeaufforderung in Bash versucht:

Sudo cat << EOF > /etc/yum.repos.d/some-name.repo
#Content
#....
#...
EOF

Es hat sich beschwert:

-bash: /etc/yum.repos.d/some-name.repo: Permission denied

Dann habe ich Sudo su und haben genau das Gleiche versucht, außer dem Sudo vor cat, und es hat problemlos funktioniert. Was fehle ich oben?

42
iamauser

Die Ausgabeumleitung (z. B.>) wird von bash und nicht von cat ausgeführt, während Sie mit Ihrer UID ausgeführt werden. Um mit der UID von root zu laufen, benutze Sudo:

Sudo bash -c 'cat << EOF > /etc/yum.repos.d/some-name.repo
line1
line2
line3
EOF'
67
Yuriy Nazarov

Eine andere Option ist Tee.

cat << EOF | Sudo tee -a /etc/yum.repos.d/some-name.repo
...
EOF
29
Mark

Als Variation zu @Yuriy Nazarovs Antwort muss nur die Pipe-Ausgabe durch Sudo erhöht werden. Der Pipe-Eingang kann nicht erhöht bleiben:

Sudo bash -c 'cat > /etc/yum.repos.d/some-name.repo' << EOF
line1
line2
line3
EOF

Dies bedeutet, dass ein viel kleinerer Teil des Befehls in Anführungszeichen gesetzt und an Sudo gesendet werden muss.

17
Stephen Quan

Wie andere angemerkt haben, erfolgt die Shell-Umleitung von der aktuellen Shell und nicht von cat. Sudo ändert nur die Berechtigung des ausgeführten Programms, nicht die der Shell, die die Umleitung durchführt. Meine Lösung dafür ist, die Weiterleitung zu vermeiden:

Sudo dd of=/etc/yum.repos.d/some-name.repo << EOF
11
user2359330

wenn Sie im Text 'verwenden, können Sie Folgendes verwenden:

$ 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
"

dies wird auf dem virtuellen Server Centos 7.0 von Google Cloud getestet

2
Alp Altunel