Bagaimana saya bisa menggunakan perintah dengan sudo tanpa mengubah pemilik file?

12

Ketika saya menggunakan sudo untuk melakukan beberapa aktivitas dengan file, file ini mengubah kepemilikan. Bagaimana saya bisa menggunakan perintah dengan sudo tanpa mengubah pemilik file?

Contoh file archivos35.sh berasal dari apache tapi saya menggunakan sed (dengan usr admin sudo)

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

Pengguna admindengan sudo ---

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

Tetapi melakukan perintah itu dengan sudo mengubah pemilik file

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

Bagaimana saya bisa menghindari menggunakan perintah dengan sudo untuk mengubah pemilik file? Saya hanya ingin membuat perubahan pada file tanpa memodifikasi pemiliknya.

Dok Gus
sumber
Mengapa skrip Anda dapat ditulis oleh dunia?
Jim L.
Secara tidak sengaja saya mengaturnya dengan 756. Saya seharusnya tidak
Dok Gus

Jawaban:

29

Jika Anda perlu menggunakan sudountuk memodifikasi file, maka gunakan untuk beralih ke pengguna yang tepat. Anda tidak perlu beralih ke root, itu hanya default. Jadi, dalam kasus Anda, Anda ingin melakukan:

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

Itu akan menjalankan sedperintah sebagai pengguna apache.

terdon
sumber
2

Anda tidak benar-benar mengubah kepemilikan file, melainkan menghapus file lama dan membuat yang baru. Ketika Anda melakukan itu, file baru dibuat milik uid pembuatnya. Untuk menghindari ini, Anda harus memodifikasi file di tempat. Edit menggunakan editor teks yang menyimpan dengan menimpa file asli di tempat. Atau jalankan perintah sed Anda dengan output ke file temp dan kemudian salin file temp ke file asli.

Kyle Jones
sumber
1
Anda akan berpikir bahwa -iopsi alias --in-placeakan benar-benar memodifikasi inplace ...
JShorthouse
Dengan respon @teldon, saya berhasil melakukan apa yang saya butuhkan. dengan sed saya memodifikasi tempat tanpa membuka file.
Dok Gus
1
@JShorthouse Anda akan berpikir, tetapi tidak, setidaknya tidak di mana-mana.
Kyle Jones
3
@JShorthouse yang paling disebut dengan 'in-place' suntingan tidak, mereka sebagian besar mengubah file sementara dan kemudian mv di atas yang asli (dan itu termasuk sebagian besar, jika tidak semua, implementasi sed. Dan perl. Dan sebagian besar program lain dengan opsi "in-place edit"). Jika Anda ingin pengeditan di tempat yang sebenarnya, gunakan editor teks skrip seperti edatau exatau vi/ vim.
cas
1
Bahkan beberapa editor teks menggunakan metode temp + rename saat menulis file, sebagai gagal-aman jika terjadi crash saat menulis. Misalnya Emacs melakukan ini secara default, tetapi Anda dapat menimpanya dengan konfigurasi.
Barmar