UNIX Shell

Seperti telah dijelaskan di awal, pada seri workshop kali ini kita menggunakan UNIX syntax dan shell.

Dalam sesi workshop kali ini, kita akan menjelajahi lebih lanjut penggunaan UNIX Shell dalam mendukung proses penelitian.

Perbedaan dengan Windows

Mayoritas pengguna komputer di Indonesia menggunakan sistem operasi berbasis Windows yang menggunakan DOS system. Ada beberapa perbedaan dari DOS dan UNIX:

Line endings

Pada Windows, akhir baris kode ditandai dengan dua karakter, yaitu \r\n atau Carriage Return (CR) dan Line Feed (LF)

Sistem UNIX hanya menggunakan satu karakter LF \n untuk menandai akhir baris.

Perbedaan ini sering menyebabkan masalah dalam penelitian yang melibatkan banyak orang. Misalnya ketika kita menggunakan Git, semua line file yang disimpan dengan IDE di Windows akan diubah oleh IDE di UNIX. Hal ini akan membuat log dari Git penuh dengan perubahan line ending di setiap file.

Untuk menghindari masalah ini, kita dapat menggunakan command git config --global core.autocrlf input. Dengan perintah ini, Git akan secara otomatis mengubah line ending ketika kita melakukan commit.1

Case sensitivity

UNIX merupakan sistem operasi yang case sensitive, artinya a.txt dan A.txt merupakan dua file yang berbeda. Hal ini berbeda dengan Windows yang case insensitive yang menganggap kedua nama file tersebut sama.

Path

Sistem file untuk UNIX berbeda dengan Windows. Untuk UNIX, seluruh direktori memiliki akar atau root yang diawali dengan /.

Windows menggunakan sistem drive yang biasanya ditandai dengan abjad seperti C:\.

Pada UNIX, direktori dan file dipisahkan dengan /, sedangkan pada Windows dipisahkan dengan \.

File Permission

UNIX menggunakan sistem file permission yang membedakan akses untuk pengguna yang dibagi menjadi owner (o), group (g), dan all (semua pengguna lainnya) (a). Untuk masing-masing jenis pengguna, terdapat tiga jenis permission yang berbeda yaitu read (r), write (w), dan execute (x).

Akses membaca (read) dan menulis (write) file dapat digunakan untuk melindungi file dari pengguna lain di kluster.

Akses eksekusi (execute) berguna untuk mencegah kita menjalankan file yang tidak seharusnya dieksekusi. Opsi ini dapat diubah untuk menjalankan file binary atau script dengan mudah.

Cara Mengubah File Permission

Menggunakan Symbolic Notation

Akses file permission dapat dengan mudah diubah menggunakan command chmod [permission] [filename].

Penulisan [permission] dapat menggunakan simbol

bash[pengguna: o/g/a][+ / -][r/w/x].

Menggunakan Octal Notation

Contohnya, chmod og+x file.txt akan menambahkan akses eksekusi untuk pemilik dan grup.

Penulisan [permission] juga dapat menggunakan angka yang merepresentasikan kombinasi dari rwx dengan nilai 4, 2, dan 1.

Contohnya, chmod 755 file.txt akan memberikan akses rwxr-xr-x untuk pemilik, grup, dan semua pengguna lainnya.

Command Dasar

Berikut adalah beberapa command dasar yang sering digunakan dalam UNIX shell.

Command Keterangan
man [COMMAND] Melihat manual dari COMMAND
ls Melihat isi direktori
cd Pindah direktori
pwd Melihat direktori saat ini
touch Membuat file kosong
mkdir Membuat direktori
rm Menghapus file atau direktori
rmdir Menghapus direktori
cp Mengcopy file atau direktori
mv Memindahkan file atau direktori
chmod Mengubah file permission
cat Melihat isi file
more Melihat isi file
head Melihat isi file bagian awal
tail Melihat isi file bagian akhir
echo Menampilkan teks
diff Membandingkan isi dua file

Shell

Shell merupakan program yang berfungsi sebagai antarmuka antara pengguna dengan sistem operasi.

Ada beberapa jenis shell yang digunakan secara umum di sistem operasi UNIX, yaitu Bourne Again Shell (bash), C Shell (csh), , dan Z Shell (zsh).

