linux – sudoでファイルに追加するには?

command-line linux sudo

したいと思っています

echo "something" >> /etc/config_file

でも、このファイルに書き込み権限を持っているのはrootユーザーだけなので、それができません。しかし、以下のようにしてもうまくいきません

sudo echo "something" >> /etc/config_file

このような状況で、最初にsudo‘dエディタでファイルを開いてから、手で新しい内容を追加しなくても、ファイルに追加する方法はありますか?

  296  Helder S Ribeiro  2010-05-01


ベストアンサー

tee -a (またはtee --append)とsudoを併用してください

tee - read from standard input and write to standard output and files
[...]
-a, --append
append to the given FILEs, do not overwrite
[...]

だから、あなたの命令はこうなる

echo "something" | sudo tee -a /etc/config_file

管理者権限でBashを実行するよりもteeの方がメリットがあります

  • 管理者権限でBashを実行しない
  • ファイルへの書き込み」の部分だけが高度なパーミッションで実行されます
  • 複雑なコマンドの引用の方がはるかに簡単です

417  akira  2010-05-01


リダイレクトは現在のシェルで実行されます。昇格した権限でリダイレクトを実行するには、シェル自体を昇格した権限で実行する必要があります

sudo bash -c "somecommand >> somefile"

55  Ignacio Vazquez-Abrams  2010-05-01


sudoにサブシェルを起動させます

sudo sh -c "echo 'JAVA_HOME=/usr/lib/jvm/java-6-sun' >> /etc/profile"

この例では、sudo は残りの部分を引数として “sh” を実行しています

(これは sudo man ページに例として示されています)

27  Doug Harris  2009-10-13


私は通常、shell HERE documentをsudo tee -aで使用しています。の行に沿って何かを実行します

sudo tee -a /etc/profile.d/java.sh << 'EOF'
# configures JAVA
JAVA_HOME=/usr/lib/jvm/java-8-oracle
export JAVA_HOME
export PATH=$PATH:$JAVA_HOME/bin
EOF

7  Nicholas Sushkin  2016-06-16


私の中では、この場合のベストはDDだと思っています

sudo dd of=/etc/profile <<< END
JAVA_HOME=/usr/lib/jvm/java-6-sun
END

5  user316693  2014-04-18


ここのsudoとリダイレクトに問題があるかもしれません。代わりにお好みのテキストエディタを使って行を追加してください

sudo nano /etc/profile

それか、代わりにsuを試してみてはいかがでしょうか

su
echo ‘JAVA_HOME=/usr/lib/jvm/java-6-sun’ >> /etc/profile
exit

3  Bobby  2009-10-13


これは非常にシンプルで、よくあることですが、sudoを最初に置きます

sudo sed -i '$a something' /etc/config_file

$aはファイルの最後に追加するという意味です

2  antonio  2020-01-12


これは、(>>を使って) sudoの出力をリダイレクトしようとしている場合には動作しません。本当にやりたいのは echo の出力をリダイレクトすることです。お気に入りのエディタを使って、その行を手動で /etc/profile に追加することをお勧めします。これには、/etc/profileがすでにJAVA_HOMEを設定しているかどうかを確認できるという追加の利点があります

0  innaM  2009-10-13


ex-wayを使用します

sudo ex +'$put =\"FOO\"' -cwq /etc/profile

を追加する変数に置き換えてください

OS Xなどの一部のシステムでは、/etc/profileファイルには444のパーミッションがありますので、それでもパーミッションが拒否されている場合は、まずパーミッションを確認して修正してください

sudo chmod 644 /etc/profile

をクリックして、もう一度試してみてください

0  kenorb  2015-05-24


タイトルとURLをコピーしました