Custom Search

Senin, 13 Juni 2011

proses pada UNIX

Yang dimaksud dengan proses pada UNIX adalah program
yang sedang berjalan di dalam sistem, misalnya shell,
utilitas, atau aplikasi lainnya. Masukan dari proses dapat
berasal dari keyboard, file atau program lain. Keluaran dari
proses dapat ditampilkan ke layar terminal, file atau
program lain. Sebagian besar utilitas UNIX dirancang untuk
bekerja dalam kombinasi masukan dan keluaran seperti ini.
Pada artikel ini akan dijelaskan tentang konsep proses,
hubungan antar proses dan fasilitas yang berhubungan dengan
proses di dalam sistem UNIX. Pembahasan akan mencakup
mengenai:

- proses masukan dan keluaran
- pengalihan masukan dan keluaran
- pipa dan hubungannya dengan masukan dan keluaran
- proses latar depan dan latar belakang
- menghentikan proses
- menjadualkan proses


4.1 PROSES MASUKAN DAN KELUARAN

Sebuah program yang dijalankan di dalam sistem UNIX
biasanya akan membutuh beberapa masukan. Disamping itu
pula program biasanya menghasilkan suatu keluaran, baik itu
keluaran hasil maupun keluaran kesalahan. Keperluan-
keperluan tersebut ditangani oleh UNIX dengan menggunakan:

o Masukan standar
masukan standar merupakan sumber data dari program
dan sistem akan memberikan datanya pada saat proses
berjalan. Default masukan standar bagi program adalah
keyboard terminal. Bilangan deskriptor file untuk
masukan standar adalah 0.

o Keluaran standar
keluaran standar merupakan wadah dimana program dapat
menuliskan hasil eksekusi yang telah dijalankan.
Default keluaran standar bagi program adalah layar
terminal. Bilangan deskriptor file untuk keluaran
standar adalah 1.

o Keluaran kesalahan standar
keluaran kesalahan standar merupakan wadah dimana
program dapat menuliskan pesan kesalahan atas
eksekusi yang telah dijalankan. Default keluaran
kesalahan standar bagi program adalah layar terminal.
Bilangan deskriptor file untuk keluaran kesalahan
standar adalah 2.
Hal ini dapat digambarkan sebagai berikut:

............
. . |\
. --------+ \
. keluaran 1 > LAYAR TERMINAL
. --------+ /
. . |/
. |\ .
--------+ \ .
KEYBOARD masukan 0 > .
--------+ / .
. |/ .
. . |\
. --------+ \
. kesalahan 2> LAYAR TERMINAL
. --------+ /
. . |/
............


Gambar 4.1 Proses masukan dan keluaran


Kebanyakan program yang tersedia dalam UNIX mengambil
masukan dari masukan standar dan menuliskan keluaran ke
keluaran standar. Program seperti ini biasa disebut filter
Program yang menggunakan nama file sebagai
salah satu parameter dari perintahnya, sesungguhnya mengubah
masukan standarnya dari keyboard ke file, sehingga file
menjadi masukan bagi program. Sebagai contoh, misalnya kita
memiliki sebuah file bernama peserta yang berisi nama-nama.
File tersebut akan diurutkan berdasarkan nama dengan urut
kecil ke besar, maka cara yang dilakukan adalah sebagai
berikut:

$ sort peserta
arif budiman
bagus pribadi
denny yerianto
fanny angela
ferry sihombing
irmawati
$

Perintah sort mengasumsikan bahwa kita ingin mengurut
isi file peserta. Jika perintah sort dilakukan tanpa
memberikan nama file yang akan diurut sebagai argumen, maka
program mengharapkan masukan dari masukan standar yaitu
keyboard. Untuk itu maka kita dapat memasukkan nama-nama
yang akan diurut satu persatu sebagai masukan melalui
keyboard. Untuk mengakhiri masukan, ketikkan karakter end-
of-file, yaitu Kontrol-D pada awal baris, selanjutnya
perintah sort akan segera mengurut masukan.

$ sort
denny yerianto
fanny angela (masukan via keyboard)
bagus pribadi
arif budiman
irmawati
ferry sihombing
^D (akhiri masukan)
arif budiman (mulai proses urut)
bagus pribadi
denny yerianto
fanny angela
ferry sihombing
irmawati
$

Karena nama file tidak disebutkan pada perintah sort di
atas maka masukan standar perintah tersebut diambil dari
keyboard. Detil perintah sort akan dijelaskan pada bab
selanjutnya.

4.1.1 Pengalihan Keluaran

Dalam sistem UNIX, secara normal keluaran dari sebuah
perintah dikirim ke keluaran standar, yaitu layar terminal.
Namun keluaran tersebut secara mudah dapat dialihkan ke file
atau program lain. Kemampuan inilah yang disebut sebagai
pengalihan keluaran atau output redirection.
Jika karakter '>' diikuti nama file ditambahkan pada
akhir perintah UNIX yang menampilkan keluaran ke keluaran
standar, maka keluaran dari perintah tersebut akan dialihkan
ke file yang disebutkan dan tidak ditampilkan ke layar
terminal. Perhatikan ilustrasi berikut ini:


............
. . |\
. --------+ \
. keluaran 1 > FILE
. --------+ /
. . |/
. |\ .
--------+ \ .
KEYBOARD masukan 0 > .
--------+ / .
. |/ .
. . |\
. --------+ \
. kesalahan 2> LAYAR TERMINAL
. --------+ /
. . |/
............

Gambar 4.2 Proses pengalihan keluaran

Baris perintah berikut ini akan menyebabkan keluaran
perintah who dialihkan dari layar terminal ke file.

$ who
heru tty05 Oct 23 07:30
root tty01 Oct 23 07:28
denny tty02 Oct 23 07:28
ucrit tty03 Oct 23 07:29
chaerind tty04 Oct 23 07:30
$ who > peserta
$

Pada perintah who kedua tidak terlihat keluaran pada
layar terminal. Hal ini disebabkan keluarannya telah
dialihkan ke file peserta. Kita dapat memeriksa isi file
peserta dengan perintah cat sebagai berikut:

$ cat peserta
heru tty05 Oct 23 07:30
root tty01 Oct 23 07:28
denny tty02 Oct 23 07:28
ucrit tty03 Oct 23 07:29
chaerind tty04 Oct 23 07:30
$

Contoh lain dari pengalihan keluaran adalah penyimpanan
tanggal dan waktu ke dalam file waktu sebagai berikut:

$ date
Fri Oct 23 07:28:32 PDT 1992
$ date > waktu
$ cat waktu
Fri Oct 23 07:28:32 PDT 1992
$

Perintah echo menuliskan keluaran ke keluaran standar,
sehingga dapat dialihkan sebagai berikut:

$ echo baris satu > berkas
$ cat berkas
baris satu
$

Jika keluaran sebuah perintah dialihkan ke sebuah file
yang sebelumnya telah berisi data, maka data sebelumnya akan
hilang dan diganti dengan data yang baru. Perhatikan contoh
berikut ini.

$ echo baris satu > berkas
$ cat berkas
baris satu
$ echo baris dua > berkas
$ cat berkas
baris dua
$
Isi dari file berkas (baris satu) hilang tertimpa data
baru ketika perintah echo kedua dieksekusi.
Jika diinginkan data sebelumnya tidak hilang dan data
baru ditambahkan di bawah data lama, maka gunakanlah
karakter '>>' sebagai pengganti karakter '>'.

$ echo baris satu > berkas
$ cat berkas
baris satu
$ echo baris dua >> berkas (append)
$ cat berkas
baris satu (tidak hilang !)
baris dua
$

4.1.2 Perintah cat dan Hubungannya dengan Proses

Berbeda dengan uraian mengenai perintah cat pada bab
sebelumnya, kali ini akan diuraikan kemampuan perintah cat
dan hubungannya dengan proses.
Seperti pada sebagaian besar perintah lainnya pada
UNIX, default masukan dan keluaran perintah cat adalah
masukan standar dan keluaran standar. Artinya jika tidak ada
nama file yang dikirim sebagai parameter dari perintah cat,
maka masukan diambil dari keyboard terminal.

$ cat
baris satu
baris satu
baris dua
baris dua
baris tiga
baris tiga
^D
$

Perintah cat diatas menerima masukan dari masukan
standar, yaitu keyboard terminal dan langsung ditampilkan
melalui keluaran standar, yaitu layar terminal.
Agar masukan yang kita ketik dapat disimpan di dalam
file, maka keluaran dari perintah cat harus dialihkan ke
file tertentu.

$ cat > sampah
baris satu
baris dua
baris tiga
^D
$ cat sampah
baris satu
baris dua
baris tiga
$


Dengan menggunakan karakter pengalihan '>>', kita dapat
menambahkan isi suatu file ke file lainnya.

$ cat berkas1
berkas1 baris 1
berkas1 baris 2
$ cat berkas2
berkas2 baris 3
berkas2 baris 4
berkas2 baris 5
$ cat berkas2 >> berkas1
$ cat berkas1
berkas1 baris 1
berkas1 baris 2
berkas2 baris 3
berkas2 baris 4
berkas2 baris 5
$

Jumlah file yang akan ditambahkan ke dalam suatu file
dapat lebih dari satu dan akan disusun berurutan.

$ cat berkas1
berkas1 baris 1
berkas1 baris 2
$ cat berkas2
berkas2 baris 3
berkas2 baris 4
berkas2 baris 5
$ cat berkas3
berkas3 baris 6
berkas3 baris 7
berkas3 baris 8
$ cat berkas2 berkas3 >> berkas1
$ cat berkas1
berkas1 baris 1
berkas1 baris 2
berkas2 baris 3
berkas2 baris 4
berkas2 baris 5
berkas3 baris 6
berkas3 baris 7
berkas3 baris 8
$

Penyusunan file yang dilarang pada perintah cat adalah
sebagai berikut:

cat file1 file2 > file2

karena proses yang terjadi tidak akan berjalan dengan
baik dan sulit diprediksi hasilnya. Untuk mengerjakan proses
di atas terpaksa harus digunakan file sementara.


$ cat file1 file2 > temp
$ mv temp file2
$

4.1.3 Pengalihan Masukan

Jika keluaran dari sebuah perintah dapat dialihkan,
maka masukan dari sebuah perintah pun dapat dialihkan,
misalnya mengalihkan masukan dari keyboard terminal menjadi
masukan dari file. Untuk mengalihkan masukan ke dalam sebuah
perintah dapat digunakan karakter '<' diikuti dengan nama
file masukan. Perhatikan ilustrasi berikut ini:


............
. . |\
. --------+ \
. keluaran 1 > LAYAR TERMINAL
. --------+ /
< . . |/
. |\ .
--------+ \ .
FILE masukan 0 > .
--------+ / .
. |/ .
. . |\
. --------+ \
. kesalahan 2> LAYAR TERMINAL
. --------+ /
. . |/
............

