ルート書き込み権限のみを持つファイルに行を追加し、スクリプトの実行を継続する方法


9

私はbashスクリプトを学習しようとしています。私は実用的な問題に取り組んでおり、ある時点でroot、書き込み許可が必要なファイルに行を追加する必要があります。

コードは次のようになります。

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

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

回答:


13

sudoこのようなことを行う方法を説明するヒントがmanページにあります。これが私のワンライナーです:

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

明らかに、最初にユーザーがsudo特権を持つように設定する必要があります。shシェルがあるため、ルート所有のファイルへのリダイレクトを使用しています。echoコマンドに使用された引用符もエスケープする必要がありました。


2

su ほとんどのUNIXシステムで利用可能であり、動作するはずです。

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

とは異なりsudo、パスワードはでキャッシュされないようですsu
Ryne Everett

@Ryne Everett:私はsudoに詳しくありません。しかし、「su」の動作は、実際にはOPのスクリプトで必要とされるとおりです。ほとんどの場合、私は「su」を逆に使用します。ルートから別のユーザーに変更します。この場合、パスワードはまったく必要ありません。
miracle173 2015年

1

あなたはteeと一緒に使うことができますsudo

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

echoの出力は|パイプ)でにリダイレクトされsudo teeます。 この場合、標準入力teeから読み取り、指定されたファイルを標準出力に書き込みます。(または)ファイルに追加します。追加しない場合、ファイルは上書きされます。これを実行すると、ルート権限でファイルが開かれます。最後に、の出力を標準出力に抑制しますfilename-a--appendteeteesudo> /dev/nulltee

or でteeリダイレクトを含むコマンド全体を単に開始する代わりにを使用することの1つの利点は、最初のコマンドの引用を変更する必要がないことです(すでに引用を含んでいる引用行は、かなり醜い場合があります)。su -csudo sh -c


0

このコマンドを試してくださいこのコマンドは、UnixおよびLinuxで使用できます。

sudo sh -c "echo 'add this line to the code' >> fileName"


-2

トリックを行います:

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

なんでssh?これはデフォルトなので、指定する必要susudoありませんroot。全体として、OPは単に問題を解決するだけでなく、何かを学びたいので、もう少し説明が必要です。
Adaephon、2014年

二重引用符で問題が発生すると思います
miracle173
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.