Skip to content

Lupa sudo saat menulis di vim

Published: at 06:41 PMSuggest Changes

Case: 

Saat itu saya sedang mengakses console server, langsung lah saya mengubah konfigurasi suatu file dengan VIM, disitu saya sudah menulis beberapa perbuahan yang mungkin tidak banyak, tapi sangat tidak asik jika harus menulis ulang karna lupa menggunakan sudo. Dan… ternyata bener, saya lupa menambahkan sudo saat menjalankan command vim. Berikut ilustrasinya

Mungkin temen2 ada juga yang pernah ngalamin case seprti diatas, hanya karna lupa sudo membuat amarah tak terkontrol yang membuat kita keringat dingin, mengeluarkan sedikit kata2 kasar, hingga membanting keyboard. Mungkin saya terlihat melebih2kan, tapi “Ilustrasi” diatas hanya “ilustrasi”, yang hanya beberapa line saja, bagaimana jika kita sedang mengonfig webserver, ftpserver atau yang lain, yang mungkin bisa sampe 20-100 line? Tentu gejala2 yang saya sebutkan tadi akan muncul.

Kejadian seperti ini kerap kali terjadi pada saya, dan dulu saya hanya bisa pasrah lalu, lanjut ngetik ulang dengan menahan emosi. Tapi berbeda dikejadian kali ini, saya mencoba tetap tenang dan mencari solusi untuk mengatasi kejadian ini di internet. Lalu saya menemukannya…

Solusi:

Ternyata solusinya sangat simple:

:w !sudo tee %

Sekarang kamu sudah bisa menyimpan file saat mengedit protected file jika lupa mengunakan sudo :) Mungkin kamu bingung apa maksud dari command diatas? 

Penjelasan

1. :w Bukan untuk menyimpan file

:w di vim ternyata bukan untuk menyimpan file loh, secara teori :w di vim akan meneruskan isi dari buffer vim ke paramater selanjutnya. Misal kita sedang mengedit file1.txt lalu kita menjalankan :w file2.txt, ini akan mirip seperti “save as”; file1.txt tidak akan berubah, tetapi yang terjadi adalah isi buffer vim dikrim ke file2.txt.

Selain menggunakan nama file, :w di vim bisa kita substitusikan shell command untuk menerima isi buffer tersebut dan melakukan sesuatu.

:w !cat  ini akan menampilkan isi buffer kalian

:w !cat > /home/student/tempconf  ini akan menyimpan buffer kalian ke file /home/student/tempconf  dimana kalian tidak perlu memerlukan sudo untuk write ke file tersebut.

Nah untuk meneruskan buffer ke protected file kita bisa memanfaatkan shell command tee

2. Memahami tee

tee adalah shell command yang berfungsi untuk menangkap standard output lalu menyimpanya ke suatu file dan meneruskanya menjadi standard output yang bisa di tangkap di pipe selanjutnya. 

contoh: 

echo "halo" | sudo tee halo.txt | cat

hasil dari perintah diatas adalah menampilkan halo dan membuat file halo.txt yang berisi text “halo”. Untuk pemahaman command tee lebih lanjut bisa baca di sini tee man page

3. Kenapa tee

Kelebihan dari tee ini bisa redirect standard output ke file dengan sudo. Selain tee kita bisa redirect standard output dengan ”>” tapi operator ini tidak bisa menggunakan sudo.

contoh:

sudo echo "adf" > /protected_file

 ini akan error, karena sudo tersebut hanya untuk menjalankan command echo saja, sedangkan saat write file nya tidak mendapat akses sudo.

Maka dari itu kita menggunakan tee.

4. % berarti “file saat ini”

% adalah salah satu special registers di vim, apa itu special registers bisa baca disini https://www.baeldung.com/linux/vim-registers. Tapi initinya % berarti “file saat ini” yang akan diteruskan ke tee sehingga dia tau dimana isi buffer akan disimpan. 

% ini sering dugunakan juga untuk mereplace text,

contoh:

:%s/halo/hai

berarti di file saat ini, replace (substitute) halo dengan hai”.

Pentutup

Nah seharusnya sekarang kalian sudah bisa menyimpan ke protected file ketika lupa menjalankan vim dengan sudo. Oiya biasanya saya menggunakan tmux jika beroperasi di console untuk mencegah hal seperti di atas, di tmux kita bisa copy paste, split terminal, dan fitur lain yang mempermudahkan kita saat menggunakan CLI.

Semoga penjelasan ini diatas bisa dipahami dan dapat bermanfaat. Jika ada yang ditanyakan bisa tulis di komentar. Sampai bertemu lagi, semoga…


Previous Post
Nova Live Migration failure: operation failed: Failed to connect to remote libvirt URI qemu+tcp://
Next Post
Setup Jitsi Meet di Ubuntu 20.04