“Search and Replace” Karakter Pada Banyak Dokumen di Unix Shell

Thursday, May 29th, 2008

Saya masih menggunakan kata “Search and Replace” karena belum menemukan padanan yang tepat dalam Bahasa Indonesia. Search and Replace adalah fitur yang wajib hukumnya ada di sebuah editor. Dengan fitur ini maka kita dapat dengan mudah mengganti karakter yang kita inginkan dengan karakter penggantinya. Dan tentunya ini sangat membantu pekerjaan kita. Tapi bagaimana jika kita harus mengganti karakter dengan pola yang sama pada banyak dokumen? Apakah kita harus membuka dokumen tersebut satu persatu dari editor dan menggunakan fitur “search and replace”? Cape deh…

Pada tulisan ini saya mencoba berbagi tips (pengetahuan)? untuk menghadapi masalah ini dengan menggunakaan fitur - fitur yang ada di Unix Shell (bagi pengguna MS Windows bisa pakai cygwin untuk menjalanakan perintah - perintah Unix Shell).

Untuk permasalahan tersebut, kita bisa menggunakan grep dan sed yang ada unix shell. Yang mana grep akan mencari dokumen yang mengandung karakter yang dicari dan sed akan mengganti karakter tersebut dengan karakter penggantinya. Untuk lebih lanjut silahkan lihat contoh kasus berikut:

Saya asumsikan kita mempunyai dokumen vendor.html, form-vendor.html detail-vendor.html, customer.html, form-customer.html dan detail-customer.html. Dokumen customer.html adalah duplikasi dari vendor.html dan form-customer.html adalah duplikasi dari form-vendor.html begitu juga dengan detail-customer.html yang merupakan duplikasi dari detail-vendor.html Kita ingin mengganti kata - kata vendor ataupun Vendor yang terdapat pada ketiga dokumen tersebut. Untuk itu kita bisa menjalankan perintah berikut dari terminal

grep -l 'vendor' -r -i *customer*.html | while read i; \

do sed -i -e 's/vendor/customer/g' \

-e 's/Vendor/Customer/g' $i; \

done;

Penjelasan:

Perintah tersebut terdiri dari dua bagian yaitu grep dan sed yang dijalankan dalam statemen while.

grep -l 'vendor' -r -i *customer*.html

Perintah ini akan mencari dokumen *customer*.html yang mengandung kata - kata customer dengan mengabaikan case sensitive.

while read i; do sed -i -e 's/vendor/customer/g' -e 's/Vendor/Customer/g' $i; done;

Perintah ini akan mengganti kata vendor menjadi customer dan kata Vendor menjadi Customer pada dokumen yang ditemukan oleh perintah grep sebelumnya.

Perintah diatas tidak terbatas untuk tiga dokumen saja. Dan anda juga dapat menggunakan regular ekspresi pada sed untuk menemukan pola karakter yang lebih spesifik lagi.

Apa Sih Sudo Itu?

Saturday, March 15th, 2008

Sewaktu pertama kali menggunakan Ubuntu ada hal yang aneh, yaitu tidak bisa menggunakan akun root. Bagaimana bisa menggunakan akun root, pada waktu proses instalasi saja tidak ada set password untuk akun root. Ini sangat berbeda dengan distro yang sebelumnya pernah saya gunakan yaitu Fedora. Secara default memang Ubuntu tidak menginzinkan untuk menggunakan akun root. Sebagai alternatifnya bisa menggunakan sudo.

Sudo adalah program yang terdapat di keluarga UNIX yang digunakan untuk menjalankan perintah yang membutuhkan akses dari akun root [1]. Sudo hanya dapat digunakan oleh user yang sudah terdaftar di file /etc/sudoers. Pada saat dijalankan sudo akan meminta password user yang menjalankan sudo tersebut, tetapi bisa juga dibuat untuk meminta password root atau tanpa password sama sekali. Secara default password yang dimasukkan tadi akan disimpan selama 15 menit agar dalam waktu 15 menit kedepan anda tidak perlu lagi memasukkan password jika menggunakan sudo[2].

Kenapa Harus Menggunakan Sudo?
Di keluarga Unix ada super user yang namanya root. Super user ini dapat melakukan apapun terhadap sistem. Melakukan pekerjaan umum dengan menggunakan akun root ini mempunyai resiko yang berbahaya karena jika salah mengetikkan maka akan dapat merusak sistem. Baiknya untuk pekerjaan umum kita menggunakan akun biasa dan menggunakan akun root jika memang sangat diperlukan. Untuk itu sudo diciptakan agar akun biasa dapat menjalankan perintah yang membutuhkan akses dari akun root tanpa harus login lagi dengan akun root. Sudo juga mencatat setiap perintah yang dijalankan dengan menggunakan sudo dan menyimpannya di file /var/log/auth.log. Ini memudahkan kita untuk melakukan track back suatu saat nanti.

