ルート書き込みアクセスのみを使用してファイルに行を追加し、スクリプトを実行し続ける方法

ルート書き込みアクセスのみを使用してファイルに行を追加し、スクリプトを実行し続ける方法

bashスクリプトを学ぶつもりです。時々root書き込み権限を必要とするファイルに行を追加する必要がある実際の問題を解決しています。

コードは次のとおりです。

# some code
echo "add this line to the code" >> fileName
# some code

どういうわけか、スクリプトからルートパスワードを要求し、パスワードを確認し、成功した確認後にファイルを変更することができますか?その後、スクリプトはユーザーモードに戻り、コマンドを実行し続ける必要があります。

答え1

sudoマニュアルページには、このようなタスクを実行する方法を説明するヒントがあります。私が言ったことは次のとおりです。

#!/usr/bin/bash
sudo sh -c "echo \"add this line to the code\" >> fileName"

当然、権限を取得するには、まずユーザーを設定する必要がありますsudoshルートが所有するファイルにリダイレクトされるため、シェルが使用されます。また、echoコマンドで使用された引用符をエスケープする必要がありました。

答え2

suほとんどのUNIXシステムで利用可能で動作します。

su root -c 'echo "add this line to the code" >> fileName'

答え3

あなたはteeそれを使用することができますsudo

echo "add this line to the code" | sudo tee -a filename > /dev/null

echoの出力は|管路)到着するsudo teetee次から読む標準入力そしてに手紙を書く標準出力与えられたファイル(この場合はfilename. -a(または--append))がteeファイルに追加され、それが存在しない場合はファイルが上書きされます。tee実行すると、sudoroot権限を持つファイルが開きます。最後に出力を> /dev/null抑制します。tee標準出力

teesu -cコマンド全体(使用またはリダイレクトを含む)を開始する代わりに、使用の1つの利点は、いかなるsudo sh -c方法でも初期コマンドへの参照を変更する必要がないことです(すでに引用符を含む行を引用すると、時々非常に見苦しくなることがあります。 )。

答え4

トリックを行います。

ssh host "sudo su root -c 'echo "add this line to the code" >> /etc/hosts'"

関連情報