Gambar 4.3 Proses pengalihan masukan


Sebagai contoh, untuk menghitung jumlah baris di dalam
file peserta digunakan perintah wc -l sebagai berikut:

$ wc -l peserta
6 peserta
$

Atau kita juga dapat menghitung jumlah baris file
dengan mengalihkan masukan dari perintah wc.

$ wc -l < peserta
6
$

Perhatikan bahwa ada perbedaan keluaran yang dihasilkan
dari dua bentuk pemanggilan perintah wc di atas. Pada
perintah wc pertama nama file disertakan pada keluaran,
sedangkan pada perintah wc kedua nama file tidak disertakan
pada keluaran. Perbedaan ini disebabkan karena pada perintah
wc pertama, wc mengenal nama file yang dibaca. Pada perintah
wc kedua, wc hanya mengenal bahwa ia mengambil data dari
masukan standar dimana masukan standar menerima pengalihan
dari file.
Beberapa perintah UNIX tidak memiliki parameter yang
berupa nama file yang berisi data yang akan diolah. Masukan
hanya diterima melalui masukan standar atau melalui
pengalihan masukan. Sebagai contoh, perintah untuk melakukan
translasi karakter, yaitu perintah tr.

$ tr '[a-z]' '[A-Z]' (masukan standar)
chaerinda
CHAERINDA
denny yerianto
DENNY YERIANTO
^D
$ cat peserta
arif budiman
bagus pribadi
denny yerianto
fanny angela
ferry sihombing
irmawati
$ tr '[a-z]' '[A-Z]' < peserta (hanya via pengalihan)
ARIF BUDIMAN
BAGUS PRIBADI
DENNY YERIANTO
FANNY ANGELA
FERRY SIHOMBING
IRMAWATI
$

4.1.4 Pengalihan Masukan dan Keluaran

Sering terjadi bahwa kita tidak sekedar mengalihkan
masukan saja atau mengalihkan keluaran saja. Namun
mengalihkan masukan dan keluaran bersama-sama. Untuk
jelasnya marilah kita lihat kasus berikut ini.

$ cat peserta
arif budiman
bagus pribadi
denny yerianto
fanny angela
ferry sihombing
irmawati
$ tr '[a-z]' '[A-Z]' < peserta (hanya via pengalihan)
ARIF BUDIMAN
BAGUS PRIBADI
DENNY YERIANTO
FANNY ANGELA
FERRY SIHOMBING
IRMAWATI
$


$ cat peserta
arif budiman
bagus pribadi
denny yerianto
fanny angela
ferry sihombing
irmawati
$

Hasil perintah tr tidak tersimpan di dalam file peserta
dan file aslinya tidak berubah sama sekali. Untuk
mendapatkan hasil dari perintah tr maka kita harus melakukan
pengalihan masukan dan keluar bersama-sama.

$ tr '[a-z]' '[A-Z]' < peserta > uppercase
$ cat uppercase
ARIF BUDIMAN
BAGUS PRIBADI
DENNY YERIANTO
FANNY ANGELA
FERRY SIHOMBING
IRMAWATI
$

Jika diinginkan file aslinya berubah, kita perlu
melakukan:

$ mv uppercase peserta
$ cat peserta
ARIF BUDIMAN
BAGUS PRIBADI
DENNY YERIANTO
FANNY ANGELA
FERRY SIHOMBING
IRMAWATI
$


4.1.5 Pengalihan Keluaran Kesalahan Standar

Ada beberapa keluaran program yang ditampilkan di layar
terminal tetapi tidak dapat dialih dengan menggunakan cara-
cara di atas. Keluaran tersebut adalah keluaran kesalahan
standar.

$ cat peserta takada > gabung
cat: cannot open takada (file takada tidak ada)
$ cat gabung
ARIF BUDIMAN
BAGUS PRIBADI
DENNY YERIANTO
FANNY ANGELA
FERRY SIHOMBING
IRMAWATI
$

Perhatikan bahwa pesan kesalahan cat: cannot open
takada tidak terekam di dalam file gabung. Permasalahannya
kini adalah bagaimana agar pesan kesalahan tersebut terekam
di dalam file gabung dan tidak ditampilkan di layar
terminal. Untuk keperluan tersebut, maka kita perlu
mengalihkan keluaran kesalahan standar. Perhatikan contoh
ilustrasi pengalihan sebagai berikut:


............
. . |\
. -------------+ \
. keluaran 1 > FILE
. -------------+ /
. . ^ |/
. |\ . / \
--------+ \ . /_2_\
KEYBOARD masukan 0 > . | |
--------+ / . | |
. |/ . | |
. . | |
. ---------+ |
. kesalahan |
. -----------+
. . 2&1
............

Gambar 4.4 Proses pengalihan keluaran kesalahan standar


Pada proses pengalihan keluaran kesalahan standar harus
memperhatikan deskriptor file. Perhatikan tabel berikut ini.


------------------------------------------------------
Nomor Deskriptor file Fungsi
------------------------------------------------------
0 Masukan standar
1 Keluaran standar
2 Keluaran kesalahan standar
------------------------------------------------------

Tabel 4.1. Deskriptor file


Untuk mengalihkan keluaran kesalahan standar ke dalam
sebuah file digunakan deskriptor file 2 dengan notasi
sebagai berikut

2> namafile

Perhatikan bahwa konstruksi penulisan tidak mengijinkan
penggunaan spasi diantara angka 2 dan karakter '>'.
Berikut ini contoh dimana pesan kesalahan dialihkan ke dalam
sebuah file.

$ cat peserta takada 2> salah
ARIF BUDIMAN
BAGUS PRIBADI
DENNY YERIANTO
FANNY ANGELA
FERRY SIHOMBING
IRMAWATI
$ cat salah
cat: cannot open takada (file takada tidak ada)
$

Untuk menggabungkan keluaran standar atau keluaran
kesalahan ke file yang mengikuti digunakan notasi berikut:

perintah >&

Berikut ini contoh untuk menggabungkan keluaran
kesalahan standar (2) ke keluaran standar (1).

$ cat peserta takada > output 2>&1
$ cat salah
ARIF BUDIMAN
BAGUS PRIBADI
DENNY YERIANTO
FANNY ANGELA
FERRY SIHOMBING
IRMAWATI
cat: cannot open takada (kesalahan tergabung)
$


4.2 PEMIPAAN

Pada contoh-contoh diatas bila kita ingin menggunakan
keluaran dari suatu program menjadi masukan dari program
lain, maka kita harus menggunakan file sementara, untuk
aliran data. Berkas sementara tersebut akan dihapus jika
telah selesai digunakan.

$ who > pemakai
$ wc -l < pemakai
5
$

Cara lain yang lebih efisien adalah dengan menggunakan
fasilitas pemipaan dari UNIX. Pemipaan merupakan mekanisme
untuk menggabungkan keluaran dari suatu program menjadi
masukan dari program lain. Untuk melakukan pemipaan
digunakan karakter pipa '|' yang akan menginstruksikan
shell untuk membangun hubungan keluaran masukan antara dua
program. Hal ini dapat diilustrasikan sebagai berikut:


............
. . |\
. --------+ \
. keluaran 1 > LAYAR
| . --------+ / TERMINAL
............ . . |/
. . |\ . |\ .
. --------+ \---------+ \ .
. keluaran 1 >masukan 0 > .
. --------+ /---------+ / .
KEY . . |/ . |/ .
BOARD. |\ . . . |\
--------+ \ . . --------+ \
masukan 0 > . . kesalahan 2> LAYAR
--------+ / . . --------+ / TERMINAL
. |/ . . . |/
. . . . |\
. -----------------. .-+ \
. kesalahan . . 2 > LAYAR
. -----------------. .-+ / TERMINAL
. . . . |/
............ ............

Gambar 4.5 Proses pemipaan


Contoh di atas dapat diubah dengan menggunakan pipa
sebagai berikut:

$ who | wc -l
5
$

Program yang membaca masukan dari masukan standar dapat
di alihkan masukannya dari program lain dengan menggunakan
pipa. Konvensi ini berlaku untuk hampir semua program
standar dalam sistem UNIX.
Pemipaan dapat dilakukan secara berurutan untuk lebih
dari dua program. Program akan berjalan sesuai urutan dalam
pipa.

$ who | sort | wc -l
5
$

Sistem UNIX hanya memproses pemipaan bagi keluaran
standar dari suatu program dan tidak memproses pemipaan bagi
keluaran kesalahan standar sehingga kesalahan suatu program
pada saat melakukan pemipaan tetap ditampilkan.

$ ls file1 file2 file3 file4 | wc -l > test
file2 not found
$ cat test
3
$

Dengan sedikit trik kita dapat mengatasi hal ini, yaitu
dengan pengalihan kesalahan standar ke keluaran standar
sebagai berikut:

$ ls file1 file2 file3 file4 2>&1 | wc -l > test
$ cat test
file2 not found
3
$

Sistem UNIX juga menyediakan fasilitas untuk
mencabangkan keluaran dari hasil eksekusi program, yaitu
dengan menggunakan perintah tee. Hal ini dapat
diilustrasikan sebagai berikut:


FILE
^
/ \
............ /_1_\
. . | | |\
. --------+ +--+ \
. keluaran 1 > LAYAR TERMINAL
. -------------+ /
. . |/
. |\ .
--------+ \ .
KEYBOARD masukan 0 > .
--------+ / .
. |/ .
. . |\
. --------+ \
. kesalahan 2> LAYAR TERMINAL
. --------+ /
. . |/
............


Gambar 4.6 Proses tee


Perhatikan contoh berikut ini:

$ who | tee pemakai | wc -l
5
$ cat pemakai
heru tty05 Oct 23 07:30
root tty01 Oct 23 07:28
denny tty02 Oct 23 07:28
ucrit tty03 Oct 23 07:29
chaerind tty04 Oct 23 07:30
$

Dengan perintah tee, hasil keluaran dari perintah who
yang diterima melalui pipa, dicabang dua (T) ke layar
terminal dan file.


4.3 PROSES LATAR DEPAN DAN LATAR BELAKANG

