Vim : Column Mode Edit

Salah satu fitur yang paling saya suka dari Vim adalah kemampuannya melakukan column mode edit. Saya pertama kali kenal fitur edit kolom ini dari UltaEdit (teks editor untuk Windows).

Vim menyebut mode edit kolom ini sebagai mode Visual Block.

Fitur ini sangat berguna antara lain untuk :

  • menyisipkan huruf/kata/kalimat yang sama pada beberapa baris sekaligus
  • menghapus huruf/kata/kalimat secara bersamaan pada beberapa baris sekaligus
  • menghapus beberapa baris teks sekaligus

Kata kuncinya adalah sekaligus; mempersingkat pekerjaan yang berulang untuk mengedit sebuah text file.

Yang paling sering saya gunakan misalnya menyisipkan tanda # pada beberapa baris sekaligus. Di beberapa bahasa pemrograman, seperti Bash script, tanda # dipakai untuk menandai baris-baris komentar (comments). Baris yang diawali dengan tanda # berarti dianggap bukan bagian utama program tersebut. Maka ada istilah comment out yang berarti menambahkan tanda # pada baris program untuk menjadikannya sebagai komentar. Dan sebaliknya ada juga istilah uncomment yang menunjuk pada penghapusan tanda #, mengubah komentar menjadi bagian utama dari program.

Biasanya saya perlu itu untuk mengabaikan dulu sementara beberapa baris program, bukan bermaksud menjadikannya sebagai komentar. Bisa dibayangkan bila ada puluhan/ratusan baris yang harus di-“comment out”, berapa kali saya harus mengetikkan tanda #. Nah dengan mode edit kolom tadi menambahkan tanda # jadi mudah, cukup dengan satu kali ketik & semua baris akan kena efeknya.

Berikut adalah contoh penggunaan mode Visual di Vim untuk menyisipkan teks pada beberapa baris sekaligus.

  1. Misalnya saya sedang mengedit file .bashrc. Saya ingin comment out fungsi converttohex seperti yang ditunjukkan pada tangkapan layar berikut ini :
  2. Yang pertama saya lakukan adalah tekan tombol Esc lalu ikuti dengan Control v.

    Akan muncul indikator “– VISUAL BLOCK –” di bagian bawah Vim.
  3. Lalu saya bisa menggunakan tombol panah atas/bawah untuk memilih baris mana saja yang akan saya edit.

    Pada contoh di atas saya ingin menyisipkan tanda # di awal setiap baris fungsi converttohex.
  4. Langkah berikutnya saya perlu menekan tombol Shift i untuk mulai menyisipkan teks. Setelah itu akan muncul indikator “– INSERT –” di bagian bawah Vim.

    Saat menggunakan Vi atau Vim, kita menggunakan tombol “i” (huruf i kecil) untuk mulai mengetikkan teks. Tapi saat sedang berada pada VISUAL BLOCK, kita harus menggunakan huruf I besar (tekan tombol Shift dan huruf i bersamaan) bila ingin mulai mengetikkan teks.
  5. Saya tinggal ketikkan tanda # sekali saja.

    Hmm, padahal tadi saya ingin menambahkan tanda # di beberapa baris sekaligus..kok yang muncul di layar hanya 1 tanda # di baris pertama?
  6. Langkah berikutnya adalah menekan tombol Esc. Ajaibnya begitu saya tekan tombol Esc, tanda # tadi muncul di semua baris yang sudah saya pilih :

Prinsip yang sama bisa dipakai untuk menghapus beberapa kata sekaligus seperti ini :

  1. Tekan tombol Control v lalu blok kolom yang ingin dihapus (gunakan tombol panah atas-bawah-kiri-kanan untuk memilih teksnya) :
  2. Lalu tekan tombol x untuk menghapus kolom yang sudah diblok tadi :

Kira-kira seperti itu cara menggunakan Vim dengan mode Visual Block untuk menambahkan atau menghapus teks pada beberapa baris sekaligus.

Vim : Copy Paste Beberapa Baris Teks

