Dari sekian aplikasi di desktop, satu jendela hitam berisi teks adalah yang paling menentukan produktivitas kita: terminal. Namun “terminal” sebenarnya adalah dua program berbeda yang bekerja berlapis — jendela grafisnya dan penerjemah perintah di dalamnya — dan membedakan keduanya menjelaskan banyak perilaku, termasuk mengapa kadang pengaturan kita “tidak terbaca”. Pada Chapter ini kita kenali pilihan terminal emulator dan shell, lalu bedah tuntas urutan berkas startup yang dijalankan saat sesi dibuka.

Terminal Emulator: Jendela Teksnya #

Terminal emulator adalah program grafis yang menyediakan jendela tempat kita mengetik. Ia tidak mengerti perintah — tugasnya hanya menampilkan teks, meneruskan ketikan, dan mengelola jendelanya. Setiap DE membawa pilihan bawaan, dan banyak alternatif independen yang bisa dipasang di DE mana pun:

Terminal emulatorAsalCiri khas
GNOME TerminalGNOMElengkap, profil warna dan tab
KonsoleKDE Plasmaterintegrasi Plasma, split view
xtermindependenemulator asli era X11, berada di hampir semua sistem
Alacrittyindependenrender lewat GPU, konfigurasi berkas teks
kittyindependenrender GPU, fitur ekstra seperti tampilan gambar

GNOME juga menyediakan Console, terminal sederhana untuk pengguna awam yang mulai dibawa rilis GNOME terbaru. Di luar daftar tersebut pilihannya masih panjang — yang penting dipahami: mengganti terminal emulator tidak mengubah perilaku perintah apa pun, karena perintah diterjemahkan oleh lapisan berikutnya.

Shell: Penerjemah Perintahnya #

Shell adalah program yang berjalan di dalam jendela terminal: membaca baris yang kita ketik, menerjemahkannya, menjalankan programnya, lalu mengembalikan hasil ke layar. Shell login kita tercatat di kolom terakhir /etc/passwd dan tersalin ke variabel lingkungan SHELL. Tiga shell yang paling sering dijumpai:

ShellKekuatanCatatan
bashbawaan hampir semua distro, standar skripdiajarkan tuntas di Section Command Line
zshpelengkapan dan tema interaktif kayabawaan macOS
fishsaran saat mengetik, sangat ramah pemulasintaks default-nya tidak POSIX

bash adalah pilihan aman yang menjadi acuan seluruh Course ini; zsh dan fish layak dicoba setelah kita nyaman, karena keduanya lebih nikmat dipakai interaktif. Klasifikasi lengkapnya dirangkum di halaman shell di ArchWiki , sedangkan aturan pembacaan berkas startupnya dispesifikasikan pada halaman manual bash .

Login Shell versus Non-Login Shell #

Bash membedakan dua cara sesi dimulai. Login shell terjadi ketika kita mengautentikasi: login di layar console, koneksi SSH, atau awal sesi desktop. Shell jenis ini membaca /etc/profile lalu berkas pertama yang ditemukan di home directory: ~/.bash_profile, ~/.bash_login, atau ~/.profile. Non-login shell interaktif — misalnya jendela terminal yang kita buka dari dalam desktop — melewati ketiganya dan membaca berkas rc milik sistem (di Debian dan Ubuntu: /etc/bash.bashrc) lalu ~/.bashrc. Pemisahan inilah penyebab klasik pengaturan “hilang”: variabel yang kita taruh di ~/.bash_profile tidak terbaca oleh terminal GUI.

Urutan tersebut bisa kita buktikan sendiri tanpa menyentuh berkas asli kita: cukup alihkan variabel HOME ke folder latihan, karena bash membaca berkas startup relatif terhadap HOME yang sedang berlaku. Opsi -l memerintahkan bash berperan sebagai login shell:

bash
mkdir -p latihan-home
printf 'echo "~/.bash_profile dibaca"\n' > latihan-home/.bash_profile
HOME=~/latihan-home bash -lc 'echo "perintah kita berjalan setelahnya"'

Output yang Dihasilkan:

text
~/.bash_profile dibaca
perintah kita berjalan setelahnya

Sebaliknya, bash tanpa -l adalah shell non-login yang sama dengan terminal GUI — berkas profil dilewati:

bash
mkdir -p latihan-home
printf 'echo "~/.bash_profile dibaca"\n' > latihan-home/.bash_profile
HOME=~/latihan-home bash -c 'echo "shell non-login melewati ~/.bash_profile"'

Output yang Dihasilkan:

text
shell non-login melewati ~/.bash_profile

Mari kita telaah kedua blok di atas:

  1. Baris mkdir -p latihan-home: membuat folder latihan yang berperan sebagai home directory palsu — berkas asli kita tidak tersentuh sedikit pun.
  2. Baris printf ... > latihan-home/.bash_profile: membuat berkas profil latihan berisi satu perintah echo; printf dipakai karena menghasilkan baris baru \n dengan pasti, tidak seperti echo yang perilakunya berbeda antar versi.
  3. Baris HOME=~/latihan-home bash -lc '...' (blok pertama): menjalankan bash baru dengan HOME yang dialihkan ke folder latihan — output membuktikan ~/.bash_profile dibaca lebih dulu, baru perintah kita.
  4. Baris HOME=~/latihan-home bash -c '...' (blok kedua): sama persis tanpa -l; output-nya membuktikan berkas profil dilewati, persis perilaku terminal GUI.

Jembatan antara dua dunia itu sudah dirakit oleh distro. Pada Debian dan Ubuntu, ~/.profile bawaan pengguna baru secara eksplisit menjalankan ~/.bashrc — pola yang sama dipakai banyak distro di ~/.bash_profile. Kita bisa meniru pola tersebut di folder latihan untuk melihat efeknya:

bash
mkdir -p latihan-home
printf '. "$HOME/.bashrc"\n' > latihan-home/.bash_profile
printf 'echo "~/.bashrc dibaca lewat profile"\n' > latihan-home/.bashrc
HOME=~/latihan-home bash -lc 'true'

Output yang Dihasilkan:

text
~/.bashrc dibaca lewat profile

Baris kedua mengisi ~/.bash_profile dengan tanda titik (.) — bentuk singkat perintah source — yang menjalankan isi ~/.bashrc di shell yang sama. Baris ketiga mengisi ~/.bashrc dengan satu echo. Baris terakhir menjalankan login shell dengan perintah true yang tidak menghasilkan apa pun, sehingga satu-satunya output adalah bukti bahwa .bashrc ikut tereksekusi lewat profile.

Dengan terminal dan shell yang kini jelas perannya, kita siap mengelola file dalam jumlah besar tanpa harus mengetik satu perintah pun — lewat aplikasi grafis bernama file manager, materi Chapter File Manager.