Catatan:
Untuk menggunakan sudo, gunakan sudo di depan perintah. Contoh:

sudo apt-get install

Untuk menjalankan aplikasi graphis yang membutuhkan hak akses root di Gnome gunakan gksudo dan untuk KDE gunakan kdesu.

Referensi:
1. http://en.wikipedia.org/wiki/Sudo
2. https://help.ubuntu.com/community/RootSudo

Remote ke Mesin Lain Tanpa Password Dengan Menggunakan Ssh-keygen

Friday, February 22nd, 2008

Password adalah hal yang sangat penting dalam melakukan autentikasi. Password ini digunakan untuk meyakinkan mesin/komputer bahwa yang memberikan password dengan benar adalah yang berhak mengakses aplikasi/sistem yang dilindungi oleh autentikasi tadi. Begitu juga jika kita melakukan remote ke mesin lain. Mesin yang diakses akan meminta password, dan jika password yang kita berikan salah maka kita tidak diizinkan melakukan remote ke mesin tersebut.

Jika mesin yang anda remote jumlahnya sedikit, memasukkan password bukan merupakan suatu masalah. Tapi jika mesin yang anda remote jumlahnya banyak, dan ini dilakukan secara berulang - ulang, maka memasukkan password bisa menjadi masalah baru dan juga hal yang sangat membosankan. Ditambah lagi kita harus mengigat password yang berbeda untuk setiap mesin.

Untuk mengatasi masalah tersebut kita bisa menggunakan aplikasi ssh-keygen. Dengan aplikasi ini kita bisa melakukan remote ke mesin lain melalui ssh tanpa harus memasukkan password. Aplikasi ini bukanlah hal yang baru bagi sistem administrator. Saya sendiri sudah lama menggunakan aplikasi ini (walaupun saya bukan seorang sistem administrator). Kebetulan kemarin saya harus menggunakan aplikasi ini kembali dan mengingatkan saya untuk menuliskannya di blog ini. Mudah - mudahan bisa menjadi petunjuk buat orang yang belum mengetahuinya. Berikut contoh penggunaan sederhana dari aplikasi ssh-keygen.

dolly@dolly:~$ ssh-keygen -t dsa

Maka akan menghasilkan keluaran berikut

Generating public/priva$ ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/home/dolly/.ssh/id_dsa):

Tekan enter lagi

Your identification has been saved in /home/dolly/.ssh/id_dsa.
Your public key has been saved in /home/dolly/.ssh/id_dsa.pub.
The key fingerprint is:
ee:48:13:ed:1f:49:45:14:10:a2:31:91:d5:d0:19:61 dolly@dolly

Sesuai dengan informasi di atas, ssh-keygen telah membuat file id_dsa dan id_dsa.pub di ~/.ssh. Salin file id_dsa.pub ke mesin tujuan dan ubah nama filenya menjadi authorized_keys.

dolly@dolly:~$ scp ~/.ssh/id_dsa.pub dolly@remote:~/.ssh/authorized_keys

Mesin tujuan akan meminta password untuk menerima file yang dikirim melalui scp. Karena kita sudah mempunyai file id_dsa.pub, maka untuk login ke mesin lain kita tinggal menyalin file tersebut ke mesin - mesin lainnya. Jika file sudah berhasil disalin ke mesin tujuan, maka anda sudah bisa melakukan remote ke mesin tujuan tanpa memasukkan password.

dolly@dolly:~$ ssh dolly@remote

Koq bisa login tanpa password?

Sewaktu kita mengirimkan request untuk melakukan remote ke mesin tujuan, maka ssh akan melakukan pengecekan antara data key yang ada di mesin lokal (~/.ssh/id_dsa) dengan key yang ada di mesin tujuan (~/.ssh/authorized_keys)

Anda bisa melakukan remote tanpa password ke mesin tujuan hanya terbatas pada mesin yang sudah anda buat file id_dsa nya saja. Jika anda melakukan remote ke mesin tujuan dari mesin lain, maka mesin tujuan akan tetap meminta password. Untuk itu anda harus membuat file id_dsa di setiap mesin yang anda gunakan untuk remote ke mesin tujuan. Untuk membuat file id_dsa, caranya sama dengan sebelumnya. Hanya saja cara menyalain file id_dsa.pub yang berbeda.