Vim (Vi IMproved) adalah CLI teks editor yang tersedia hampir di semua varian Unix. CLI maksudnya Command Line Interface. Vim diakses dari konsol/terminal. Karena berjalan di terminal, semua pengoperasiannya diatur dari keyboard. Artikel ini akan menunjukkan cara mudah untuk menyalin berberapa baris teks sekaligus saat Anda sedang menggunakan Vim.

  1. Misalnya saya sedang mengedit file smb.conf & ingin menyalin beberapa baris sekaligus seperti ditunjukkan pada gambar berikut :
  2. Pertama saya pindahkan dulu kursor ke baris pertama blok teks yang akan disalin. Di Vim pergerakkan kursor diatur dengan tombol panah atas/bawah.
  3. Masih di posisi kursor yang sama saya ketikkan mk (mark k). Dua huruf tadi digunakan untuk menandai bagian awal blok teks.
  4. Lalu saya pindahkan kursor ke baris akhir blok teks tersebut.
  5. Di baris akhir blok teks tersebut saya ketikkan y’k . Ini maksudnya salin semua baris dari tanda k sampai di baris saat ini.

    Akan muncul tulisan “8 lines yanked”, ini artinya ada 8 baris dalam blok teks tadi yang sudah siap disalin.
  6. Terakhir saya pindahkan lagi kursornya ke lokasi baru tempat saya ingin meletakkan salinan blok teks tadi. Di sana saya ketikkan pp . Ini maksudnya salinlah semua teks yang tadi sudah dipilih, ini sama dengan fungsi Paste pada Microsoft Word.

Menyimpan Password dalam KeePassX

Sampai saat ini saya punya banyak password yang perlu saya ingat-ingat. Mulai dari password beberapa akun email, login ke banyak website, Paypal, iTunes, VPN, dsb. Memang paling gampang menggunakan 1 macam passsword untuk segala kebutuhan. Tapi cara ini kurang bijaksana & berbahaya. Karena begitu banyak password yang perlu saya hafalkan, saya kerap lupa password apa yang harus saya pakai saat login ke suatu website. Belum lagi kalau websitenya jarang saya akses, kemungkinan besar akan lupa password login-nya. Atau misalnya saat password sebuah website-nya sudah disimpan otomatis oleh web browser, sehingga saya lupa total apa password loginnya saat saya mengakses web tersebut dari komputer lain.

Saya memilih untuk menggunakan KeePassX untuk menyimpan semua password saya. KeePassX ini adalah aplikasi yang dibuat untuk menyimpan banyak password dalam sebuah database terenkripsi. Idenya adalah kita buat database password, lalu kita beri password (lagi-lagi password..hehehe…). Sehingga kita cukup mengingat-ingat 1 password untuk membuka database tersebut. Database-nya berupa 1 file dengan ekstensi *.kdb yang ukurannya tidak terlalu besar. Hmmm mungkin ukurannya bisa membengkak bila menyimpan sampai ribuan password. File database KeePass saya cuma berukuran 16KB.

KeePassX ini tersedia secara gratis untuk Mac OSX, Windows, & juga untuk Linux.

