Dosyaların sahibini değiştirmeden sudo ile komutları nasıl kullanabilirim?


12

Dosyaları ile bazı etkinlikler yapmak için sudo kullandığımda, bu dosyalar sahipliğini değiştirir. Dosyaların sahibini değiştirmeden sudo ile komutları nasıl kullanabilirim?

Örnek dosya archivos35.sh apache'den ancak sed kullanıyorum (usr admin sudo ile)

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

Kullanıcı adminsudo ile ---

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

Ancak bu komutu sudo ile yapmak dosyanın sahibini değiştirir

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

Dosyanın sahibini değiştirmek için sudo komutunu kullanmaktan nasıl kaçınabilirim? Sadece sahibini değiştirmeden dosyada değişiklik yapmak istiyorum.


Senaryonuz neden dünya tarafından yazılabilir?
Jim L.

Yanlışlıkla 756 ile ayarladım. Yapmamalıyım
Dok Gus

Yanıtlar:


29

Kullanmak gerekiyorsa sudodosyasını değiştirmek için, sonra sağ kullanıcıya anahtarı için kullanabilirsiniz. Köke geçmenize gerek yok , bu sadece varsayılan. Yani, sizin durumunuzda şunları yapmak istersiniz:

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

Bu, sedkomutu kullanıcı olarak çalıştıracaktır apache.


2

Dosyanın sahipliğini gerçekten değiştirmiyorsunuz, eski dosyayı kaldırıyor ve yeni bir dosya oluşturuyorsunuz. Bunu yaptığınızda yeni dosya, oluşturucunun kullanıcı kimliğine ait olarak oluşturulur. Bundan kaçınmak için dosyayı yerinde değiştirmeniz gerekir. Orijinal dosyanın üzerine yazarak kaydedilen bir metin düzenleyicisi kullanarak düzenleyin. Veya sed komutlarınızı bir geçici dosyaya çıktı ile çalıştırın ve sonra geçici dosyayı orijinal dosyanın üzerine kopyalayın.


1
Sen düşünürdüm -iseçenek aka --in-place... aslında INPLACE değişiklik yapacağı
JShorthouse

Whit @teldon yanıtı, ihtiyacım olanı yapmayı başardım. sed ile dosyayı açmadan yeri değiştiriyorum.
Dok Gus

1
@JShorthouse Düşünürdünüz, ama en azından her yerde değil.
Kyle Jones

3
@JShorthouse 'yerinde' düzenlemelerin çoğu değil, çoğunlukla geçici bir dosyayı değiştirir ve daha sonra orijinali (ve hepsi olmasa da sed. Ve perl. Ve diğer birçok uygulamayı içerir) "yerinde düzenleme" seçeneğiyle). Gerçek yerinde düzenleme yapmak istiyorsanız edveya exveya vi/ gibi bir komut dosyası metin düzenleyicisi kullanın vim.
cas

1
Bazı metin editörleri bile dosyayı yazarken temp + rename yöntemini kullanır, yazma sırasında çökme durumunda arıza güvenliği sağlar. Örneğin Emacs bunu varsayılan olarak yapar, ancak yapılandırma ile üzerine yazabilirsiniz.
Barmar
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.