Untuk menyalin file id_dsa.pub ke mesin tujuan tidak bisa lagi menggunakan cara sebelumnya, karena cara itu akan mereplace/mengganti file authorized_keys yang sudah ada. Untuk menyalin file tersebut bisa menggunakan cara berikut:

dolly@office:~$ scp id_dsa.pub dolly@remote:~/.ssh/id_dsa.pub

dolly@office:~$ ssh dolly@remote

Mesin tujuan akan meminta password. Masukkan password, dan jika benar maka kita akan bisa masuk ke server tujuan

dolly@office:~$ echo ” ” >> ~/.ssh/authorized_keys
dolly@office:~$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

Logout dari mesin tujuan (ctrl + d), kemudian remote lagi ke mesin tujuan maka mesin tujuan tidak akan meminta password lagi.

dolly@office:~$ ssh dolly@remote

Dengan mengikuti petunjuk - petunjuk diatas, anda sudah bisa melakukan remote ke mesin lain tanpa password dengan menggunakan ssh. Untuk penggunaan yang lebih lanjut/advance, anda bisa membaca manual dari ssh-keygen.

Catatan:
Saya asumsikan di komputer anda sudah terinstall aplikasi ini, jika belum ada anda harus menginstallnya terlebih dahulu.

Penggunaan GNU Screen di UNIX Shell

Monday, October 1st, 2007

Beberapa waktu yang lalu saya harus menggunakan MS Windows dalam melakukan pekerjaan di kantor. Hal ini dikarenakan AC di ruangan saya rusak yang menyebabkan ruangan saya tidak nyaman sehingga saya harus pindah ke ruangan lain untuk dapat tetap bekerja.

Kebiasaan saya dalam bekerja adalah melakukan remote dengan ssh ke development server dan melakukan banyak proses seperti memanipulasi file, dan juga menjalankan banyak program secara interaktif. Karena saya sedang menggunakan MS Windows, saya menggunakan aplikasi putty sebagai ssh client untuk remote ke server. Nah, yang jadi masalah adalah saya harus menggunakan beberapa shell untuk bekerja. Sedangkan dengan aplikasi putty saya harus menjalankan aplikasi putty sebanyak shell yang saya gunakan, bisa - bisa desktop dipenuhi dengan aplikasi putty. Tidak seperti aplikasi Gnome Terminal yang biasa saya gunakan di GNU Linux, yang cukup dengan membuka tab baru untuk menjalankan shell lain, sehingga tidak memenuhi desktop.

Untuk mengatasi permasalahan ini, saya menggunakan GNU Screen di remote server. Sehingga cukup menjalankan satu aplikasi putty kemudian menggunakan GNU Screen untuk melakukan proses yang lain. GNU Screen adalah aplikasi yang digunakan untuk membuat virtual terminal. Jadi cukup menjalankan satu terminal, kemudian dengan GNU Screen ini kita menjalankan proses - proses yang lain di virtual terminal. Untuk menjalankan aplikasi GNU Screen, cukup dengan mengetikkan perintah screen di terminal. Untuk mengontrol aplikasi GNU Screen ini terdapat banyak perintah, dan berikut ini beberapa perintah yang sering digunakan.

Secara default, setiap perintah yang ada di GNU Screen ini diawali dengan Ctrl+a (tekan Ctrl dan a sekaligus) dan diikuti dengan keystroke yang lain.

  • Ctrl+a c

Digunakan untuk membuat virtual terminal yang baru.

  • Ctrl+a n

Digunakan untuk pindah ke virtual terminal berikutnya.

  • Ctrl+a p

Digunakan untuk pindah ke virtual terminal sebelumnya.

  • Ctrl+a (0-9)

Digunakan untuk pindah ke virtual terminal sesuai dengan nomor terminal (Contoh Ctrl+a 2).

  • Ctrl+a d

Digunakan untuk keluar dari aplikasi GNU Screen tanpa harus mematikan proses yang sedang berjalan.

  • Ctrl+a Ctrl+\

Digunakan untuk keluar dari aplikasi GNU Screen dan mematikan proses yang sedang berjalan.