Ini contoh langkah-langkah menggunakan KeePassX di Ubuntu Linux (langkah ini sama bisa dipakai juga di Windows atau Mac OSX).

  1. Setelah membuka aplikasi KeePassX, tampilan yang muncul seperti berikut ini :Untuk mulai membuat database, klik ikon New di pojok kiri atas seperti ditunjukkan oleh tanda panah.
  2. Kita akan diminta untuk memasukkan master password untuk database baru ini :Ini langkah yang penting, jangan sampai lupa master password ini.
  3. Setelah itu kita bisa mulai memasukkan data-data password yang ingin kita simpan dalam KeePassX. Caranya tinggal klik kanan di area yang kosong atau klik ikon “Add New Entry” seperti yang ditunjukkan oleh tanda panah berikut ini :
  4. Akan muncul jendela baru seperti tampilan berikut ini :Di sini kita akan menyimpan data-data seperti misalnya username, password, URL website, keterangan, dsb.
  5. Di sebelah kanan kolom password ada ikon bergambar mata. Ikon ini dipakai untuk menampilkan/menyembunyikan password yang kita masukkan.
  6. Di sebelah kanan kolom password, ada juga ikon bertulisan Gen. Ikon ini fungsinya untuk menampilkan menu password generator. KeePassX bisa membantu kita membuatkan password yang rumit.Kita bisa memilih berapa panjang password yang diinginkan, lalu kombinasi karakter apa saja yang ingin dipakai. Tinggal klik tombol Generate untuk mendapatkan password baru. Akhiri dengan mengklik tombol OK.
  7. Bila semua data yang ingin disimpan sudah dimasukkkan, akhiri dengan menekan tombol OK pada tampilan berikut ini :
  8. Kita bisa mengulang langkah-langkah tadi untuk menyimpan semua password yang ingin kita simpan. Bila sudah selesai kita perlu menyimpan database KeePassX ini. Klik tombol Save seperti ditunjukkan pada gambar di bawah ini :
  9. Kita tinggal mendefinisikan nama file database ini & mengakhiri dengan menekan tombol Save :
  10. Tadi saya memilih nama mypassword, KeePassX akan otomatis menambahkan ekstensi *kdb seperti terlihat di bawah ini :

Supaya bisa diakses dari komputer & handphone, saya menyimpan database file tadi ke dalam folder-nya Dropbox. Ini contoh di Mac OSX, saya bisa akses database file tadi dari Dropbox.Saya bisa langsung membukanya dengan aplikasi KeePassX :Tentu saya perlu memasukkan master password yang tadi saya set saat membuat database-nya. Bila saya memasukkan master password yang tepat maka saya bisa mengakses isi database tadi :File database KeePass tersebut bisa dibuka juga di Android dan di IOS. Saya pakai aplikasi KeePassDroid, sementara di IOS ada aplikasi iKeepPass yang bisa membuka file database yang sudah kita buat. iKeePass di IOS perlu dibayar dengan harga $0.99.

Ini contoh saat saya mencoba mengakses database password tadi dengan menggunakan iKeePass di iPhone.

  1. Saat pertama diinstal ada database bawaan yaitu “Test database”.
  2. Untuk menambah database yang tadi ada di Dropbox, tap pada menu Setting – Databases. Lalu tap menu Add yang ada di kanan atas :
  3. Lalu kita pilih Type-nya Dropbox & pilih file database tadi :
  4. Kita bisa memasukkan master password sekarang pada kolom Password & akhiri dengan tap menu Ok :
  5. KeePassX akan melakukan sinkronisasi file database tersebut dengan Dropbox :
  6. Tidak lama kemudian KeePassX akan menampilkan isi database password :

Mirip caranya di Android saat menggunakan KeePassDroid :
KeePassDroid juga bisa mengakses database file yang disimpan dalam Dropbox :
Dengan memasukkan master password yang tepat, kita bisa membaca semua isi password yang tersimpan dalam database tadi :

Kira-kira begitu alternatif menyimpan banyak password yang saya pakai sekarang.

Ubuntu Untuk Akses Windows Yang Bermasalah

Salah seorang rekan saya bekerja sebagai freelancer IT Support. Meskipun memiliki toko komputer sendiri di Mangga Dua, tapi dia menikmati aktivitasnya sebagai IT Support “door to door”. Mengunjungi satu kantor ke kantor lainnya, dari satu client ke client lainnya memberikan layanan perbaikan PC. Salah satu pekerjaan yang dia lakukan berulang kali adalah instal ulang Windows di komputer kliennya yang bermasalah. Entah masalah terkena virus, sampai Windows yang corrupt dan tidak bisa boot lagi.

Saya lupa tepatnya (tapi rasanya sudah lebih dari 1 tahun yang lalu), saya mengenalkan rekan saya pada Ubuntu Linux. Waktu itu saya sekadar cerita pada dia bahwa Ubuntu Linux bisa dipakai langsung dari CD (atau dari USB) tanpa perlu menginstalnya permanen ke dalam harddisk. Saya ceritakan juga bahwa live OS seperti itu bisa dimanfaatkan untuk mengakses data-data dalam harddisk yang sistem operasinya bermasalah.

 photo ubuntu-live-os_zpsbca5b39b.png

