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.

Tampilan Banner SSH Server

Seringnya saat mengakses suatu server lewat SSH, saya mendapati tampilan seperti ini :

Saya langsung disuguhi prompt untuk memasukkan password. Tapi ada kalanya server memberikan tampilan seperti di bawah ini :

Tampilan welcome seperti itu di kontrol oleh parameter Banner pada konfigurasi Open SSH server. Contoh di atas saya ambil dari server yang menggunakan CentOS Linux 6.5. Konfigurasi Banner tersebut bisa dilihat pada berkas sshd_config seperti contoh berikut ini :

[ttirtawi@bestpractise ~]$ sudo grep Banner /etc/ssh/sshd_config
Banner /etc/issue
[ttirtawi@bestpractise ~]$ 

Pada contoh di atas parameter Banner menggunakan sumber teks dari berkas /etc/issue. Dengan kata lain semua tampilan welcome tadi tersimpan dalam berkas /etc/issue.

[ttirtawi@bestpractice ~]$ sudo cat /etc/issue
[sudo] password for ttirtawi:

###############################################################
#  Welcome to Best Practice                                   #
#  All connections are monitored and recorded                 #
#  Disconnect IMMEDIATELY if you are not an authorized user!  #
###############################################################

[ttirtawi@bestpractice ~]$

Secara baku Open SSH Server tidak menggunakan parameter Banner (parameter Banner-nya masih diberi tanda pagar (commented)). Sehingga bila kita mengubahnya seperti contoh di atas kita perlu melakukan restart servis SSH Servernya seperti berikut ini :

[ttirtawi@bestpractise ~]$ sudo service sshd restart
Stopping sshd:                                             [  OK  ]
Starting sshd:                                             [  OK  ]
[ttirtawi@bestpractise ~]$

Dengan cara tadi kita bisa menyampaikan pesan selamat datang atau pesan peringatan pada siapa saja yang akan mengakses server tersebut lewat SSH.

Mengubah Huruf Besar/Kecil Pada VI

Ini adalah catatan singkat saya tentang cara mengubah huruf besar/huruf kecil dengan menggunakan teks editor vi. Misalnya saya punya teks tampilan di gambar di bawah ini. Semua teksnya menggunakan huruf besar :

Untuk mengubah semua teks dalam sebuah dokumen menjadi huruf kecil, saya bisa menggunakan perintah :

:%s/.*/\L&/

\L berarti lower case (huruf kecil). Dengan perintah tersebut, vi akan segera mengubah semua teks menjadi huruf kecil seperti tampak pada gambar di bawah ini :

Sebaliknya bila saya ingin mengubah semua teks menjadi huruf besar, maka saya bisa gunakan perintah :

:%s/.*/\U&/

\U berarti upper case (huruf kecil). Dengan perintah tersebut, vi akan segera mengubah semua teks menjadi huruf besar seperti tampak pada gambar di bawah ini :

Dua perintah tadi bisa digunakan pada vi maupun vim (versi yang lebih canggih dari vi).

FTP Server Di Solaris 11

Saya punya server Solaris 11 dengan hostname ncc-dev-sms01. Saat saya ingin mencoba mengakses server ini melalui FTP tapi saya mendapati error seperti ini :

root@slc03dto:~# ftp ncc-dev-sms01
ftp: connect: Connection refused
ftp> quit
root@slc03dto:~# 

Error seperti itu dapat dipastikan karena servis FTP server di ncc-dev-sms01 belum aktif. Ketika saya cek di server ncc-dev-sms01 memang tidak terlihat ada servis FTP yang sedang aktif :

root@ncc-dev-sms01:~# svcs | grep -i ftp
root@ncc-dev-sms01:~#

Saya coba aktifkan dengan perintah svcadm enable tapi mendapati error seperti ini :

root@ncc-dev-sms01:~# svcadm enable ftp
svcadm: svc:/network/ftp:default: is not complete, missing general/complete (see svcs -xv svc:/network/ftp:default for details)
root@ncc-dev-sms01:~# 

Mengikuti petunjuk yang muncul saya gunakan perintah svcs -xv tersebut :

root@ncc-dev-sms01:~# svcs -xv svc:/network/ftp:default
svc:/network/ftp:default (?)
 State: -
Reason: Service is incomplete, defined only by profile /etc/svc/profile/generic.xml.  To install this service, identify and install the package which provides the service's primary manifest.  Use "pkg search 'svc\:/network/ftp\:default'" to identify the package, then "pkg install <pkg>" to install the indicated package.
Impact: This service is not running.
root@ncc-dev-sms01:~# 

Untuk memasang servis FTP yang belum ada tadi, saya gunakan perintah seperti di bawah ini :

root@ncc-dev-sms01:~# pkg install pkg://solaris/service/network/ftp
           Packages to install:  1
       Create boot environment: No
Create backup boot environment: No
            Services to change:  2


DOWNLOAD                                PKGS         FILES    XFER (MB)   SPEED
Completed                                1/1       112/112      0.8/0.8  2.1M/s


PHASE                                          ITEMS
Installing new actions                       179/179
Updating package state database                 Done
Updating image state                            Done
Creating fast lookup database                   Done
root@ncc-dev-sms01:~# 

Setelah servis tersebut aktif, saya bisa mengulang kembali perintah svcadm enable tadi :

root@ncc-dev-sms01:~# svcadm enable ftp
root@ncc-dev-sms01:~# svcs | grep -i ftp
online          3:52:46 svc:/network/ftp:default
root@ncc-dev-sms01:~#

Setelah servis ini aktif saya bisa melihat servis FTP sudah LISTEN di port 21 :

root@ncc-dev-sms01:~# netstat -an | egrep "21.*LISTEN"
  *.21                 *.*                0      0 128000      0 LISTEN
  *.21                              *.*                             0      0 128000      0 LISTEN      
root@ncc-dev-sms01:~#

Dengan begitu sekarang saya sudah bisa mengakses server ini melalui perintah FTP :

root@slc03dto:~# ftp ncc-dev-sms01
Connected to ncc-dev-sms01.
220 ::ffff:192.168.1.11 FTP server ready
Name (ncc-dev-sms01:ttirtawi): smf_oper
331 Password required for smf_oper
Password:
230 User smf_oper logged in
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> 

Untuk membatasi user yang tidak boleh mengakses FTP server ini, saya bisa menambahkan username yang bersangkutan dalam berkas berikut ini :

root@ncc-dev-sms01:~# cat /etc/ftpd/ftpusers 
#
# List of users denied access to the FTP server, see ftpusers(4).
#
root
daemon
bin
sys
adm
lp
uucp
nuucp
dladm
netadm
netcfg
smmsp
gdm
xvm
mysql
openldap
webservd
nobody
noaccess
nobody4
aiuser
unknown
ftp
root@ncc-dev-sms01:~# 

Demikian catatan singkat saya tentang cara mengaktifkan FTP server di Solaris 11. Langkah-langkah ini bisa dilakukan pada global zone maupun dari dalam local zone.