Saya sering membuka file dalam vim, membuat beberapa perubahan dan ketika saatnya menyimpan file hanya-baca .. (dimiliki oleh pengguna lain). Saya mencari kiat tentang cara membuka kembali file sebagai root dan menyimpan perubahan tanpa terlebih dahulu menyimpannya ke file sementara untuk disalin atau diedit kembali sebagai root.
28
Tolong jangan memilih saya untuk ini. Saya tidak merekomendasikan menerapkan jawaban ini, tetapi itu adalah jawaban yang diminta rkthkr.
Cara untuk melakukan ini adalah dengan
:!sudo vim %
Seperti yang saya sebutkan ke ipozgaj,% sebagai argumen (bahkan sub-argumen) akan diganti dengan path ke buffer saat ini. (Anda mungkin diminta kata sandi.) Anda berakhir dengan proses vim baru, yang dimiliki oleh root, yang merupakan proses anak dari proses vim asli. Kedengarannya konyol, kan? Berikut ini tampilannya di ps:
Jika Anda memiliki izin menulis ke direktori yang berisi file dan Anda telah mengeditnya, Anda mungkin diperingatkan bahwa file swap keluar. Memilih ke [R] ecover, akan mencerminkan sebagian besar * dari perubahan yang dilakukan oleh proses induk vim. (* Saya pikir mungkin pembaruan swap diatur waktunya atau memiliki ambang batas delta. Saya sudah menaruh terlalu banyak waktu dalam hal ini dan tidak peduli untuk merisetnya.) Ketika Anda pergi dan keluar vim, jangan khawatir ketika Anda berada masih dalam vim ... Anda membuka proses vim ke-2. Ingat?
Sekarang, dengan semua yang dikatakan ... Aku hampir tidak akan pernah melakukan ini. Mungkin, jika saya tidak memiliki cukup atau terlalu banyak kopi, dan saya menyadari bahwa saya perlu mengedit beberapa file lagi sebagai root ... Saya mungkin akan mencoba ini. Dalam 14 tahun mengelola sistem, saya tidak pernah memilikinya. Tapi, sampai Anda menyatakan tidak puas dengan solusi pilihan saya (yang persis seperti yang ditawarkan dbr), saya tidak pernah memikirkan hal ini.
sumber
:w !sudo tee %
jadi saya pikir ini adalah jawaban yang bagus.Saya biasanya menyimpannya ke file sementara di $ HOME / tmp / apache.conf (misalnya)
ini adalah pekerjaan tambahan untuk menggabungkan perubahan tetapi terbayar. Saya menemukan ini sebagai cara yang baik antara kenyamanan dan pengukuran terhadap perubahan yang tidak diinginkan
Sebelum itu saya memikirkan ACL atau menugaskan grup yang sesuai untuk file tetapi tidak berhasil semuanya sering saya lupa mengubah kepemilikan atau mengubah file di mana saya tidak bermaksud melakukannya.
Itu hanya berlaku untuk file yang tidak dikelola sampai sekarang. Solusi keseluruhan yang kami gunakan adalah boneka dengan repositori git di mana orang-orang mengedit file secara lokal dan menguji perubahan pada server yang sesuai, jika konfigurasi berfungsi seperti yang diinginkan, perubahan didorong kembali ke repositori pusat di mana mesin konfigurasi kami melakukan perubahan pada intervalls biasa.
sumber
Apa yang biasanya saya lakukan - belum tentu yang tercepat, tetapi pasti aman - adalah melakukan sesuatu seperti ini (menggunakan nsswitch.conf sebagai contoh):
Keluar dari vim, lalu lakukan:
Ini akan menghapus semua baris dan membaca dalam versi Anda yang diubah dan diperbarui untuk diedit sebagai gantinya. Menggunakan direktori home Anda berarti Anda tidak perlu memikirkan apakah Anda memiliki akses atau tidak - dan ini lebih pribadi daripada / tmp. Perhatikan dengan baik bahwa ini adalah penggantian file secara keseluruhan: jika Anda tidak ingin menambahkan semua perubahan, Anda harus memilih dan memilih.
Terlepas dari sakit kepala yang terlibat dalam salah satu jawaban ini, tidak ada alasan untuk kehilangan perubahan Anda.
sumber