Rupanya dia cukup tertarik, jadi waktu itu saya pasangkan Ubuntu ke dalam USB flash disk-nya. Saya ajarkan caranya untuk booting dari USB dan mencoba live OS. Sempat saya demokan juga waktu itu apa dan bagaimana Ubuntu saat dijalankan sebagai live OS. Simpel, praktis, tanpa perlu repot menginstal ke dalam harddisk. Repot & membuang banyak waktu.

Beberapa minggu kemarin saat rekan saya itu datang berkunjung, dia bercerita bahwa Ubuntu dalam USBnya benar-benar membantu rutinitas kerjanya sehari-hari. Tiap kali ada PC milik kliennya yang bermasalah & perlu diinstal ulang Windowsnya, rekan saya akan menggunakan Ubuntu OS untuk melakukan backup data. Jadi dia akan boot komputer kliennya dari USB Ubuntu tadi. Lalu setelah masuk dalam Ubuntu, Ubuntu akan langsung mengenali harddisk yang terpasang dalam PC. Tidak hanya itu, dengan beberapa klik saja Ubuntu otomatis menyiapkan partisi Windows untuk bisa dilihat & diakses data-datanya. Baru kemudian rekan saya akan meng-copy semua data dari partisi data Windowsnya ke dalam external harddisk. Baru kemudian dia bisa menghapus semua partisi yang ada & menginstal bersih Windows ke dalam PC tersebut. Setelah Windows selesai terinstal dia baru kembalikan lagi data yang sudah diamankan sebelumnya ke external harddisk.

Dulu katanya sebelum kenal dengan Ubuntu OS, tiap kali menjumpai kasus serupa dia “terpaksa” membawa pulang harddisk milik kliennya. Di rumah dia pasang harddisk tersebut ke dalam PC Windowsnya sendiri. Hal itu dilakukan sekadar untuk bisa mengakses data yang masih tersimpan dalam harddisk milik clientnya itu.

Saya cukup surprise mendengar cerita bahwa cara booting dari Ubuntu USB tadi sudah dilakukannya puluhan kali. Yang membuat saya surprise adalah rekan saya tadi itu 100% buta Linux. Tapi faktanya dia bisa menggunakan Ubuntu Linux & malah aktif menggunakannya sehari-hari untuk mendukung pekerjaannya. Ada kepuasan tersendiri bagi saya berhasil mengenalkan Linux pada seseorang yang tidak pernah tahu apa itu Linux sebelumnya. Tentu rekan saya tidak berkutat pada perintah-perintah di terminal (CLI commands).

Ubuntu Live CD Mengakses Harddisk Windows photo ubuntu-live-os-2_zps2323dc40.png

Baginya menggunakan Nautilus Ubuntu sudah sangat cukup. Bagi yang belum tahu, Nautilus itu adalah semacam Windows Explorer tempat anda mengakses data pada partisi C:\ atau D:\, atau tempat Anda membuka My Documents.

Begitu kira-kira sharing pengalaman rekan saya yang sukses memanfaatkan Linux untuk menunjang pekerjannya sehari-hari. Apakah Anda sudah pernah berkenalan dengan Ubuntu Linux?

Sekilas Tentang SUDO

Misalnya saya punya Ubuntu server dengan hostname ubuntu1204. Lalu saya buat user baru dengan nama sysadmin.

root@ubuntu1204:~# useradd -m -d /home/sysadmin -s /bin/bash sysadmin
root@ubuntu1204:~# passwd sysadmin
Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully
root@ubuntu1204:~#

Ketika saya coba login dengan user sysadmin ternyata saya tidak bisa menggunakan perintah reboot untuk merestart servernya :

ttirtawi@macmini:~$ ssh sysadmin@192.168.10.100
sysadmin@192.168.10.100's password: 
Last login: Thu Jan  2 00:15:34 2014 from macmini.local
sysadmin@ubuntu1204:~$ /sbin/reboot
reboot: Need to be root
sysadmin@ubuntu1204:~$

