Vim : Menghapus Ekstra Spasi Di Akhir Baris

Ada kalanya saya perlu menghapus semua spasi kosong di akhir semua baris (trailing whitespace). Dengan Vim saya bisa gunakan perintah :

:%s/\s\+$//g

Misalnya saya punya berkas teks seperti ini :

Pada contoh di atas semua baris saya beri garis merah, ada spasi kosong pada bagian bergaris kuning. Saya ingin semua baris itu hilang. Dengan menggunakan perintah tadi semua spasi ekstra di akhir baris akan otomatis terhapus. Lihat contoh pada baris ketiga, kursornya langsung berada pada bagian akhir baris di huruf “D” pada kata “ENTITYID”.

Vim : Search & Replace

Fitur penting dari sebuah editor teks di antaranya adalah kemampuan cari & ganti (search & replace). Bayangkan repotnya bila harus mengganti banyak kata (atau frase) satu persatu. Di editor Vim, saya biasa gunakan perintah berikut ini bila ingin melakukan search & replace teks tertentu :

:%s/<pattern>/<replacement>/g   

<pattern> maksudnya kata/frase yang ingin saya ganti sementara <replacement> adalah kata penggantinya. Misalnya saya punya berkas teks yang berisi data koneksi Oracle database seperti contoh berikut ini :

Saya ingin ganti informasi Oracle SID dari uimdb menjadi uimdbsit. Dengan menggunakan Vim, saya bisa mengedit satu persatu berkas tersebut lalu menjalankan perintah :

:%/uimdb/uimdbsit/g

Lalu tinggal Save dengan perintah :wq. Tapi sayangnya cara ini tidak praktis bila ternyata saya punya banyak sekali berkas. Cara yang paling sering saya gunakan adalah dengan bantuan perintah find, perl seperti ini :

find . -name "*pola nama file*" -exec perl -pi -e 's/<pattern>/<replacement>/g' {}\;

Contoh saat digunakan seperti ini berikut ini :

Perintah di atas bisa dimodifikasi untuk memanfaatkan fitur-fitur yang dimiliki perintah find. Misalnya fitur -maxdepth di atas berguna untuk membatasi area pencarian. Tanpa menggunakan opsi -maxdepth maka semua berkas berakhiran *.xml dalam semua sub-directori akan ikut terkena perubahan tadi. Misalnya contoh di bawah ini, ada banyak berkas *.xml dalam 3 sub-direktori (ditunjukkan dengan garis merah).

Karena saya hanya ingin memodifikasi berkas *.xml yang berada tepat di bawah direktori jdbc, saya harus menggunakan opsi maxdepth 1. Opsi tersebut akan membatasi area pencarian pada direktori itu saja (current directory) tanpa menyentuh berkas *.xml lain dalam setiap sub-direktori.

Vim : Hapus Semua Baris Sesuai Pola Tertentu

Saat menyunting berkas teks dengan Vim, biasanya saya perlu cara cepat untuk menghapus semua baris yang mengandung pola (pattern) tertentu. Cara lama saya tinggal search polanya lalu hapus satu persatu barisnya dengan perintah dd. Tapi cara ini kurang praktis dan rentan error bila mata sudah lelah mungkin saya bisa melewatkan sejumlah baris. Shortcut yang saya temukan dari Internet adalah dengan menggunakan perintah ini :

:g/<pattern>/d

Singkat perintahnya, cukup awali dengan :g/, diikuti dengan pola yang ingin kita temukan, dan terakhir diakhiri dengan /d.

Contoh penggunaannya seperti ini beberapa tangkapan layar berikut ini. Misalnya saya sedang menyunting sebuah berkas PL/SQL & ingin menghapus semua baris yang memiliki kata-kata “execute immediate”.

Saya masuk dulu ke command mode dengan menekan tombol Escape beberapa kali, lalu saya tinggal gunakan perintah tadi :g/execute immediate/d seperti terlihat di bawah ini :

Maka otomatis semua baris dari bagian awal sampai akhir dokumen yang mengandung kata “execute immediate” otomatis terhapus.

Saya ingin kumpulkan semua postingan tentang Vim dengan Tag : Vim. Dengan mengumpulkan aneka shortcut seperti ini, saya merasa jadi lebih produktif untuk mengedit berkas teks dengan Vim daripada dengan menggunakan editor visual lainnya.

