Shell (bash atau zsh) diam-diam menyimpan semua perintah yang pernah kamu ketik, dan punya tombol pintas untuk mengedit baris, mencari perintah lama, dan mengendalikan program yang sedang jalan. Mirip remote TV: buat pindah ke channel 37 kamu cukup tekan 3 dan 7, gak perlu menekan "channel naik" 36 kali. Di terminal, buat pindah ke awal baris kamu cukup tekan Ctrl+A, gak perlu menahan panah kiri.
🧪 Tebakan cepat: kursor ada di akhir
git commit -m "fix typo", lalu kamu tekan Ctrl+W. Apa yang tersisa? Tebak dulu, jawabannya ada di bagian "Mengedit baris tanpa backspace".
Mengedit baris tanpa backspace
| Tombol | Fungsinya |
|---|---|
| Ctrl+A | pindah ke awal baris |
| Ctrl+E | pindah ke akhir baris |
| Ctrl+W | hapus satu kata di kiri kursor, sampai spasi sebelumnya |
| Ctrl+U | hapus dari kursor sampai awal baris |
| Ctrl+K | hapus dari kursor sampai akhir baris |
| Ctrl+Y | tempel lagi teks yang terakhir dihapus |
| Tab | lengkapi nama file atau perintah |
Teks yang dihapus dengan Ctrl+W, Ctrl+U, atau Ctrl+K gak hilang: shell menyimpannya, dan Ctrl+Y menempelkannya lagi. Ini yang terjadi di Lab, dengan █ sebagai kursor:
| Tombol | Baris sesudahnya |
|---|---|
| (awal) | git commit -m "fix typo"█ |
| Ctrl+W | git commit -m "fix █ |
| Ctrl+Y | git commit -m "fix typo"█ |
| Ctrl+A | █git commit -m "fix typo" |
| Ctrl+K | █ (kosong, semuanya tersimpan) |
| Ctrl+Y | git commit -m "fix typo"█ |
Ctrl+W berhenti di spasi, bukan di tanda kutip, jadi yang terhapus cuma typo". Itu jawaban tebakannya. Trik Ctrl+U lalu Ctrl+Y berguna saat kamu sudah mengetik perintah panjang lalu ingat harus menjalankan hal lain dulu: kosongkan baris, jalankan yang lain, lalu tempel lagi.
History: perintah lama gak perlu diketik ulang
- Panah atas memunculkan perintah sebelumnya, satu per satu.
- Ctrl+R mencari mundur di history. Ketik sebagian perintahnya, dan bash menampilkan yang paling baru cocok:
(reverse-i-search)`git': git push origin main. Tekan Ctrl+R lagi untuk yang lebih lama, Enter untuk menjalankannya, Ctrl+G untuk batal. !!diganti dengan perintah terakhir, dan!$dengan kata terakhir dari perintah terakhir. Bash mencetak hasil gantiannya dulu, baru menjalankannya:
budi@laptop:~/toko-online$ mkdir /opt/app
mkdir: cannot create directory ‘/opt/app’: Permission denied
budi@laptop:~/toko-online$ sudo !!
sudo mkdir /opt/app
[sudo] password for budi:
budi@laptop:~/toko-online$ cd !$
cd /opt/app
budi@laptop:/opt/app$
sudo !!= "jalankan lagi perintah terakhir, kali ini dengan sudo". Pas untuk perintah yang gagal karenaPermission denied.cd !$=cd /opt/app, karena/opt/appadalah kata terakhir perintah sebelumnya.- Perintah
historymencetak semuanya dengan nomor urut, termasukhistoryitu sendiri.
Mengendalikan program yang sedang jalan
| Tombol | Fungsinya |
|---|---|
| Ctrl+C | hentikan program yang sedang jalan (sinyal SIGINT) |
| Ctrl+Z | hentikan sementara (suspend) dan kembali ke prompt; lanjutkan dengan fg |
| Ctrl+L | bersihkan layar terminal, baris yang sedang diketik tetap ada |
| Ctrl+D | di baris kosong: keluar dari shell |
budi@laptop:~$ ping belajarweb.dev
PING belajarweb.dev (203.0.113.10) 56(84) bytes of data.
64 bytes from 203.0.113.10: icmp_seq=1 ttl=54 time=12.4 ms
^Z
[1]+ Stopped ping belajarweb.dev
budi@laptop:~$ fg
ping belajarweb.dev
64 bytes from 203.0.113.10: icmp_seq=2 ttl=54 time=11.9 ms
Program yang di-Ctrl+Z belum mati: dia diam di belakang sebagai job nomor 1, sampai kamu fg (lanjut di depan) atau bg (lanjut di background), seperti di pelajaran Process Management.
tmux sekilas: sesi yang punya nama
tmux menjalankan terminal di dalam sesi yang tetap hidup di server walaupun koneksi SSH-mu putus. Empat perintah sesi yang paling dasar:
tmux new-session -s main # bikin sesi bernama main (singkatnya: tmux new -s main)
tmux list-sessions # daftar sesi yang ada (singkatnya: tmux ls)
tmux attach-session -t main # masuk lagi ke sesi main (singkatnya: tmux attach -t main)
tmux kill-session -t main # tutup sesi main
-s(session name) memberi nama saat membuat sesi.-t(target) menunjuk sesi yang sudah ada.list-sessionsgak butuh nama. Detail tmux (window, pane, detach) ada di pelajaran berikutnya.
Di latihan: kamus shortcut dan parser perintah tmux
Latihannya ditulis dalam JavaScript. describeShortcut adalah kamus: object yang memetakan tombol ke deskripsinya, dengan cadangan Shortcut tidak dikenal:
| Tombol | Deskripsi di latihan |
|---|---|
Ctrl+R |
Reverse search history |
Ctrl+C |
Batalkan proses yang sedang berjalan |
Ctrl+Z |
Suspend proses ke background |
Ctrl+L |
Bersihkan layar terminal |
Ctrl+A |
Pindah ke awal baris |
Ctrl+E |
Pindah ke akhir baris |
!! |
Ulangi perintah terakhir |
const tokens = "tmux attach-session -t main".split(" ");
console.log(tokens); // [ 'tmux', 'attach-session', '-t', 'main' ]
console.log(tokens[1]); // attach-session
console.log(tokens.indexOf("-t")); // 2, jadi namanya ada di tokens[3]
shortcuts[key] || "Shortcut tidak dikenal"mengembalikan deskripsinya, atau teks cadangan kalau tombolnya gak ada di kamus.- Kata kedua adalah aksinya. Nama sesi ada tepat setelah
-satau-t; kalau gak ada keduanya, seperti ditmux list-sessions, namanyanull.
⚠️ Jebakan yang sering ketemu
- Mengira Ctrl+Z menutup program. Program itu cuma berhenti sementara dan masih memegang resource-nya.
npm run devyang di-Ctrl+Z masih memegang port 3000, jadi menjalankannya lagi gagal karena port-nya sudah dipakai. Ketikfg, lalu Ctrl+C. sudo !!tanpa melihat perintah terakhirnya.!!menjalankan apa pun yang terakhir, sekarang sebagai root. Tekan panah atas dulu kalau ragu.- Ctrl+W meninggalkan tanda kutip.
git commit -m "fixpunya kutip yang belum ditutup, jadi Enter memunculkan prompt>: bash menunggu kutip penutup. Tekan Ctrl+C untuk batal. - Terminal tiba-tiba membeku. Kalau kamu gak sengaja menekan Ctrl+S, output terminal dihentikan. Tekan Ctrl+Q untuk melanjutkan.
TL;DR: Ctrl+A dan Ctrl+E loncat ke awal dan akhir baris. Ctrl+W, Ctrl+U, Ctrl+K menghapus kata, ke awal, dan ke akhir baris, dan Ctrl+Y menempelkan yang terakhir dihapus. Ctrl+R mencari mundur di history, !! mengulang perintah terakhir (sudo !! untuk mengulang dengan sudo), dan !$ adalah kata terakhir perintah sebelumnya. Ctrl+C menghentikan program, Ctrl+Z menghentikan sementara (lanjutkan dengan fg), Ctrl+L membersihkan layar. tmux: new-session -s nama, list-sessions, attach-session -t nama, kill-session -t nama, dan sesinya tetap hidup walau SSH putus.