Pada seri workshop ini, kita akan menggunakan bash sebagai shell yang digunakan. Hampir semua command yang digunakan pada seri workshop ini dapat digunakan pada shell lainnya.

Shell Script

Untuk memudahkan proses penelitian, seringkali kita membutuhkan beberapa command yang dijalankan secara berurutan dan berulang. Shell script merupakan kumpulan command yang disimpan dalam sebuah file.

Keuntungan dari penggunaan shell script dibandingkan program yang lebih kompleks, misalnya Python, adalah kemudahan eksekusi tanpa perlu adanya instalasi tambahan atau kompilasi.

Berikut adalah contoh shell script yang dapat digunakan untuk mengganti file dengan nama result.dat menjadi result_[TANGGAL].dat dan mengubah file permission menjadi 644.

#!/bin/bash

# Mengambil tanggal saat ini
TANGGAL=$(date +%Y_%m_%d)

# Mengganti nama file
mv result.dat result_${TANGGAL}.dat

# Mengubah file permission
chmod 644 result_${TANGGAL}.dat

Baris pertama dari shell script yang diawali dengan shebang (#!) menandakan shell yang digunakan saat eksekusi langsung menggunakan ./[NAMA_FILE].

Untuk menjalankan shell script, kita dapat menggunakan command bash [NAMA_FILE] atau dengan menambahkan akses eksekusi di file permission dengan menggunakan chmod +x [NAMA_FILE].

Variabel

Seperti pada script di atas, kita dapat menyimpan nilai dalam sebuah variabel. Variabel dapat diinisialisasi dengan menggunakan NAMA_VARIABEL=ISI_VARIABEL atau NAMA_VARIABEL=$(COMMAND) untuk menggunakan hasil dari COMMAND.

Untuk mengakses nilai dari variabel, kita dapat menggunakan ${NAMA_VARIABEL}. Walaupun memungkinkan menggunakan nilai variabel dengan $NAMA_VARIABEL, hal ini dapat menjadi rancu ketika kita memanipulasi string seperti "${FOO}BAR" dan "$FOOBAR".

If-Else

Untuk melakukan conditional execution, kita dapat menggunakan command if dan else seperti pada contoh di bawah ini.

if [KONDISI]
then
    statement
else
    statement
fi

[KONDISI] dapat menggunakan command test atau [ ] untuk membandingkan nilai dari variabel, contohnya [ $A -eq $B ] untuk membandingkan apakah nilai dari variabel A sama dengan B.

For Loop

Untuk melakukan looping, kita dapat menggunakan command for seperti pada contoh di bawah ini.

for VARIABLE in [LIST]
do
    statement
done

[LIST] dapat berupa daftar nilai yang dipisahkan dengan spasi, misalnya 1 2 3 4 5 atau $(ls *.txt) untuk mengambil semua file dengan ekstensi .txt.

Profil Bash

Pengaturan untuk shell bash dapat disimpan dalam sebuah file bernama .bashrc yang berada di direktori home pengguna.

.bashrc ditulis dengan sintaks yang sama dengan shell script dan akan dijalankan setiap kali shell dibuat. Kita juga dapat menggunakan profil yang terbarui dengan menggunakan command source .bashrc.

Beberapa komponen pengaturan yang dapat berguna adalah:

Alias

Alias merupakan shortcut untuk command yang sering digunakan. Alias dapat ditambahkan di .bashrc dengan sintaks alias [ALIAS]=[COMMAND].

Contoh beberapa alias yang sering digunakan:

alias ll='ls -lh --color=auto' 2>/dev/null

Environment Variable

Environment variable merupakan variabel yang dapat terdefinisi pada tingkat shell dan dapat digunakan oleh semua program yang dijalankan dari shell. Variabel ini disimpan dengan menggunakan kata kunci export.

Beberapa variabel yang sering digunakan adalah:

export PATH=$PATH:/usr/local/bin
export PS2='> '

Variabel PATH merupakan daftar direktori yang dicari oleh shell untuk menjalankan command.

Variabel PS[0-4] mengatur tampilan prompt pada shell. Informasi lebih lanjut dapat dilihat di sini.

Prompt

Prompt merupakan teks yang muncul di shell setelah command selesai dijalankan. Prompt dapat diubah dengan mengubah nilai dari variabel PS1.