GNU/Linux >> Belajar Linux >  >> Linux

Menggunakan vim untuk memaksa mengedit file saat Anda membuka tanpa izin

Tampaknya ada beberapa pendekatan yang berbeda, bergantung pada masalah Anda saat ini:

  1. Hanya baca oleh vi. Jika file Anda memiliki :set readonly kamu bisa
    • Gunakan :w! untuk memaksa menulis, atau
    • Masalah :set noreadonly dan kemudian gunakan saja :w biasa
  2. Sebuah izin masalah (sudo ):Anda tidak dapat menulis tetapi Anda memiliki hak sudo.
    • Masalah::w !sudo tee % . Ini akan menulis buffer ke tee , perintah yang menerima pipa informasi dan dapat menulis ke file. Dan saat tee dijalankan dengan kekuatan sudo, tee dapat memodifikasi file.
  3. Sebuah izin masalah (tanpa sudo ):Anda tidak memiliki hak untuk menulis file dan Anda tidak memiliki akses admin.
    • Gunakan :w! ~/tempfile.ext untuk menulis perubahan Anda ke file sementara dan kemudian mengambil tindakan untuk memindahkan file temp ke direktori (kirim file temp ke pemilik/admin direktori).

Anda dapat membaca selengkapnya di sini:

  1. Dari StackOverflow
  2. Dari Geekyboy
  3. Dari Data Agaric

Pintasan

Seperti yang sering terjadi masalah #2 (izin masalah, dengan sudo ), Anda dapat ke /etc/vim/vimrc Anda (atau ~/.vimrc ) pintasan berikut:

  • cnoremap w!! execute 'silent! write !sudo tee % >/dev/null' <bar> edit!

Kemudian Anda cukup mengetikkan :w!! untuk menyimpan dengan sudo kekuatan. Saya tidak akan menjelaskannya di sini tetapi referensi di atas mencakup banyak pintasan.


Saya dapat memikirkan dua cara untuk melakukan ini.

Cara pertama mengasumsikan Anda memiliki file tersebut, tetapi file tersebut HANYA DIBACA.

Cukup gunakan akhiran tanda seru vi ke perintah tulis (:w!) untuk memaksa menimpa file READONLY Anda sendiri. Ini tentu saja mengasumsikan bahwa Anda memiliki izin untuk menulis dan mengeksekusi di folder saat ini.

:w!

akan menyebabkan vi menimpa file READONLY asli.

Cara kedua mengasumsikan orang lain memiliki file tersebut, dan Anda ingin menyimpan perubahan Anda ke file tersebut.

Salah satu cara untuk melakukannya adalah dengan menyimpan perubahan yang dilakukan pada file asli sebagai skrip ed dari dalam vi. Skrip ed ini dapat diterapkan ke file asli (atau file serupa lainnya) di lain waktu di luar vi dengan editor baris ed.

Sebuah cara untuk menyimpan sesi edit saat ini sebagai skrip ed adalah dengan meneruskan nama file asli dan buffer vi yang telah diedit sebagai input standar ke utilitas diff dengan saklar baris perintah --ed yaitu menampilkan perbedaan sebagai skrip ed.

Jadi, asumsikan buffer vi yang telah diedit, lalu lakukan hal berikut

:.,$!diff --ed [original_file] -

Ini menggantikan semua baris dalam buffer saat ini (.,$!) dengan skrip ed yang dihasilkan diff (diff --ed [file_asli] -) yang diperlukan untuk mengubah file asli menjadi konten buffer saat ini. Kami kemudian ingin menyimpan skrip ed ini ke tempat yang aman, dan menerapkan skrip ke versi file asli yang dapat kami tulis. Jadi, simpan skrip ke lokasi yang dapat ditulisi, misalnya folder login Anda:

:w ~/my_ed_script

Sekarang keluar dari vi, dan gunakan skrip ed ini untuk mendapatkan file yang diedit yang tidak dapat disimpan. Berikut ini cara melakukannya dari prompt baris perintah bash, '$':

$ (cat ~/my_ed_script && echo 'w') | ed - writable_copy_of_original_file

Apa yang urutan perintah ini lakukan dalam kata-kata adalah untuk menggabungkan skrip yang kami buat dengan diff dan menggemakan perintah ed write, 'w', ke input standar ed. Ed kemudian menerapkan skrip ini ke salinan file asli yang dapat ditulis, dan menulis kembali perubahan buffer yang dimodifikasi tersebut ke file.

Jadi itu adalah cara untuk menyimpan pekerjaan yang dilakukan di vi ke file yang awalnya dimiliki oleh orang lain menggunakan vi, diff, dan ed.


Linux
  1. Log akses Apache secara otomatis mengatur izin

  2. lokasi file sementara saat menggunakan tmpfile() di C

  3. Ke mana perginya metadata saat Anda menyimpan file?

  1. Cara edit file excel (xlsx) menggunakan shell linux

  2. Bagaimana saya bisa mengedit banyak file di VIM?

  3. Paksa menggali untuk menyelesaikan tanpa menggunakan cache

  1. Cara Mengedit Banyak file dan Beralih di antara yang ada di VIM menggunakan Buffer

  2. Sudoedit Vim Force Write (perbarui) Tanpa Keluar?

  3. Linux – Apa Yang Terjadi Saat Anda Rsync Tanpa Jalur Tujuan??