Saya ingin memberi akses untuk user sysadmin kemampuan untuk merestart server. Untuk menjawab kebutuhan ini kita perlu sedikit mengenal tentang yang namanya sudo.

Akses kontrol di Ubuntu Linux diatur oleh perintah sudo. sudo dikenal sebagai akronim dari Super User Do. User yang diberi hak menggunakan perintah sudo bisa menjalankan perintah-perintah yang tadinya hanya bisa dijalankan oleh user root. Di Ubuntu Linux, root tidak bisa login secara langsung. Beda dengan distro Linux lainnya seperti Debian atau RedHat/CentOS, saat instalasi Ubuntu kita tidak diminta untuk memberi password pada akun root. Alih-alih hanya 1 user yang didefinisikan saat proses instalasi. User pertama ini langsung diberi akses penuh untuk menggunakan sudo. Misalnya seperti contoh di bawah ini, user ttirtawi tidak bisa login sebagai root menggunakan perintah su - root.

ttirtawi@ubuntu1204:~$ su - root
Password: 
su: Authentication failure
ttirtawi@ubuntu1204:~$ sudo bash
[sudo] password for ttirtawi: 
root@ubuntu1204:~#

Untuk mengakses root prompt digunakan perintah sudo bash. Uniknya sudo ini kita tidak perlu lagi repot-repot mendistribusikan password root. User yang diberi akses sudo cukup menggunakan password-nya sendiri.

Bila user biasa yang tidak punya akses sudo mencoba menggunakan perintah sudo akan muncul error seperti berikut ini :

faultmgmt@ubuntu1204:~$ sudo bash
[sudo] password for faultmgmt: 
faultmgmt is not in the sudoers file.  This incident will be reported.
faultmgmt@ubuntu1204:~$

Semua percobaan akses sudo yang gagal tadi akan disimpan dalam file /var/log/auth.log

root@ubuntu1204:~# tail -f /var/log/auth.log  | grep "NOT in sudoers"
Jan  2 08:36:27 ubuntu1204 sudo: faultmgmt : user NOT in sudoers ; TTY=pts/2 ; PWD=/home/faultmgmt ; USER=root ; COMMAND=/bin/bash
^C
root@ubuntu1204:~#

Semua hal berkaitan dengan pengaturan sudo disimpan dalam file /etc/sudoers. Sangat disarankan untuk tidak mengubah file /etc/sudoers secara langsung (dengan teks editor misalnya). Sebaiknya kita menggunakan perintah visudo untuk mengedit file /etc/sudoers. Perintah visudo secara default menggunakan editor nano. Meski menggunakan editor nano, visudo dilengkapi beberapa fungsi internal yang memastikan tidak ada kesalahan sintaks/format.

root@ubuntu1204:~# visudo

Ini contoh tampilan nano yang dipakai oleh perintah visudo :

Visudo Dengan Editor NANO photo nano-visudo_zps7e2c2e15.jpg

Penjaminan akses sudo bisa dilakukan pada level user atau group. Default-nya Ubuntu Linux menggunakan limitasi berbasis group untuk mengatur siapa-siapa yang bisa menggunakan sudo. Ada satu group khusus dengan nama sudo :

root@ubuntu1204:~# grep %sudo /etc/sudoers
%sudo   ALL=(ALL:ALL) ALL
root@ubuntu1204:~#

Pengaturan akses group ditandai dengan tanda %. Contoh di atas bisa dibaca sebagai berikut : semua user yang berada dalam group sudo bisa mengakses semua perintah root, tidak peduli dari mana dia mengakses mesin ini (akses remote dari komputer lain pun dibolehkan menggunakan sudo).

User pertama yang dibuat saat instalasi, masuk dalam group sudo :

root@ubuntu1204:~# grep sudo /etc/group
sudo:x:27:ttirtawi
root@ubuntu1204:~#

Artinya saya bisa menjalankan semua perintah sebagai root, misalnya saya bisa jalankan perintah ini :

  • sudo reboot
  • sudo aptitude install ...
  • sudo route add ...
  • sudo shutdown -h now
  • sudo mkfs.ext3 /dev/sda3
  • dsb

