prehistoric.me

Menyimpan Berkas sebagai Root dari Vim

Kadang kita mengedit file konfigurasi sistem, tapi lupa sedang menjalankan [g]vim sebagai user biasa. Hasilnya, kita tidak bisa menyimpan perubahan. Dengan vim, kita tetap bisa menyimpan file sebagai root menggunakan perintah:

:w !sudo tee %

Bagaimana cara kerjanya? Perintah :w dalam vim berfungsi menyimpan konten. Selain menerima parameter berupa nama file, perintah tersebut juga menerima parameter berupa commandline untuk shell, ditandai dengan tanda ! di depan commandline. Dengan parameter tersebut, vim akan menjalankan commandline ke shell, kemudian mengirimkan isi buffer (tempat kita mengedit file) ke standard input shell.

Sementara itu, tee adalah commandline umum di sistem operasi unix-like. Fungsinya adalah untuk membaca input dari standard input, kemudian menyimpan input tersebut ke dalam file sambil mencetaknya di standard output. Gambarannya seperti ini:


Sumber gambar: https://en.wikipedia.org/wiki/File:Tee.svg

Parameter % bernilai lokasi file yang sedang kita buka atau edit di buffer vim. Jadi, perintah :w !sudo tee % berarti kita meminta vim untuk menjalankan perintah shell sudo tee dengan argumen nama file yang sedang dibuka, kemudian vim akan mengirimkan isi file yang dibuka tadi ke dalam standard input. Dengan begitu, meskipun kita membuka file tanpa hak akses, commandline tee lah yang sebenarnya menulis isi file sebagai root.

Referensi: http://stackoverflow.com/questions/2600783/how-does-the-vim-write-with-sudo-trick-work