Shell dan Terminal

Perbedaan shell dan terminal, prompt bash, pintasan papan ketik, dan tab completion.

Daftar isi

Topik ini membahas dua objek yang sering dianggap sama di baris perintah, yaitu terminal dan shell. Pembahasan mencakup perbedaan keduanya, anatomi prompt bash, pintasan papan ketik yang disediakan readline, serta tab completion. Setelah membacanya, sesi di terminal dapat dikerjakan dengan lebih sedikit ketikan dan lebih sedikit salah ketik.

Perbedaan terminal dan shell#

Terminal adalah aplikasi yang menyediakan jendela teks untuk berinteraksi dengan sistem. Perangkat lunak semacam ini sering disebut terminal emulator karena meniru terminal fisik, yaitu layar dan papan ketik yang pada masa awal Unix menjadi satu perangkat keras. Contoh terminal emulator yang lazim adalah GNOME Terminal, Konsole, xterm, dan Windows Terminal. Tugasnya terbatas: menerima ketikan, meneruskannya ke program yang berjalan di dalamnya, dan menampilkan keluaran program tersebut.

Shell adalah program yang berjalan di dalam terminal dan menjadi penerima ketikan tersebut. Shell membaca setiap baris yang diketik, menafsirkan strukturnya, lalu meminta sistem operasi mengeksekusinya. Kernel, yaitu inti sistem operasi, adalah pihak yang benar-benar menjalankan pekerjaan tersebut. Diagram berikut merangkum ketiga lapisan itu.

Terminal emulator (aplikasi)Shell (bash)papan ketikkeluaran teksKernel Linux
Terminal emulator membungkus shell, sedangkan shell bekerja di atas kernel

Shell yang dipakai di sepanjang jalur ini adalah bash (Bourne Again SHell), shell bawaan pada Ubuntu dan Debian. Perintah berikut menunjukkan letak program shell beserta versinya.

bash
# memeriksa shell yang sedang dipakai
echo $SHELL
bash --version | head -n 1
text Keluaran
/bin/bash
GNU bash, version 5.2.37(1)-release (x86_64-pc-linux-gnu)

Nilai $SHELL menyatakan program shell yang dipakai sesi ini, sedangkan baris kedua menunjukkan versi bash yang terpasang. Perbedaan versi jarang berpengaruh pada contoh dasar, tetapi berguna ketika membaca dokumentasi lama yang perilakunya berubah antarversi.

Perintah yang diketik tidak selalu berupa program terpisah. Sebagian perintah seperti pwd dan cd adalah builtin, yaitu bagian dari program bash itu sendiri, sehingga tidak memerlukan berkas program tersendiri. Perintah type menunjukkan perbedaan ini.

bash
# type menunjukkan sumber sebuah perintah
type pwd
type cat
text Keluaran
pwd is a shell builtin
cat is /usr/bin/cat

pwd berasal dari bash sendiri, sedangkan cat adalah program eksternal pada /usr/bin/cat. Perbedaan ini tidak mengubah cara memanggil perintahnya, tetapi menjelaskan mengapa sebagian perintah tidak memiliki berkas program yang dapat dicari di sistem berkas.

Prompt bash#

Prompt adalah teks singkat yang ditampilkan bash setiap kali siap menerima perintah. Bentuk bawaannya menyatakan identitas dan posisi, sebagaimana dirinci tabel berikut.

Potongan promptMakna
budi@servernama pengguna (budi) dan nama mesin (server)
~direktori kerja saat ini, dengan tilde berarti folder home
$tanda pengguna biasa, sedangkan root ditandai #

Bentuk lengkapnya adalah budi@server:~$, diikuti kursor tempat perintah diketik. Isi prompt diatur oleh variabel PS1. Di dalam PS1, tanda \u, \h, dan \w masing-masing diganti nama pengguna, nama host, dan direktori kerja, sehingga prompt dapat disunting untuk menambahkan misalnya status Git. Karena prompt hanya tampil pada sesi interaktif, pembahasannya di halaman ini disajikan sebagai tabel dan bukan sebagai keluaran perintah yang direkam.

Pengetahuan tentang ~ akan terus dipakai ketika menyusun jalur, karena ~ selalu berarti folder home pengguna yang sedang login. Prompt muncul kembali setiap kali perintah selesai dijalankan, sehingga perintah berikutnya selalu dimulai dari baris baru. Kebiasaan membaca prompt sebelum menekan Enter juga memudahkan pemeriksaan, karena posisi direktori yang tampil di sana adalah posisi yang benar-benar dipakai perintah.