Balik lagi ke permasalahan di awal, bagaimana memberi akses pada perintah reboot saja pada user biasa (sysadmin)? Bisakah saya melakukannya hanya dengan memasukkan user sysadmin ke dalam group sudo? Tentu bisa, tapi dengan begitu user sysadmin akan bisa juga mengganti pengaturan IP, mengganti static routing, memformat harddisk, dsb.

Yang lebih tepat adalah dengan memberi akses pada perintah /sbin/reboot saja untuk user sysadmin. Dengan menggunakan perintah visudo saya menambahkan dua baris berikut ini ke dalam file /etc/sudoers :

Cmnd_Alias RESTART=/sbin/reboot
sysadmin ALL=(ALL) NOPASSWD: RESTART

Pertama saya membuat alias untuk perintah /sbin/reboot, aliasnya saya beri nama RESTART. Lalu saya beri akses kepada user sysadmin untuk menggunakan alias RESTART tadi. Opsi NOPASSWD: artinya user tidak perlu lagi memasukkan password saat mengeksekusi perintah sudo.

Berikut ini adalah salah satu contoh hasil akhir /etc/sudoers setelah saya menambahkan 2 baris baru tadi :

root@ubuntu1204:~# cat /etc/sudoers
#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults    env_reset
Defaults    secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

# Host alias specification

# User alias specification

# Cmnd alias specification
Cmnd_Alias RESTART=/sbin/reboot

# User privilege specification
root    ALL=(ALL:ALL) ALL

# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

# See sudoers(5) for more information on "#include" directives:

#includedir /etc/sudoers.d

sysadmin ALL=(ALL) NOPASSWD: RESTART
root@ubuntu1204:~#

Dengan begitu user sysadmin sekarang bisa merestart server dengan tambahan perintah sudo.

ttirtawi@macmini:~$ ssh sysadmin@192.168.10.100
sysadmin@192.168.10.100's password: 
Last login: Thu Jan  2 00:19:34 2014 from macmini.local
sysadmin@ubuntu1204:~$ sudo reboot
sysadmin@ubuntu1204:~$ 
Broadcast message from ttirtawi@ubuntu1204
    (/dev/pts/2) at 0:11 ...

The system is going down for reboot NOW!
Connection to 192.168.10.100 closed by remote host.
Connection to 192.168.10.100 closed.
ttirtawi@macmini:~$

Bila banyak user dengan kebutuhan akses sudo yang sama, lebih efisien menggunakan akses group seperti ini :

Cmnd_Alias RESTART=/sbin/reboot
%sysadmin ALL=(ALL) NOPASSWD: RESTART

Saya tinggal memasukkan setiap user yang perlu hak merestart server ke dalam group sysadmin. Misalnya seperti berikut ini :

root@ubuntu1204:~# useradd -G sysadmin -m -d /home/budi -s /bin/bash budi
root@ubuntu1204:~# passwd budi
Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully
root@ubuntu1204:~# su - budi
budi@ubuntu1204:~$
budi@ubuntu1204:~$ reboot
Command 'reboot' is available in '/sbin/reboot'
The command could not be located because '/sbin' is not included in the PATH environment variable.
This is most likely caused by the lack of administrative privileges associated with your user account.
reboot: command not found
budi@ubuntu1204:~$
budi@ubuntu1204:~$ /sbin/reboot
reboot: Need to be root
budi@ubuntu1204:~$
budi@ubuntu1204:~$ sudo /sbin/reboot
budi@ubuntu1204:~$ 
Broadcast message from ttirtawi@ubuntu1204
    (/dev/pts/2) at 9:07 ...

The system is going down for reboot NOW!
Connection to 192.168.10.100 closed by remote host.
Connection to 192.168.10.100 closed.
ttirtawi@macmini:~$

Saya membuat user baru dengan nama budi. User budi saya masukkan ke dalam group sysadmin. Oleh karenanya budi dapat merestart server dengan sudo reboot atau sudo /sbin/reboot.

Begitu kira-kira caranya mengatur akses pada perintah-perintah “penting” dengan menggunakan sudo.