Dengan perintah Ctrl+a d kita akan keluar dari aplikasi GNU Screen dan proses - proses yang ada masih terus berjalan. Dan untuk kembali lagi ke aplikasi GNU Screen dapat dilakukan dengan menjalankan perintah screen -r. Perintah ini akan berjalan jika sebelumnya kita hanya menjalankan satu aplikasi GNU Screen. Jika sebelumnya terdapat lebih dari satu aplikasi GNU Screen, maka kita harus melihat list dari session aplikasi GNU Screen yang dijalankan sebelumnya dengan perintah screen -ls. Perintah ini akan menampilkan session dari aplikasi GNU Screen yang ada dan juga statusnya. Untuk kembali ke salah satu session aplikasi GNU Screen dapat dilakukan dengan menjalankan perintah screen -r .

Untuk daftar perintah yang lebih jelas bisa dilihat di Screen Manual Page atau bisa dilihat disini.

Penggunaan GNU find Dalam Mencari Dokumen

Saturday, July 14th, 2007

GNU find adalah program di Unix yang digunakan untuk mencari file di dalam hirarki direktori. Program ini memiliki banyak opsi penggunaan yang memudahkan kita dalam mencari dokumen. GNU find mengizinkan kita memberikan perintah/aksi terhadap hasil pencarian, misalnya menghapus, menyalin, melihat ukuran file ataupun aksi - aksi lainnya.

Pada tulisan ini saya tidak akan membahas semua opsi yang ada pada GNU find tapi hanya membahas penggunaan find yang sering saya gunakan, seperti : mencari file/direktori, mencari file/direktori kemudian menghapusnya dan mencari direktori kemudian melihat kapasitas dari direktori tersebut.

Mencari File/Direktori
Untuk mencari file dapat menggunakan perintah ini :

find . -type f -iname 'nama file yang dicari'
Untuk mencari direktori kita hanya perlu mengganti opsi -type f menjadi -type d

find . -type d -iname 'nama direktori yang dicari'

Mencari File/Direktori kemudian menghapusnya
Untuk mencari file dan kemudian menghapusnya dapat menggunakan perintah ini :

find . -type f -iname 'nama file yang dicari' -exec rm -f {} \;
Untuk mencari direktori dan kemudian menghapusnya kita hanya perlu mengganti opsi -type f menjadi -type d

find . -type d -iname 'nama direktori yang dicari' -exec rm -f {} \;
Untuk melakukan aksi lainnya terhadap file yang dicari, cukup dengan mengganti rm -fr dari perintah diatas.

Melihat ukuran folder didalam direktori
Saya belum menemukan perintah untuk melihat ukuran dari folder - folder pada suatu direktori di Unix. Untuk melakukan hal ini saya biasa menggunakan GNU find dengan opsi -iregex untuk memfilter hasil pencarian.

find . -type d -iregex '^\.\/[^\/]*$' -exec du -sh {} \;
Perintah diatas sama halnya dengan perintah mencari direktori dan kemudian menghapusnya, cuma bedanya disini kita menggunakan menggunakan du -sh untuk melihat ukuran folder dan opsi -iregex. Opsi ini digunakan untuk memfilter hasil pencarian dengan menggunakan regex, karena jika tidak difilter GNU find akan menampilkan semua folder atau dengan kata lain folder yang ada didalam folder yang kita cari juga ditampilkan. Berikut hasil pencarian folder jika tidak difilter :

./Aqil
./Aqil/26-06-2007
./Aqil/03-07-2007
./Dolly

Dari hasil pencarian diatas, terlihat folder yang ada didalam folder Aqil juga ditampilkan. Padahal yang ingin kita tampilkan hanyalah folder Dolly dan Aqil. Untuk memfilternya digunakan opsi -iregex dengan pattern ‘^\.\/[^\/]*$’. Jika anda belum memahami tentang regex bisa melihat tautan berikut.

Opsi - opsi yang digunakan
Sekarang kita akan membahas opsi - opsi dari GNU find yang kita gunakan.

-type

Opsi ini digunakan untuk menentukan tipe dari file yang dicari. Sebagai contoh -type d digunakan untuk mencari direktori, -type f digunakan untuk mencari file

-iname

Opsi ini sama dengan opsi -name yang mencari file berdasarkan nama filenya, cuma bedanya opsi ini tidak case sensitive terhadap hasil pencarian

-exec

Opsi ini sama digunakan untuk melakukan aksi terhadap hasil pencarian

-iregex

Opsi ini sama dengan opsi -regex yang mencari file berdasarkan pattern yang diberikan, cuma bedanya opsi ini tidak case sensitive terhadap hasil pencarian.

Contoh penggunanan GNU find diatas bisa anda kembangkan lagi sesuai dengan kebutuhan anda. Untuk penjelasan selanjutnya bisa anda lihat di manual GNU find dengan menjalankan perintah man find dari shell anda atau bisa melihat tautan berikut.