ファイルの所有者を変更せずにsudoでコマンドを使用するにはどうすればよいですか?


12

sudoを使用してファイルを操作すると、これらのファイルの所有権が変更されます。ファイルの所有者を変更せずにsudoでコマンドを使用するにはどうすればよいですか?

サンプルファイルarchivos35.shはApacheのものですが、sedを使用します(usr admin sudoを使用)

$ ls -l
-rwxr-xrw-. 1 apache apache 181 Aug 5 11:56 archivos35.sh

adminsudoを持つユーザー---

sudo sed -i s/old/new/g archivos35.sh

ただし、sudoでこのコマンドを実行すると、ファイルの所有者が変更されます

$ ls -l
-rwxr-xrw-. 1 admin apache 181 Aug 5 11:56 archivos35.sh

sudoでコマンドを使用してファイルの所有者を変更しないようにするにはどうすればよいですか?所有者を変更せずにファイルを変更したいだけです。


なぜあなたのスクリプトは誰でも書き込み可能ですか?
ジムL.

誤って私は756でそれを設定することは、私はいけない
たDok Gusの

回答:


29

sudoファイルの変更に使用する必要がある場合は、それを使用して適切なユーザーに切り替えます。ルートに切り替える必要ありません。これは単なるデフォルトです。だから、あなたの場合、あなたはやりたい:

sudo -iu apache sed -i 's/old/new/g' archivos35.sh

それはsed、ユーザーとしてコマンドを実行しますapache


2

ファイルの所有権を実際に変更するのではなく、古いファイルを削除して新しいファイルを作成しています。これを行うと、作成者のuidが所有する新しいファイルが作成されます。これを回避するには、ファイルを適切に変更する必要があります。元のファイルを上書きして保存するテキストエディターを使用して編集します。または、sedコマンドを実行して一時ファイルに出力し、一時ファイルを元のファイルにコピーします。


1
あなたは、-i別名別名--in-placeが実際に
インプレースを

Whit @teldonの応答、私は必要なことをなんとかすることができました。sedを使用すると、ファイルを開かずに場所を変更できます。
たDok Gusの

1
@JShorthouseあなたは思うだろうが、少なくともどこでもそうではない。
カイルジョーンズ

3
@JShorthouseのいわゆる「インプレース」編集はそうではなく、ほとんどが一時ファイルを変更してから元のファイルをmv 「インプレース編集」オプションを使用)。実際のインプレース編集が必要なed場合はex、またはまたはvi/ などのスクリプト可能なテキストエディターを使用しますvim
cas

1
一部のテキストエディタでさえ、ファイルの書き込み時にtemp + renameメソッドを使用します。これは、書き込み中にクラッシュした場合のフェイルセーフとして使用されます。例えば、Emacsはデフォルトでこれを行いますが、設定で上書きできます。
バーマー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.