UNIX merupakan sebuah sistem multitasking dan
multiuser. Multitasking berarti lebih dari satu program yang
dapat berjalan pada waktu yang bersamaan. Sedangkan
multiuser berarti bahwa lebih dari satu pemakai yang dapat
login dan menjalankan program pada waktu yang bersamaan.
Terdapat sekurangnya satu proses atau program yang berjalan
pada sistem UNIX untuk setiap pemakai yang login.
Konsep pemikiran yang mendasari pemikiran multitasking
dan multiuser adalah dikarenakan komputer sangat cepat
sehingga dapat menjalankan sebuah proses untuk sesaat,
beralih ke proses lain dan menjalankan untuk sesaat serta
kemudian beralih kembali ke proses semula. Dengan demikian
seolah-olah keduanya berjalan pada waktu yang bersamaan.
UNIX menentukan program yang berjalan dan mengatur peralihan
bolak-balik antar mereka.
Setiap proses yang dijalankan oleh UNIX memiliki
sebuah prioritas tertentu. Jika terdapat beberapa proses
yang siap untuk dijalankan, maka UNIX akan menjalankan
proses yang memiliki prioritas tertinggi.
Ada dua jenis proses yang terjadi di dalam sistem UNIX,
yaitu proses yang berhubungan langsung dengan terminal
pemakai disebut proses latar depan (foreground processes)
dan proses yang berjalan yang tidak berhubungan dengan
terminal pemakai disebut proses latar belakang (background
processes).
Kita dapat mendefinisikan sebuah proses atau program
sebagai proses latar belakang dengan meletakkan karakter '&'
pada akhir perintah. Dengan demikian kita dapat menjalankan
program lain tanpa harus menunggu program atau proses latar
belakang selesai.

$ ls -l /etc | sort > isi &
115 (nomor id proses)
$ date (proses pertama belum selesai)
Fri Oct 23 07:28:32 PDT 1992
$

Proses latar belakang dijalankan bila proses yang
berhubungan dengan terminal sedang menunggu. Pada umumnya
program yang berjalan dengan waktu cukup lama akan
dilaksanakan dengan prioritas rendah di latar belakang.
Untuk melihat status proses yang dijalankan oleh sistem
kita gunakan perintah ps sebagai berikut:

$ ps
PID TTY TIME CMD
35 01 0:02 sh
77 01 0:00 ps
$
Status proses secara lengkap dapat dilihat dengan
menggunakan pilihan -l pada perintah ps sebagai berikut:

$ ps -l
F S UID PID PPID CPU PRI NICE ADDR SZ WCHAN TTY TIME CMD
1 S 101 89 1 3 30 20 5512 12 50602 02 0:02 sh
1 R 101 183 89 52 53 20 6021 22 02 0:02 ps l
$

Penjelasan kode status perintah ps -l:
F proses flag
01 core
02 proses pertukaran dari sistem
04 proses terkunci dalam RAM
10 proses sedang ditukar
20 proses sedang dicari
S keaadan proses
O Non eksisten
S tidur
W menunggu
R berjalan
I intermediate
Z diakhiri
UID id pemakai dari pemilik proses
PID id proses
PPID PID dari proses ayah
C penggunaan prosesor untuk penjadwalan
PRI prioritas proses (0 s/d 120)
NI digunakan dalam komputasi prioritas
ADDR Alamat memori dari proses bila dalam memori
Alamat disket dari proses bila tidak di dalam
memori
SZ ukuran image proses memori dalam 512 byte blok
WCHAN kejadian dengan proses sedang tidur atau menunggu
TTY terminal yang mengendalikan proses
TIME waktu kumulatif pengerjaan
CMD Perintah dan argumennya


4.4 MENGHENTIKAN PROSES DENGAN PERINTAH kill

Untuk menghentikan sebuah proses yang dijalankan di
latar belakang dapat digunakan perintah kill. Untuk
melakukan penghentian proses tersebut kita perlu mengetahui
nomor id proses atau PID dari proses yang bersangkutan.

kill PID

Nomor id proses dapat dilihat dari keluaran balik
dari sistem ketika perintah dilaksanakan dengan proses latar
belakang.

$ troff doc &
56 (nomor id proses)
$
atau dapat dilihat dengan menggunakan perintah ps.

$ troff doc &
56 (nomor id proses)
$ ps
PID TTY TIME CMD
35 01 0:05 sh
56 01 0:02 troff doc (proses troff !)
77 01 0:01 ps
$

Perhatikan contoh untuk menghentikan proses berikut
ini:

$ troff doc &
56 (nomor id proses)
$ ps
PID TTY TIME CMD
35 01 0:05 sh
56 01 0:02 troff doc (hapus !)
77 01 0:01 ps
$ kill 56
$ ps
PID TTY TIME CMD
35 01 0:09 sh
99 01 0:01 ps
$

Perintah kill bekerja dengan mengirimkan sebuah sinyal
pada proses. Perintah kill dapat mengirim bermacam-macam
sinyal sesuai dengan kebutuhannya. Proses yang bekerja hanya
berhenti jika sinyal yang dikirim sesuai. Nilai default
dari sinyal untuk perintah kill adalah 15, yaitu sinyal
terminasi.
Beberapa proses dapat dihentikan dengan menggunakan
sinyal 15 namun proses tersebut masih tetap berjalan dan
tidak mengakhirinya. Bila hal ini terjadi, gunakanlah sinyal
9 untuk mengakhiri proses tersebut.

$ kill -9 115
$


4.5 MENJADUALKAN PROSES DENGAN PERINTAH at

Terkadang kita menginginkan suatu proses dilakukan pada
waktu yang kita jadualkan. Untuk maksud tersebut dapat kita
gunakan perintah at yang diikuti dengan jadual waktu
pelaksanaan perintah dan perintah-perintah yang
dijadualkan. Selanjutnya sistem akan memberikan respon
dengan menampilkan nomor id penjadualan dan waktu
pelaksanaan proses. Nomor id penjadualan ini berfungsi untuk
membatalkan proses yang telah dijadualkan.


$ at 1200
echo waktunya makan siang !
^D
726428280.a Thu Jan 7 12:00:00 1993
$

Perintah ini akan mengeksekusi perintah echo pada pukul
12.00. Keluaran dari perintah echo tersebut akan dikirim
secara otomatis kepada kita melalui electronic mail.
(Penggunaan electronic mail akan dijelaskan pada bab
selanjutnya).
Jika perintah yang dieksekusi tidak menghasilkan
keluaran atau jika keluaran dari perintah yang dieksekusi di
arahkan ke file, maka tidak ada pesan yang kita terima dari
electronic mail, kecuali jika perintah yang dieksekusi
mengalami kesalahan.

$ at 1600
ls -al > listfile
^D
726428280.a Thu Jan 7 16:00:00 1993
$

Kita juga dapat menjadualkan beberapa perintah
sekaligus sebagai berikut:

