MySQL & FreePascal Pemrograman Database...
Click here to load reader
-
Upload
doankhuong -
Category
Documents
-
view
313 -
download
5
Transcript of MySQL & FreePascal Pemrograman Database...
INFOLINUX 01/200650
TUTORIAL Berita | Ulasan | Utama | Bisnis | Alternatif | Praktik Instan | Solusi | Tutorial
www.infolinux.web.id
Salah satu bahasa pemrograman yang
paling disukai penulis semasa ku liah
adalah Pascal. Selain terstruktur,
bahasa Pascal juga cukup mudah dipaha-
mi untuk pembuatan program. Jika Anda
ingin membuat program dalam bahasa
Pascal di Linux, gunakan saja FreePascal
sebagai compiler-nya. Syntax bahasa Pas-
cal yang digunakan di FreePascal sangat
mendekati dengan syntax bahasa yang di-
gunakan di Turbo Pascal 7.0. Paling tidak,
hal tersebut dapat sedikit mengurangi
waktu adaptasi sewaktu membuat prog-
ram di FreePascal.
Pada InfoLINUX edisi Maret 2004, su-
dah dibahas mengenai fi tur-fi tur yang ada
pada FreePascal. Dan pada artikel ini, penu-
lis akan menjelaskan tentang cara membuat
program dengan FreePascal yang akan kita
koneksikan dengan database yang ada di
MySQL.
Instalasi FreePascalSaat penulisan artikel ini, penulis menggu-
nakan distro Fedora Core 4 untuk uji co-
banya. Untuk menginstalasikan FreePascal
di Fedora Core, Anda cukup mengetikkan
perintah di bawah ini:
# rpm -ivh fpc-2.0.1-050923.i386.rpm
Setelah terinstalasi dengan baik, coba ke-
tikkan fpc dari konsole.
$ fpcFree Pascal Compiler version 2.0.1 [2005/09/23] for i386
Copyright (c) 1993-2005 by Florian Klaempfl/usr/lib/fpc/2.0.1/ppc386 [options] <inputfile> [options]................................................................
Maka akan terlihat versi FreePascal yang
terinstallasi di sistem Anda.
Coba tes membuat program sederhana
dengan menggunakan FreePascal. Ketikkan
baris program di bawah ini dengan meng-
gunakan editor kesukaan Anda.
Program Tes;Uses crt;Begin clrscr(); writeln (‘Hello, Tes Membuat Program Pascal’);End.
Simpan dengan nama hello.pas, lalu
compile dengan menggunakan perintah
berikut:
$ fpc hello.pas
Setelah berhasil, Anda akan melihat dua
buah fi le tambahan, yaitu hello.o dan hello.
File hello.o adalah fi le object yang dihasil-
kan, sedangkan fi le hello adalah fi le execut-
able yang dapat Anda jalankan. Untuk men-
jalankan fi le tersebut, Anda cukup mengetik-
kan perintah berikut:
$ ./helloHello, Tes Membuat Program Pascal
Persiapan awal Sebelum kita membuat program yang
mengkoneksikan FreePascal ke database
MySQL, pastikan Anda telah menginstalasi-
kan paket-paket di bawah ini:
� mysql-4.1.11-2
� mysql-server-4.1.11-2
� mysql-devel-4.1.11-2
Selanjutnya, set password untuk user
root yang ada di MySQL.
# service mysqld start# mysqladmin -u root password ‘passwordanda’
(Note: Ubah passwordanda dengan pass-
word pilihan Anda.)
Selanjutnya restart service MySQL untuk
menjalankan perubahan:
# service mysqld restart
Setelah memberikan password untuk
u ser root, langkah berikutnya adalah mem-
buat sebuah user di MySQL selain user root,
agar dapat mengakses database MySQL.
Sebagai contoh, penulis ingin membuat
sebuah user dengan nama supriyanto, dan
diberikan beberapa hak akses.
# mysql -u root -p
mysql> use mysql;mysql> insert into user (Host, User, Password, Select_priv, Insert_priv, Update_priv, Delete_priv, Create_priv, Drop_priv, Reload_priv, Shutdown_
Pemrograman Database Menggunakan MySQL dan FreePascalSebagai salah satu compiler Pascal terbaik yang ada di Linux, FreePascal dapat kita gu-nakan untuk men-develop program yang mengoneksikan ke database MySQL. Pada “Tuto-rial” ini, penulis akan menjelaskan cara koneksi FreePascal ke database MySQL.
MySQL & FreePascal
INFOLINUX 01/2006 51
TUTORIALBerita | Ulasan | Utama | Bisnis | Alternatif | Praktik Instan | Solusi | Tutorial
www.infolinux.web.id
priv, Process_priv, File_priv, Grant_priv, References_priv, Index_priv, Alter_priv) VALUES (‘localhost’, ‘supriyanto’, password(‘sus4h4j4’), ‘Y’, ‘Y’,
‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’);mysql> FLUSH PRIVILEGES;mysql> quit# service mysqld restart
Berikutnya Anda sudah dapat login ke
MySQL dari user biasa.
$ mysql -u supriyanto -p
mysql>
Membuat database TestDBUntuk latihan menghubungkan FreePascal
dengan MySQL, kita akan membuat sebuah
database yang bernama TestDB sebagai uji-
cobanya. Untuk membuatnya ikuti langkah
di bawah ini:
� Buat database testdb.
$ mysqladmin -u supriyanto -p create testdb
� Ketikkan baris di bawah ini dengan edi-
tor kesukaan Anda, lalu save dengan na-
ma testdb.sql.
CREATE TABLE `FPdev` (`id` int(11) NOT NULL default ‘0’,`UserName` char(255) default NULL,`InstEmail` char(255) default
MySQL & FreePascal
Gbr 1. Tambahkan letak Library MySQL di File fpc.cfg.
INFOLINUX 01/200652
TUTORIAL Berita | Ulasan | Utama | Bisnis | Alternatif | Praktik Instan | Solusi | Tutorial
www.infolinux.web.id
NULL,PRIMARY KEY (`id`),KEY `id` (`id`));
INSERT INTO `FPdev` VALUES (1,’Michael Van Canneyt’,’[email protected]’),(2,’Florian Klaempfl’,’[email protected]’),(3,’Carl-Eric Codere’,’[email protected]’),(4,’Daniel Mantione’,’[email protected]’),(5,’Pierre Muller’,’[email protected]’),(6,’Jonas Maebe’,’[email protected]’),(7,’PeterVreman’,’[email protected]’),(8,’Gerry Dubois’,’[email protected]’);
(Note: Semua baris perintah di atas, ketik-
kan dalam satu baris perintah).
� Import testdb.sql ke database testdb
$ mysql -u supriyanto -p testdb < testdb.sql
Untuk memastikan kalau fi le testdb.sql
sudah di-import ke database testdb, check
langsung ke dalam database testdb.
Test Koneksi FreePascal dengan MySQLSetelah membuat database testdb, lang-
kah berikutnya adalah mencoba koneksi
FreePascal dengan database MySQL. Sebe-
lum dapat menginstalasi program FreePas-
cal dengan MySQL, tambahkan di fi le
konfi gurasi FreePascal yaitu fpc.cfg, untuk
menunjuk ke library MySQL. Sebagai con-
toh di Fedora Core 4 library MySQL berada
di /usr/lib/mysql, maka tambahkan baris
berikut ini di fpc.cfg, dibagian #searchpath
for libraries.
# vi /etc/fpc.cfg.....................................................# searchpath for libraries# tambahkan baris berikut -Fl/usr/lib/mysql.....................................................
Selanjutnya, kita akan membuat prog-
ram untuk mengetes koneksi ke MySQL.
Ketikkan baris berikut dengan editor ke-
sukaan Anda, kemudian Save dengan nama
konekdanbaca.pas.
$ vi konekdanbaca.pasProgram KonekDanBaca;{header file untuk menghubungkan ke MySQL}uses mysql4;Var
{ variabel-variabel yang dibutuhkan untuk konek & menampung hasil query.} sock,inisial:PMySQL; qmysql:TMYSQL; recbuf:PMYSQL_RES; rowbuf:TMYSQL_ROW; state:integer;begin
{ inisialisasi menggunakanperintah mysql_init } inisial:=mysql_init(PMySQL(@qmysql));
{ koneksi menggunakan mysql_real_connect dgn formatmysql_real_connect(inisial, host, user, user_password, nama_database, port, unix_socket, clientflag): } sock:=mysql_real_connect(inisial,nil,’supriyanto’,’sus4h4j4’,’testdb’,0,nil,0);
{ jika koneksi tidak berhasil, variabel sock akan bernilai nil dan koneksi akan keluar. Jika berhasil, maka akan tercetak tulisan ‘koneksi berhasil’, dan akan menjalankan baris perintah berikutnya } if sock=nil then begin writeln(‘Koneksi Error !’); writeln(mysql_error(@qmysql)); end else writeln(‘Koneksi berhasil !’); writeln;
{Jika koneksi berhasil, jalankan query dengan menggunakan fungsi mysql_query. Format mysql_query(koneksi, perintah query) } state:=mysql_query(sock,’select * from FPdev’); if (state < 0) then begin writeln (‘Query Salah....!’); writeln (mysql_error(sock));
MySQL & FreePascal
Gbr 2. Proses Compile dan Running Program Konekdanbaca.pas.
INFOLINUX 01/2006 53
TUTORIALBerita | Ulasan | Utama | Bisnis | Alternatif | Praktik Instan | Solusi | Tutorial
www.infolinux.web.id
MySQL & FreePascal
end;{ tampung hasil query pada variabel recbuf. Setelah itu, hasil query yang dihasilkan dapat ditampung dan dibaca dengan menggunakan variabel rowbuf } recbuf := mysql_store_result(sock); rowbuf := mysql_fetch_row(recbuf); while (rowbuf <>nil) do begin write (‘- No ID: ‘, rowbuf[0]); write (‘, Username: ‘, rowbuf[1]); writeln (‘, Email: ‘, rowbuf[2]); rowbuf := mysql_fetch_row(recbuf); end; mysql_free_result (recbuf); mysql_close(sock);end.
Kompile dan jalankan program ini, ma-
ka Anda akan melihat daftar nama pembuat
FreePascal.
$ fpc konekdanbaca.pas$ ./konekdanbacaKoneksi berhasil !
- No ID: 1, Username: Michael Van Canneyt, Email: [email protected] No ID: 2, Username: Florian Klaempfl, Email: [email protected] No ID: 3, Username: Carl-Eric Codere, Email: [email protected] No ID: 4, Username: Daniel Mantione, Email: [email protected] No ID: 5, Username: Pierre Muller, Email: [email protected] No ID: 6, Username: Jonas Maebe, Email: [email protected]
- No ID: 7, Username: Peter Vreman, Email: [email protected] No ID: 8, Username: Gerry Dubois, Email: [email protected]
Jika tampilan hasil program di atas ber-
jalan dengan baik, berarti Anda telah ber-
hasil membuat program untuk mengoneksi
kan FreePascal ke database MySQL. Selain
koneksi ke database MySQL, FreePascal
juga dapat dikoneksikan ke PostgreSQL,
Sqlite, Interbase, dan sebagainya.
Agar lebih memudahkan pembelajaran,
penulis juga telah menyertakan program
untuk seperti tambah data, edit data, dan
hapus data dengan menggunakan FreePas-
cal dan MySQL, yang dapat Anda temukan
di CD InfoLINUX kali ini.
Semoga dari artikel yang singkat ini,
Anda dapat berkreasi lebih jauh lagi dalam
membuat program yang sesuai dengan ke-
butuhan kerja maupun pribadi.
Supriyanto ([email protected])
INFOLINUX 01/200654
TUTORIAL Berita | Ulasan | Utama | Bisnis | Alternatif | Praktik Instan | Solusi | Tutorial
www.infolinux.web.id
SQLite3
SQlite merupakan database yang me-
narik. Cukup dengan sebuah fi le,
kita bisa menyimpan berbagai tabel
yang dibutuhkan. Aksesnya juga cepat dan
mendukung cukup lengkap standar SQL.
Instalasi pun dapat dengan mudah dilaku-
kan karena hanya ada beberapa fi le pustaka
dan satu binary yang perlu di-copy-kan.
Menariknya, cukup banyak bahasa pem-
rograman juga telah mendukung database
yang satu ini.
Dengan kesederhanaannya, terkadang
pengguna Sqlite cukup menggunakan prog-
ram sqlite (atau sqlite3 untuk Sqlite versi 3)
untuk bekerja (menggunakan sintaks SQL)
dengan database sqlite. Hanya, sayangnya,
tidak semua pengguna database mau atau
mampu bekerja dengan sintaks SQL.
Sebuah front end yang sederhana tentu-
nya diharapkan bisa membantu pengguna
database yang tidak bekerja dengan sintaks
SQL. Front end inilah yang ingin kita buat
dalam artikel kali ini. Sebut saja nama front
end-nya sebagai sqliteweb. Pada tulisan ini,
kita akan membuat sqliteweb 0.1, yang ha-
nya memiliki beberapa fi tur terbatas.
Program ini (dan versi terbarunya) bisa
didapatkan di http://www.noprianto.com/in-
dex.php?mod=modules/sqliteweb/index.php.
Program sqliteweb ini dilisensikan di bawah
lisensi BSD yang sangat fl eksibel sehingga
bisa dipergunakan oleh siapa saja, untuk
cakupan penggunaan yang sangat luas.
Sqliteweb merupakan web yang dijalan-
kan sebagai aplikasi CGI. Untuk membuat
aplikasi ini lebih sederhana tanpa ketergan-
tungan dengan bahasa pemrograman dan
pustaka-pustakanya (seperti halnya sqlite
itu sendiri), sqliteweb dibangun menggu-
nakan shell script (pengembangan meng-
gunakan shell bash) dan menggunakan
bantuan dari berbagai utiliti standar sistem
berikut ini:
� test (bagian cari coreutils)
� cd (bash builtins)
� pwd (bash builtins)
� ls (bagian dari coreutils)
� wc (bagian dari coreutils)
� cut (bagian dari coreutils)
� rm (bagian dari coreutils)
� mv (bagian dari coreutils)
� touch (bagian dari coreutils)
� seq (bagian dari coreutils)
Sementara, sqlite yang dipergunakan
adalah sqlite versi 3. Penulis tidak melaku-
kan pengujian dengan sqlite versi sebelum-
nya.
Fitur-fi tur yang datang bersama versi 0.1
aplikasi ini adalah:
� Bisa membuat database
� Bisa mem-browse database di direktori
tertentu (bisa diatur sesuai keinginan)
� Bisa menghapus database
� Bisa mengganti nama database
� Bisa melihat daftar tabel di dalam data-
base
� Bisa menghapus tabel tertentu di dalam
database
� Bisa melihat isi suatu tabel
� Bisa membuat tabel
Sayangnya, pada versi 0.1 ini, kita belum
bisa mengisi data ke dalam tabel, ataupun
memanipulasi data di dalam tabel seperti
menghapus data dan meng-update data. Fi-
tur ini akan dipertimbangkan untuk dima-
sukkan pada versi berikutnya.
Pada versi 0.1 ini juga, masalah keamanan
belum menjadi prioritas. Karena dijalankan
melewati web, maka direktori dan fi le-fi le
database di dalamnya harus bisa ditulisi
oleh user yang menjalankan web server agar
aplikasi dapat berfungsi sepenuhnya.
Untuk membuat sebuah direktori bisa di-
tulisi oleh user yang menjalankan web server,
beberapa cara berikut ini bisa dilakukan:
� Membuat hak akses menjadi 777 (cara
yang paling tidak dianjurkan). Dengan
demikian, direktori tersebut bisa diakses
baca tulis oleh siapa saja.
� Dengan membuat direktori tersebut
menjadi milik user yang menjalankan
web server.
� Dengan membuat group baru, dimana
direktori database tersebut menjadi mi-
lik group baru tersebut. User yang men-
jalankan database kemudian di-assign
menjadi anggota group tersebut.
Program sqliteweb versi 0.1 ini dibuat se-
sederhana mungkin sehingga hanya memer-
lukan satu script. Nama scriptnya adalah
sqliteweb.sh. Untuk menjalankan script ini,
pengguna cukup mengopikan fi le ini ke di-
rektori cgi-bin web server yang digunakan.
Setelah pengaturan yang dibahas berikut
ini, program bisa langsung diakses dari web
server.
Path default untuk direktori data-
base adalah /tmp. Untuk mengubah ke
path lain yang diinginkan, pengguna
perlu membuka file script tersebut dan
mengubah variabel DB_PATH di dalam
Membuat Web Front End untuk SQLite3PostgreSQL memiliki PHPPgAdmin. MySQL memiliki PHPMyAdmin. Bagaimana kalau kita buat sendiri web front end sederhana untuk SQLite3? Cukup gunakan shell script dan utiliti standar sistem.
INFOLINUX 01/2006 55
TUTORIALBerita | Ulasan | Utama | Bisnis | Alternatif | Praktik Instan | Solusi | Tutorial
www.infolinux.web.id
SQLite3
fungsi _config(). Pengaturan default juga
hanya akan mencari file dengan ekstensi
.db. Apabila Anda menggunakan ekstensi
yang berbeda, Anda bisa mengubah varia-
bel DB_EXT, juga di dalam fungsi _con-
fig. Pastikan juga path SQLITE_BINARY
telah sesuai dengan lokasi instalasi prog-
ram sqlite3 Anda.
Satu catatan: aplikasi ini merupakan free
software dan tidak ada garansi yang akan
diberikan dalam segala kondisi. Gunakan
dengan resiko sendiri. Beberapa kode be-
lum ditest dan mungkin mengakibatkan
kehilangan data.
Cara kerja aplikasiPertama-tama, ketika dijalankan, aplikasi
akan melakukan langkah-langkah berikut
ini:
� Mengirimkan header HTTP (dengan
content-type adalah text/html).
� Membaca informasi program.
� Mengirimkan header HTML.
� Memeriksa program-program yang
dibutuhkan, termasuk memeriksa apa-
kah binary sqlite3 dapat dijalankan dan
memeriksa apakah direktori database bi-
sa dibaca. Apabila pada tahap ini terjadi
kesalahan, maka program akan dihenti-
kan dengan menampilkan pesan kesalah-
an.
� Apabila pada pemeriksaan sebelumnya
tidak terjadi kesalahan, maka program
akan melakukan langkah-langkah beri-
kut ini:
� menampilkan menu utama.
� memeriksa tugas yang akan dilaku-
kan dan memanggil fungsi yang ber-
sesuaian.
� Menampilkan footer HTML.
Source code programBerikut ini adalah source code program.
(beberapa bagian yang tidak berpengaruh
pada logika program telah dipotong).
#!/bin/sh
#[...dipotong...]
# configurations####################################################################
#_config(){ SQLITE_BINARY=”/usr/bin/sqlite3”
DB_PATH=”/tmp” DB_EXT=”*.db”
}## internal functions##############################################################
[...dipotong...]
_check_prereq(){ _config ERRSTR=”” test ! -x $SQLITE_BINARY && ERRSTR=”$ERRSTR<BR>Cannot locate SQLITE binary” test ! -r $DB_PATH && ERRSTR=”$ERRSTR<BR>Database directory cannot be read” test -z $ERRSTR && return 0 || return 1 }
_cgi_header(){ echo Content-type: text/html echo echo }
[...dipotong...]## public functions####################################################################
[...dipotong...]
show_menu(){ TASK=”$PATH_INFO$QUERY_STRING” test -z $TASK && TASK=home
TASK_MAIN=`echo $TASK | cut -d/ -f2` TASK_DETAIL=`echo $TASK | cut -d/ -f3`
MENU=”home browse create” echo “ <TABLE class=’full’> <TR> “ for i in $MENU do bgcolor=”” if [ $TASK_MAIN == $i ] then bgcolor=”bgcolor=’lightgrey’” fi echo “<TD align=’center’ $bgcolor ><A href=’$SCRIPT_NAME/$i’>$i</A></TD>” done echo “ </TR> </TABLE> “}
go_home(){ print_doc}
go_browse(){ if [ -z “$1” ] then OLDPWD=`pwd`
DB_NUM=0 cd $DB_PATH ls $DB_EXT 1>/dev/null 2>&1
if [ $? -eq 0 ] then DB_NUM=`ls -l $DB_EXT | wc -l | tr -d [[:space:]]` fi
INFOLINUX 01/200656
TUTORIAL Berita | Ulasan | Utama | Bisnis | Alternatif | Praktik Instan | Solusi | Tutorial
www.infolinux.web.id
SQLite3
echo “<BR>Found $DB_NUM database(s) in $DB_PATH”
echo “<TABLE class=’full’>” echo “<TH>database</TH><TH>browse</TH><TH>rename</TH><TH>delete</TH>” for i in `ls $DB_EXT` do echo “<TR>” echo “<TD>$i</TD>” echo “<TD><A href=’$SCRIPT_NAME/browse/$i’>browse</A></TD>” echo “<TD><A href=’$SCRIPT_NAME/rename/$i’>rename</a></TD>” echo “<TD><A href=’$SCRIPT_NAME/delete/$i’>delete</a></TD>” echo “</TR>” done echo “</TABLE>” cd $OLDPWD else echo “<BR>” echo Browse database “<B>$1</B><BR><BR>”
OLDPWD=`pwd` cd $DB_PATH TABLES=`$SQLITE_BINARY $1 .tables` echo “<A href=’$SCRIPT_NAME/add_table/$1’>Add table</A>” echo “<TABLE class=’full’>” echo “<TH>table</TH><TH>browse</TH><TH>drop</TH><TH>insert</TH>” for i in $TABLES do echo “<TR>” echo
“<TD>$i</TD>” echo “<TD><A href=’$SCRIPT_NAME/browse_table/$1/$i’>browse</A></TD>” echo “<TD><A href=’$SCRIPT_NAME/drop_table/$1/$i’>drop</a></TD>” echo “<TD><A href=’$SCRIPT_NAME/insert_table/$1/$i’>insert</a></TD>” echo “</TR>” done echo “</TABLE>”
cd $OLDPWD fi}
go_delete(){ if [ ! -z “$1” ] then echo “<BR>Delete database <B>$1</B><BR><BR>” OLDPWD=`pwd` cd $DB_PATH rm -f $1 if [ $? -eq 0 ] then echo “Status: Database deleted successfully” else echo “Status: Failed to delete database (error code: $?)” fi cd $OLDPWD fi }
go_rename(){ if [ ! -z “$1” ] then echo “<BR>Rename database <B>$1</B><BR><BR>” echo “ <FORM action=’$SCRIPT_NAME/rename_action/$1/’ method=’get’>
<TABLE class=’noborder’> <TR> <TD class=’noborder’>New database name</TD> <TD class=’noborder’><INPUT type=’text’ name=’new_name’></TD> <TD class=’noborder’><INPUT type=’submit’ value=’rename’></TD> </TR> </TABLE> </FORM> “ fi }
go_rename_action(){ if [ ! -z “$1” ] && [ ! -z “$2” ] then OLD_NAME=$1 NEW_NAME=`echo $2 | cut -d= -f2` echo “<BR>Rename database from <B>$OLD_NAME</B> to <B>$NEW_NAME</B><BR><BR>” OLDPWD=`pwd` cd $DB_PATH mv $OLD_NAME $NEW_NAME if [ $? -eq 0 ] then echo “Status: Database renamed successfully” else echo “Status: Failed to rename database (error code: $?)” fi cd $OLDPWD fi}go_create(){ if [ -z “$1” ] then
INFOLINUX 01/2006 57
TUTORIALBerita | Ulasan | Utama | Bisnis | Alternatif | Praktik Instan | Solusi | Tutorial
www.infolinux.web.id
SQLite3
echo “<BR>Create new database<BR><BR>” echo “ <FORM action=’$SCRIPT_NAME/create/’ method=’get’> <TABLE class=’noborder’> <TR> <TD class=’noborder’>Database name</TD> <TD class=’noborder’><INPUT type=’text’ name=’db’></TD> <TD class=’noborder’><INPUT type=’submit’ value=’create’></TD> </TR> </TABLE> </FORM> “ else DB_TO_CREATE=`echo $1 | cut -d= -f2` echo “<BR>Create new database <B>$DB_TO_CREATE</B><BR><BR>”
OLDPWD=`pwd` cd $DB_PATH touch $DB_TO_CREATE if [ $? -eq 0 ] then echo “Status: Database created successfully” else echo “Status: Failed to create database (error code: $?)” fi cd $OLDPWD fi}
go_browse_table(){ echo “<BR>Browse table <B>$2</B> of database <B>$1</B><BR><BR>”
OLDPWD=`pwd`
cd $DB_PATH echo “<TABLE class=’full’>” $SQLITE_BINARY -html -header $1 “select * from $2” echo $A echo “</TABLE>” echo “<BR><BR><A href=’$SCRIPT_NAME/browse/$1’>browse database $1</A>” cd $OLDPWD }
go_drop_table(){ echo “<BR>Drop table <B>$2</B> of database <B>$1</B><BR><BR>”
OLDPWD=`pwd` cd $DB_PATH $SQLITE_BINARY $1 “drop table $2” 1>/dev/null 2>&1 if [ $? -eq 0 ] then echo “Status: Table $2 deleted successfully” else echo “Status: Failed to delete table $2” fi
echo “<BR><BR><A href=’$SCRIPT_NAME/browse/$1’>browse database $1</A>” cd $OLDPWD}
go_insert_table(){ echo “<BR>Insert into table <B>$2</B> of database <B>$1</B><BR><BR>” echo “<I>Sorry, not implemented yet</I>” }
go_add_table(){ if [ -z “$2” ] then echo “<BR>Add table for database <B>$1</
B><BR><BR>” echo “ <FORM action=’$SCRIPT_NAME/add_table/$1/’ method=’get’> <INPUT type=’hidden’ name=’task’ value=’step1’> <TABLE class=’noborder’> <TR> <TD class=’noborder’>Table name</TD> <TD class=’noborder’><INPUT type=’text’ name=’table_name’></TD> </TR> <TR> <TD class=’noborder’>Field count</TD> <TD class=’noborder’><INPUT type=’text’ name=’field_count’></TD> </TR> <TR> <TD class=’noborder’ colspan=’2’><INPUT type=’submit’ value=’next’></TD> </TR> </TABLE> </FORM> “ else LOCAL_TASK_INFO=`echo $2 | cut -d\& -f1` LOCAL_TASK=`echo $LOCAL_TASK_INFO | cut -d= -f2`
TABLE_NAME_INFO=`echo $2 | cut -d\& -f2` TABLE_NAME=`echo $TABLE_NAME_INFO | cut -d= -f2` FIELD_COUNT_INFO=`echo $2 | cut -d\& -f3` FIELD_COUNT=`echo $FIELD_COUNT_INFO | cut -d= -f2` case $LOCAL_TASK in step1)
INFOLINUX 01/200658
TUTORIAL Berita | Ulasan | Utama | Bisnis | Alternatif | Praktik Instan | Solusi | Tutorial
www.infolinux.web.id
SQLite3
echo “<BR>Please specify column name and type for table <B>$TABLE_NAME</B><BR><BR>”
echo “<FORM action=’$SCRIPT_NAME/add_table/$1/’ method=’get’>” echo “<INPUT type=’hidden’ name=’task’ value=’step2’>” echo “<INPUT type=’hidden’ name=’table_name’ value=’$TABLE_NAME’>” echo “<INPUT type=’hidden’ name=’field_count’ value=’$FIELD_COUNT’>” echo “<TABLE class=’noborder’>” for i in `seq 1 $FIELD_COUNT` do echo “<TR>” echo “<TD class=’noborder’>Field $i</TD>” echo “<TD class=’noborder’><INPUT type=’text’ name=’field_$i’></TD>” echo “<TD class=’noborder’>” echo “<SELECT name=’type_$i’>” echo “<OPTION value=’NULL’>NULL</OPTION>” echo “<OPTION value=’INTEGER’>INTEGER</OPTION>” echo “<OPTION value=’REAL’>REAL</OPTION>” echo “<OPTION value=’TEXT’>TEXT</OPTION>”
echo “<OPTION value=’BLOB’>BLOB</OPTION>” echo “</SELECT>” echo “</TD>” echo “<TD class=’noborder’><INPUT type=’checkbox’ name=’pk_$i’ value=’1’>is primary key</TD>” echo “</TR>” done echo “<TR>” echo “<TD class=’noborder’ colspan=’2’><INPUT type=’submit’ value=’finish’></TD>” echo “</TR>” echo “</TABLE>”
echo “</FORM>” ;; step2) echo “<BR>Create table <B>$TABLE_NAME ($FIELD_COUNT)</B><BR><BR>” CMD=”CREATE TABLE $TABLE_NAME (“
FIELDS=`echo $2 | cut -d\& -f4- | tr ‘\&’ ‘ ‘` POS=0 POS_PK=0 for i in $FIELDS do
KEY=`echo $i | cut -d= -f1 | cut -d_ -f1` VAL=`echo $i | cut -d= -f2` TEMP=”” if [ $KEY == “field” ]
then
[ $POS -eq 0 ] && TEMP=$VAL || TEMP=”,$VAL”
PREV_FIELD=$VAL elif [ $KEY == “type” ] then
TEMP=”$TEMP $VAL” elif [ $KEY == “pk” ] then
if [ $POS_PK -eq 0 ]
then
PK_TEMP=”$PK_TEMP $PREV_FIELD”
POS_PK=1
else
PK_TEMP=”$PK_TEMP, $PREV_FIELD”
fi fi CMD=”$CMD $TEMP” let POS=$POS+1 done PK_TEMP_TEST=`echo $PK_TEMP | tr -d [[:space:]]` test -z $PK_TEMP_TEST && CMD=”$CMD);” || CMD=”$CMD, primary key ($PK_TEMP));”
echo $CMD echo “<BR><BR>”
INFOLINUX 01/2006 59
TUTORIALBerita | Ulasan | Utama | Bisnis | Alternatif | Praktik Instan | Solusi | Tutorial
www.infolinux.web.id
OLDPWD=`pwd` cd $DB_PATH $SQLITE_BINARY $1 “$CMD” if [ $? -eq 0 ] then echo “Status: Table $TABLE_NAME created successfully” else echo “Status: Failed to create $TABLE_NAME” fi cd $OLDPWD echo “<BR><BR><A href=’$SCRIPT_NAME/browse/$1’>browse database $1</A>” esac fi}## main functions####################################################################main(){ _cgi_header _program_info _html_header _check_prereq if [ $? -ne 0 ] then print_errmsg “$ERRSTR” else show_menu TASK_MAIN=`echo $TASK | cut -d/ -f2` TASK_DETAIL=`echo $TASK | cut -d/ -f3` TASK_EXTRAINFO=`echo $TASK | cut -d/ -f4`
case $TASK_MAIN in home) go_home ;; browse) go_browse $TASK_DETAIL ;; create) go_create $TASK_DETAIL ;; delete) go_delete $TASK_DETAIL ;; rename) go_rename $TASK_DETAIL ;; rename_action) go_rename_action $TASK_DETAIL $TASK_EXTRAINFO ;; browse_table) go_browse_table $TASK_DETAIL $TASK_EXTRAINFO ;; drop_table) go_drop_table $TASK_DETAIL $TASK_EXTRAINFO ;; insert_table) go_insert_table $TASK_DETAIL $TASK_EXTRAINFO ;; add_table) go_add_table $TASK_DETAIL $TASK_EXTRAINFO ;; esac fi _html_footer}## main program###############################main
Source code selengkapnya juga dapat
dilihat online di website proyek ini.
Penjelasan program� Karena menggunakan utiliti standar
sistem dan penulis tidak mengetahui
fungsi internal bash yang dapat digu-
nakan, maka banyak operasi piping yang
digunakan.
� Untuk memisahkan a=10 misalnya,
penulis menggunakan cut dengan pe-
misah berupa = dan mengambil elemen
pertama sebagai variabel a dan elemen
pecahan kedua sebagai nilai 10.
� Program ini masih belum menggunakan
HTTP encoding.
� Untuk mempermudah parsing URL
yang dikirimkan, PATH_INFO dan
QUERY_STRING dipergunakan saling
bahu membahu untuk memastikan tu-
gas dilakukan dengan benar.
� Hampir semua fungsi menggunakan pa-
rameter, yang dapat diakses sebagai $1 un-
tuk parameter pertama, dan seterusnya.
� Bantuan ls sangat diperlukan, terutama
ketika harus melakukan browse dan
mengetahui jumlah fi le di dalam satu di-
rektori. Terkadang, ls -l digunakan, dan
dipipe ke program wc -l untuk mengeta-
hui jumlah baris. Tidak akurat dan akan
dipikirkan cara yang lebih baik di masa
depan, namun setidaknya cukup mem-
bantu untuk saat-saat ini.
� Pemeriksaan return value proses sebe-
lumnya (yang disimpan ke variabel $?)
sangat sering dilakukan untuk menge-
tahui apakah suatu perintah gagal atau
sukses dilakukan.
� HTTP form method yang dipergunakan
adalah get, dan pembuatan tabel yang
memiliki sangat banyak kolom dan me-
miliki nama kolom panjang bisa berma-
salah ketika panjang URL telah melewati
batas yang diizinkan.
� Terkadang, kita perlu masuk ke direktori
data dan keluar kembali. Oleh karena
itu, Anda mungkin akan menemukan ba-
nyak OLDPWD=`pwd`, cd $DB_PATH
dan cd $OLDPWD.
Program ini masih memiliki sangat ba-
nyak kekurangan. Dan, masih harus dikem-
bangkan lebih lanjut. Selamat mencoba!
Noprianto ([email protected])
SQLite3
INFOLINUX 01/200660
TUTORIAL Berita | Ulasan | Utama | Bisnis | Alternatif | Praktik Instan | Solusi | Tutorial
www.infolinux.web.id
Bahasa Pascal sebagai salah satu ba-
hasa pemrograman tingkat tinggi,
banyak digunakan oleh Perguruan
Tinggi di Indonesia untuk bahan praktikum
mata kuliah Algoritma dan Pemrograman.
Software Turbo Pascal 7.0 sebagai com piler
Pascal di lingkungan DOS, merupakan
kompiler Pascal yang paling banyak digu-
nakan di lingkungan akademik.
Sebenarnya software FreePascal (http://
www.freepascal.org) dapat digunakan se-
bagai alternatif pengganti dari Turbo Pas-
cal. Selain Open Source, FreePascal dapat
berjalan di 15 platform Sistem Operasi, se-
hingga memudahkan pendistribusian hasil
program di berbagai lingkungan OS yang
berbeda. Selain itu, syntax bahasa yang di-
gunakan di FreePascal juga sangat kompati-
bel dengan syntax bahasa yang digunakan di
Turbo Pascal 7.0.
Sebagai compiler Pascal yang open source,
tak heran jika banyak developer open source
yang mengembangkan FreePascal. Salah
satu hasilnya adalah RAD untuk FreePascal
yang bernama Lazarus (http://www.lazarus.
freepascal.org). Lazarus yang dibuat dengan
FreePascal ini, memiliki tampilan yang sa-
ngat mirip dengan aplikasi Borland Delphi.
Mulai dari adanya Form Designer, Properties,
Code Editor, Object Inspector, Component
Pallete, Free Component Library, Debugger,
dan sebagainya sudah terdapat di Lazarus.
Hal ini memang ditujukan agar para prog-
ramer yang terbiasa menggunakan Borland
Delphi, menjadi familiar pada saat menggu-
nakan Lazarus.
Pada artikel kali ini, penulis akan
menjelaskan tentang cara instalasi Lazarus,
perbedaan antara Lazarus dengan Delphi,
dan pembuatan program sederhana meng-
gunakan Lazarus.
Instalasi LazarusSebelum dapat menggunakan Lazarus, lang-
kah pertama yang harus Anda lakukan tentu
saja menginstalasikan Lazarus terlebih da-
hulu. Adapun aplikasi yang dibutuhkan un-
tuk instalasi Lazarus adalah sebagai berikut:
� FreePascal 2.0
� gdk-pixbuf
� gdk-pixbuf-devel
� gtk+ 2.x
� gdb
� gtk+ 2.x-devel
� glibc-devel
1. Instalasi FreePascal 2.0FreePascal 2.0 di Linux sudah tersedia dalam
beberapa paket:
� Paket tar.gz, atau yang dikenal dengan
paket Source Code.
� Paket .rpm (Red Hat Package Manager)
version.
� Paket .deb (Debian) version.
Untuk menginstalasikan paket FreePas-
cal dari paket rpm, gunakan perintah beri-
kut:
# rpm -Uvh fpc-2.0.1-050923.i386.rpm# rpm -Uvh fpcsrc-2.0.1-050923.i386.rpm# rpm -Uvh lazarus-0.9.10-0.i386.rpm
Pada saat penulisan, penulis menggu-
nakan FreePascal dalam paket RPM untuk
diinstalasikan ke system Debian. Tentu
saja, sebelumnya paket RPM ini penu-
lis convert dahulu dengan menggunakan
alien, sehingga menjadi paket deb. Untuk
meng-convert paket RPM fpc dan fpc-
src menjadi bentuk deb, ketikkan langkah
berikut:
# apt-get install alien # alien fp*
Setelah menjadi bentuk installer deb, An-
da dapat menginstallasikan paket FreePascal
tersebut dengan menggunakan perintah
berikut:
# dpkg -i fp*.deb
Sedangkan untuk menginstalasikan
dengan menggunakan paket Source, ex-
tract paket fpc-2.0.0.i386-linux.tar, ke
suatu folder yang ada di system Anda. Lalu
jalankan perintah make all, dan make in-
stall.
# tar -xzvf fpc-2.0.1-050923.source.tar.gz# make all# make install
2. Installasi LazarusPastikan paket-paket selain FreePascal 2.0,
telah terinstall lengkap di sistem Anda. Se-
lanjutnya untuk menginstalasikan Lazarus,
Anda cukup mengetikkan perintah sebagai
berikut:
Paket RPM:
# rpm -Uvh lazarus-0.9.10-0.i386.rpm
Karena paket Lazarus.deb belum terse-
dia, alternatifnya Anda dapat merubah pa-
ket rpm lazarus menjadi paket deb dengan
Lazarus, Rapid Application Development untuk FreePascal Borland Delphi sebagai Rapid Application Development (RAD) yang menggunakan bahasa Pascal, sangat banyak digunakan oleh para pengembang software di lingkungan Windows. Jika Anda merupakan pengembang Linux yang telah terbiasa menggunakan Delphi, gu-nakan saja Lazarus sebagai alternatifnya.
Lazarus
INFOLINUX 01/2006 61
TUTORIALBerita | Ulasan | Utama | Bisnis | Alternatif | Praktik Instan | Solusi | Tutorial
www.infolinux.web.id
menggunakan software alien.
# alien laz*
Setelah berhasil meng-convert menjadi
paket deb, berikutnya Anda tinggal meng-
instalasikan paket Lazarus tersebut dengan
menggunakan perintah dpkg. Sebelumnya,
installasikan terlebih dahulu paket libgtk2.0-
dev dan libgdk-pixbuf-dev di sistem Anda.
# apt-get install libgtk2.0-dev# apt-get install libgdk-pixbuf-dev# dpkg -i lazarus*
Jika tidak ada masalah, dan Lazarus su-
dah terinstalasi dengan baik, Anda dapat
memulai lazarus dengan mengetikkan pe-
rintah berikut dari terminal:
$ lazarus &
Atau jika dari Menu Gnome di Fedora
Core 4, Anda dapat menemukannya di
Menu Application => Programming =>
Lazarus.
Beberapa perbedaan antara Delphi dengan LazarusMeski Lazarus memiliki beberapa persamaan
dengan Delphi, seperti memiliki Object
Browser, IDE, editor, Code Templates, Code
Completion, menggunakan Pascal sebagai
bahasa syntaxnya, dan sebagainya, terdapat
juga beberapa perbedaan mendasar antara
Delphi dan Lazarus yang di antaranya:
1. Lazarus merupakan produk Open
Source, yang ditulis dengan menggu-
nakan FreePascal compiler (FPC). Selain
itu Lazarus juga dapat berjalan di banyak
platform (Linux, MacOS, Windows, dan
sebagainya). Hal ini tentu sangat berbeda
dengan Borland Delphi yang merupakan
produk proprietary dan hanya dapat ber-
jalan di platform Windows.
2. Lazarus merupakan RAD tool seperti
Delphi. Hal ini sama dengan Lazarus
dilengkapi dengan sebuah component
library dan sebuah IDE. Jika di Delphi,
Anda mengenal VCL (Visual Compo-
nent Library), maka di Lazarus Anda
akan mengenal LCL (Lazarus Compo-
nent Library). Meski banyak unit, classes
dan properties yang memiliki fungsi dan
nama yang sama antara Delphi dan Laza-
rus, tetapi Lazarus tidaklah 100% kom-
patibel dengan Delphi.
3. File utama aplikasi Delphi project adalah
.dpr fi le. File utama aplikasi Lazarus
project adalah .lpi fi le. Sebuah .dpr fi le
dari kode program utama dan IDE De-
phi menyimpan beberapa informasi
mengenai compiler switch dan units.
Aplikasi Lazarus juga memiliki sebuah
.lpr fi le, yang juga merupakan fi le kode
program utama. Tetapi, semua infor-
Gbr 1. Situs Lazarus Documentation.
Lazarus
INFOLINUX 01/200662
TUTORIAL Berita | Ulasan | Utama | Bisnis | Alternatif | Praktik Instan | Solusi | Tutorial
www.infolinux.web.id
5. Ubah beberapa properties untuk kom-
ponen-komponen tersebut, yang ada di
Object Inspector window seperti tabel 1.
Hasil akhirnya seperti terlihat pada Gam-
bar 3.
6. Tahap berikutnya yang terpenting
adalah tahap pembuatan kode pro-
gram. Pilih Button1, lalu dari Object
Inspector, klik tab Events. Didalam box
tersebut, pilih OnClick, dan klik tanda
... yang tampil di samping kanan box
tersebut. Ketika mengklik tombol terse-
but, maka secara otomatis kita akan ma-
suk ke dalam Source Editor dan kursor
akan ditempatkan dalam potongan kode
berikut:
procedure TForm1.Button1Click(Sender: TObject);begin
end;
7. Tambahkan di dalam bagian tersebut,
se hing ga menjadi baris program sebagai
be rikut:
procedure TForm1.Button1Click(Sender: TObject);var banyak, harga, bayar : real;begin Banyak := StrToFloat(EBanyak.Text); if RadioButton1.Checked then Harga:= 1000; if RadioButton2.Checked then Harga:= 1500; if RadioButton3.Checked then Harga:= 2000; Bayar:= Banyak * Harga;
masi lain disimpan dalam .lpi fi le. Jadi di
Lazarus, fi le yang terpenting adalah .lpi
fi le.
4. Dan beberapa perbedaan lainnya, yang
dapat Anda lihat sendiri di http://wiki.
lazarus.freepascal.org/index.php/Laza-
rus_For_Delphi_Users.
Membuat program hitung seder-hana dengan LazarusSetelah menjelaskan sedikit mengenai Laza-
rus, sekarang kita akan mencoba membuat
program dengan menggunakan Lazarus.
Program ini merupakan program standar,
untuk menghitung jumlah harga dari suatu
barang. Beberapa informasi pembuatan
program sebagai berikut:
1. Ada tiga jenis barang di sini, yaitu pensil,
buku, dan map.
2. Harga satu unit pensil Rp1000, Buku
Rp1500, Map Rp 2000.
3. Total Harga = Banyak Barang X Harga
Barang
4. Hanya dapat menghitung total jumlah
dari satu jenis barang saja.
Untuk memulai pembuatan program,
jalankan program Lazarus dengan menge-
tikkan perintah dari konsole sebagai berikut:
$ lazarus &
Atau Anda dapat juga menjalankan pro-
gram Lazarus dengan mengklik icon Laza-
rus yang ada di Menu Applications => Pro-gramming => Lazarus, yang ada di Gnome.
desktop.
Setelah IDE Lazarus tampil, Anda yang
telah terbiasa menggunakan Delphi, pasti
akan merasa familiar saat melihat IDE Laza-
rus. Pada saat kali pertama dijalankan, layar
Lazarus akan menampilkan jendela Code
Editor, Form Editor, Object Inspector,
Menu Program, dan Lazarus Component
Library.
Untuk memulai pembuatan program,
ikuti langkah di bawah ini:
1. Agar lebih memperjelas cara pembuatan
aplikasi di Lazarus, close terlebih dahulu
semua editor windows yang sedang aktif.
Klik File => Close all editor fi les.
2. Buat sebuah project Lazarus baru. Klik
File => New. Pilih Application yang ada
dalam sub menu Project, lalu Klik OK.
(Note: Jika tampil jendela konfi rmasi
Project changed, jawab saja dengan No).
Maka di IDE Lazarus, Anda akan melihat
tampilan Form Editor dan Code Editor
sebagai bagian dari project yang akan
kita buat.
3. Di bawah Menu window, terdapat be-
berapa Tab yang berisi komponent LCL.
Klik ‘Standard’ Tab, lalu masukkan
TLabel yang ada disitu ke dalam Form1
window. Caranya, klik button TLabel,
arahkan di dalam bagian Form1, lalu klik
kiri sekali. Maka komponen TLabel akan
diletakkan di dalam Form1.
4. Masukkan lagi dua buah TLabel, tiga
buah TEdit, sebuah TGroupBox, tiga
buah TRadioButton, dan dua buah
TButton.
(Note: Lihat cara penyusunan kompo-
nen-komponen tersebut seperti terlihat
di Gambar 2).
Gbr 3. Hasil perancangan program Hitung Harga Barang.Gbr 2. Perancangan awal program Hitung Harga Barang.
Lazarus
Tabel 1.
Nama Komponen Properties yang DiubahForm1 Caption Hitung Harga Barang
Label1 Caption Nama Pembeli
Label2 Caption Banyak
Label3 Caption Bayar
Edit1 Text <Kosongkan>
Name ENama
Edit2 Text <Kosongkan>
Name EBanyak
Edit3 Text <Kosongkan>
Name EBayar
GroupBox1 Caption Jenis Barang
RadioButton1 Caption Pensil
RadioButton1 Caption Pensil
RadioButton1 Caption Pensil
Button1 Caption &Hitung
Button2 Caption &Exit
INFOLINUX 01/2006 63
TUTORIALBerita | Ulasan | Utama | Bisnis | Alternatif | Praktik Instan | Solusi | Tutorial
www.infolinux.web.id
Karena Lazarus dibuat dengan meng-
gunakan FreePascal, maka hampir semua
syntax bahasa Pascal yang digunakan Laza-
rus sangat mirip dengan yang digunakan di
Delphi. Hal ini tentu memudahkan Anda
untuk mencoba proses porting program
Delphi yang telah Anda buat, dengan meng-
gunakan Lazarus.
Selain tersedia di Linux, Lazarus juga
tersedia untuk beberapa sistem operasi,
seperti Windows salah satunya. Hal ini
tentu memudahkan Anda untuk mendis-
tribusikan produk hasil program ke client
Anda yang kebanyakan masih menggu-
nakan Windows sebagai sistem operasi-
nya.
Walaupun sudah banyak fungsi yang bi-
sa dilakukan dengan Lazarus, perlu di ingat
kalau program ini masihlah versi Beta, se-
hingga masih banyak terdapat bugs di pro-
gram ini.
Sampai di sini dulu pembahasan kita
mengenai Lazarus. Masih banyak hal-
hal yang belum penulis jelaskan menge-
nai Lazarus, seperti cara menambahkan
LCL, mengaitkan Lazarus dengan database
(MySQL/SQLite/PostgreSQL), menggu-
nakan LazDoc, dan sebagainya. Mungkin
di lain edisi, penulis akan menjelaskan cara
koneksi Lazarus dengan aplikasi database
open source yang ada di Linux. Akhir kata,
Happy programming with Lazarus.
Supriyanto ([email protected])
EBayar.Text := FloatToStr(Bayar);end;
8. Kembali lagi ke Form Editor dengan
menekan tombol F12. Pilih Button2,
masuk ke Tab Events, pilih OnClick.
Setelah tampil Source Editor, tambahkan
baris program tersebut sehingga tampak
seperti di bawah ini:
procedure TForm1.Button2Click(Sender: TObject);begin Application.Terminate;end;
9. Langkah terakhir adalah kompilasi prog-
ram yang telah kita buat. Untuk meng-
kompilasi, Anda dapat menekan tombol
F9 atau dengan mengklik icon Run yang
ada dibawah Menu window. Jika tidak
ada kesalahan, maka program Anda akan
berjalan seperti pada Gambar 4.
10. Uji dengan memasukkan input data pada
kolom input Banyak, pilih jenis barang
yang ingin dihitung, kemudian tekan
tombol Hitung. Maka di kolom Bayar
akan didapatkan hasil Harga Barang X
Banyak Barang.
11. Jangan lupa untuk selalu menyimpan
hasil perubahan program, untuk meng-
hindari hilangnya data jika suatu saat
terjadi kesalahan.
Gbr 4. Hasil Running Program Hitung Barang.
Lazarus
INFOLINUX 01/200664
TUTORIAL Berita | Ulasan | Utama | Bisnis | Alternatif | Praktik Instan | Solusi | Tutorial
www.infolinux.web.id
Findutils
File merupakan hal yang umum dite-
mukan ketika bekerja dengan kom-
puter. Oleh pengguna dari segala
kalangan. Pengguna yang memanfaatkan
OpenOffi ce.org untuk bekerja sehari-hari
akan menemukan fi le sebagai dokumen teks,
spreadsheet ataupun presentasi. Pengguna
yang bekerja sebagai administrator sistem
akan menemukan fi le sebagai penyim panan
konfi gurasi aplikasi, shell script, dan lain se-
bagainya. Pengguna yang bekerja se bagai de-
veloper akan menemukan fi le sebagai source
code program, program itu sendiri, dan lain
sebagainya.
Khusus untuk Linux yang merepre-
sentasikan banyak komponen dari sistem
sebagai fi le, arti fi le di Linux menjadi lebih
spesial lagi. Transparan bagi user, secara
sederhana, harddisk, cdrom, mouse, dan
berbagai device adalah fi le. Linux bahkan
membagi tipe fi le dalam beberapa kategori
sebagai berikut:
� File biasa. Merupakan fi le yang umum
ditemukan pada sistem. Kernel, musik
MP3, fi le video, gambar, source code
program dan sebagian besar fi le adalah
fi le biasa.
� Direktori. Merupakan fi le yang tampak
bagi user sebagai fi le yang bisa mengan-
dung fi le-fi le lain.
� Block special fi le. Merupakan fi le spe-
sial dimana transfer data dilakukan per
blok (secara teknis, diperbolehkan un-
tuk transfer per byte, dan kernel yang
akan menangani segala kerumitan ini).
Contoh fi le ini adalah harddisk, cdrom,
fl oppy, dan lain-lain. Umumnya berupa
media penyimpanan.
� Character special fi le. Merupakan fi le spe-
cial dimana transfer data dilakukan per
karakter. Contoh fi le ini adalah mouse.
� Symbolic link. Merupakan fi le yang
mengacu kepada fi le lain. Sekilas mirip
Findutils, Sang Detektif FilesistemFilesistem bisa mengandung puluhan ribu file atau bahkan lebih. Ada kalanya, kita perlu mencari satu atau beberapa file dari sekian banyak file tersebut berdasarkan kriteria yang diinginkan. Di sinilah, GNU findutils dapat membantu kita.
dengan shortcut pada Windows, namun
memiliki cara kerja yang sungguh ber-
beda.
� Fifo (fi rst in fi rst out). Disebut juga named
pipe (pipa bernama). File yang dapat me-
nerima output dari suatu proses, kemu-
dian menyimpan sementara output-nya,
dan kemudian dapat dibuka oleh proses
lain sebagai input.
� Socket. Cara kerjanya mirip dengan fi fo,
namun socket dapat bekerja lintas kom-
puter.
Oleh karena itu, seperti telah disebutkan
pada awal tulisan, jumlah fi le di fi lesistem
Linux bisa mencapai angka puluhan ribu
atau bahkan lebih. Pada sistem yang terin-
stall sangat banyak aplikasi dan dokumen-
tasi, jumlah fi le bahkan bisa mencapai lebih
dari seratus ribu.
Di lain sisi, dari sekian banyak fi le yang
dimiliki oleh sistem, terkadang kita perlu
mencari fi le tertentu. Ini adalah hal yang
sangat wajar. Berikut ini adalah beberapa
alasannya:
� Kita mungkin ingin mencari dokumen
yang lokasi penyimpanan terakhirnya ki-
ta lupa. Ini sangatlah jamak. Terkadang,
karena memiliki banyak fi le, apalagi
dengan nama fi le yang mirip-mirip dan
lokasi penyimpanan yang tersebar, kita
bisa saja lalai menemukan kembali fi le
yang dibutuhkan.
� Kita ingin mencari fi le tipe tertentu.
Ini umumnya sangat berguna bagi ad-
ministrator sistem ataupun developer.
Sebagai contoh, administrator mung-
kin akan membersihkan sistem dengan
membuang semua fi le fi fo dan socket di
sistem. Atau, dalam bentuk yang lebih
sederhana, administrator sistem ingin
mencari fi le dengan ekstensi .conf yang
tersebar di sistem.
� Kita ingin mencari fi le yang baru saja
dimodifi kasi dalam dua hari terakhir.
Ini sangat berguna apabila kita ingin
melakukan audit sistem, ataupun men-
cari fi le yang tidak sengaja terubah.
� Kita mungkin ingin tahu berapa jumlah
fi le di fi lesistem dan bagaimana kom-
posisinya. Ini bukanlah tindakan yang
sangat penting dan selalu diperlukan,
namun terkadang cukup menarik untuk
melakukannya.
� Dan berbagai alasan lainnya.
Di Linux, karena fi le merupakan sesuatu
yang sangat spesial, sebuah paket pencari
pun dibangun oleh berbagai hacker. Sebagai
hasilnya adalah GNU fi ndutils, yang sudah
pasti terinstal di sistem Anda.
GNU findutilsGNU fi ndutils adalah paket software yang
dikembangkan hacker-hacker terkenal se-
perti David MacKenzie dan Jan Brittenson. Paket software ini berisikan program fi nd
dan xargs yang keduanya dapat digunakan
untuk melakukan pencarian fi le di fi le-
sistem, baik pencarian mendasar ataupun
pencarian advanced.
Paket software ini seharusnya sudah
terinstal pada distro yang Anda gunakan.
Hampir tidak ada distro Linux yang tidak
memaketkan software ini, kecuali untuk
distro dengan kebutuhan yang sangat spe-
sifi k. Untuk update dan hal-hal seputar fi nd-
utils, kunjungilah www.gnu.org/software/
fi ndutils/.
Boleh dikatakan, paket software ini sa-
ngatlah luar biasa. Kita akan melihat terlebih
dahulu program fi nd, sebagai program uta-
ma pencarian. Program ini dapat melaku-
kan berbagai tugas-tugas dasar seperti:
� Mencari fi le dengan nama tertentu.
� Mencari fi le dengan tipe tertentu.
INFOLINUX 01/2006 65
TUTORIALBerita | Ulasan | Utama | Bisnis | Alternatif | Praktik Instan | Solusi | Tutorial
www.infolinux.web.id
Findutils
� Mencari fi le dengan ukuran tertentu.
� dan lain sebagainya.
Selain tugas-tugas sederhana tersebut,
fi nd juga dapat melakukan hal-hal advanced
berikut:
� Memformat keluaran dari pencarian.
� Mencari fi le yang dimiliki oleh user (atau
group) tertentu.
� Melakukan aksi untuk hasil pencarian.
� Memungkinkan penggunaan regular ex-
pression.
� Mencari berdasarkan struktur data inter-
nal fi le (seperti pencarian dengan inode
atau jumlah hardlink).
� Mencari fi le dengan hak akses tertentu.
� Mencari fi le dengan kriteria waktu ter-
tentu.
� dan lain sebagainya.
Semua fasilitas yang disediakan sangatlah
membantu untuk berbagai kebutuhan yang
kita hadapi sehari-hari. Apabila dikombina-
sikan dengan shell script dan berbagai tool
lain, kita bisa membangun solusi yang me-
narik.
Setelah fi nd, ada pula program xargs
yang penggunaan bersama program fi nd
akan sangat membantu seperti ketika kita
ingin menghapus semua fi le yang berhasil
ditemukan. Program xargs membaca dari
standard input, kemudian menjalankan
perintah untuk dikenakan pada data yang
berhasil dibaca dari standard input terse-
but. Perintah yang diberikan bisa berva-
riasi.
Dengan sekian banyak fi tur yang datang
bersama kedua aplikasi tersebut, kita masih
perlu memuji karena kebutuhan pustaka
kedua aplikasi tersebut sangatlah minim.
Hanya GNU libc! Tidak banyak yang per-
lu dilakukan untuk membuat fi nd dapat
bekerja.
Contoh-contoh penggunaan findDi bagian ini, kita akan melihat beberapa
contoh pengguna praktis dari fi nd. Na-
mun, sebelum kita memulai, perlu dibahas
pula bahwa program fi nd tidak akan me-
nyediakan tampil an yang menarik untuk
kita. Find bekerja sepenuhnya berdasarkan
argumen yang kita berikan. Dan, terkadang,
argumen yang kita berikan bisa menjadi
sangat panjang.
Mendaftar isi direktoriKita akan mulai dengan contoh dasar. Ke-
butuhan kita adalah mendaftar fi le dalam
suatu direktori. Anda mungkin akan ber-
tanya, kenapa tidak menggunakan program
ls saja? Ini merupakan pertanyaan yang
sangat bagus. Program ls memang dipergu-
nakan untuk mendaftar fi le-fi le yang berada
dalam suatu direktori. Namun, ls memiliki
tampilan tersendiri yang walaupun bisa
diformat, terkadang masih belum mencu-
kupi kebutuhan kita.
Apabila Anda ingin agar isi dari direk-
tori ditampilkan baris demi baris lengkap
dengan pathnya, maka fi nd adalah program
yang lebih cocok. Penggunaannya pun mu-
dah karena kita cukup masuk ke direktori
yang diinginkan dan menjalankan program
fi nd tanpa perlu memberikan argumen apa-
pun. Sebagai contoh:
$ find ../A./A/1./A/2./A/3./A/4./A/5./B./B/1./B/2./B/3./B/B1./B/B1/B11./C./C/1
Perintah di atas merupakan keluaran
program fi nd dari struktur direktori asal
seperti ini:
� dir A
� fi le 1
� fi le 2
� fi le 3
� fi le 4
� fi le 5
� dir B
� dir B1
� fi le B11
� fi le 1
� fi le 2
� fi le 3
� dir C
� fi le 1
Keluaran dari program fi nd yang baru
saja kita bahas tersebut dalam beberapa
kondisi sangatlah berguna. Sebagai contoh,
ketika kita ingin membuat arsip CPIO.
Untuk membuat arsip CPIO, kita
perlu memiliki sebuah daftar fi le. Untuk
mendapatkan daftar fi le, program fi nd
dapat kita pergunakan. Berikut ini, kita
akan membuat arsip CPIO untuk struktur
direktori yang dibahas sebelumnya:
$ find | cpio -o > /tmp/test.cpiocpio: .: truncating inode numbercpio: A: truncating inode numbercpio: B: truncating inode numbercpio: B/B1: truncating inode numbercpio: C: truncating inode number1 block
Selain penggunaan untuk CPIO, daftar
yang dihasilkan oleh program fi nd masih
bisa digunakan untuk keperluan lain, yang
contoh lebih lanjutnya akan dibahas pada
bagian lain di tulisan ini.
Mencari file berdasarkan namaAdalah kegiatan yang sangat umum untuk
mencari satu atau lebih fi le berdasarkan kri-
teria nama. Nama di sini bisa pula meman-
faatkan wildcard seperti *.
Kita masih akan mempergunakan struk-
tur direktori yang dipergunakan pada pem-
bahasan sebelumnya. Sebagai contoh, kita
akan mencari fi le yang mengandung angka
1 di dalam nama fi le-nya:
$ find -name “*1*” ./A/1./B/1./B/B1./B/B1/B11./C/1
Contoh berikut ini akan mencari nama
fi le yang terdiri dari dua karakter, di mana
karakter pertama bebas, namun karakter
terakhir haruslah angka 1:
$ find -name “?1”./B/B1
Sejujurnya, pencarian seperti inilah yang
sebagian besar akan kita lakukan apabila
kita bekerja dengan pencarian fi le. Namun,
untuk lebih realistis, terkadang kita ingin
INFOLINUX 01/200666
TUTORIAL Berita | Ulasan | Utama | Bisnis | Alternatif | Praktik Instan | Solusi | Tutorial
www.infolinux.web.id
Findutils
pula mencari di direktori tertentu. Sebagai
contoh, berikut ini, kita akan mencari di
/usr/bin, nama-nama fi le yang diawali de-
ngan vi:
$ find /usr/bin/ -name “vi*” /usr/bin/vi/usr/bin/vim/usr/bin/view/usr/bin/vimtutor/usr/bin/vimdiff
Sampai di sini, kita lihat bahwa apabila
fi nd diberikan argumen pertama berupa
direktori, maka pencarian akan dilakukan
pada direktori tersebut sampai sub direktori
di bawahnya, secara default.
Mencari berdasarkan tipe file tertentuIngin mengetahui jumlah direktori di sistem
Anda? Program fi nd dapat melakukannya
untuk Anda dengan sangat mudah. Berikut
ini adalah contoh penggunaan fi nd untuk
melihat direktori-direktori di bawah direk-
tori /usr/local:
$ find /usr/local/ -type d/usr/local//usr/local/bin/usr/local/lib/usr/local/man/usr/local/man/man1/usr/local/man/man2/usr/local/man/man3/usr/local/man/man4/usr/local/man/man5/usr/local/man/man6/usr/local/man/man7/usr/local/man/man8/usr/local/man/man9/usr/local/man/mann/usr/local/src/usr/local/sbin/usr/local/games/usr/local/share/usr/local/include
Dengan mudah, output dari perintah
tersebut bisa di-piping ke program wc un-
tuk melihat jumlah direktori yang terletak
di bawah /usr/local:
$ find /usr/local/ -type d | wc -l19
Seperti kita bahas pada awal tulisan,
Linux mengenal tujuh macam tipe file.
Apa yang kita maksud sebagai tipe file
adalah tipe file menurut Linux, bukan tipe
file berdasarkan ekstensi file. Kita sudah
membahas satu tipe, yaitu direktori. Beri-
kut ini, kita akan melihat contoh pencar-
ian tipe file block special di direktori dev,
namun yang memiliki nama file diawali
dengan hda1:
$ find /dev -type b -name “hda1*”/dev/i2o/hda1/dev/i2o/hda10/dev/i2o/hda11/dev/i2o/hda12/dev/i2o/hda13/dev/i2o/hda14/dev/i2o/hda15/dev/hda1/dev/hda10/dev/hda11/dev/hda12/dev/hda13/dev/hda14/dev/hda15/dev/hda16/dev/hda17/dev/hda18/dev/hda19
Contoh tersebut mengombinasikan
penggunaan argumen type dan name.
Sampai di sini, kita sudah membahas pen-
carian dua tipe file. Untuk tipe-tipe lain-
nya, cara yang digunakan sama saja, hanya
notasi tipe file yang diberikan untuk ar-
gumen type saja yang berbeda. Berikut ini
notasi untuk tipe-tipe file yang dikenal di
Linux:
� b untuk block special
� c untuk character special
� d untuk direktori
� p untuk fi fo
� f untuk regular fi le
� l untuk symbolic link
� s untuk socket
Mencari berdasarkan ukuran tertentuMencari berdasarkan ukuran tertentu juga
merupakan tugas yang sering kali dilakukan,
terutama oleh administrator sistem. Contoh
yang umum barangkali audit sistem untuk
mengetahui apakah ada fi le yang berukuran
terlalu besar di sistem misalnya.
Find menyediakan cukup banyak argu-
men yang bisa digunakan. Kita akan mem-
bahas beberapa diantaranya. Yang pertama
adalah mencari fi le yang berukuran nol byte
(empty):
$ find -empty./A/1./A/2./A/3./A/4./A/5./B/1./B/2./B/3./B/B1/B11./C/1
Pada contoh tersebut, karena semua
fi le memang merupakan fi le kosong, maka
semuanya akan ditampilkan. Namun, co-
balah perhatikan bahwa keluaran kita su-
dah tidak termasuk direktori aktif, A, B,
C, dan B1. Argumen empty yang kita gu-
nakan pada contoh tersebut akan mencari
fi le atau direktori berukuran kosong. Den-
gan demikian, fi le yang tidak kosong (>
nol byte) dan direktori yang paling tidak
memiliki satu fi le di dalamnya tidak akan
di tampilkan. De ngan demikian, jangan he-
ran apabila pada suatu ketika, argumen ini
menyebabkan fi nd mengembalikan begitu
banyak direktori.
Contoh berikut yang akan kita bahas
adalah pencarian fi le di /bin yang berukuran
di atas 100 KB. Berikut ini adalah contoh
perintahnya:
$ find /bin -size +100k/bin/ps/bin/ash/bin/tar/bin/vim/bin/zsh/bin/bash/bin/gawk/bin/grep/bin/sash/bin/tcsh/bin/ash.static
Setelah membahas lebih dari, kita akan
membahas pula pencarian fi le di /bin yang
berukuran kurang dari 6 KB. Berikut ini
adalah contoh perintahnya:
$ find /bin -size -6k -type f
INFOLINUX 01/2006 67
TUTORIALBerita | Ulasan | Utama | Bisnis | Alternatif | Praktik Instan | Solusi | Tutorial
www.infolinux.web.id
Findutils
/bin/ipg/bin/arch/bin/chvt/bin/unicode_stop/bin/setmetamode/bin/dmesg/bin/egrep/bin/fgrep/bin/vitmp/bin/unicode_start/bin/testutf8/bin/fgconsole/bin/bluepincat/bin/usleep/bin/sg_start
Perhatikanlah tambahan argumen type
pada contoh tersebut. Kita perlu memas-
tikan bahwa pencarian hanya dilakukan
pada fi le biasa. Di direktori /bin, terdapat
banyak sekali symbolic link yang berukur-
an kurang dari 6 KB. Kita menambahkan
argumen -type f agar pencarian lebih aku-
rat.
Kita telah membahas lebih besar dari dan
lebih kecil dari. Bagaimana dengan yang
ukurannya telah ditentukan? Jangan gu-
nakan tanda + ataupun -. Berikut ini adalah
contoh perintahnya:
$ find /bin -size 6k -type f/bin/deallocvt/bin/kbd_mode/bin/getkeycodes/bin/rescan-scsi-bus.sh/bin/setkeycodes
Apabila kita ingin mencari dalam range,
argumen size dapat digunakan untuk mem-
beri batas minimal dan maksimal. Sebagai
contoh, kita akan mencari di /bin fi le yang
berukuran lebih besar dari 15 KB namun
lebih kecil dari 20 KB:
$ find /bin -size +15k -size -20k/bin/cat/bin/pwd/bin/rpm/bin/echo/bin/kill/bin/eject/bin/sleep/bin/uname/bin/initviocons/bin/lsmod.static
Untuk satuan yang dipergunakan (dalam
contoh-contoh sebelumnya, satuan adalah
KB yang direpresentasikan oleh sebuah
karakter k), fi nd mengenal beberapa satuan
berikut dan karakter yang dipergunakan se-
bagai simbol:
� b untuk blok 512 byte
� c untuk byte
� w untuk word
� k untuk kilo byte (1024)
� M untuk mega byte (1048576)
� G untuk giga byte (1073741824)
Mencari berdasarkan hak akses tertentuUntuk keperluan audit sistem, administra-
tor biasanya perlu memeriksa apakah ada
‘fi le-fi le berbahaya’ yang terdapat di sistem.
File-fi le berbahaya ini biasanya adalah fi le-
fi le yang diset SUID bit.
Program fi nd menyediakan sepenuhnya
fasilitas yang diperlukan untuk pencarian
berdasarkan hak akses tertentu. Hak akses
sebagai kriteria juga bisa hak akses kaku
(misal: 644) atau hak akses sebagian (se-
bagai contoh dapat ditulisi oleh siapa saja,
dapat dibaca oleh orang lain selain group
dan pemiliknya, dan lain-lain).
Untuk pencarian dengan hak akses kaku,
misalnya, ingin mencari fi le dengan hak ak-
ses 644, maka berikanlah contoh perintah
berikut ini:
$ find -perm 644./A/1./A/2./A/3./A/4./A/5./B/1./B/2./B/3./B/B1/B11./C/1
Untuk lebih jelas, kita akan coba untuk
memberikan perintah tersebut dengan di-
rektori yang dicari adalah /bin:
$ find /bin -perm 644
Output dari program fi nd menunjuk-
kan tidak ada fi le yang ditemukan. Hal ini
benar karena kita hanya mencari fi le dengan
hak akses 644, sementara di /bin, hampir
semuanya adalah 755.
Sekarang, bagaimana kalau kita ingin
mencari fi le yang memiliki hak akses 644,
namun boleh memiliki hak akses tambah-
an? Atau, dengan kata lain, minimal memi-
liki hak akses 644? Hak akses 777, 666 dan
yang lebih leluasa diperbolehkan? Berikan
tanda – sebelum hak akses seperti contoh
berikut:
$ find /bin -perm -644 -size +1M/bin/vim
Lebih lanjut lagi, selain tanda -, kita
juga bisa memberikan tanda +, yang bisa
diartikan sebagai cukup memiliki hak yang
disebutkan. Misal, kita ingin mencari fi le
dimana user, group dan orang lain dapat
menulis ke fi le:
$ find -perm +222
Contoh lainnya, untuk mencari fi le di /bin
yang memiliki SUID bit, kita bisa memberi-
kan perintah seperti contoh berikut:
$ find /bin -perm +4000 /bin/su/bin/ping/bin/eject/bin/mount/bin/ping6/bin/umount
Pencarian dengan kriteria berupa hak
akses sangat membantu untuk menjaga
fi lesistem agar tetap bersih. Tentu, kita
bisa menggabungkan dengan cron job dan
sistem alert yang akan mengabari adminis-
trator sistem apabila di sistem terdapat fi le
yang dikategorikan ‘berbahaya’.
Mencari file yang dimiliki oleh user (atau group) tertentuApabila Anda ingin mengetahui fi le-fi le mi-
liki user tertentu atau group tertentu, peng-
gunaan program fi nd dapat sangat memper-
mudah Anda. Kita akan mulai dari mencari
fi le milik user tertentu. Dalam contoh, kita
akan mencari ke /tmp fi le-fi le yang dimil-
iki oleh user nop dan nama fi lenya diakhiri
dengan karakter 1:
$ find /tmp/ -user nop -name “*1”/tmp/A/A/1/tmp/A/B/1/tmp/A/B/B1/tmp/A/B/B1/B11/tmp/A/C/1
INFOLINUX 01/200668
TUTORIAL Berita | Ulasan | Utama | Bisnis | Alternatif | Praktik Instan | Solusi | Tutorial
www.infolinux.web.id
Findutils
Apabila pencarian menggunakan uid
lebih disukai dari pada mengguna kan user-
name, maka gunakanlah opsi -uid. Berikut
ini contohnya, masih mencari yang sama
dengan contoh sebelumnya (catatan: uid
untuk user nop adalah 1000):
$ find /tmp/ -user 1000 -name “*1”/tmp/A/A/1/tmp/A/B/1/tmp/A/B/B1/tmp/A/B/B1/B11/tmp/A/C/1
Untuk mencari fi le yang dimiliki oleh
group tertentu, gunakan opsi -group (pen-
carian menggunakan nama group) atau opsi
-gid (pencarian menggunakan id group).
Berikut ini adalah contohnya:
$ find /tmp/ -group users -name “*1”/tmp/A/A/1/tmp/A/B/1/tmp/A/B/B1/tmp/A/B/B1/B11/tmp/A/C/1
$ find /tmp/ -gid 100 -name “*1”/tmp/A/A/1/tmp/A/B/1/tmp/A/B/B1/tmp/A/B/B1/B11/tmp/A/C/1
Sebagai catatan, group users yang diper-
gunakan memiliki gid 100.
Keluar sejenak dari penggunaan fi nd.
Bahwa kita bisa menggunakan username
atau uid dan groupname atau gid dikarena-
kan Linux (dan berbagai sistem operasi lain)
akan mengenali user dan group berdasarkan
bilangan (oleh karena itu, ada uid dan gid),
sementara user akan lebih mudah mengenal
berdasarkan kata-kata (oleh karena itu, ada
username dan groupname).
Informasi uid dan username disimpan di
fi le /etc/passwd, di mana username disim-
pan pada fi eld pertama setiap barisnya dan
uid disimpan pada fi eld ketiga.
Informasi gid dan groupname disimpan
di fi le /etc/group, dimana groupname di-
simpan pada fi eld pertama setiap barisnya
dan gid disimpan pada fi eld ketiga.
Untuk melihat informasi pasangan uid
dan username (berserta informasi group-
group dimana user menjadi anggota) tanpa
harus repot-repot membuka fi le /etc/pass-
wd dan /etc/group, gunakanlah program id
se perti contoh berikut:
$ id nopuid=1000(nop) gid=100(users) groups=100(users),16(dialout),33(video)
$ id rootuid=0(root) gid=0(root) groups=0(root)
Mencari file dengan kriteria waktuPernahkah Anda mengalami kasus seperti
ini? Suatu hari, Anda membuat dokumen,
namun lupa menyimpan dengan nama apa,
dan lupa pula menyimpan di lokasi mana
di sekian banyak lokasi penyimpanan do-
kumen Anda. Hanya satu yang Anda ingat:
dokumen tersebut dibuat pada hari jumat,
jam 12 siang misalnya (atau penanda waktu
seperti 2 hari lalu misalnya).
Di sinilah, program fi nd dapat memban-
tu. Kita dapat mencari fi le berdasarkan kri-
teria waktu yang diinginkan. Kriteria waktu
bisa pula dibagi menjadi:
� Waktu fi le di akses
� Waktu status fi le di ubah
� Waktu data fi le di ubah
Satu hal yang harus diperhatikan, walau-
pun sebuah fi le memiliki beberapa infor-
masi waktu fi le, tidak semua fi lesistem me-
nyimpan informasi ini. Untungnya, hampir
semua fi lesistem besar seperti ext3 dan rei-
serfs menyimpannya.
Untuk mencari menggunakan fi nd, kita
bisa memberikan opsi atime, amin, ctime,
cmin, mtime ataupun mmin. Berikut ini
adalah contohnya.
Di direktori contoh yang kita miliki, yang
mengandung direktori A, B dan C, kita akan
membuat sebuah fi le baru dengan nama 2
di C. Berikut ini adalah informasi C/2 sesuai
keluaran perintah ls:
$ ls -l C/2 -rw-r--r-- 1 nop users 0 2005-09-30 12:05 C/2
Dari informasi tersebut, bisa dilihat
bahwa fi le C/2 memiliki waktu fi le 12:05.
File yang baru dibuat ini memiliki waktu fi le
yang berbeda dengan semua fi le di direktori
contoh ini.
Saat ini, waktu sistem penulis adalah:
$ dateFri Sep 30 12:18:16 GMT+7 2005
Untuk contoh pertama, kita akan men-
cari fi le yang baru dimodifi kasi kurang dari
30 menit lalu, dan harusnya hanya fi le C/2
inilah yang akan tampil:
$ find -mmin -30./C./C/2
Untuk mencari fi le-fi le yang dimodifi -
kasi lebih dari 30 menit lalu, lihatlah contoh
berikut ini:
$ find -mmin +30../A./A/1......./B/B1./B/B1/B11./C/1
Berikut ini adalah penjelasan selengkap-
nya dari berbagai argumen kriteria waktu
yang disediakan:
� atime. Mencari berdasarkan n * 24 jam
fi le terakhir diakses. Membutuhkan satu
argumen.
� amin, mencari berdasarkan n menit ter-
akhir fi le diakses. Membutuhkan satu
argumen.
� Ctime, mencari berdasarkan n * 24 jam
status fi le terakhir diubah. Membutuh-
kan satu argumen.
� Cmin, mencari berdasarkan n menit ter-
akhir status fi le diubah. Membutuhkan
satu argumen.
� Mtime, mencari berdasarkan n * 24 jam
data fi le terakhir diubah. Membutuhkan
satu argumen.
� Mmin, mencari berdasarkan n menit
terakhir data fi le diubah.
Semua argumen yang diberikan bisa
dikombinasikan dengan tanda – atau + se-
belum argumen untuk menandakan kurang
dari atau lebih dari.
Selain opsi-opsi tersebut, kita bisa meman-
faatkan beberapa opsi pembanding berikut:
INFOLINUX 01/2006 69
TUTORIALBerita | Ulasan | Utama | Bisnis | Alternatif | Praktik Instan | Solusi | Tutorial
www.infolinux.web.id
Findutils
� anewer. Opsi pembanding ini membu-
tuhkan satu argumen berupa fi le. Opsi
ini akan mencari fi le dimana waktu ak-
ses lebih baru dari fi le yang diberikan se-
bagai argumen.
� Cnewer. Opsi pembanding ini membu-
tuhkan satu argumen berupa fi le. Opsi
ini akan mencari fi le dimana waktu sta-
tus fi le diubah lebih baru dari fi le yang
diberikan sebagai argumen.
� Newer. Opsi pembanding ini membu-
tuhkan satu argumen berupa fi le. Opsi
ini akan mencari fi le dimana waktu fi le
diubah lebih baru dari fi le yang diberi-
kan sebagai argumen.
Sebagai contoh penggunaan ketiga opsi
tersebut, kita akan kembali pada fi le C/2
yang dibahas sebelumnya. Kita akan men-
cari fi le yang lebih baru dari C/1, dan, ha-
rusnya, C/2 akan tampil karena C/2 dibuat
paling baru.
$ find -newer C/1./C./C/2
Find menyediakan begitu banyak opsi
yang dipergunakan untuk bekerja dengan
pencarian berdasarkan kriteria waktu. Kita
dapat mempergunakan satu atau beberapa
diantaranya untuk mencari fi le yang di-
inginkan.
Memformat keluaran dari pencarianApa yang ditampilkan oleh fi nd secara de-
fault adalah nama fi le yang ditemukan. Apa-
bila diinginkan, kita masih bisa memformat
keluaran dari fi nd dengan berbagai format
yang disediakan.
Sebagai contoh sederhana, kita ingin me-
nambahkan kata found sebelum nama fi le.
Berikut ini adalah contoh penggunaannya:
$ find -printf ‘found: %p\n’found: .found: ./Afound: ./A/1found: ./A/2found: ./A/3found: ./A/4found: ./A/5found: ./Bfound: ./B/1found: ./B/2found: ./B/3
found: ./B/B1found: ./B/B1/B11found: ./Cfound: ./C/1found: ./C/2
Pada contoh di atas, opsi yang dipergu-
nakan adalah printf, yang membutuhkan
satu argumen berupa format. Format bisa
terdiri dari beberapa simbol seperti bebe-
rapa contoh berikut ini:
� %p, nama fi le lengkap
� %f, nama fi le tanpa direktori (base-
name)
� %s, ukuran fi le dalam byte
� %y, tipe fi le
� %u, user yang memiliki fi le
� %g, group yang memiliki fi le
� %m, hak akses fi le
� %t, waktu fi le dimodifi kasi
Sementara, kita juga mengenal beberapa
escape character seperti:
� \n, untuk mencetak karakter baris baru
� \a, untuk alarm
Escape character dan directive seleng-
kapnya bisa dilihat pada manual fi nd. Beri-
kut ini adalah contoh yang lebih kompleks:
$ find -printf ‘found: %p (size: %s) (owner: %u, group: %g) (type: %y) (perm: %m)\n’ found: . (size: 120) (owner: nop, group: users) (type: d) (perm: 755).........found: ./C/1 (size: 0) (owner: nop, group: users) (type: f) (perm: 644)found: ./C/2 (size: 2) (owner: nop, group: users) (type: f) (perm: 644)
Penggabungan find dan xargsFind memiliki banyak sekali fi tur. Sementara,
program xargs dapat dikombinasikan dengan
fi nd untuk menghasilkan berbagai solusi yang
seringkali dibutuhkan. Seperti disebutkan se-
belumnya, xargs akan membaca dari stan-
dard input (dari keluaran find, kemudian
di pipe), kemudian menjalankan perintah
untuk dikenakan pada data yang berhasil
dibaca dari standar input tersebut. Perin-
tah yang diberikan bisa bervariasi.
Melihat tipe file dengan detailBerikut ini adalah contoh pertama peng-
gabungan antara fi nd dan xargs untuk me-
nampilkan dengan rinci tipe fi le yang dite-
mukan dengan bantuan program fi le.
$ find | xargs file.: directory./A: directory./A/1: empty./A/2: empty......./B/B1/B11: empty./C: directory./C/1: empty./C/2: ASCII text
Menghapus file secara massalDengan cara yang sama seperti contoh sebe-
lumnya, kita bisa pula menghapus semua fi le
yang ditemukan dengan bantuan program
rm. Sebagai contoh, kita akan menghapus
semua fi le yang nama fi le-nya di akhiri de-
ngan karakter 1:
$ find -name “*1” | xargs rm -rf
Apabila dicari lagi, fi le-fi le yang diakhiri
karakter 1 sudah tidak ditemukan lagi:
$ find ../A./A/2./A/3./A/4./A/5./B./B/2./B/3./C./C/2
Contoh: nftype_stats.shnftype_stats.sh adalah shell script yang akan
mencari dan membuat statistik fi le-fi le apa
saja yang terdapat di suatu direktori.
Source code selengkapnya bisa di-down-
load di http://www.noprianto.com/code.php.
Demikianlah pembahasan kita tentang
pencarian fi le menggunakan paket GNU
fi ndutils. Selamat mencoba!
Noprianto ([email protected])
INFOLINUX 01/200670
TUTORIAL Berita | Ulasan | Utama | Bisnis | Alternatif | Praktik Instan | Solusi | Tutorial
www.infolinux.web.id
Jika kita simak berita akhir-akhir ini,
kerapkali terjadi sweeping terhadap
beberapa objek yang memang terkait
dengan penggunaan software bajakan. Mi-
salnya toko software, toko komputer, dan
yang paling terakhir adalah warung Internet
(warnet) atau cyber cafe.
Dan para pengelola pun menjadi begitu
panik menyikapinya. Di kota penulis, be-
berapa warung Internet sempat tutup be-
berapa minggu, bahkan sampai ada yang
tutup selamanya.
Pada kesempatan kali ini, penulis ingin
memberikan alternatif pengganti yang mi-
rip dari sistem operasi mahal yang Anda gu-
nakan selama ini. Jika Anda memilih untuk
tidak membajak software mahal atau Anda
merasa kantong Anda kurang sesuai dengan
harga sistem operasi yang mahal, Anda bisa
teruskan membaca artikel berikut.
Tampilan Linux yang lengkap sama se-
perti sistem operasi Windows dan Macin-
tosh. Namun Linux dapat berfungsi sebagai
sistem operasi yang serba guna tanpa ha-
rus menjalankan window. Window di linux
dinamakan X Window. Pengatur tampilan
window dan desktop dinamakan window/
desktop manager. Jadi X Window dan win-
dow/desktop manager adalah tampilan gra-
fi s dari desktop sistem operasi Linux.
Apa itu IceWM?IceWM adalah salah satu window manager
yang mirip Windows. Dengan memakai
theme XP dan menu program yang dikus-
tomisasi, maka tampilannya tak akan beda
jauh dengan Windows XP.
Tujuan pengembangan IceWM adalah
untuk menyediakan window manager yang
kecil, cepat dan lebih familiar untuk peng-
guna X11 window system. IceWM secara
orisinil didesain untuk mengemulasi cita-
rasa dari Motif, OS/2 Warp 4, OS/2 Warp
3 dan Windows 95. Karena itu IceWM me-
miliki sebuah mesin theme. Jadi style-style
lain bisa dimungkinkan untuk dipakai.
IceWM juga dapat merupakan kombinasi
citarasa dari beberapa sistem di atas apabila
itu kompatibel. Informasi lebih jauh dapat
diperoleh di http://www.icewm.org/> dan
http://icewm.sourceforge.net/> atau di di-
rektori /usr/share/doc/icewm-1.2.6/icewm.
html pada sistem Linux yang telah terinstal
icewm-1.2.6.
Permasalahan dari sebagaian user Linux
pemula adalah belum familiar dengan win-
dow manager seperti KDE dan GNOME, se-
hingga mereka merasa malas untuk meng-
gunakannya. Bagaimana cara untuk mem-
buat mereka merasa familiar? Kita harus bi-
sa men-setting window manager sedemikian
rupa agar sangat mirip dengan desktop yang
biasa mereka gunakan. Sebelum melangkah
lebih jauh, mari kita lihat perbedaan antara
IceWM default install dengan IceWM hasil
oprekan ini.
IceWM yang sudah dioprek dapat Anda
lihat di gambar 1, sedangkan IceWM yang
asli default install dapat Anda lihat di gam-
bar 2 (Mandrake 9.1) dan gambar 3 (RedHat
9.0). Bagaimana? Sangat berbeda bukan? Hal
itu dikarenakan IceWM memiliki banyak
theme yang berbeda-beda. Yang paling mi-
rip dengan Windows XP adalah theme XP
yang dibuat oleh Bas Leerintveld (deskripsi:
Theme Resembling MS Whistler™).
IceWM dengan theme XP yang dipakai
penulis adalah paket rpm yang ada di CD
instalasi Mandrake 9.1. Anda bisa men-
download IceWM dalam bentuk paket
rpm ataupun tar gz. Selanjutnya mari kita
pela jari sebagian konfi gurasi yang perlu kita
Desktop IceWM Seindah Windows XPAnda ingin menikmati desktop Linux yang mirip Windows? Apakah KDE dan GNOME terlalu berat untuk komputer Anda? Jika ya, IceWM pilihannya.
IceWM dengan tampilan Windows XP.
IceWM
INFOLINUX 01/2006 71
TUTORIALBerita | Ulasan | Utama | Bisnis | Alternatif | Praktik Instan | Solusi | Tutorial
www.infolinux.web.id
ubah agar tampilan IceWM sangat mirip
dengan Windows® XP®.
File konfigurasi IceWMIceWM mencari beberapa lokasi untuk
mengetahui informasi konfi gurasi, theme,
dan kustomisasi, yang dikenal sebagai re-
source path. Urutan pencariannya adalah:
� $HOME/.icewm: kustomisasi yang dibuat
oleh masing-masing user. $HOME/ arti-
nya direktori /home/nama-user/.
� /etc/X11/icewm: default sistem secara
keseluruhan. Ini sangat tergantung distro
Linux dan paket yang terinstal. Contoh
tersebut diambil dari komputer penulis.
Tempat lainnya adalah /etc/X11R6/lib/
X11/icewm.
� /usr/local/share/icewm: direktori default
dengan fi le default (untuk paket rpm, le-
tak default di /usr/share/icewm).
Saat IceWM dijalankan, akan mencari
dengan urutan seperti di atas. Jadi jika ada
fi le konfi gurasi yang terletak di direktori
$HOME/.icewm yang diciptakan oleh user,
maka fi le konfi gurasi yang terletak di sistem
default akan diabaikan. Apa artinya? Artinya
untuk mengustomisasi (baca: mengoprek)
IceWM agar sesuai dengan keinginan kita,
kita harus menciptakan direktori .icewm di
bawah direktori home kita, dan meng-copy
fi le-fi le yang ingin kita modifi kasi. File-fi le
itu (preferences, menu, toolbar, dan lain-
lain) ada di direktori /etc/X11/icewm atau
/etc/X11R6/lib/X11/icewm atau /usr/share/
icewm atau /usr/local/share/icewm (tergan-
tung mana yang ada di sistem Anda). Copy
semuanya ke $HOME/.icewm dan modifi -
kasi sesuai keinginan Anda.
Penjelasan singkat beberapa fi le konfi -
gurasi sebagai berikut:
� preferences - Setting umum seperti paths,
colors, fonts, dan lain-lain.
� menu - Menu aplikasi yang dapat di-
jalankan dari menu start, yang dapat di-
kustomisasi sendiri oleh user.
� programs - Menu yang dibangkitkan
secara otomatis dari aplikasi (biasanya
digunakan untuk wmconfi g, menu atau
paket sejenis, sebagai bagian dari login
atau rangkaian startup X).
� winoptions – Opsi-opsi aplikasi window.
� keys – Kombinasi kunci (keyboard)
global untuk memanggil aplikasi (bukan
bawaan window manager).
� toolbar – Icon untuk memanggil aplikasi
secara cepat dari taskbar.
� theme – File yang berisi nama theme.
Beberapa bagian dari preferences yang
perlu diubah adalah:
� Focus dan behavior:
� Win95Keys = 1 # support win95 keyboard keys
� ShowThemesMenu = 0 # menyembunyikan submenu themes
� Taskbar:
� TaskBarShowWindowListMenu = 0 # menyembunyikan menu “window list”
� TaskBarShowWorkspaces = 0 # menyembunyikan tombol switch workspace
� TaskBarShowMailboxStatus = 0 # menyembunyikan mailbox status di taskbar
� TaskBarMailboxStatusBeepOnNewMail = 0 # mematikan beep jika email masuk
� UseMouseWheel = 1 # support mouse wheel
� Desktop background:
� DesktopBackgroundImage = “/home/semeru4/.icewm/Bliss.bmp” # Bliss.bmp adalah gambar background yang mirip background Windows XP.
� DesktopBackgroundCenter = 1 # desktop background center dan tidak tiled
� Workspaces atau virtual desktop:
WorkspaceNames=” 1 “ # nama workspace
Berikut ini contoh isi fi le menu secara
lengkap:
### mulai menu ###prog “Terminal” /usr/share/icons/mini/terminals_section.png /usr/X11R6/bin/xvt -bg black -cr green -fg grey -C -sl 2000### akhir menu ###
Berikut isi fi le programs :
### mulai programs ###menu “Internet” folder { prog “Browsing” /usr/share/icons/mini/mozilla.png mozilla prog “mIRC” /usr/share/icons/mini/xchat.png xchat prog “ICQ” /usr/share/icons/mini/licq.png licq prog “Messenger” /usr/share/
IceWM di Mandrake.
IceWM
INFOLINUX 01/200672
TUTORIAL Berita | Ulasan | Utama | Bisnis | Alternatif | Praktik Instan | Solusi | Tutorial
www.infolinux.web.id
icons/mini/gaim.png gaim prog “Outlook” /usr/share/icons/mini/evolution.png evolution}menu “Games” folder { prog “Kapal Perang” /usr/share/icons/mini/chromium.png chromium prog “Frozen Bubble” /usr/share/icons/mini/frozen-bubble.png frozen-bubble prog “Tux Racing” /usr/share/icons/mini/sport_section.png tuxracer prog “Tank Perang” bzflag bzflag prog “PowerManga” powermanga powermanga prog “Quadra” quadra quadra prog “Skobo” skobo skobo prog “Toppler” toppler toppler prog “Solitaire” /usr/share/icons/mini/cards_section.png pysol prog “Freecell” /usr/share/icons/mini/gnome-cardgame.png freecell prog “Poker” kpoker kpoker prog “Catur” /usr/share/icons/mini/boards_section.png xboard prog “MineSweeper” kmines kmines prog “Bounce” /usr/share/icons/locolor/16x16/apps/kbounce.png kbounce prog “FlightGear” fgfs fgfs prog “FreeCraft” freecraft freecraft prog “LinCity” xlincity xlincity prog “Pingus” pingus pingus & prog “TuxKart” tuxkart tuxkart}menu “Lagu” folder { prog “WinAmp” /usr/share/icons/mini/xmms.xpm xmms -p prog “Media Player” /usr/share/icons/mini/xine.png xine prog “Volume Control” /usr/
share/icons/mini/sound_section.png aumix}menu “Gambar” folder { prog “GIMP” /usr/share/icons/mini/wilbur.png gimp-remote -n -f prog “Paint” kpaint kpaint prog “EOG” “Eye of Gnome” /usr/share/icons/mini/eog.png /usr/bin/eog prog “Kuickshow” /usr/share/icons/locolor/16x16/apps/kuickshow.png kuickshow}menu “Office” folder { prog “Word” /opt/OpenOffice.org1.1.2/share/icons/ooo_writer.png oowriter prog “Excel” /opt/OpenOffice.org1.1.2/share/icons/ooo_calc.png oocalc prog “PowerPoint” /opt/OpenOffice.org1.1.2/share/icons/ooo_impress.png ooimpress prog “Matematika” /opt/OpenOffice.org1.1.2/share/icons/ooo_math.png oomath prog “Corel Draw” /opt/OpenOffice.org1.1.2/share/icons/ooo_draw.png oodraw prog “Web Desain” /opt/
OpenOffice.org1.1.2/share/icons/ooo_web.png ooweb prog “Acrobat Reader” /usr/share/icons/mini/xpdf.png xpdf prog “Notepad” /usr/share/icons/mini/gedit.png gedit}menu “WinZip” folder { prog “GnoZip” /usr/share/icons/mini/gnozip.png gnozip prog “File-Roller” /usr/share/icons/mini/file-roller.png file-roller prog “Ark” - ark}menu “Lain-lain” folder { prog “Calculator” kcalc kcalc prog “Command Prompt” /usr/share/icons/mini/gnome-terminal.png gnome-terminal prog “File Explorer” /usr/share/icons/mini/nautilus.png nautilus --no-desktop prog “Hand Phone” xgnokii xgnokii}menu “Shutdown” folder { prog “Shutdown Now” shutdown /usr/bin/poweroff prog “Reboot” reboot /usr/bin/reboot
IceWM di Red Hat.
IceWM
INFOLINUX 01/2006 73
TUTORIALBerita | Ulasan | Utama | Bisnis | Alternatif | Praktik Instan | Solusi | Tutorial
www.infolinux.web.id
membatasi akses tiap user dengan quota,
chown, chmod, dan seterusnya.
Editor preferencesUntuk lebih memudahkan tugas adminis-
trator, ada juga free utility atau alat bantu
konfi gurasi, yaitu icepref (lihat gambar 5).
Icepref membantu kita untuk mengedit fi le-
fi le konfi gurasi IceWM dengan cara yang
lebih mudah (Anda tinggal klik-klik saja,
semua beres). Yang perlu Anda lakukan
hanyalah memilih konfi gurasi yang tepat
untuk sistem Anda, kemudian tinggal tekan
tombol Save dan kemudian tekan tombol
Restart (IceWM).
Icepref dibangun dengan menggunakan
python yang biasanya sudah terinstal secara
default di sistem Linux. Jadi mudah meng-
gunakan dan menjalankannya. Icepref me-
merlukan paket tambahan pygtk (python
binding untuk GTK+ widget set) dan pyt-
hon-numeric (fasilitas numerikal python).
Mengganti theme Theme digunakan untuk mengonfi gurasi
tampilan window manager. Hal-hal seperti
huruf, warna, ukuran garis batas, gambar
tombol bisa dikonfi gurasikan oleh theme.
Theme dicari di subdirektori libpath/themes
(misalnya /etc/X11R6/lib/X11/icewm/
themes), yang berisi beberapa subdirektori
(misal xp untuk theme Windows XP). Tiap
subdirektori berisi fi le-fi le theme (misalnya
default.theme) yang saling terhubung dan
ada juga fi le-fi le yang berekstensi xpm.
Theme yang akan digunakan dapat dipi-
lih dengan jalan mengubah opsi konfi gurasi
Theme di fi le preferences atau memakai opsi
command line –theme. Di fi le preferences:
Theme = “xp/default.theme”
Catatan: direktori dan nama dari theme
harus ditulis secara jelas. Satu baris di atas
juga dapat dijadikan sebuah fi le bernama
theme, yang diletakkan di bawah direktori
$HOME/.icewm/.
Jika ingin mencari berbagai jenis theme
yang bervariasi, Anda dapat mencarinya di
http://themes.freshmeat.net yang diciptakan
oleh user-user IceWM dari seluruh dunia.
PenutupSecara pribadi, penulis mengakui IceWM
sebagai desktop manager yang tergolong
ringan tapi powerful (cocok untuk komputer
yang agak tua). Memang KDE dan GNOME
adalah desktop manager yang pa ling bagus
tampilannya, tetapi kustomer Anda akan
banyak kagetnya melihat perbedaan yang
menurut penulis sangat mencolok, be-
lum lagi resource komputer Anda yang di-
habiskan oleh KDE atau GNOME tersebut.
Komputer tua Anda akan terasa lambat jika
menggunakan KDE atau GNOME.
Berdasarkan pengalaman penulis, kom-
puter sekelas Pentium II masih terasa ringan
dengan menggunakan desktop manager
IceWM ini. Komputer diskless milik penu-
lis pun dengan mulus bisa menampilkan
IceWM ini. Catatan: screenshot dan fi le-fi le
yang behubungan dengan desktop manager
IceWM ini dapat Anda temukan di www.
geocities.com/iko94/icewm.
Iko Riyadi ([email protected])
}### akhir programs ###
File winoptions dan keys biarkan saja isi
defaultnya, sedangkan untuk fi le toolbar ko-
songkan atau beri tanda comment isinya. Se-
bagai catatan, fi le programs dapat ditambahi
isinya dengan syntax sebagai berikut:
prog “title” nama_ikon program_executable options
Catatan: nama_ikon dapat diisi tanda -
jika icon tidak dimunculkan.
Submenu dapat ditambahkan isinya
dengan syntax sebagai berikut :
menu “title” nama_ikon {prog “title” nama_ikon program_executable options}
Catatan: hanya double quotes yang di-
mengerti oleh icewm. Icewm tidak men-
jalankan shell secara otomatis, jadi Anda
harus mengerjakannya.
Selanjutnya Anda bisa lihat gambar 4
yang menunjukkan dan menjelaskan be-
berapa istilah yang menyangkut fi le konfi -
gurasi di atas. Konfi gurasi di atas disarankan
untuk dipakai di jaringan komputer biasa.
Tidak disarankan untuk jaringan komputer
diskless, sebab di diskless system (LTSP),
komputer klien harus benar-benar diba-
tasi aksesnya ke fi le-fi le vital seperti reboot,
shutdown, halt, dsb. Jika tidak dibatasi,
maka dari komputer klien, seorang user bisa
me-reboot server Anda. Tidak lucu kan jika
hal ini terjadi? Solusinya Anda harus lebih
Istilah-istilah di desktop IceWM. Icepref untuk mengonfigurasi IceWM.
IceWM
INFOLINUX 01/200674
TUTORIAL Berita | Ulasan | Utama | Bisnis | Alternatif | Praktik Instan | Solusi | Tutorial
www.infolinux.web.id
Busybox
Sulit mengatakan betapa hebatnya
busybox. Dan, sudah sangat wajar apa-
bila dunia open source berterimakasih
kepada Eric Andersen (andersen@codepoet.
org) untuk suatu karya yang hebat ini.
Busybox merupakan utiliti yang mencoba
menghadirkan ulang utiliti-utiliti populer,
namun dengan versi mininya (atau lebih
tepat lain, dengan versi yang lebih efi sien).
Dengan demikian, kita bisa cukup hanya
menggunakan busybox untuk melakukan
tugas-tugas yang dilakukan dengan ls, cp,
rm, mv, sh, dan masih sangat sangat banyak
lagi tool lainnya.
Apabila kita bicara sistem Linux yang
sederhana, bukan distribusi yang kompleks,
ukuran merupakan sesuatu yang penting.
Terutama ketika sistem yang dihasilkan
harus sekecil mungkin. Pada distribusi be-
sar, adalah umum bagi direktori /bin un-
tuk berukuran sampai 5 MB. Namun, pada
sistem yang kecil, total ukuran kernel dan
semua fi le terkadang dibatasi hanya sampai
2 MB.
Selain ukuran, faktor lain yang mere-
potkan bagi sistem kecil adalah jumlah
fi le yang banyak. Tentu akan jauh lebih
mudah untuk menangani satu buah fi le
daripada banyak fi le sekaligus. Lebih-lebih
kalau setiap fi le berpeluang untuk memi-
liki ketergantungan sendiri-sendiri terha-
dap pustaka-pustaka lain. Selain itu, pada
sistem kecil, ada kalanya jumlah inode pada
fi lesistem dibatasi. Menggunakan busybox
dimana satu aplikasi tunggal bisa melaku-
kan banyak hal, merupakan penghematan
inode yang luar biasa.
Dengan demikian, bagi Anda yang me-
miliki kepentingan untuk bekerja pada
sistem yang sangat kecil (embedded sistem),
atau bekerja pada sistem dimana jumlah fi le
(atau jumlah inode) merupakan faktor yang
penting, atau sekadar senang membawa satu
utiliti kemana-mana untuk troubleshoot-
ing, maka Anda termasuk orang yang akan
membutuhkan busybox.
Bertindak sesuai dipanggilAnda bisa membayangkan busybox seperti
seseorang yang akan melakukan pekerjaan
sesuai bagaimana dirinya dipanggil. Apa-
bila seseorang dipanggil sebagai koki, maka
beliau akan segera memasak sebagai koki.
Apabila seseorang tersebut dipanggil sebagai
supir, maka beliau akan segera menjadi supir
dan melakukan tugas supir. Sama ketika se-
seorang serba bisa tersebut kita panggil men-
jadi direktur perusahaan. Beliau akan segera
menjadi direktur dan melakukan tugas-tugas
seorang direktur perusahaan. Termasuk keti-
ka seseorang tersebut diminta untuk menjadi
anggota DPR. Luar biasa, bukan?
Seperti telah disebutkan pada bagian
awal tulisan, bahwa busybox mampu ber-
tindak sebagai utiliti-utiliti sistem dengan
menghadirkan ulang utiliti-utiliti tersebut
dalam bentuk yang lebih kecil, tentu saja
tidak semua fi tur dari aplikasi yang diganti-
kan mampu disediakan.
Sama seperti seseorang dalam analogi
sebelumnya yang mampu melakukan segala
pekerjaan. Mulai dari supir sampai anggota
DPR. Segala hal bisa dilakukan.
Apabila busybox mampu menggantikan
fungsi sebuah aplikasi yang diinginkan na-
mun tidak mampu menghadirkan fi tur yang
Anda inginkan dari aplikasi tersebut, maka
Anda selalu bisa menggunakan aplikasi yang
sesungguhnya. Untuk yang bisa ditangani,
Anda tetap mengandalkan busybox. Sama
seperti ilustrasi orang serba bisa sebelum-
nya. Apabila ada satu atau dua tugas yang
tidak bisa dikerjakan, maka Anda selalu bisa
mencari orang yang benar-benar bisa di-
andalkan. Selebihnya, tetap mengandalkan
orang serba bisa tersebut.
Kompilasi dan instalasi busyboxSource code busybox bisa di-download
di website-nya, http://www.busybox.net.
Pada saat tulisan ini dibuat, busybox telah
mencapai versi 1.1.0pre1. Untuk tulisan
kali ini, kita tidak akan memanfaatkan bi-
nary yang telah tersedia di sistem. Hal ini
disebabkan kita akan melakukan kompi-
lasi sendiri.
Bagi Anda yang memiliki source paket
busybox (misal source RPM atau source DEB)
dari distro Anda, Anda selalu bisa mempergu-
nakannya. Busybox umumnya telah dipaket-
kan ke hampir semua distro populer.
Setelah arsip source code kita miliki, ma-
ka kita perlu melakukan ekstraksi terlebih
dahulu:
$ tar jxvf busybox-1.1.0-pre1.tar.bz2
Setelah itu, masuklah ke direktori hasil
ekstraksi:
$ cd busybox-1.1.0-pre1/
Sebelum kita melakukan kompilasi, kita
akan melihat terlebih dahulu struktur direk-
tori source code busybox:
� Terdapat fi le README, INSTALL,
AUTHOR S dan TODO yang berisikan
informasi lebih lanjut mengenai busy-
box, cara instalasi, pembuat, dan todo
list busybox.
� Terdapat fi le LICENSE yang merupakan
lisensi busybox. Busybox dilisensikan di
bawah GPL. Di website busybox, terdapat
bagian hall of shame yang memperli-
hatkan siapa-siapa saja yang di ketahui
telah mempergunakan busybox di dalam
produknya, namun tidak menuruti li-
Utiliti yang Serba SibukApabila Anda menginginkan sebuah utiliti yang hampir bisa melakukan apa saja, maka Anda akan menemukan busybox-lah utilitinya. Simpan busybox di saku, dan Anda pun akan siap sedia setiap saat apabila sistem Anda (atau rekan Anda) bermasalah.
INFOLINUX 01/2006 75
TUTORIALBerita | Ulasan | Utama | Bisnis | Alternatif | Praktik Instan | Solusi | Tutorial
www.infolinux.web.id
Busybox
sensi.
� Terdapat banyak direktori yang masing-
masingnya merupakan kelompok besar
dari utiliti-utiliti yang fungsinya dapat
digantikan oleh busybox. Sebagai contoh,
kita bisa melihat direktori shell. Di dalam
direktori ini, kita bisa melihat source code
untuk shell-shell yang didukung oleh
busybox. Hal yang sama bisa kita temu-
kan pula di direktori editors, direktori
dimana busybox menyimpan source code
untuk direktori yang didukung.
$ ls -ltotal 117drwxr-xr-x 2 nop users 232 2005-11-01 06:55 appletsdrwxr-xr-x 3 nop users 488 2005-11-01 06:55 archival......drwxr-xr-x 2 nop users 656 2005-11-01 06:55 miscutilsdrwxr-xr-x 2 nop users 240 2005-11-01 06:55 modutilsdrwxr-xr-x 4 nop users 992 2005-11-01 06:55 networkingdrwxr-xr-x 2 nop users 400 2005-11-01 06:55 patchesdrwxr-xr-x 2 nop users 352 2005-11-01 06:55 procps-rw-r--r-- 1 nop users 8918 2005-11-01 06:55 README-rw-r--r-- 1 nop users 7356 2005-11-01 06:55 Rules.makdrwxr-xr-x 3 nop users 136 2005-11-01 06:55 scriptsdrwxr-xr-x 2 nop users 296 2005-11-01 06:55 shelldrwxr-xr-x 3 nop users 72 2005-11-01 06:55 sysdepsdrwxr-xr-x 2 nop users 248 2005-11-01 06:55 sysklogddrwxr-xr-x 45 nop users 1376 2005-11-01 06:55 testsuite-rw-r--r-- 1 nop users 8872 2005-11-01 06:55 TODOdrwxr-xr-x 2 nop users 848 2005-11-01 06:55 util-linux
$ ls -l shell/total 588-rw-r--r-- 1 nop users 290896 2005-11-01 06:55 ash.c
-rw-r--r-- 1 nop users 44950 2005-11-01 06:55 cmdedit.c-rw-r--r-- 1 nop users 406 2005-11-01 06:55 cmdedit.h-rw-r--r-- 1 nop users 8205 2005-11-01 06:55 Config.in-rw-r--r-- 1 nop users 81972 2005-11-01 06:55 hush.c-rw-r--r-- 1 nop users 42639 2005-11-01 06:55 lash.c-rw-r--r-- 1 nop users 409 2005-11-01 06:55 Makefile-rw-r--r-- 1 nop users 714 2005-11-01 06:55 Makefile.in-rw-r--r-- 1 nop users 104793 2005-11-01 06:55 msh.c
KonfigurasiUntuk melakukan kompilasi, kita perlu
mengkonfi gurasi busybox terlebih dahulu
dengan memberikan perintah:
$ make menuconfig
Bagi Anda yang pernah melakukan kom-
pilasi kernel, tentu tampilan yang muncul
tidak asing lagi. Di menu yang tampil, kita
bisa memilih fi tur-fi tur apa saja yang akan
dimasukkan ke dalam busybox.
Setelah memilih, pilihlah tombol Exit
dan simpanlah konfi gurasi Anda. Penyim-
panan konfi gurasi akan menghasilkan se-
buah fi le dengan nama .confi g, sama seperti
ketika kompilasi kernel dilakukan. Berikut
ini adalah contoh 10 baris pertama .confi g
yang dihasilkan di komputer penulis:
$ head -n 10 .config## Automatically generated make config: don’t edit#HAVE_DOT_CONFIG=y
## General Configuration## CONFIG_FEATURE_BUFFERS_USE_MALLOC is not setCONFIG_FEATURE_BUFFERS_GO_ON_STACK=y
KompilasiKonfi gurasi telah selesai kita lakukan. Se-
lanjutnya, kita akan melakukan kompilasi
dengan memberikan perintah:
$ make
Setelah perintah tersebut diberikan, ma-
ka proses kompilasi akan berlangsung. Apa
yang akan terlihat di layar adalah proses
kompilasi setiap fi le source code busybox.
Proses kompilasi ini akan memakan waktu
tergantung jumlah fi tur yang dipilih.
Apabila proses kompilasi selesai tanpa
kesalahan, maka di direktori source code
busybox akan terbentuk sebuah fi le dengan
nama busybox:
$ ls -al busybox-rwxr-xr-x 1 nop users 245096 2005-11-19 00:15 busybox
Untuk menguji busybox yang baru ter-
bentuk, jalankanlah busybox dengan perin-
tah berikut ini:
$ ./busybox BusyBox v1.1.0-pre1 (2005.11.18-17:11+0000) multi-call binary
Usage: busybox [function] [arguments]... or: [function] [arguments]...
BusyBox is a multi-call binary that combines many common Unix utilities into a single executable. Most people will create a link to busybox for each function they wish to use and BusyBox will act like whatever it was invoked as!
Currently defined functions: [, [[, ash, basename, bunzip2, busybox, bzcat, cat, chgrp, chmod, chown, chroot, chvt, clear, cmp, cp, cut, date, dd, deallocvt, df, dirname, dmesg, du, echo, egrep, env, expr, false, fgrep, find, free, grep, gunzip, gzip, halt, head, hexdump, hostname, id, ifconfig, init, install, kill, killall, klogd, linuxrc, ln, logger, ls, mkdir, mknod, mktemp, more, mount, mv, openvt, pidof, ping, pivot_root,
INFOLINUX 01/200676
TUTORIAL Berita | Ulasan | Utama | Bisnis | Alternatif | Praktik Instan | Solusi | Tutorial
www.infolinux.web.id
Busybox
poweroff, ps, pwd, readlink, reboot, reset, rm, rmdir, route, sed, sh, sleep, sort, strings, swapoff, swapon, sync, syslogd, tail, tar, tee, test, time, touch, tr, true, tty, umount, uname, uniq, unzip, uptime, usleep, vi, wc, wget, which, whoami, xargs, yes, zcat
Apabila dijalankan tanpa parameter,
maka busybox akan menampilkan semua
fungsi yang didukung.
InstalasiUntuk melakukan instalasi, kita bisa mem-
berikan perintah make install, namun, kita
juga bisa mengopikan fi le busybox yang ter-
bentuk dari proses kompilasi ke lokasi yang
kita inginkan.
Memanggil applet-applet busyboxTerdapat paling tidak tiga cara untuk me-
manggil fungsi-fungsi atau applet-applet
yang didukung oleh busybox. Kita akan me-
lihatnya satu per satu.
Memanggil busybox dengan parameterCara yang paling mudah adalah dengan me-
manggil busybox diikuti oleh parameter per-
tama berupa fungsi yang ingin digunakan.
Sebagai contoh, apabila kita ingin memanggil
applet ls yang telah didukung oleh busybox,
maka berikanlah perintah berikut ini:
$./busybox lsAUTHORS Makefile applets console-tools docs findutils libpwdgrp networking shell util-linuxChangelog README archival coreutils e2fsprogs include loginutils patches sysdepsINSTALL Rules.mak busybox debian editors init miscutils procps sysklogdLICENSE TODO busybox.links debianutils examples libbb modutils scripts testsuite
Tentu saja, pemanggilan fungsi ls juga
bisa diikuti oleh parameter yang didukung
oleh applet ls:
$./busybox ls -l-rw-r--r-- 1 nop users
4794 Nov 1 06:55 AUTHORS-rw-r--r-- 1 nop users 32534 Nov 1 06:55 Changelog-rw-r--r-- 1 nop users 3818 Nov 1 06:55 INSTALL.........drwxr-xr-x 3 nop users 72 Nov 1 06:55 sysdepsdrwxr-xr-x 2 nop users 360 Nov 19 00:15 sysklogddrwxr-xr-x 45 nop users 1376 Nov 1 06:55 testsuitedrwxr-xr-x 2 nop users 1072 Nov 19 00:15 util-linux
Menggunakan symlinkCara kedua yang umum dilakukan adalah
dengan membuat symlink untuk nama
fungsi yang diinginkan ke program busy-
box. Dengan demikian, kembali ke ilustrasi
di bagian-bagian awal tulisan, busybox akan
bertindak sesuai bagaimana dirinya dipang-
gil. Kita pun tinggal memanggil nama prog-
ram yang berupa symlink tersebut. Sebagai
contoh:
$ ln -sf busybox tar
$ file tar tar: symbolic link to `busybox’
$ ./tar BusyBox v1.1.0-pre1 (2005.11.18-17:11+0000) multi-call binary
Usage: tar -[czjxtvO] [-f TARFILE] [-C DIR] [FILE(s)] ...
Create, extract, or list files from a tar file.Options: c create x extract t list
Archive format selection: z Filter the archive through gzip j Filter the archive through bzip2
File selection: f name of
Konfigurasi busybox.
INFOLINUX 01/2006 77
TUTORIALBerita | Ulasan | Utama | Bisnis | Alternatif | Praktik Instan | Solusi | Tutorial
www.infolinux.web.id
Busybox
TARFILE or “-” for stdin O extract to stdout C change to directory DIR before operation v verbosely list files processed
Menggunakan hardlinkApabila Anda berada di sistem di mana
jumlah inode tersedia terbatas, maka peng-
gunaan symlink tidaklah disarankan. Setiap
symlink merupakan fi le tersendiri dan akan
memakan satu inode.
Solusi yang bisa digunakan adalah de-
ngan memanfaatkan hardlink. Hardlink
tidak akan memakan inode dan memakan
space di media penyimpanan (walaupun
hardlink akan terlihat sebagai fi le dengan
ukuran yang sama dengan fi le ‘asli’) karena
bukan fi le tersendiri. Sebagai contoh:
$ ln busybox mv
$ file mv mv: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.2.5, dynamically linked (uses shared libs), stripped
$ ./mv BusyBox v1.1.0-pre1 (2005.11.18-17:11+0000) multi-call binary
Usage: mv [OPTION]... SOURCE DESTor: mv [OPTION]... SOURCE... DIRECTORY
Rename SOURCE to DEST, or move SOURCE(s) to DIRECTORY.
Options: -f don’t prompt before overwriting -i interactive, prompt before overwrite
Kompilasi statikSecara default, busybox dikompilasi dengan
memanfaatkan pustaka sistem. Artinya, ke-
tika dijalankan, busybox masih memerlukan
pustaka sistem. Sebagai contoh:
$ ldd busybox linux-gate.so.1 => (0xffffe000) libc.so.6 => /lib/tls/libc.so.6 (0x40027000) /lib/ld-linux.so.2 (0x40000000)
Bagi Anda yang ingin membawa busybox
kemana-mana dalam saku misalnya, aplika-
si yang dilink secara dinamik tidaklah disa-
rankan karena tidak semua sistem menggu-
nakan pustaka dengan versi yang sama.
Solusinya adalah dengan melakukan
kompilasi secara statik sehingga pada saat
dijalankan, busybox tidak memerlukan
pustaka apapun. Dengan demikian, busy box
bisa dijalankan di sistem-sistem lain tanpa
khawatir tidak bisa menemukan pustaka
yang diperlukan. Ini akan sangat membantu
apabila busybox digunakan sebagai alat un-
tuk membantu melakukan rescue sistem di
berbagai kondisi.
Untuk melakukan kompilasi statik,
pada saat melakukan make menuconfi g, di
bagian Build Options, aktifkanlah pilihan
Build Busybox as a static binary (no shared
libs). Setelah itu, lakukanlah kompilasi se-
perti biasa.
File yang dihasilkan akan berukuran
sangat besar apabila dibandingkan dengan
versi dinamiknya. Namun, Anda tidak akan
membutuhkan pustaka lain lagi.
$ ls -l busybox-rwxr-xr-x 1 nop users 820856 2005-11-19 01:41 busybox
$ file busyboxbusybox: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.2.5, statically linked, stripped
$ ldd busybox not a dynamic executable
Demikianlah pembahasan kita tentang
busybox. Anda selalu bisa memanfaatkan
busybox untuk berbagai keperluan seperti
rescue ataupun mengembangkan sistem
embedded. Selamat mencoba!
Noprianto ([email protected])