vim root olarak yeniden düzenle


28

Sık sık vim'de bir dosyayı açarım, bazı değişiklikler yapıyorum ve dosyayı kaydetme zamanı salt okunur .. (başka bir kullanıcıya ait). Dosyayı kök olarak nasıl yeniden açabileceğim ve değişiklikleri kopyalamak için geçici bir dosyaya kaydetmeden veya kök olarak yeniden düzenlemeksizin değişikliklerimi nasıl tutacağımla ilgili ipuçları arıyorum.

Yanıtlar:


42

Bundan stackoverflow cevap tarafından skinp

:w !sudo tee %

Sıklıkla bir dosyayı düzenlemeden önce sudo yazmayı unuttum. Bu dosyayı kaydetmeye ve izin hatası almaya geldiğimde, dosyayı geçici bir dosyaya kaydetmeye gerek kalmadan kaydetmek ve daha sonra tekrar kopyalamak için bu vim komutunu verdim.


Neredeyse bitti .. Ama
vim'in

@ rkthkr, eğer "vim root olarak yeniden başlatılıp çalıştırılırsa", yaptığınız düzenlemeleri kaydedemez ve geri alma geçmişinizi kaybedersiniz. Ama istediğin buysa ... [Karakterlerin tükenmesi.] Yazmak üzere olduğum "cevabı" görün.
Bruno Bronosky

2
@dbr, dosyanın üzerine yazdıktan sonra (sudo olarak tee ile), [O] k veya [L] oad ile uyarılacağınızdan bahsetmeye değer olduğunu düşünüyorum. Daha sonraki seçenek, geri alma geçmişinizi silecek ve değişiklikleri kaydetmeniz için uyarılmadan çıkmanıza izin veren "değiştirilmiş bayrak" ı sıfırlayacaktır. Tercih ettiğim eski seçenek geri alma geçmişinizi koruyacak, ancak bırakmaya çalıştığınızda uyarılmanıza neden olacak. Kullanmanız gereken: q! Bu durumda çıkmak için. Bunu yaptığım için onaylayabilirim (örneğin:! Sudo /etc/init.d/httpd configtest) ve gerekirse geri alma / geri alma.
Bruno Bronosky

15

Lütfen bana bunun için oy kullanmayın. Bu cevabın uygulanmasını önermiyorum, fakat rkthkr'ın istediği cevap bu.

rkthkr dedi ki:
Fakat vim'in yeniden başlatılıp root olarak çalıştırılması iyi olurdu

Bunu yapmanın yolu :!sudo vim %
ipozgaj'dan bahsettiğim gibi, bir argüman olarak bir% (bir alt argüman bile) geçerli tamponun yolu ile değiştirilir. (Parolanızı girmeniz istenebilir.) Özgün vim işleminin alt işlemi olan, root'a ait olan yeni bir vim işlemi gerçekleştirirsiniz. Aptal geliyor, değil mi? İşte ps'de nasıl göründüğü:

~# ps afo pid,ppid,user,stat,comm
  PID  PPID USER         STAT COMMAND
16187 30478 rbronosky    Ss   bash
16510 16187 rbronosky    R+    \_ ps
30482 30478 rbronosky    Ss   bash
16244 30482 rbronosky    S+    \_ vim
16318 16244 root         S+        \_ vim

Dosyayı içeren dizine yazma izniniz varsa ve üzerinde düzenlemeler yaptıysanız, bir takas dosyasının çıkması konusunda uyarılabilirsiniz. [R] ecover'ı seçmek ana vim işlemi tarafından yapılan değişikliklerin çoğunu * yansıtacaktır . (* Belki takas güncellemesinin zamanlanmış veya delta eşiğine sahip olduğunu düşünüyorum. Zaten çok fazla zaman harcadım ve araştırmayı umursamıyorum.) Gidip vim'i bıraktığınızda, hala vim'de ... 2. vim sürecini açtın. Hatırlamak?

Şimdi, bütün bunlarla birlikte ... Bunu asla yapmazdım. Belki de yeterince veya çok fazla kahve almamış olsaydım, birkaç dosya daha root olarak düzenlemem gerekeceğini farkettim ... Bunu deneyebilirim. 14 yıllık yönetim sistemlerinde hiç sahip olmadım. Ancak, tercih ettiğim çözümden hoşnutsuzluğunu dile getirene kadar (ki bu tam olarak dbr teklif edildi), bunu hiç düşünmedim.


Richard teşekkürler! Çok bilgilendirici, sana bunun için +1 vereceğim :)
rkthkr

Bu çok kaliteli bir cevap: neden aşağı oy verdin? Benden de +1.
Mei

1
Teşekkürler @Richard Bronosky, benim gvimde sudo şifresini yazmam mümkün olmadığından :w !sudo tee %bence bu iyi bir cevap.
Eric Fortis

1

Genellikle $ HOME / tmp / apache.conf dosyasında (örneğin) geçici bir dosyaya kaydederim.

sudo vimdiff $HOME/tmp/apache.conf /etc/apache2/apache.conf

Bu, değişiklikleri birleştirmek için ekstra bir iş ama ödedi. İstenmeyen değişikliklere karşı kolaylık ve ölçümler arasında iyi bir yol buluyorum

Ondan önce ACL'leri düşünüyordum ya da dosyalara karşılık gelen grupları atadım ama çoğu zaman işe yaramadı ama ya sahipliğini değiştirmeyi unuttum ya da yapmak istemediğim dosyaları değiştiriyordum.

Bu sadece şu ana kadar yönetilmeyen dosyalar için geçerli. Kullandığımız genel çözüm, insanların dosyaları yerel olarak düzenlediği ve uygun sunuculardaki değişiklikleri test ettiği bir git repo ile kuklalıktır, eğer konfigürasyon istenen şekilde çalışıyorsa, değişiklikler konfigürasyon motorumuzun düzenli aralıklarla değişiklikleri çektiği merkezi depoya geri itilir.


0

Normalde yaptığım - mutlaka en hızlı, ancak kesinlikle güvenli - böyle bir şey yapmaktır (örnek olarak nsswitch.conf kullanarak):

:w! ~/%

Vim'den çıkın, sonra yapın:

sudo vim nsswitch.conf
1GdG
:r ~/%

Bu, tüm satırları silecek ve yerinde düzenlenecek değiştirilmiş ve güncellenmiş sürümünüzde okuyacaktır. Ana dizininizi kullanmak, erişiminizin olup olmadığını ve / tmp'den daha özel olduğunu düşünmeniz gerekmediği anlamına gelir. Bunun tam bir dosya değişimi olduğuna dikkat edin: tüm değişiklikleri eklemek istemiyorsanız, seçmek ve seçmek zorundasınız.

Bu cevapların herhangi birinde yer alan baş ağrısına rağmen, değişikliklerinizi kaybetmeniz için hiçbir sebep yok.

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.