Bash Shell

Memet Zx

Bash atau (mulai sekarang) shell de facto di sebagian besar sistem yang banyak digunakan: Linux, macOS, dan WSL di Windows 10/11.

Yaa Oia macOS setelah versi 10.15 Catalina, default shell-nya adalah zsh, bukan bash.

Ada alasan sejarah mengapa bash menjadi shell paling populer di dunia. Kembali ke tahun 1989 saat pertama kali rilis, dunia teknologi sangat berbeda di waktu itu. Di waktu itu, banyak software di dunia UNIX dengan sumber kode yang tertutup. Unix sendiri memiliki paten dan sumber kode yang tertutup.

Untuk menggunakan system UNIX anda harus menggunakan shell.

Shell yang paling populer di waktu itu adalah Bourne Shell (sh). yang tersedia di bawah perintah /bin/sh. itu disebut “Bourne Shell” karena pembuatnya adalah Steve Bourne.

Richard Stallman di tahun itu dengan GNU Project (dan kedepannya Linux) hampir merevolusi semuanya, dimulai dengan revolusi Sumber Terbuka. GNU Project membutuhkan shell, dan, dengan bantuan dari Free Software Foundation, Lahirlah Bash. yang sangat terinpirasi oleh Bourne Shell, Artinya, Bash adalah Bourne Again Shell dan itu adalah resep kunci dari GNU Project, dan salah satu software yang paling populer di dunia yang masih digunakan hingga saat ini.

Bash bisa menjalankan skrip yang ditulis untuk sh. yang merupakan fitur wajib untuk adopsi, dan juga memiliki banyak fitur baru yang tidak ada di Bourne Shell, Sejak hari pertama, sudah menawarkan pengalamannya yang sangat baik untuk pengguna. dan mendapatkan banyak improvisasi sejak itu. dan di blog ini, akan membahas tentang hal yang paling populer dan paling berguna di Bash yang bisa anda coba.

Langkah awal di bash

Semenjak Bash adalah shell bawaan di setiap sistem, yang pertama kali mau lsayakan untuk memulai bash shell adalah

  • masuk ke sistem, jika itu server
  • buka terminal, jika itu laptop/komputer