Pintasan papan ketik#

Saat membaca baris yang sedang diketik, bash tidak membaca papan ketik sendirian, melainkan memakai pustaka readline. Pustaka ini menyediakan pintasan untuk memindahkan kursor dan menyunting baris tanpa menyentuh tombol panah. Pintasan yang paling sering berguna dirangkum tabel berikut.

PintasanEfek
Ctrl-Apindah ke awal baris
Ctrl-Epindah ke akhir baris
Ctrl-Uhapus dari kursor sampai awal baris
Ctrl-Whapus satu kata di sebelah kiri kursor
Ctrl-Lbersihkan layar
Ctrl-Cbatalkan baris yang sedang diketik atau hentikan perintah yang sedang berjalan
Ctrl-Dkirim tanda akhir masukan, menutup sesi bila baris kosong
Tablengkapi nama perintah atau berkas, dibahas pada bagian berikutnya

Pintasan di atas adalah pemetaan bawaan mode emacs pada readline. Mode lain, misalnya set -o vi, mengubah pemetaannya untuk pengguna yang terbiasa dengan penyunting bergaya vi. Pemetaan bawaan tetap yang paling umum dijumpai di dokumentasi dan tutorial.

Seluruh pintasan di atas bersifat interaktif dan tidak meninggalkan keluaran yang dapat direkam sebagai teks, sehingga cara mengenalinya adalah langsung mencobanya di terminal. Latihan paling sederhana: ketik satu perintah panjang, pindahkan kursor dengan Ctrl-A dan Ctrl-E, lalu hapus sebagiannya dengan Ctrl-U dan Ctrl-W.

Tab completion#

Tab completion, atau pelengkapan dengan Tab, melengkapi tulisan yang sedang diketik setelah tombol Tab ditekan, tetapi hanya bila kandidatnya tunggal. Bash melengkapi nama perintah pada posisi pertama dan nama berkas atau direktori pada posisi argumen. Paket bash-completion yang terpasang pada banyak distribusi menambahkan pelengkapan untuk argumen tertentu, misalnya nama paket atau nama host.

Apabila ada lebih dari satu kandidat, Tab pertama melengkapi bagian yang sama milik semua kandidat, dan Tab kedua menampilkan daftar kandidat yang tersisa. Contoh alurnya: setelah mengetik cd /u lalu menekan Tab, tulisan itu menjadi cd /usr/, karena /usr adalah satu-satunya direktori tingkat atas yang diawali huruf u pada sistem biasa. Nama yang panjang tidak perlu diketik sampai selesai.

Biasakan menekan Tab pada setiap jalur panjang, karena pelengkapan sekaligus menjadi pemeriksa ejaan. Jalur yang tidak terlengkapi berarti ejaannya keliru atau kandidatnya lebih dari satu, dan keduanya lebih cepat ditemukan sebelum Enter ditekan.

Kesalahan umum#

Menganggap terminal dan shell satu hal. Gejalanya muncul ketika pengaturan seperti warna atau font diubah. Pengaturan tersebut ternyata milik aplikasi terminal, sedangkan perilaku perintah tidak terpengaruh karena ditentukan oleh shell. Perbaikannya adalah mengenali lapisannya, sebagaimana digambarkan diagram pada bagian pertama.

Perintah tidak ditemukan. Pesan command not found muncul ketika nama yang diketik tidak cocok dengan perintah mana pun yang dikenal shell. Penyebab yang paling umum adalah salah ketik atau program yang belum terpasang. Periksa ejaannya, lengkapi dengan Tab, lalu pastikan paketnya sudah diinstal.

Sesi tertutup tanpa sengaja. Kesalahan yang sering terjadi adalah menekan Ctrl-D padahal tujuannya hanya membatalkan baris yang sedang diketik, sehingga sesi ikut tertutup. Gunakan Ctrl-C untuk membatalkan baris, dan simpan Ctrl-D untuk menandai akhir masukan yang memang diinginkan.

Ringkasan#

  • Terminal emulator adalah aplikasi jendela teks, sedangkan shell adalah program di dalamnya yang membaca dan menafsirkan perintah, misalnya bash.
  • Prompt bash menyatakan nama pengguna, nama host, dan direktori kerja, dengan $ untuk pengguna biasa dan # untuk root.
  • Pintasan readline seperti Ctrl-A, Ctrl-U, dan Ctrl-L mengurangi pemakaian tombol panah saat menyunting baris perintah.
  • Tab completion melengkapi nama perintah dan berkas secara otomatis, dan Tab kedua menampilkan pilihan yang tersisa.

Referensi#