FreeBSD Sebagai Router

Sekilas Tentang RIP

Saat belajar CCNA dulu, salah satu materi yang menarik adalah soal routing protocol. Protokol routing yang paling pertama diajarkan adalah RIP (Routing Information Protokol). Katanya RIP adalah salah satu protokol routing yang paling tua umurnya. RIP termasuk dalam kategori distance vector routing protocol. Proses routing ditentukan berdasarkan perhitungan jarak terdekat antar router, berapa router yang harus dilewati yang diperlukan untuk mencapai tujuan. Masing-masing router akan berbagi topologi jaringannya kepada setiap router di dekatnya (neighbor router).

Salah satu kelemahan RIP adalah tidak bisa melakukan routing antar jaringan yang menggunakan subnetting (classless network). RIP hanya bisa melakukan routing antar jaringan dengan classfull netmask. Classfull netmask misalnya 255.255.0.0 atau 255.255.255.0.

Misalnya dua jaringan masing-masing menggunakan network address 192.168.10.0/26 dan 192.168.10.64/26. Normalnya IP dengan prefiks 192.168.xxx.xxx termasuk pada class C & memiliki subnet mask 255.255.255.0 (atau biasa ditulis dalam notasi /24). Tapi dua jaringan tadi menggunakan /26 atau bisa ditulis menjadi 255.255.255.192, artinya 2 jaringan tadi tidak lagi menggunakan class C subnetmask. Dua jaringan itu menggunakan apa yang disebut sebagai Classless Subnet.

RIP tidak bisa membedakan dua jaringan yang menggunakan “classless subnet”. Bagi RIP kedua jaringan tersebut berada pada jaringan yang sama : 192.168.10.0 255.255.255.0. Kelemahan ini diperbaiki pada RIP versi 2 yang mendukung CIDR (Classless Inter-Domain Routing). Dengan RIP versi 2 kita bisa mengatur routing jaringan yang menggunakan subnetting (jaringan dengan classless subnetmask).

Testing RIPv2 Dengan FreeBSD Sebagai Router

Misalnya saya ingin mensimulasikan struktur jaringan seperti pada gambar di bawah ini :

Tanpa adanya proses routing, PC1 tidak bisa berkomunikasi dengan PC2 & PC3. Begitupun seterusnya untuk PC2 & PC3, masing-masing akan terisolir dalam jaringannya masing-masing. Router bertugas mengatur lalu lintas data dari jaringan yang satu ke jaringan yang lainnya. Router bisa berupa dedicated hardware seperti Cisco Router atau Unix server. Semua sistem operasi Unix punya fitur untuk melakukan proses routing.

Dengan menggunakan VirtualBox saya bisa membuat beberapa virtual machine untuk mensimulasikan routing dengan protokol RIP. Saya ingin mencoba menggunakan FreeBSD sebagai router. Saya buat 6 virtual machine, 3 sebagai router & 3 lainnya sebagai client dalam 3 jaringan yang berbeda. Saya belajar menggunakan FreeBSD 9 sebagai router. Sementara untuk komputer client saya gunakan Tiny Linux. Saya pilih Tiny Linux untuk menghemat memory resource & space harddisk, Tiny Linux hanya perlu beberapa puluh Megabyte space harddisk saja.

FreeBSD menyediakan daemon routed untuk melakukan proses routing. Untuk mengaktifkan daemon tersebut saya perlu menambahkan beberapa baris berikut ini dalam berkas /etc/rc.conf :

routed_enable="YES"
routed_program="/sbin/routed"
routed_flags="-P ripv2,rdisc_interval=45"

Parameter flag -P ripv2 maksudnya kita minta FreeBSD untuk menggunakan protokol RIP versi 2. Sementara parameter rdisc_interval itu maksudnya kita mengatur daemon routed supaya melakukan broadcast routing table-nya setiap 45 detik sekali. Hal tersebut karena dalam protokol RIP, masing-masing router akan saling berbagi routing table dengan semua router “di sekitarnya”.

Berikut ini adalah konfigurasi di masing-masing virtual machine :

Continue reading