$ at 1600
ls -al /tmp/*
rm /tmp/*
ls -al /usr/tmp/*
rm /usr/tmp/*
^D
726428280.a Thu Jan 7 16:00:00 1993
$

Format jadual waktu yang digunakan perintah at
bermacam-macam. Kita dapat menggunakan format waktu 24 jam,
misalnya:

- pukul 8.30 pagi dinyatakan 0830
- pukul 1.45 siang dinyatakan 1345
- pukul 8 malam dinyatakan 20

Atau kita juga dapat menggunakan tanda am dan pm pada
jadual waktu sebagai berikut:

- pukul 8.30 pagi dinyatakan 8:30am
- pukul 1.45 siang dinyatakan 1:45pm
- pukul 8 malam dinyatakan 8pm

Pukul 12 siang dan malam dibedakan dengan noon dan
midnight sebagai berikut:

- pukul 12.00 siang dinyatakan 12noon
- pukul 12.00 malam dinyatakan 12midnight

Kita dapat juga menjadualkan berdasarkan menit
(minutes), jam (hours), hari (days), minggu (weeks), bulan
(months) dan tahun (years).

- at 4am Fri + 1 week
- at now + 1 year
- at now + 1 hour
- at 4 jun 20
- at 12midnight jul 4, 1993
- at 7:30pm today

Untuk melihat daftar proses yang telah dijadualkan dan
belum dilaksanakan, dapat digunakan perintah at dengan
pilihan -l sebagai berikut:

$ at -l
726428280.a Thu Jan 7 09:38:00 1993
726428281.a Mon Jan 11 09:38:01 1993
726428292.a Fri Jan 8 10:00:04 1993
726428302.a Thu Jan 7 10:08:12 1993
726428309.a Thu Jan 7 10:17:07 1993
$

Sayangnya yang ditampilkan hanyalah nomor id
penjadualan dan waktu pelaksanaannya saja. Kita tidak dapat
mengetahui proses apa yang akan dilaksanakan.
Untuk membatalkan proses yang telah kita jadualkan
dapat digunakan perintah at dengan pilihan -r.

$ at -l (lihat ..)
726428280.a Thu Jan 7 09:38:00 1993
726428281.a Mon Jan 11 09:38:01 1993
726428292.a Fri Jan 8 10:00:04 1993
726428302.a Thu Jan 7 10:08:12 1993
726428309.a Thu Jan 7 10:17:07 1993
$ at -r 726428292.a 726428302.a (batalkan ..)
$ at -l (lihat ..)
726428280.a Thu Jan 7 09:38:00 1993
726428281.a Mon Jan 11 09:38:01 1993
726428309.a Thu Jan 7 10:17:07 1993
$

Pengertian File dan Direktori pada Unix

3.1 PENGERTIAN FILE DAN DIREKTORI

Sistem file pada sistem UNIX dapat dikelompokkan
menjadi 3 jenis yaitu:

a. File biasa
adalah file yang umumnya kita gunakan untuk
menyimpan data, seperti program atau dokumentasi.

b. File khusus
tidak seperti halnya kebanyakan sistem operasi
lainnya, misalnya DOS, UNIX memperlakukan semua
piranti atau peralatan yang terhubung ke dalamnya
sebagai file. Piranti-piranti tersebut oleh UNIX
dikelompokkan menjadi dua, yaitu:

o piranti blok
piranti blok akan menyalurkan datat dalam blok
512 byte, misalnya disk.

o piranti karakter
piranti karakter menyalurkan data satu karakter
setiap saat, misalnya terminal.

Piranti-piranti ini semua biasanya diletakkan di
dalam sebuah direktori khusus, yaitu direktori /dev.

c. Direktori
adalah file yang berisi kumpulan file. Kumpulan file
dapat berupa file biasa atau file khusus, bahkan
dapat pula berisi direktori sehingga memungkinkan
direktori berisi direktori. Sebagai hasilnya, UNIX
memiliki sistem direktori yang berbentuk sebuah
pohon atau tree.
/
|
..+----+----+----...----+----...
| | | |
bin dev etc ... usr
|
..+----------+----+----+----...
| | |
bin mhs staf
... | |
... +----+----+ +----+---- ...
| | | | |
denny ... ... heru dono
. . .
. . .
. . .

Gambar 3.1 Sistem direktori pohon


Penamaan direktori ditandai dengan sebuah '/'.
Direktori utama untuk seluruh sistem disebut
direktori root atau direktori akar dan ditulis
sebagai '/'. Direktori root memiliki direktori lain
sebagai anggota. Beberapa diantaranya adalah
direktori bin, direktori dev, direktori etc, dan
direktori usr. Karena mereka merupakan anggota
direktori root, namanya ditulis sebagai /bin , /dev,
/etc dan /usr.
Direktori /usr dapat memiliki direktori lain,
misalnya direktori staf dan mhs. Nama direktori
dituliskan /usr/staf dan /usr/mhs. Nama jalur dari
root hingga ke direktori tertentu disebut complete
path name atau nama lengkap jalur. Perhatikan bahwa
direktori /usr/bin dan /bin berbeda. Mereka mungkin
memiliki nama akhir yang sama tetapi nama jalur
lengkapnya berbeda.

Panjang nama file dan direktori dapat lebih dari empat
belas karakter, yang terdiri karakter apa saja. Namun
demikian, beberapa karakter telah memiliki arti khusus bagi
shell, sehingga penggunaan karakter tersebut pada nama file
dan direktori sebaiknya dihindari (perhatikan tabel karakter
khusus pada bab sebelumnya). Berikut ini contoh-contoh dari
nama file yang benar:

- coba
- COBA
- 1992
- prog1.c
- prog2.c
- mhs_S1
- old-prog
- old_prog

Berikut ini adalah contoh nama-nama file yang sebaiknya
dihindari.

- >cobaaku
- coba|aku
- sia?a
- [repot]
- pau - $prosilkom
- sampah**

Pemilihan nama file yang baik adalah dengan membatasi
hanya menggunakan huruf besar dan kecil, bilangan, karakter
garis bawah dan titik. Titik sebaiknya hanya digunakan di
tengah nama file. Penggunaan titik pada awal nama file
menyebabkan file tersebut dinyatakan tersembunyi (hidden).
Perlu diingat bahwa UNIX akan membedakan antara nama
file dengan huruf kecil dan huruf besar. Berikut ini adalah
contoh nama-nama file yang berbeda.

- PESAN vs pesan
- Pesan_pesan vs pesan_Pesan
- PESAN vs PeSAN
- program.c vs program.C
- 12345 vs 012345

Coba bandingkan penamaan dengan sistem operasi lain,
misalnya DOS.
Untuk pengaturan akses bagi file dan direktori, setiap
file dan direktori sistem UNIX memiliki tiga jenis pemakai
yaitu:

o Pemilik (owner)
Pemilik adalah pemakai yang memiliki file tersebut,
biasanya orang yang pertama kali menciptakan file
tersebut. Untuk mengubah kepemilikan file tersebut ke
pemakai lainnya, dapat digunakan perintah chown.

o Group (group)
Beberapa pemakai dapat di kelompokkan ke dalam sebuah
group. File atau direktori yang mempunyai kepemilikan
ini mengakibatkan hanya pemakai anggota group yang
dapat mengakses.

o Orang lain (others)
Seluruh pemakai sistem adalah termasuk jenis ini.
File atau direktori yang mempunyai kepemilikan ini
mengakibatkan semua orang dapat mengaksesnya.

Masing-masing dapat memiliki mode perijinan berupa ijin
baca (r), ijin tulis (w) dan ijin eksekusi (x) atau
kombinasi ketiganya. Pembahasan yang lebih mendalam akan
diuraikan pada sub bab yang membahas mengenai proteksi file.


3.2 MENCETAK DIREKTORI YANG SEDANG BEKERJA DENGAN pwd

Ketika kita masuk ke dalam sistem UNIX, maka
kita langsung berada di dalam direktori. Direktori ini
disebut home directory. Setiap kita masuk ke dalam sistem,
kita akan menemukan lokasi kita selalu pada direktori
tersebut. Untuk melihat nama direktori yang sedang kita
gunakan, dapat digunakan perintah pwd. Perhatikan contoh
berikut ini.

$ pwd
/usr/mhs/denny (direktory yang sedang kita pakai)
$

Nama direktori yang ditampilkan oleh perintah pwd
adalah nama jalur lengkap bagi direktori kita. Nama jalur
lengkap yang diberikan oleh pwd menunjukkan direktori lain
yang berhubungan dengan direktori kita.
Perhatikan contoh sebelumnya, /usr/mhs/denny. Pada
contoh tersebut terdapat tiga buah direktori, yaitu:

- usr
- mhs
- denny

Secara implisit sesungguhnya ada empat direktori,
dimana direktori yang belum disebut adalah direktori akar
(root) sistem file. Ingat, direktori akar dinyatakan dengan
'/'. Jadi secara lengkap kita dapat katakan bahwa direktori
yang ada pada /usr/mhs/denny adalah:

- / (akar atau 'root')
- usr
- mhs
- denny


3.3 MELIHAT ISI DIREKTORI DENGAN ls

Perintah ls akan meminta sistem untuk menampilkan isi
dari sebuah direktori. Jika nama direktori tidak disebutkan
pada perintah ls, maka sistem akan menampilkan isi dari
direktori yang sedang digunakan.

$ ls (tampilkan isi direktori yang sedang digunakan)
$

Perintah ls tidak menampilkan apa-apa, hal ini berarti
tidak ada file di dalam direktori tersebut. Tapi perhatikan
jika kita gunakan pilihan -a dan -l. Pilihan -a untuk
menampilkan semua file pada direktori, termasuk file-file
yang tersembunyi (hidden). Pilihan -l untuk menampilkan
bentuk panjang, tanpa pilihan ini maka hanya nama file dan
dan direktori saja yang ditampilkan.

$ ls -al
total 47
drwxr-xr-x 2 denny mhs 32 May 21 05:41 .
drwxrwxr-x 12 mhs mhs 240 Jan 4 12:42 ..
$

Kini perintah ls menampilkan dua buah direktori. Huruf
'd' pada kolom pertama menunjukkan direktori. Kolom ke tiga
menunjukkan pemilik dari file tersebut. Sedangkan nama file
itu sendiri dinyatakan pada kolom terakhir, bernama '.' dan
'..'.
Karakter titik '.' ada pada setiap direktori. Karakter
titik '.' menyatakan direktori yang sedang digunakan
sekarang atau current directory. Sedangkan karakter '..'
menyatakan direktori ayah atau parent directory, atau dapat
dikatakan sebagai satu direktori di atas direktori yang
sedang digunakan sekarang. Untuk jelasnya, dapat dilihat
pada gambar berikut:


/
|
+---------------------- ...
|
usr
|
+----+---- ...
|
mhs (mhs adalah '..' dari /usr/mhs/denny)
|
+----+---- ...
|
denny (denny adalah '.' dari /usr/mhs/denny)

Gambar 3.2 Penjelasan '.' dan '..'


Berikut ini akan ditampilkan pemanggilan perintah ls
diikuti direktori.

$ ls / (lihat isi direktori root)
bin
coba
dev
etc
home
lib
lost+found
tmp
usr
$

Mungkin hasil yang ditampilkan pada terminal Anda
berbeda dengan hasil pada gambar di atas. Pertama, isi
direktori berbeda. Namun demikian, file-file seperti bin,
dev, etc dan usr pasti tercantum.
Kedua, isi direktori ditampilkan tidak satu file per
barisnya tetapi beberapa file per baris. Versi standar UNIX
untuk perintah ls adalah satu file perbaris, namun demikian
disediakan pula pilihan untuk membuat tidak satu file per
baris, yaitu dengan pilihan -x atau -C. Pilihan -x akan
menampilkan isi direktori dengan beberapa nama file per
baris. Nama tersebut diurut secara abjad ke samping.

$ ls -x /
bin coba dev etc home lib lost+found
tmp usr
$

Pilihan -C juga menampilkan isi direktori dengan
beberapa nama file per baris, tetapi nama tersebut diurut
per kolom ke bawah.

$ ls -C /
bin dev home lost+found usr
coba etc lib tmp
$

Namun cara di atas tidak dapat menunjukkan kepada kita
mengenai jenis filenya, file biasa atau direktori. Untuk
melihat informasi tersebut dapat kita gunakan pilihan -l.

$ ls -l /
total 10
drwxr-xr-x 2 bin bin 1216 Nov 25 10:42 bin
-rwx------ 1 root root 290 May 16 10:11 coba
drwxr-xr-x 2 root root 960 Nov 25 10:41 dev
drwxr-xr-x 2 root root 512 Dec 22 21:22 etc
drwxr-xr-x 2 root root 160 Nov 12 07:07 home
drwxr-xr-x 2 root root 32 Apr 10 19:41 lib
drwxr-xr-x 2 root root 32 Apr 10 19:21 lost+found
drwxr-xr-x 2 root root 734 Feb 14 11:09 tmp
drwxr-xr-x 19 bin bin 368 Nov 25 12:13 usr
$

Huruf 'd' pada awal baris menyatakan bahwa file
tersebut berjenis direktori. Jika diawali oleh karakter '-'
maka file tersebut adalah file biasa atau file khusus.
Cara lain untuk melihat apakah nama file yang
ditampilkan direktori atau bukan adalah dengan menggunakan
pilihan -p. Pilihan -p akan menampilkan nama-nama file
dimana file berjenis direktori akan diberi karakter garis
miring sesudah namanya. Tapi awas, karakter garis miring
tersebut bukan bagian dari namanya, hanya penunjuk saja.

$ ls -p /
bin/
coba
dev/
etc/
home/
lib/
lost+found/
tmp/
usr/
$

Cara yang hampir sama dengan pilihan -p adalah
menggunakan pilihan -F. Bedanya, pilihan ini disamping
memberi karakter garis miring pada direktori, akan memberi
bintang * pada file-file yang dapat dieksekusi.

$ ls -F
dir1/ (direktori)
dir2/ (direktori)
eks1* (dapat dieksekusi)
eks2* (dapat dieksekusi)
$

Jika diinginkan, kita dapat juga menampilkan file-file
tertentu saja.

$ ls -l /bin/ar
-r-xr-xr-x 1 bin bin 21428 Sep 24 1983 /bin/ar
$ ls -l /bin/ar /etc/passwd
-r-xr-xr-x 1 bin bin 21428 Sep 24 1983 /bin/ar
-rwx------ 1 root root 2123 Dec 24 1989 /etc/passwd
$

Namun jika yang diinginkan adalah menampilkan direktori
tertentu saja, maka cara di atas tidak dapat dilakukan.
Misalnya kita ingin melihat apakah di dalam direktori
tertentu ada direktori denny (/usr/mhs/denny)

$ pwd
/usr/mhs
$ ls -l denny (lihat /usr/mhs/denny ?)
drwxr-xr-x 2 denny mhs 32 May 21 05:41 .
drwxrwxr-x 12 mhs mhs 240 Jan 4 12:42 ..
$

Ternyata yang ditampilkan adalah isi dari direktori
yang /usr/mhs/denny dan bukan hanya menampilkan nama
direktori yang kita minta (perhatikan operasi yang sama
terhadap file). Untuk keperluan tersebut maka digunakan
pilihan -d sebagai berikut:

$ pwd
/usr/mhs
$ ls -ld denny
drwxrwxr-x 2 mhs mhs 240 Jan 4 12:42 denny
$

Pada beberapa contoh di atas, file-file ditampilkan
dengan disertai informasi lengkap mengenainya. Berikut ini
akan dijelaskan makna informasi yang dikandungnya.


-r-xr-xr-x 1 denny mhs 21428 Sep 24 10:11 /bin/ar

| | | || | | | | | | || |
| | | || | | | | | | || |
+----+---+ +-++---+ +-+ +---+ +----------++------+
| | | | | | |
| | | | | | |
mode file | pemilik | besar file | nama file
| | |
| | |
banyaknya group tanggal
link modifikasi

Gambar 3.3 Informasi dari ls -l /bin/ar


o Mode file atau mode perijinan file
Kolom pertama menjelaskan mengenai mode perijinan
file. Khusus karakter pertama pada mode perijinan
file tersebut adalah menunjukkan jenis filenya.
Karakter pertama '-' menunjukkan bahwa file tersebut
adalah file biasa. Sedangkan karakter 'd' menunjukkan
bahwa file tersebut adalah direktori. Disamping itu
terdapat pula 'c' dan 'b' yang menunjukkan bahwa file
tersebut adalah file khusus, 'c' untuk file khusus
jenis karakter dan 'b' untuk file khusus jenis blok.
Karakter ke dua hingga ke sepuluh adalah mode
perijinan file (dijelaskan kemudian)

o Jumlah link
Jumlah link pada file biasanya adalah satu. Untuk
file biasa, jika jumlah link lebih dari satu, maka
hal ini menunjukkan banyaknya duplikat file di
direktori lain. Untuk direktori, jika jumlah link
lebih dari satu, maka hal ini menunjukkan banyaknya
sub direktori di dalam direktori tersebut.

o Nama pemilik
Nama pemilik menunjukkan nama pemilik file atau
direktori.

o Nama group
Menunjukkan nama group dari pemilik file atau
direktori tersebut. Hanya anggota group yang dapat
mengaksesnya.

o Besar file
Besar file dinyatakan dalam byte. Untuk file teks,
besar file sama dengan banyaknya karakter di dalam
file tersebut.

o Tanggal dan waktu modifikasi
Tanggal dan waktu ini menampilkan tanggal dan waktu
terakhir file tersebut dimodifikasi. Format ini ada
dua jenis, yaitu:

- bulan tanggal jam:menit
- bulan tanggal tahun

Cara pertama otomatis digunakan oleh sistem jika file
tersebut telah dimodifikasi kurang dari satu tahun
yang lalu. Sedangkan cara ke dua digunakan oleh
sistem jika file tersebut telah dimodifikasi setahun
yang lalu atau lebih.

o Nama file
Nama dari file atau direktori yang bersangkutan.


3.4 MENGUBAH DIREKTORI DENGAN cd

Kita telah mengetahui bahwa sistem file pada UNIX
berbentuk pohon, untuk itu sistem menyediakan fasilitas
untuk melakukan pemindahan dari satu direktori ke direktori
lainnya, yaitu dengan perintah cd dengan diikuti nama
direktori yang dituju.

cd namadirektori

Dimana namadirektori adalah nama direktori yang dituju.
Perintah cd adalah kependekan change directory. Perhatikan
contoh berikut ini.

$ pwd
/
$ cd /usr
$ pwd
/usr
$ cd /usr/mhs
$ pwd
/usr/mhs
$ cd denny
/usr/mhs/denny
$

Dengan perintah tersebut kita akan otomatis masuk ke
dalam direktori baru, tentunya direktori baru tersebut harus
memiliki mode perijinan yang membolehkan kita masuk ke
dalamnya.
Jika perintah cd tidak diikuti dengan nama direktori
yang dituju maka arah direktori akan ditujukan ke home
directory.

$ who am i (siapa diri kita)
denny tty02 Oct 23 07:28
$ pwd
/tmp
$ cd
$ pwd
/usr/mhs/denny (kembali ke home directory)
$

Kemudian jika kita ingin ke satu direktori di atas
direktori sekarang (direktori ayah) maka dapat dilakukan
perintah sebagai berikut:

$ pwd
/usr/mhs/denny
$ cd ..
$ pwd
/usr/mhs
$ cd ..
$ pwd
/usr
$

Penggunaan perintah cd cukup luwes, seperti luwesnya
kita dalam menelusuri sebuah pohon. Kita dapat pindah dari
satu direktori ke direktori lain dengan menelusuri
direktori-direktori yang menghubungkan antar direktori
tersebut. Untuk jelasnya, perhatikan diagram berikut ini.


/
|
+----+----+----...----+----...
| | | |
bin dev etc ... usr
|
+----+----+----...
| |
mhs staf
| |
+----+----+ +----+---- ...
| | | | |
denny ... ... heru dono

Gambar 3.4 Menelusuri direktori


Jika saat ini kita berada di dalam direktori
/usr/mhs/denny dan kita ingin masuk ke direktori
/usr/staf/heru, maka jika diijinkan oleh pemilik
/usr/staf/heru kita dapat lakukan dengan cara merunut balik
pohon tersebut mulai dari direktori /usr/mhs/denny hingga ke
direktori dimana direktori tersebut pernah memiliki
direktori ayah yang sama. Pada kasus di atas mereka memiliki
direktori ayah yang sama pada /usr. Dengan demikian kita
harus merunut balik dengan hingga direktori ayah /usr, dan
kemudian dilanjutkan bergerak maju atau pindah ke direktori
/usr/staf/heru. Hal ini dapat dinyatakan dengan perintah
UNIX sebagai berikut:

$ pwd
/usr/mhs/denny
$ cd ..
$ pwd
/usr/mhs
$ cd ..
$ pwd
/usr
$ cd staf
$ pwd
/usr/staf
$ cd heru
$ pwd
/usr/staf/heru
$

atau secara singkat:

$ pwd
/usr/mhs/denny
$ cd ../../staf/heru
$ pwd
/usr/staf/heru
$


3.5 MELIHAT ISI FILE

Banyak cara untuk melihat suatu file. Salah satu cara
untuk melihatnya adalah dengan menggunakan perintah cat
dengan diikuti nama file. Perintah cat hanya digunakan untuk
melihat isi file teks saja. Jika kita perintah cat
digunakan untuk file non teks maka hasil yang ditampilkan
tak dapat dibaca.

$ cat /etc/passwd
root:hxI/hs24w48Qg:0:0:Super user:/:/bin/csh
sysadm::0:0:System Administration:/usr/sysadm:/bin/sh
shut::0:0:Shutdown Otomatis:/usr/shut:/bin/sh
cron:NOLOGIN:1:1:Cron daemon for periodic tasks:/:
bin::3:3:System file administration:/:
uucp::4:4:Uucp :/usr/spool/uucppublic:/usr/lib/uucp/uucico
asg:NOLOGIN:6:6:Assignable device administration:/:
sysinfo:NOLOGIN:10:10:Access to system information:/:
network:NOLOGIN:12:12:Mail and Network :/usr/spool/micnet:
lp:NOLOGIN:14:3:Print spooler administration:/usr/spool/lp:
dos:NOLOGIN:16:10:Access to Dos devices:/:
chaerind:9zws8okDcPVIw:190:1087:geo:/tmp:/bin/sh
denny:Zzw.8ofgcPVIw:3710:1087:denny yerianto:/usr/mhs/denny:/bin/sh
ucrit:dsfinUcnsf2ck:3711:1087:ucrit :/usr/mhs/ucrit:/bin/csh
jecky:Kawhju.ZQ4GOk:3713:51::/usr/jecky:/bin/ksh
heru::3714:51::/usr/heru:/bin/sh
$

Nama file yang mengikuti perintah cat dapat berjumlah
lebih dari satu, dimana hasilnya akan ditampilkan berurutan.

$ cat satu
satu satu
satu dua
$
$ cat dua
dua satu
dua dua
dua tiga
$ cat satu dua
satu satu
satu dua
dua satu
dua dua
dua tiga
$

Jika kita berusaha memanggil nama file namun ternyata
file tersebut tidak ada, maka perintah cat akan menampilkan
pesan kesalahan sebagai berikut:

$ cat tidakada
cat: cannot open tidakada
$

Jika file yang kita buka terlalu besar, misalnya lebih
dari satu layar terminal maka terjadi pelipatan teks, yaitu
teks akan berputar ke atas. Kita dapat menghentikan
sementara tampilan dilayar agar tidak melanjutkan pelipatan
dengan melakukan penekanan kontrol-S, dan untuk
melanjutkannya digunakan penekanan kontrol-Q.
Melihat file teks yang berukuran besar dengan cara di
atas sangat tidak praktis, untuk itu dapat digunakan
perintah more.

$ more filebesar
.
.
.

atau

$ cat filebesar | more
.
.
.

Perintah more akan menampilkan teks halaman per
halaman. Layar akan berhenti setelah teks memenuhi satu
halaman. Bila pemakai mengetikan spasi, more menampilkan
satu halaman layar teks berikutnya. Bila pemakai
mengetikkan carriage return, more akan menggerakkan layar ke
atas satu baris dan menampilkan satu baris lagi pada bawah
layar. Bila pemakai mengetikan sebuah bilangan dan diikuti
spasi, more akan menampilkan baris sebanyak nomor tersebut.
Jika more membaca data untuk ditampilkan dari sebuah
file (bukan menggunakan pipa), more akan menunjukkan
presentasi dari file yang telah dibaca bersama prompt pada
baris bawah layar.
More menampilkan keluaran ke keluaran standard. Bila
sebuah nama file tidak disebutkan, more akan mengambil
masukan dari masukan standar.
Disamping more, cara lain yang dapat digunakan untuk
melihat isi file teks yang besar adalah menggunakan perintah
pg. Perintah ini akan menampilkan isi file ke layar terminal
halaman per halaman.

$ pg filebesar
.
.
.
.

Perintah pg akan menampilkan isi file halaman per
halaman dimana satu halaman biasanya berjumlah 23 baris.
Pada setiap akhir baris dari layar akan ditampilkan
tanda : sebagai prompt. Tekan enter atau spasi jika ingin
menampilkan satu layar penuh berikutnya. Jika kita ingin
mengakhiri melihat isi file tersebut padahal belum semua
isinya ditampilkan, maka ketiklah huruf 'q' atau 'Q' yang
diikuti enter.
Tidak seperti cat, perintah pg memiliki sejumlah pilihan
untuk memperbaiki interaksi dengan pemakai yang lebih baik.
Misalnya:

$ pg -20 filebesar
.
.
.
.

hal ini akan menampilkan 20 baris setiap halamannya
(satu layar penuh). Akibatnya, ketika kita berpindah ke
halaman berikutnya maka tiga baris terakhir dari halaman
sebelumnya menjadi tiga baris awal pada halaman berikutnya,
demikian seterusnya.
Namun perintah dengan pilihan sebelumnya memiliki arti
yang berbeda dengan pilihan berikut ini:

$ pg +20 filebesar
.
.
.
.

Perintah pg di atas akan mengabaikan 19 baris pertama
dan memulainya pada baris ke 20.
Masih banyak pilihan dari perintah pg yang masih belum
diuraikan pada buku ini. Untuk melihat pilihan apa saja yang
dimiliki oleh perintah pg, ketiklah 'h' pada prompt pg yang
berbentuk :

:h

maka akan ditampilkan pilihan yang dapat digunakan
dengan disertai penjelasan singkat.


3.6 MENENTUKAN JENIS FILE DENGAN file

Perintah cat dan pg dapat digunakan dengan baik jika
file yang ingin dilihat adalah file berjenis teks. Dengan
cara yang sudah kita pelajari, sulit untuk menentukan apakah
file tersebut berjenis teks atau non teks.
UNIX menyediakan sebuah fasilitas untuk menentukan
jenis suatu file, yaitu perintah file. Jenis-jenis file yang
dapat ditentukan antara lain ascii teks, direktori, yang
dapat dieksekusi, teks program c. Perhatikan contoh-contoh
berikut ini:

$ file /bin/ls /usr /etc/passwd /usr/include/stdio.h
/bin/ls: pure executable
/usr: directory
/etc/passwd: ascii text
/usr/include/stdio.h: c program text
$

Jika file yang kita periksa ternyata tidak ditemukan,
maka akan ditampilkan pesan kesalahan sebagai berikut:

$ file takada
takada: cannot open
$

Namun jika file yang akan kita periksa ternyata
tidak memberi ijin baca kepada kita, maka akan ditampilkan
pesan kesalahan sebagai berikut:

$ file dilarang
dilarang: cannot open for reading
$


3.7 MENGCOPY FILE DENGAN cp

Cara paling mudah untuk menduplikasi file adalah dengan
menggunakan perintah copy, yaitu cp. Perhatikan contoh
berikut ini.

$ pwd
/usr/mhs/denny
$ cp /etc/motd coba
$
Argumen pertama /etc/motd menunjukkan nama file asli
yang akan dicopy, sedangkan argumen ke dua coba menunjukkan
nama baru dari file hasil copy.
Jika argumen ke dua adalah titik, maka hasil copy
diletakkan pada direktori yang sedang digunakan dengan
menggunakan nama yang sama dengan aslinya. Perhatikan contoh
berikut:

$ ls
coba
$ cp /etc/motd .
$ ls
coba
motd (nama hasil copy = nama asli)
$

Jika argumen terakhir berupa direktori, maka hasil copy
file tersebut akan dimasukkan ke dalam direktori tersebut
dengan menggunakan nama yang sama dengan aslinya.

$ cp /etc/passwd /usr/mhs/denny (ke direktori)
$ ls /usr/mhs/denny (lihat isinya)
coba
motd
passwd (hasil copy baru)
$

Kita dapat juga melakukan pengcopyan lebih dari satu
file ke dalam satu direktori. Argumen-argumen pada perintah
cp merupakan nama-nama file yang akan dikopi kecuali argumen
terakhir yang menunujkkan nama direktori tujuan.

$ ls
coba
motd
passwd
$ cp coba motd passwd /usr/tmp
$

Jika nama file dari hasil copy sudah ada pada direktori
yang dituju, pada beberapa sistem tidak akan memberitahukan
kepada kita. Akibatnya file lama akan ditimpa, kecuali jika
file lama tersebut tidak memberi ijin tulis kepada kita.
Jika file yang akan kita copy ternyata tidak memberi
ijin baca bagi kita maka proses pengkopian akan digagalkan
dan ditampilkan pesan sebagai berikut:

$ ls -l /tmp
-rwx------ 1 root root 2123 Dec 24 1989 no_baca
$ cp /tmp/no_baca pesan
cp: cannot open /tmp/nobaca
$

Namun jika file yang akan kita copy ternyata tidak ada,
maka akan ditampilkan pesan yang berbeda sebagai berikut:

$ cp /tmp/takada pesan
cp: cannot access /tmp/takada (file tidak ada)
$

Selanjutnya jika kita mencoba untuk mengcopy ke
direktori yang tidak ada atau dilarang menulis maka akan
ditampilkan pesan sebagai berikut:

$ cp /etc/motd /usr/mhs/takada/takbisa
cp: cannot create /usr/mhs/takada/takbisa
$


3.8 MEMINDAHKAN ATAU MENGGANTI NAMA FILE DENGAN mv

Tidak seperti pada perintah cp dimana file aslinya
tidak diubah, perintah mv akan menghapus file aslinya dan
memindahkan ke tempat yang baru. Perhatikan contoh berikut
ini.

$ pwd
/usr/mhs/denny
$ ls
coba
motd
passwd
$ ls /tmp
no_baca
$ mv coba /tmp
$ ls (lihat isi /usr/mhs/denny)
motd ('coba' otomatis dihapus)
passwd
$ ls /tmp
coba ('coba' dipindahkan!)
no_baca
$

Seperti pada perintah cp, perintah mv juga dapat
memindahkan beberapa nama file sekaligus ke direktori
tertentu. Seluruh argumen merupakan nama file yang akan
dipindahkan kecuali argumen terakhir yang merupakan nama
direktori tujuan.

$ mv motd passwd /tmp
$ ls (sudah kosong!)
$ ls /tmp
coba (semua telah dipindah)
motd
no_baca
passwd
$

Jika pada nama file baru sudah ada pada direktori yang
dituju, file lama akan langsung ditimpa. Sehubungan dengan
hal ini, maka perintah ini sering digunakan untuk mengganti
nama file.

$ ls
coba
motd
no_baca
passwd
$
$ mv coba cobacoba
$ ls
cobacoba (coba diganti cobacoba)
motd
no_baca
passwd
$

Namun jika file yang akan kita pindahkan tidak memberi
ijin tulis maka sistem akan melakukan konfirmasi kepada kita
terlebih dahulu.

$ pwd
/tmp
$ ls -l cobacoba
-r--r--r-- 1 denny denny 189 Dec 24 1989 cobacoba
$ mv /usr/tmp/coba cobacoba
cobacoba: mode 444 ?
n (tidak setuju!)
$

Jika tidak setuju atau jawaban 'n' maka proses
pemindahan file akan dibatalkan. Jika setuju atau jawaban
'y' maka proses pemindahan dilaksanakan.


3.9 MENGHAPUS FILE DENGAN rm

Perintah untuk menghapus file adalah perintah rm yang
diikuti nama file yang akan dihapus. Setiap saat, file-file
yang akan dihapus dapat lebih dari satu. Perhatikan contoh
berikut ini.

$ ls
cobacoba
motd
no_baca
passwd
$ rm motd
$ ls
cobacoba
no_baca
passwd
$


Jika file yang akan dihapus tidak memberi ijin tulis
kepada kita, maka sistem akan melakukan konfirmasi kepada
kita terlebih dahulu sebelum dilakukan penghapusan. Jika
disetujui maka proses penghapusan dilaksanakan dan jika
tidak maka proses penghapusan dibatalkan.

$ ls -l cobacoba
-r--r--r-- 1 denny denny 189 Dec 24 1989 cobacoba
$ rm cobacoba
cobacoba: mode 444 ?
n (tidak setuju!)
$
$ ls
cobacoba (masih awet !)
no_baca
passwd
$

Perlu diingat adalah bahwa file yang telah dihapus
tidak dapat dibatalkan atau dikembalikan dengan menggunakan
fasilitas yang ada di dalam UNIX (bandingkan dengan sistem
operasi DOS yang dapat membatalkan penghapusan file). Untuk
itu maka sebaiknya setiap penghapusan selalu melalui proses
konfirmasi terlebih dahulu. Caranya adalah dengan
menggunakan pilihan -i (interactive).

$ ls -l passwd
-rwxrwxrwx 1 denny denny 189 Dec 24 1989 cobacoba
$ rm passwd
passwd: n (tidak setuju)
$ ls passwd
passwd
$ rm passwd
passwd: y (setuju!)
$ ls passwd
$ (terhapus ..)

Kebalikan dari pilihan -i, yaitu dimana akan memaksa
agar proses tidak melakukan konfirmasi adalah dengan
menggunakan pilihan -f. Perintah ini dapat digunakan pada
penghapusan dimana file yang akan dihapus tidak memberi ijin
tulis kepada kita.

$ ls -l cobacoba
-r--r--r-- 1 denny denny 189 Dec 24 1989 cobacoba
$ rm cobacoba
cobacoba: mode 444 ?
n (tidak setuju!)
$ rm -f cobacoba
$ ls cobacoba (cobacoba terhapus)
$

Jika file yang akan kita hapus ternyata tidak ada, maka
sistem akan menampilkan pesan sebagai berikut:

$ rm takada
rm: takada non-existent
$


3.10 MEMBUAT DIREKTORI

Direktori merupakan kumpulan dari file-file dan atau
direktori. Direktori di dalam direktori disebut sub
direktori. Pada akhirnya, sistem direktori UNIX membentuk
pohon. (lihat gambar 3.1)
Direktori membutuhkan sedikit pengaturan atau
pengelolaan agar dapat dimanfaatkan secara optimal, misalnya
kita sebaiknya mengumpulkan file-file sejenis ke dalam
sebuah direktori.
Perintah yang digunakan untuk membuat direktori baru
adalah mkdir yang diikuti nama direktori yang akan dibuat.
Direktori yang dibuat dapat lebih dari satu. Berikut ini
contoh membuat beberapa direktori baru di bawah direktori
/usr/mhs/denny seperti pada gambar 3.5.

/
|
..+----+----+----...----+----...
| | | |
bin dev etc ... usr
|
..+----------+----+----+----...
| | |
bin mhs staf
... | |
... +----+----+ +----+---- ...
| | | | |
denny ... ... heru dono
| . .
+------+------+
| |
doc program
| |
+----+----+ +----+----+
| | | | |
data memo surat c pascal

Gambar 3.5 Membuat direktori baru


$ cd (ke home direktori /usr/mhs/denny)
$ mkdir doc program
$ cd program
$ mkdir c pascal
$ ls -l
total 2
drwxrwxrwx 2 denny mhs 32 Apr 22 10:22 c
drwxrwxrwx 2 denny mhs 32 Apr 22 10:22 pascal
$

Selanjutnya kita akan membuat direktori-direktori baru
dibawah direktori doc sebagai berikut:

$ pwd
/usr/mhs/denny/program
$ cd ../doc
$ mkdir data memo surat
$ ls -l
total 3
drwxrwxrwx 2 denny mhs 32 Apr 22 10:22 data
drwxrwxrwx 2 denny mhs 32 Apr 22 10:22 memo
drwxrwxrwx 2 denny mhs 32 Apr 22 10:22 surat
$ cd (kembali ke home directory)
$

Cara di atas dapat juga dilaksanakan dalam sebuah
perintah baris sebagai berikut:

$ pwd
/usr/mhs/denny
$ mkdir program program/c program/pascal doc doc/data doc/memo \
doc/surat
$ ls -l
total 2
drwxrwxrwx 5 denny mhs 80 Apr 22 10:22 doc
drwxrwxrwx 4 denny mhs 64 Apr 22 10:22 program
$

Dengan bantuan karakter garis miring terbalik
(backslash) sebelum menekan enter (karakter carriage
return) akan mengakibatkan karakter carriage return tak
diterjemahkan oleh shell sehingga kedua baris perintah
tersebut dianggap sebagai satu perintah.
Urutan nama direktori baru yang akan dibuat harus
berurutan yaitu diawali dengan direktori ayah lalu
dilanjutkan dengan direktori anaknya atau sub direktorinya.
Perhatikan apa yang terjadi jika yang dibuat direktori
anaknya terlebih dahulu.

$ mkdir program/pascal program
mkdir: cannot acces program/.
$

Direktori ayahnya harus ada terlebih dahulu sebelum
direktori anaknya dibuat.
Jika direktori telah dibuat, maka sistem akan menolak
pembuatan direktori baru dan menampilkan pesan sebagai
berikut:

$ mkdir /usr/mhs/denny
mkdir: cannot make directory /usr/mhs/denny
$


Sampai disini kita telah membuat beberapa direktori
baru. Untuk melihat isi seluruh direktori yang telah kita
buat adalah sebagai berikut:

$ pwd
/usr/mhs/denny
$ ls -l doc program

doc:
total 3
drwxrwxrwx 2 denny mhs 32 Apr 22 10:22 data
drwxrwxrwx 2 denny mhs 32 Apr 22 10:22 memo
drwxrwxrwx 2 denny mhs 32 Apr 22 10:22 surat

program:
total 2
drwxrwxrwx 2 denny mhs 32 Apr 22 10:22 c
drwxrwxrwx 2 denny mhs 32 Apr 22 10:22 pascal
$

Cara lain yang lebih praktis untuk melihat seluruh isi
direktori yang ada adalah dengan menggunakan perintah ls dan
pilihan -R. Pilihan ini akan menampilkan isi direktori
secara rekursif.

$ pwd
/usr/mhs/denny
$ ls -lR
total 2
drwxrwxrwx 5 denny mhs 80 Apr 22 10:22 doc
drwxrwxrwx 4 denny mhs 64 Apr 22 10:22 program

doc:
total 3
drwxrwxrwx 2 denny mhs 32 Apr 22 10:22 data
drwxrwxrwx 2 denny mhs 32 Apr 22 10:22 memo
drwxrwxrwx 2 denny mhs 32 Apr 22 10:22 surat

program:
total 2
drwxrwxrwx 2 denny mhs 32 Apr 22 10:22 c
drwxrwxrwx 2 denny mhs 32 Apr 22 10:22 pascal

doc/data:
total 0

doc/memo:
total 0

doc/surat:
total 0

program/c:
total 0

program/pascal:
total 0
$


3.11 MENGHAPUS DIREKTORI

Perintah untuk menghapus direktori adalah rmdir dengan
diikuti nama-nama direktori yang akan dihapus. Direktori
yang akan dihapus dapat lebih dari satu. Sebelum direktori
tersebut dihapus, harus dipastikan terlebih dahulu bahwa
sudah tidak ada file atau direktori di dalamnya. Jika di
dalam direktori masih ada file atau direktori maka proses
penghapusan akan dibatalkan dan ditampilkan pesan sebagai
berikut:

$ rmdir program
rmdir: program not empty
$

Penghapusan di atas gagal karena di dalam direktori
program masih terdapat direktori lain, yaitu program/c dan
program/pascal. Untuk itu maka kedua direktori tersebut
harus dihapus terlebih dahulu.

$ rmdir program/c program/pascal program
$

Cara lain yang dapat kita gunakan adalah dengan
menggunakan perintah rm dengan pilihan -r. Pilihan ini akan
menghapus file dan direktori secara rekursif mulai dari
direktori anak yang paling bawah sampai dengan direktori
yang disebutkan.

$ rm -r doc
$ ls (direktori doc & anaknya dihapus)
$

Selanjutnya jika direktori yang dihapus tidak ada maka
sistem UNIX akan menampilkan pesan sebagai berikut:

$ rmdir takada
rmdir: takada non-existent
$


3.12 SUBSTITUSI NAMA FILE

3.12.1 Pencocokan Seluruh Untaian Karakter

Karakter asteriks atau '*' akan cocok dengan untaian
karakter atau string apa saja. Sebelum diterangkan lebih
lanjut, marilah kita lihat direktori yang akan dijadikan


contoh.

$ ls
bab1
bab2
bab3
bab4
$

Seandainya kita akan melihat isi dari file-file
tersebut secara keselurahan, maka kita dapat melakukannya
dengan perintah cat sebagai berikut:

$ cat bab1 bab2 bab3 bab4
.... (ditampilkan file isi bab1 s/d bab4)
$

Selain dengan cara tersebut, kita juga dapat
menuliskannya sebagai berikut:

$ cat *
.... (ditampilkan isi file bab1 s/d bab4)
$

Ke dua cara di atas akan mendapatkan hasil yang sama.
Shell otomatis akan mensubstitusikan nama dari seluruh file
pada current direktory untuk *. Substitusi yang sama dapat
pula dilakukan pada perintah echo:

$ echo *
bab1 bab2 bab3 bab4
$ echo bab*
bab1 bab2 bab3 bab4
$

Disini karakter '*' digantikan dengan nama dari seluruh
file yang ada pada current directory dan perintah echo akan
menampilkannya pada terminal. Namun perhatikan contoh
berikut ini:

$ echo *ab2
bab2
$ echo *b*
bab1 bab2 bab3 bab4
$ echo *x
*x
$

Pada dua contoh di atas memperlihatkan betapa
fleksibelnya karakter '*' dalam mensubtitusi nama file. Pada
contoh terakhir memperlihatkan bahwa karakter '*' dapat pula
diartikan sebagai karakter '*' dan bukan pensubstitusi nama
file. Hal ini dikarenakan file yang ada huruf 'x' nya tidak
ada.

3.12.2 Pencocokan Setiap Karakter Tunggal

Disamping pencocokan global dengan karakter asterisk,
kita dapat pula melakukan pencocokan spesifik satu
karakter, yaitu dengan karakter tanda tanya '?'. Perhatikan
isi direktori yang akan digunakan contoh.

$ ls
a
aa
aax
aku
b
bb
c
cc
report1
report2
report3
$ echo ?
a b c
$ echo a?
aa
$ echo ??
aa bb cc
$ echo ??*
aa aax aku bb cc report1 report2 report3
$

Cara lain adalah menggunakan tanda kurung siku '[]'.
Cara ini akan menyeleksi file berdasarkan apa yang
disyaratkan dalam kurung siku tersebut.

$ ls [a-b]*
a
aa
aax
aku
b
bb
c
cc
$

Maksud perintah di atas adalah menampilkan daftar file
dari current directory dengan syarat huruf awalnya adalah a
sampai dengan c. Contoh lain misalnya anda menginginkan
jangkauan angka seperti:

$ ls
bab1
bab2
bab3
bab4
bab5
$ ls bab[1-2]
bab1
bab2
$

Tanda seru '!' dapat digunakan sebagai penginvert atau
penyebalik arti. misalnya [!a-z] adalah cocokkan dengan
karakter yang bukan a sampai dengan z (huruf kecil). Jadi
bisa saja A s/d Z atau 0 s/d 9.

$ ls
bab1
bab2
bab3
bab4
bab5
$ ls bab[!1-2]
bab3
bab4
bab5
$


3.13 PERIJINAN DAN PROTEKSI

3.13.1 Konsep Perijinan dan Proteksi

Untuk pengaturan akses bagi file dan direktori, setiap
file dan direktori sistem UNIX memiliki tiga jenis pemakai
yaitu:

o Pemilik (owner)
Pemilik adalah pemakai yang memiliki file tersebut,
biasanya orang yang pertama kali menciptakan file
tersebut. Untuk mengubah kepemilikan file tersebut ke
pemakai lainnya, dapat digunakan perintah chown.

o Group (group)
Beberapa pemakai dapat di kelompokkan ke dalam sebuah
group. File atau direktori yang mempunyai kepemilikan
ini mengakibatkan hanya pemakai anggota group yang
dapat mengakses.

o Orang lain (others)
Seluruh pemakai sistem adalah termasuk jenis ini.
File atau direktori yang mempunyai kepemilikan ini
mengakibatkan semua orang dapat mengaksesnya.

Masing-masing dapat memiliki mode perijinan akses
terhadap file atau direktori sebagai berikut:

o Ijin baca (r)
Pemakai yang memiliki ijin baca terhadap sebuah file
dapat melihat isi dari file tersebut.

Pemakai yang memiliki ijin baca terhadap sebuah
direktori dapat melihat isi file apa saja yang berada
di dalam direktori tersebut. Namun untuk melihat isi
file dari direktori dengan informasi detail (ls -l)
harus diperlukan ijin eksekusi bagi pemakai terhadap
direktori tersebut. Namun demikian, untuk melihat
isi file dari file yang terdapat di dalam direktori
tersebut, pemakai harus memiliki ijin baca dari file
yang bersangkutan.


o Ijin tulis (w)
Pemakai yang memiliki ijin tulis terhadap sebuah file
dapat mengubah isi file tersebut

Pemakai yang memiliki ijin tulis terhadap sebuah
direktori dapat mengubah isi direktori, sehingga
pemakai dapat membuat file baru atau menghapus file-
file. Namun demikian untuk mengubah file-file yang
terdapat di dalam direktori tersebut, pemakai harus
memiliki ijin tulis dari file yang bersangkutan.

o Ijin eksekusi (x)
Pemakai yang memiliki ijin eksekusi terhadap sebuah
file dapat mengeksekusi file tersebut.

Pemakai yang memiliki ijin eksekusi terhadap sebuah
direktori dapat mengubah direktori tersebut dan
melakukan pengkopian file-file dari direktori
tersebut.

Dengan kombinasi tiga jenis mode perijinan terhadap
tiga jenis pemakai, kita dapat memiliki sembilan set
perijinan yang dapat memproteksi file atau direktori yang
kita miliki.

- ijin baca bagi pemilik
- ijin tulis bagi pemilik
- ijin eksekusi bagi pemilik
- ijin baca bagi group
- ijin tulis bagi group
- ijin eksekusi bagi group
- ijin baca bagi orang lain
- ijin tulis bagi orang lain
- ijin eksekusi bagi orang lain

Kesembilan mode perijinan tersebut biasanya ditulis
sebagai berikut:

rwxrwxrwx

- tiga huruf pertama menunjukkan ijin bagi pemilik
- tiga huruf kedua menunjukkan ijin bagi group
- tiga huruf ketiga menunjukkan ijin bagi orang lain

Untuk melihat mode perijinan file dan direktori,
gunakan perintah ls -l.

$ ls -l
total 6
drwxr-xr-x 2 guest guest 1216 Nov 25 10:42 asli
-rwx------ 1 root root 290 May 16 10:11 coba
drwxr-xr-x 2 root root 32 Apr 10 19:41 lib
$

Kolom pertama pada baris ke dua dan selanjutnya,
menyatakan mode perijinannya. Khusus karakter pertama pada
mode perijinan tersebut menunjukkan jenis filenya. Karakter
pertama '-' menunjukkan bahwa file tersebut adalah file
biasa. Sedangkan karakter 'd' menunjukkan bahwa jenis file
tersebut adalah direktori. Disamping itu terdapat pula 'c'
dan 'b' yang menunjukkan bahwa jenis file tersebut adalah
file khusus, 'c' untuk file khusus jenis karakter dan 'b'
untuk file khusus jenis blok.
Karakter selanjutnya dari mode perijinan menyatakan
mode perijinan sesungguhnya seperti yang diuraikan di atas.
Untuk melakukan proteksi terhadap file atau direktori,
gantilah perijinan rwx dengan '-'. Perhatikan contoh berikut
yang menyatakan mode file read-only

-r--r--r--

File yang memiliki mode seperti diatas hanya dapat
dibaca oleh pemilik, group atau orang lain. File ini
diproteksi terhadap upaya penulisan atau pengeksekusian oleh
pemakai.
Dengan adanya mode perijinan ini berarti kita dapat
melindungi file dan direktori kita dari gangguan orang yang
tidak kita hendaki. Contoh:

-rwx------

File yang memiliki proteksi seperti di atas tidak dapat
dibaca, ditulis dan dieksekusi oleh orang lain kecuali
pemiliknya sendiri.
Namun harus diingat bahwa proteksi ini semua tidak
berlaku bagi root atau superuser. Mereka dapat menembus
proteksi karena mereka penguasa dan pengatur sistem.

3.13.2 Mengubah Perijinan dengan chmod

Perintah chmod dapat mengubah mode perijinan file atau
direktori. Mode perijinan tersebut dapat diubah hanya oleh
pemiliknya sendiri atau oleh superuser. Format umum perintah
chmod adalah:

chmod modefile file

Untuk mengubah mode perijinan, perintah chmod memiliki
dua cara representasi bagi argumen modefile yaitu:

- nilai absolut berupa bilangan oktal
- mode simbolik

Pengubahan mode perijinan file dengan menggunakan nilai
absolut mengharuskan pemakai mengenal bilangan binary.
Perhatikan tabel binary berikut ini.


--------------------
Binary Oktal
--------------------
000 0
001 1
010 2
011 3
100 4
101 5
110 6
111 7
--------------------

Tabel 3.1 Binary-Oktal


Setiap pemberian satu ijin dari sembilan perijinan yang
digunakan akan dinyatakan dengan bilangan satu dan jika
tidak diijinkan akan dinyatakan dengan bilangan nol. Dari
bilangan binary ini dapat dinyatakan sebagai bilangan oktal
bagi pemakai yaitu pemilik, group dan orang lain. Perhatikan
contoh berikut ini.


rw-r--r-- mode perijinan file

110100100 bilangan binary
| || || |
| || || |
v v v
| | |
6 4 4 bilangan oktal

Gambar 3.6 Perijinan


Teknik lain untuk mempermudah menemukan bilangan bagi
mode perijinan dengan cara ini adalah menggunakan diagram
berikut ini:








pemilik group orang lain
r w x r w x r w x
| | | | | | | | |
400 ------+ | | | | | | | |
200 --------+ | | | | | | |
100 ----------+ | | | | | |
| | | | | |
40 ----------------+ | | | | |
20 ------------------+ | | | |
10 --------------------+ | | |
| | |
4 --------------------------+ | |
2 ----------------------------+ |
1 ------------------------------+

Gambar 3.7 Diagram Translasi Mode Perijinan


Dengan demikian untuk perijinan rw-r--r-- dapat
dinyatakan sebagai berikut:

400
200
40
4
---
644

Selanjutnya, penggunaan dari perintah chmod tersebut
adalah sebagai berikut:

$ chmod 644 bab1 bab2 bab3
$ ls -l bab1 bab2 bab3
-rw-r--r-- 1 denny mhs 280 Apr 22 10:22 bab1
-rw-r--r-- 1 denny mhs 164 Apr 22 10:22 bab2
-rw-r--r-- 1 denny mhs 380 Apr 22 10:22 bab3
$

Jika kita mencoba mengubah mode perijinan file dan file
tersebut ternyata tidak ada maka akan ditampilkan pesan
sebagai berikut:

$ chmod 777 takada
chmod: can't access takada
$

Jika kita mencoba mengubah mode perijinan file dan file
tersebut bukan milik kita maka akan ditampilkan pesan
sebagai berikut:

$ chmod 777 /etc/passwd
chmod: can't change /etc/passwd
$

Kesalahan lain yang sering terjadi adalah tertukarnya
letak argumen dari perintah chmod. Jika hal ini terjadi maka
akan ditampilkan pesan sebagai berikut:

$ chmod bab1 777
chmod: invalid mode
$

Cara kedua dengan menggunakan mode simbolik. Pilihan
mode simbolik yang dapat digunakan antara lain:


-----------------------------------------
Simbol Arti
-----------------------------------------
u ijin bagi pemilik
g ijin bagi group
o ijin bagi orang lain
a ijin bagi semua pemakai
= pasang nilai perijinannya
+ memberi perijinan
- hapus perijinan
-----------------------------------------

Tabel 3.2 Mode simbolik


Jenis perijinannya adalah baca 'r', tulis 'w' dan
eksekusi 'x'.
Hal yang harus diingat adalah bahwa argumen modefile
pada perintah chmod harus merupakan satu kesatuan argumen.
Artinya jika diinginkan lebih dari satu perubahan mode
perijinan, maka antara satu modefile dengan lainnya harus
dipisahkan dengan koma dan tidak dibolehkan menggunakan
spasi. Perhatikan contoh berikut:

$ ls -l
total 3
-r-------- 1 denny mhs 280 Apr 22 10:22 bab1
-r-------- 1 denny mhs 164 Apr 22 10:22 bab2
-r-------- 1 denny mhs 380 Apr 22 10:22 bab3
$ chmod u=rw,go=r bab1 bab2 bab3
-rw-r--r-- 1 denny mhs 280 Apr 22 10:22 bab1
-rw-r--r-- 1 denny mhs 164 Apr 22 10:22 bab2
-rw-r--r-- 1 denny mhs 380 Apr 22 10:22 bab3
$

Mode simbolik pertama mengalokasikan ijin baca dan
tulis bagi pemilik file tersebut. Mode simbolik
kedua mengalokasikan ijin baca group dan orang lain. Cara
berikut akan menghasilkan mode yang sama dengan operasi
chmod sebelumnya.

$ chmod a=r,u+w bab1 bab2 bab3
$

Jika mode perijinan file ternyata dapat dibaca, dapat
ditulis dan dapat dieksekusi oleh semua pemakai sebagai
berikut:

$ ls -l
total 3
-rwxrwxrwx 1 denny mhs 280 Apr 22 10:22 bab1
-rwxrwxrwx 1 denny mhs 164 Apr 22 10:22 bab2
-rwxrwxrwx 1 denny mhs 380 Apr 22 10:22 bab3
$

maka kita dapat menghapus perijinannya, misalnya
menghapus ijin tulis bagi semua pemakai.

$ chmod a-w bab1 bab2 bab3
$ ls -l
total 3
-r-xr-xr-x 1 denny mhs 280 Apr 22 10:22 bab1
-r-xr-xr-x 1 denny mhs 164 Apr 22 10:22 bab2
-r-xr-xr-x 1 denny mhs 380 Apr 22 10:22 bab3
$

Untuk mendapatkan hasil seperti di atas, kita dapat
pula tidak menyebutkan mode simbolik a seperti di atas

$ chmod -w bab1 bab2 bab3
$

Mode perijinan yang digunakan di atas adalah mode
perijinan yang biasa dilakukan oleh pemakai biasa. Masih ada
beberapa mode perijinan lainnya yang pada umumnya digunakan
oleh administrator sistem atau superuser.

3.13.3 Mode Perijinan Awal

Mode perijinan awal adalah mode perijinan yang
diberikan pada file atau direktori yang baru diciptakan atau
dibuat. Mode perijinan awal ini dikontrol oleh apa yang
disebut user mask dan disingkat umask. Kita dapat melihat
nilai standar mode perijinan awal dengan memanggil perintah
umask tanpa diikuti argumen apapun.

$ umask
0000
$

Artinya bahwa ketika file pertama kali dibuat, nilai
standar mode perijinannya adalah rw-rw-rw- atau 666,
sedangkan bagi direktori, nilai standar mode perijinannya
adalah rwxrwxrwx atau 777. Nilai ini merupakan nilai standar
yang diberikan oleh sistem. Nilai standar mode perijinan ini
dapat diubah dengan menggunakan perintah umask dan diikuti
argumen. Nilai dari argumen dapat dihitung dengan cara
mengurangkan nilai standar awal mode perijinan dengan mode
perijinan yang diinginkan. Misalnya kita ingin nilai standar
mode perijinan awal yang baru adalah rw-r--r-- atau 644.

666 (nilai standar mode perijinan awal)
644 (nilai standar mode perijinan yang diinginkan)
--- -
022 (nilai umask baru)

Dengan demikian kita dapat mengubah nilai standar mode
perijinan awal dengan cara:

$ umask 022
$

Sekarang file-file yang baru dibuat akan otomatis
memiliki mode perijinan awal rw-r--r--. Sementara itu mode
perijinan awal direktori akan otomatis bernilai rwxr-xr-x.
Nilai ini didapat dari mengurangkan nilai standar mode
perijinan awal dengan nilai umask saat itu.

777 (nilai default mode perijinan awal)
022 (nilai umask)
--- -
755 (nilai default mode perijinan awal baru)

Dengan demikian harus diatur sedemikian sehingga
terdapat kesesuaian seperti yang diharapkan antara mode
perijinan awal bagi file dan direktori.