Saat pertama kali membuka terminal, anda akan melihat prompt (biasanya $ atau #).

Bagaiman anda tau jika shell anda adalah bash? Coba ketikkan perintah echo $SHELL di terminal anda. Jika anda mendapatkan /bin/bash maka anda menggunakan bash, atau coba ketik help dan klik enter.

Lihat? Kita baru saja meminta bash untuk meng eksekusi perintah help. Perintah ini akan menampilkan versi bash yang anda gunakan, dan juga daftar perintah yang tersedia di bash.

Lebih sering atau tidak anda tidak akan pernah menggunakan daftar perintah yang tersedia di bash help, kecuali jika membuat skrip bash. Tapi, ini akan berguna jika anda ingin mengetahui apa saja yang bisa anda lsayakan di bash.

99% dari hari ke hari menggunakan bash untuk menavigasi file dan direktori, dan menjalankan perintah seperti ls, cd dan perintah umum utilitas lainnya.

Untuk menavigasi sistem file anda akan menggunakan perintah ls, itu tersedia di /bin/ls, dan semenajak bash punya /bin folder di $PATH, anda bisa menjalankan perintah ls tanpa mengetikkan /bin/ls.

ls adalah perintah untuk melihat isi dari direktori. Jika anda tidak menentukan direktori, maka akan menampilkan isi dari direktori saat ini.

anda biasanya memulai nya di folder /home atau /Users di macOS. dan home folder ku saat ini adalah /home/memet.

memet@zxce3 ~ $ ls
Desktop  Documents  Downloads  Music  Pictures  Public  Templates  Videos

Untuk menavigasi ke direktori lain, anda bisa menggunakan perintah cd (change directory). dan jika anda ingin kembali ke direktori sebelumnya, anda bisa menggunakan perintah cd -.

memet@zxce3 ~ $ cd Desktop
memet@zxce3 ~/Desktop $ cd -
memet@zxce3 ~ $ 

cd .. akan mengarahkan anda ke direktori sebelumnya, dan cd ../.. akan mengarahkan anda ke direktori dua tingkat sebelumnya.

memet@zxce3 ~ $ cd ..
memet@zxce3 /home $ cd ../..
memet@zxce3 / $ 

Tergantung dari konfigurasi Bash anda, anda akan melihat folder saat ini di prompt (simbol $). dan jika anda menggunakan prompt yang lebih sederhana, anda bisa menggunakan perintah pwd untuk melihat direktori saat ini.

memet@zxce3 ~ $ pwd
/home/memet

arti pwd adalah path working directory

Perintah editing

Saat anda mengetikkan perintah di terminal, anda bisa menggunakan beberapa tombol keyboard untuk mengedit perintah yang anda ketikkan. anda bisa menggunakan tombol panah untuk menggeser kursor, dan tombol backspace untuk menghapus karakter sebelum kursor. dan jika anda ingin menghapus seluruh perintah, anda bisa menggunakan perintah Ctrl + u. Menekan enter akan menjalankan perintah yang anda ketikkan.

Ini adalah hal yang normal dan dapat diterima, tapi sesuatu yang membuat wow para pengguna UNIX/Linux awal.

Kombinasi keyboard membantu mu untuk mengedit perintah yang anda ketikkan, dan ini sangat berguna ketika anda ingin mengedit perintah yang panjang, tanpa haru menggunakan tombol panah kursor.

  • Ctrl + a akan menggeser kursor ke awal perintah
  • Ctrl + e akan menggeser kursor ke akhir perintah
  • Ctrl + f akan menggeser kursor ke kanan satu karakter
  • Ctrl + b akan menggeser kursor ke kiri satu karakter
  • Ctrl + k akan menghapus semua karakter setelah kursor
  • Ctrl + u akan menghapus semua karakter sebelum kursor
  • Ctrl + d akan menghapus karakter di depan kursor

dan banyak lagi kombinasi keyboard yang bisa anda gunakan untuk mengedit perintah yang anda ketikkan.

Autocomplete

Salah satu fitur yang paling berguna di bash adalah autocompletion. Ini akan membantu anda untuk mengetikkan perintah dengan cepat, dan menghindari kesalahan ketik. coba ketik cd Doc dan tekan tab. bash akan menyelesaikan perintah untuk anda. jika ada beberapa pilihan untuk karakter yang anda ketikkan, anda bisa mengetikkan karakter lainnya dan tekan tab lagi.

memet@zxce3 ~ $ cd Do
Documents/  Downloads/
memet@zxce3 ~ $ cd Doc
memet@zxce3 ~ $ cd Documents/
memet@zxce3 ~/Documents $ 

Autocompletion juga bekerja untuk nama file dan direktori. coba ketik ls Doc dan tekan tab. bash akan menyelesaikan nama direktori untuk anda.

memet@zxce3 ~ $ ls Doc
Documents/  Downloads/
memet@zxce3 ~ $ ls Documents/
image.png  image2.png  image3.png

Autocompletion juga bisa untuk perintah

Perintah Shell

Menggunakan shell kita bisa menjalankan perintah yang twesedia di sistem kita. dan kita bisa prefix perintah dengan full path (contoh: /bin/ls atau /usr/bin/ls untuk menampilkan daftar file dan direktori) tapi sheel punya konsep path jadi kita cukup mengetikkan ls dan itu adalah tempat dimana hampir semua perintah yang ada di sistem kita (dan kita bisa menambahkan folder ke path ini dengan menkonfigurasi nya).

perintah memerima argumen. Sebagai contoh ls /bin akan menampilkan daftar semua file di /bin folder.

Parameter di awali dengan dash (-) dan bisa digabungkan. Sebagai contoh ls -a akan menampilkan semua file termasuk file yang dimulai dengan titik (.). dan ls -l akan menampilkan daftar file dengan format yang lebih detail.

Perintah yang sering digunakan

Ada banyak perintah bawaan di semua sistem, dan mereka bervariasi tergantung itu Linux/Unix atau MacOS atau bahkan Distro linux yang anda gunakan.

Namum mari kita lsayakan yang singkat bulat dan yang umum digunakan.

Saat anda mengalami masalah, seperti tidak tau perintah apa, atau tidak tau cara menggunakan nya, anda bisa menggunakan perintah man untuk melihat dokumentasi perintah tersebut.

Ini adalah daftar perintah sistem yang sering digunakan:

PerintahDeskripsi
lsmenampilkan daftar file dan direktori
cdmengubah direktori saat ini
pwdmenampilkan direktori saat ini
mkdirmembuat direktori baru
mvmemindahkan atau mengganti nama file atau direktori
cpmenyalin file atau direktori
rmmenghapus file atau direktori

Setiap file di Unix punya izin/permisi, dan anda bisa menggunakan perintah chmod untuk mengubahnya (Belum mau bahas ini). dan chown untuk mengubah pemilik file.

cat, tail dan grep adalah perintah paling berguna untuk file. cat untuk menampilkan isi file, tail untuk menampilkan bagian akhir file, dan grep untuk mencari string di file.

find dan locate adalah perintah untuk mencari file. find untuk mencari file di direktori saat ini, dan locate untuk mencari file di seluruh sistem.

tar dan gzip adalah perintah untuk mengkompres file. tar untuk mengkompres file, dan gzip untuk mengkompres file yang sudah dikompres.

pico, nano, vim dan emacs adalah editor yang biasa diinstall dan digunakan.

whereis dan which adalah perintah untuk mengetahui lokasi perintah. whereis untuk mengetahui lokasi perintah, dan which untuk mengetahui lokasi perintah yang akan dijalankan.

dan ada banyak lagi perintah yang bisa anda gunakan di sistem anda. dan itu adalah beberapa perintah yang mungkin akan sering anda gunakan.

Menjalanakan perintah

Perintah cd dan ls, yang sudah dijelaskan di atas, yang ditemukan di folder /bin. anda bisa meng eksekusi file apapun, selagi itu adalah file excutable. dengan mengetikkan full path, sebagai contoh /bin/pwd. Perintah tidak membutuhkan /bin folder, dan anda bisa meng eksekusi file yang ada di folder saat ini dengan indikator ./ path.

Contoh jika anda punya file yamete di folder /home/memet/scripts, anda bisa menjalankan

cd /home/memet/scripts

dan kemudian jalankan ./yamete untuk menjalankan file tersebut.

Atau anda bisa menjalankan /home/memet/scripts/yamete dari Bash, apapun folder saat ini.

Jobs

Di saat anda menjalankan perintah apapun, jika itu program yang memakan waktu lama, shell mu dikuasai oleh program tersebut. anda bisa menghentikan perintah dengan menekan ctrl + c.

anda bisa menjalankan perintah di background dengan menambahkan & di akhir perintah. Sebagai contoh sleep 1000 & akan menjalankan perintah sleep selama 1000 detik di background.

anda bisa melihat daftar perintah yang sedang berjalan dengan perintah jobs. dan anda bisa menghentikan perintah dengan perintah kill dan killall.

memet@zxce3:~$ sleep 1000 &
[1] 1234
memet@zxce3:~$ jobs
[1]+  Running                 sleep 1000 &
memet@zxce3:~$ kill 1234
memet@zxce3:~$ jobs
[1]+  Terminated              sleep 1000 &

Perintah yang berjalan di background akan berhenti jika shell anda ditutup.

Perintah berguna lainnya adalah ps untuk melihat daftar proses yang sedang berjalan.

memet@zxce3:~$ ps
  PID TTY          TIME CMD
  123 pts/0    00:00:00 bash
  456 pts/0    00:00:00 ps

dan top untuk melihat daftar proses yang sedang berjalan secara real time.

Sebuah job proses bisa dihentikan menggunakan kill <PID>

Perintah History

Menekan tombol up kursor akan menampilkan perintah yang pernah anda jalankan. dan lagi, ini adalah fitur shell. Menekan tombol down akan membantu mu menavigasi kembali ke perintah yang baru saja dijalankan. dan menekan enter akan menjalankan perintah itu lagi.

Ini adalah akses cepat ke perintah yang pernah anda jalankan. Menjalankan perintah history akan menampilkan semua daftar perintah yang pernah anda jalankan.

memet@zxce3:~$ history
    1  ls
    2  cd /home/memet
    3  ls
    4  cd /home/memet/scripts
    5  ls
    6  history

Saat anda mulai mengetik perintah, Bash bisa auto complete perintah yang anda jalankan dengan mereferensi perintah yang sebelumnya pernah dijalankan. coba dengan menekan esc dan kemudian tab.

Jujur aja saya menemukan implementasi dari fish shell yang lebih baik dan lebih mudah. mungkin saya akan bahas nanti.

Mengatur shell default

Ada banyak shell selain Bash. Seperti Fish, Zsh, TCSH, dan lainnya. Setiap user di sistem bisa memilih shell yang mereka inginkan. dan anda bisa mengubah shell default dengan perintah chsh.

memet@zxce3:~$ chsh
Changing shell for memet.
Password:
New shell [/bin/bash]: /bin/zsh
memet@zxce3:~$ echo $SHELL
/bin/zsh

Kustomisasi Bash

Sudah di tulis sebelumnya bahwa anda bisa (atau tidak) melihat direktori saat ini di bash prompt. Dimana ini ditentukan? di file konfigurasi Bash!

Ada sedikit yang membingungkan disini karena Bash menggunakan konfigurasi file yang berbeda untuk skenario yang berbeda pula, dan itu juga membaca beberapa file konfiguras.

Mari kita bahas satu persatu tentang kebingungan ini. Pertama, ada perbedaan besar apakah Bash di inisialisasi sebagai login shell atau non-login shell. Login shell berarti bahwa sistem tidak berjalan di GUI (Graphical User Interface) dan anda login ke sistem dengan melalui shell. Ini dalam konteks server, sebagai contoh.

di kasus ini, Bash membaca file konfigurasi /etc/profile

dan lihat di home folder pengguna, ada file konfigurasi.

~/.bash_profile
~/.bash_login
~/.profile

dimana ~ adalah home folder pengguna (ini otomatis di translate oleh Bash).

Ini berarti jika ada .bash_profile, ~/.bash_login dan ~/.profile di home folder pengguna, maka Bash akan membaca file-file tersebut. dan jika ada file .bash_profile dan ~/.bash_login di home folder pengguna, maka Bash akan membaca file .bash_profile terlebih dahulu.

Jika Bash dijalankan sebagai non-login shell, maka Bash akan membaca file konfigurasi ~/.bashrc.

Environment Variable

Terkadang anda punya program yang menggunakan enviroment variables. itu ada nilai yang bisa di set diluar program, dan program tersebut bisa mengaksesnya. sebuah API key, contohnya. Atau sebuah path yang anda butuhkan untuk menjalankan program.

anda bisa set environment variable dengan sintaks seperti ini.

NAMA_VARIABEL=ISINYA

ini dari nilai bisa mengandung spasi dan karakter khusus. dengan menggunakan quotes.

NAMA_VARIABEL="ISINYA INI"

Bash skrip bisa menggunaka variabel dengan sintaks $NAMA_VARIABEL.

memet@zxce3:~$ NAMA_VARIABEL="ISINYA INI"
memet@zxce3:~$ echo $NAMA_VARIABEL
ISINYA INI

Bash juga menyediakan beberapa variabel yang bisa anda gunakan, seperti

  • $HOME untuk home folder pengguna
  • $PATH untuk path yang bisa di akses oleh program
  • $SHELL untuk shell yang sedang dijalankan
  • $USER untuk nama pengguna

anda bisa melihat isi dari variabel tersebut menggunakan perintah echo

memet@zxce3:~$ echo $HOME
/home/memet
memet@zxce3:~$ echo $SHELL
/bin/bash

Enviroment variable spesial: $PATH

$PATH adalah variabel yang berisi daftar path yang bisa di akses oleh program. dan shell akan meliaht ini saat anda mengetik perintah. folder di pisahkan dengan colon : dan mereka di urutkan dari kiri ke kanan - Bash akan melihat yang pertama, mencari perintah di sana, dan jika tidak ada, melihat yang kedua, dan seterusnya.

path ku sekarang adalah seperti ini.

memet@zxce3:~$ echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin/:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/games:

anda bisa edit ini di file ~/.bashrc dengan menambahkan path yang anda inginkan.

PATH=$PATH:/home/memet/scripts

Aliases

Aliases adalah shortcut untuk perintah yang sering anda gunakan. misalnya, anda bisa membuat alias untuk git status dengan gst.

memet@zxce3:~$ alias gst='git status'
memet@zxce3:~$ gst
On branch master
Your branch is up to date with 'origin/master'.

Untu mendefinisikan alias bisa menggunakan syntax seperti ini.

alias <alias>=<perintah>

jika anda ingin membuat alias untuk perintah yang panjang, anda bisa menggunakan quotes.

alias <alias>="<perintah>"

anda juga bisa mendefinisikan alias di file ~/.bashrc.

Berhati-hati dengan tanda kutip jika anda memiliki variable didalam perintah: menggunakan quotes ganda variabel akan diselesaikan pada waktu definisi, menggunakan tanda kutip tunggal variabel akan diselesaikan pada waktu pemanggilan. 2 hal itu berbeda.

alias lsini="ls $PWD"
alias lssek='ls $PWD'

$PWD mengacu pada folder saat ini, dan jika anda mengetik lsini dan lssek, anda akan mendapatkan hasil yang berbeda. lsini akan menampilkan isi dari folder saat ini, sedangkan lssek akan menampilkan isi dari folder dimana anda mendefinisikan alias.

Fitur lanjutan baris perintah

Wildcard

ls dan banyak perintah lain bisa menggunakan wildcard, anda bisa melihat daftar semua file yang dimulai dengan a dengan perintah ls a*.

memet@zxce3:~$ ls a*
a.txt ab.txt  abc.txt

atau anda bisa melihat semua file yang diakhiri dengan .txt dengan perintah ls *.txt.

memet@zxce3:~$ ls *.txt
a.txt ab.txt  abc.txt

atau semua file yang diakhiri dengan b atau c dengan perintah ls *b* *c*.

memet@zxce3:~$ ls *b* *c*
a.txt ab.txt  abc.txt

Mengarahkan output dan standard error error

Secara default, perintah yang dimulai di shell menjecta kedua output dan error ke terminal. mungkin ini bukan yang anda inginkan, anda bisa menentukan kemana output itu akan dibuat.

Sebenarnya, ke /file lain/, karena di Unix bahkan layar saja di anggap sebagai file. Secara khusus

  • 0 adalah standard input
  • 1 adalah standard output
  • 2 adalah standard error

anda bisa mengarahkan standar output ke file dengan menambahkan 1> di belakang perintah, di ikuti dengan nama file

Menggunakan teknik yang sama anda bisa mengarahkan standard error ke file dengan menambahkan 2>.

ada shortcut > jadi 1>, karena ini digunakan paling banyak.

Contoh:

ls 1> output.txt 2> error.txt
ls > output.txt 2> error.txt

Shortcut lainnya, &> mengarahkan /kedua/ standar output dan standar error ke file yang sama.

ls &> output.txt

Hal lain yang sering anda lsayakan adalah mengarahkan kedua standar output dan standar error ke /sama/ tempat. anda bisa menggunakan 2>&1 untuk mengarahkan standard error ke tempat yang sama dengan standard output.

ls 1> output.txt 2>&1

Menjalankan perintah di background

anda bisa mengatakan pada Bash untuk menjalankan perintah di background tanpa harus mengambil kontrol dari shell, dengan menambahkan & di belakang perintah.

memet@zxce3:~$ top &
[1] 1234

top adalah perintah yang menampilkan daftar proses yang sedang berjalan di sistem.

[1] 1234 adalah pesan yang menunjukkan bahwa perintah sedang berjalan di background, dan nomor prosesnya adalah 1234.

Aplikasi yang biasanya mengendalikan shell, kini berjalan namun seperti tidak ada yang terjadi. anda bisa mengembalikan ke shell dengan mengetik fg (foreground), tapi sekarang kita akan memasuki ranah proses dan pekerjaan yang merupakan topik besar tersendiri, ini gambaran singkatnya:

Saat sebuah perintah sedang berjalan, anda bisa menggunakan Ctrl + Z untuk men-jeda perintah tersebut, dan mengarahkan nya ke background. Shell kembali ke foreground, dan anda sekarang bisa menjalankan bg untuk menjalankan perintah yang di jeda di background tadi.

Ketika anda siap untuk kembali kesana, anda bisa menggunakan fg untuk mengembalikan perintah ke foreground.

anda juga bisa melihat daftar proses yang sedang berjalan di background dengan perintah ps, dan daftar menunjukkan semua nomor pid proses. dengan menggunakan pid proses yang dijeda, anda bisa mengembalikan proses tersebut ke foreground dengan perintah fg <pid>. Hal yang sama juga berlsaya untuk bg.

memet@zxce3:~$ ps
  PID TTY          TIME CMD
 1234 pts/0    00:00:00 top
 1235 pts/0    00:00:00 bash
 1236 pts/0    00:00:00 ps
memet@zxce3:~$ fg 1234
top

Antrian perintah

anda bisa meminta Bash untuk menjalankan perintah setelah perintah lain selesai dengan memisahkan mereka dengan ; semikolon.

memet@zxce3:~$ sleep 5; echo "selesai"
selesai

anda bisa mengulangi antriannya perinitah di satu baris yang sama.

Mengarahkan output

Program bisa menerima input dari file apapun dengan menggunakan operator <, dan mengarahkan output ke file lain dengan menggunakan operator >.

memet@zxce3:~$ echo "halo" > output.txt
memet@zxce3:~$ wc < output.txt
1 1 6 output.txt

wc adalah perintah yang menghitung jumlah kata, baris, dan karakter dalam file.

Pipe

Pipe adalah operator yang mengarahkan output dari perintah ke input perintah lain. Ini adalah cara yang sangat efektif untuk mengolah data. Ini mirip dengan > operator, tapi lebih fleksibel. Menggunakan operator | untuk mengabungkan perintah. contoh wc mendapatkan input dari output echo halo dan menghitung jumlah kata, baris, dan karakter dalam string.

memet@zxce3:~$ echo "halo" | wc
1 1 6

Grup perintah

Gunakan && untuk menggabungkan dua perintah dengan menggunkan katak “dan”. Jika perintah pertama berhasil, perintah kedua akan dijalankan. Jika perintah pertama gagal, perintah kedua tidak akan dijalankan, dan seterusnya.

memet@zxce3:~$ false && echo "berhasil"
memet@zxce3:~$ true && echo "berhasil"
berhasil

Gunakan || untuk menggabungkan dua perintah dengan kata “atau”. Jika perintah pertama gagal, perintah kedua akan dijalankan. Jika perintah pertama berhasil, perintah kedua tidak akan dijalankan, dan seterusnya.

memet@zxce3:~$ false || echo "berhasil"
berhasil
memet@zxce3:~$ true || echo "berhasil"
memet@zxce3:~$

! operator membalikkan nilai dari perintah.

memet@zxce3:~$ !true
false
memet@zxce3:~$ !false
true

anda juga bisa menggunakan tanda kurung untuk menggabungkan ekspresi untuk menghindari kebingungan dan juga mengubah prioritas eksekusi.

memet@zxce3:~$ (true && false) || true
true
memet@zxce3:~$ ! (true && false) || true
false

Shell script

Salah satu fitru terbaik sheel seperti Bash mampu membuat program yang bisa dijalankan di shell, ya bisa dibilang otomatisai eksekusi perintah.

Dan saya akan membuat beberapa blog tentang ini nanti. yang akan terbagi dalam beberapa tutorial. mengapa tidak dijadikan satu saja? ya karena topik nya itu jauh lebih mendalam dan panjang.

Sedikit perkenalan: skrip adalah file text yang dimulai dengan baris yang menunjukkan bahwa itu sebuah shell script (dan apa yang dibutuhkan shell), dan kemudian berisi perintah shell yang akan dijalankan.

#!/bin/bash
echo "halo"

anda bisa menyimpan ini sebagai file skrip dan menjadikan file tersebut executable dengan perintah chmod +x skrip. Kemudian anda bisa menjalankan file tersebut dengan perintah ./skrip (./ adalah lokasi file sekarang).

Shell scripting sebenarnya diluar lingkup dari tutorial ini, tapi saya ingin anda tahu tentang ini. Jadi saya akan membuat beberapa tutorial tentang shell scripting nanti. Skrip bisa melsayakan banyak hal, seperti mengambil input dari pengguna, mengolah data, dan banyak lagi.

Scripting strategi juga bekerja di banyak shell lain, seperti zsh, fish, dan csh.

Contoh fish shell script

#!/usr/bin/fish
echo "halo"

Silahkan berikan komentar dan saran untuk blog ini. Terima kasih.

Related Posts