DISKON TERBATAS! Masukkan kupon "skillbaru" saat checkout di kelas apa saja
Skodev
Belajar coding dalam bahasa Indonesia
CLI adalah antarmuka berbasis teks, meski terbatas, ia berpotensi menjadi antarmuka yang efektif. Artikel ini membahas bagaimana agar lebih produktif di CLI
Daftar Isi:
Sebagai pemrogram, kita pasti pernah menggunakan CLI (Command-Line Interface), setidaknya ketika hendak menginstall paket baru dengan package manager yang tersedia di sistem operasi yang kita pakai. Kali ini, kita akan membahas lebih dalam apa itu CLI dan bagaimana penggunaannya untuk menunjang rutinitas pemrograman kita.
Command-Line Interface (CLI) adalah antarmuka dimana kita berinteraksi dengan komputer melalui baris-baris perintah berbentuk teks. Antarmuka CLI biasanya ada dalam
sebuah terminal atau sering disebut juga dengan console, sebuah program berbasis teks untuk menangkap input keyboard dan menampilkan hasilnya.
Pemrosesan perintah-perintah CLI dilakukan oleh sebuah interpreter atau shell
.
shell
?shell
adalah sebuah program untuk menerjemahkan (interpret) teks-teks perintah input dari user sehingga bisa dieksekusi oleh sistem operasi.
cmd.exe dan PowerShell adalah contoh interpreter untuk Command-Line yang ada di sistem operasi Windows, sedangkan bash, zsh, sh
adalah contoh interpreter Command-Line di *nix seperti linux dan MacOS.
Dalam proses pengembangan perangkat lunak, kita pasti akan bersentuhan dengan komputer server, terutama ketika masuk fase deployment dan maintenance. Kebanyakan server yang berbasis linux hanya menyediakan CLI sebagai antarmuka utama mereka. Tanpa pengetahuan tentang CLI sebelumnya, bisa dipastikan produktifitas kita akan jatuh karena perlu “googling” untuk mencari perintah yang tepat.
CLI bisa meningkatkan produktifitas kita sebagai seseorang yang banyak mengetik karena CLI didesain untuk menggunakan keyboard sebagai alat intput utama, sehingga, tangan tidak perlu terlalu banyak meninggalkan keyboard untuk melakukan apapun di dalamnya, misalnya mencari dan membuka berkas dengan mause. Dengan begitu, waktu yang dibutuhkan untuk melakukan menyelesaikan sebuah pekerjaan bisa lebih cepat.
CLI bisa mempermudah kita dalam multitasking dengan dukungan utilitas dari shell
-nya meskipun hanya dengan satu layar saja.
Melihat sumber daya komputer secara langsung sambil menjalankan program yang barus saja kita bangun dan membuka text editor untuk membuat perubahan
di baris kode program adalah contoh multitasking yang bisa dilakukan di satu sesi CLI.
Selanjutnya, apa yang bisa kita lakukan untuk meningkatkan kemampuan penggunaan CLI? Ada beberapa hal yang akan kita bahas dalam tulisan ini. Namun, kita akan fokus pada CLI di sistem operasi *nix, linux dan MacOS yang lebih umum dipakai di server maupun di komputer pribadi, bahkan Windows pun sudah mempunyai subsistem linux (WSL) dimana kita bisa menjalankan linux dalam Windows tanpa mesin virtual.
shell
yang lebih ramahbash
merupakan shell
bawaan dari kebanyakan distro linux yang ada, namun bisa dikatakan kalau bash
minim fitur dan relatif lebih susah untuk dikustomisasi.
Alternatifnya adalah zsh dengan beberapa fitur tambahan seperti command completion dan dukungan untuk penemaan prompt
sehingga lebih mudah untuk dikustomisasi.
Dukungan komunitas zsh
sangat aktif, salah satunya dengan adanya oh-my-zsh sebuah perangkat untuk mengatur konfigurasi zsh
kita.
fish shell adalah pilihan yang bisa dipertimbangkan. Seperti zsh
, fish
mempunyai fitur yang lebih baik dari bash
seperti
command completion, warna 24 bit, syntax highlighting.
fish
juga mempunya komunitas yang aktif, banyak tools dari komunitas yang bisa dipakai untuk mengatur konfigurasinya, fisher
dan oh-my-fish adalah contohnya.
Anatomi dari sebuah perintah CLI biasanya terbagi menjadi tiga bagian: perintah (command), opsi (options), dan argumen.
ls -al /home/nauval
Dari perintah diatas, ls
adalah perintahnya, -al
adalah options-nya, lalu /home/budi
adalah argumennya.
Hampir semua perintah CLI mempunyai opsi untuk untuk menunjukkan petunjuk penggunaannya, biasanya dengan menambahkan opsi -h
atau --help
, misalnya ls --help
.
Untuk manual yang lebih lengkap bisa diakses dengan perintah man <command>
Seperti sebuah bahasa, perintah CLI adalah kosa katanya. Semakin banyak kosa kata yang dikuasai, akan semakin lancar juga komunikasinya.
Nanti kita akan sedikit membahas perintah-perintah yang banyak digunakan sehari-hari.
Alias adalah cara untuk memperpendek perintah sehingga lebih efisien. Misalnya, untuk memasukkan (commit) perubahan dalam sebuah repositori git
maka kita perlu melakukan git add .
lalu git commit
. Dengan membuat alias kita bisa membuat sebuah perintah baru dengan menggabungkan kedua perintah diatas.
alias gac="git add . && git commit"
Dengan begitu kita hanya perlu mengetik perintah gac
pada CLI untuk membuat menggantikan perintah aslinya yang lebih panjang.
Ketika berada dalam CLI, sering kali kita perlu untuk mengubah berkas yang ada atau membuat file baru yang membutuhkan editor.
Salah satu teks editor berbasis CLI yang tersedia adalah vim
yang tersedia hampir di setiap sistem operasi berbasis *nix, sehingga kita
tidak perlu belajar lagi ketika berpindah ke komputer yang lain.
Perintah dalam vim
itu seperti sebuah bahasa yang menggunakan struktur yang terdiri dari kata benda (nouns), kata kerja (verbs),
dan kata keterangan (adverbs). Rumus paling sederhananya adalah
verb + noun
# dengan adverbs
verb + adverb + noun
d
untuk deletec
untuk chagey
untuk yank atau salin (copy)v
untuk visually select per character (V
untuk memilih baris)w
untuk words
untuk sentence)
untuk sentence (cara lain)p
untuk paragraph}
untuk paragraph (cara lain)t
untuk tag (HTML/XML)h
, j
, k
, l
untuk kiri, bawah, atas, kananw
untuk bergerak ke awal kata selanjutnyae
untuk bergerak ke akhir kata selanjutnyab
untuk bergerak ke akhir awal sebelumnya$
untuk bergerak ke akhir karakter pada sebuah baris0
untuk bergerak ke awal karakter pada sebuah baris}
untuk bergerak ke paragraf selanjutnyagg
untuk bergerak ke awal dokumenG
untuk bergerak ke akhir dokumeni
untuk inside (di dalam)a
untuk around (di sekitar)[0-9]
(nomor dari 0-9)Contoh dari perintah dalam vim
berdasarkan rumus diatas:
# delete 2 words
d2w
# change inside "
ci"
# change around tag
cit
# copy inside paragraph
yip
Yang berbeda dari editor lainnya adalah vim
mempunyai tiga mode utama:
normal
mode bawaan untuk melakukan perintah-perintah seperti hapus, menggerakkan kursor, salin, dan lain-lain.insert
mode untuk mengetik, dipicu dengan menekan i
pada mode normal, esc
untuk keluar ke mode normal
visual
mode untuk memilih (menyeleksi) teks untuk dilakukan operasi lainnya seperti hapus, salin, dan lain-lainSelain perintah-perintah di atas, ada beberapa perintah penting lainnya agar bisa mengedit berkas:
:w
pada mode normal
untuk menyimpan (write) berkas:q
pada mode normal
untuk berhenti dan keluar dari vim
(quit):q!
pada mode normal
untuk keluar tanpa menyimpan perubahanUntuk belajar vim
lebih lanjut secara interaktif bisa menuju ke vim.is.
Neovim
Neovim (nvim
) adalah diperuntukkan sebagai pengganti vim
dengan berbagai tambahan fitur seperti klien LSP (Language Server Protocol)
bawaan untuk code completion, refaktor dan inspeksi kode, serta lebih mudah untuk di-extend dengan Lua. Oleh karena itu, Neovim bisa dikustomisasi menjadi IDE seperti VSCode.
Lazyvim adalah salah satu ekstensi yang bisa membuat Neovim menjadi IDE moderen dalam sekejap.
tmux
terminal multiplexer untuk mempermudah multitaskingtmux
membolehkan kita untuk membuat semacam “pseudo-terminal” dari satu terminal. Meskipun kita hanya membuka satu tab aplikasi terminal,
dengan tmux
kita bisa membuat semacam terminal-teminal lain di dalamnya. Ini akan sangat berguna ketika kita ingin menjalankan program dalam satu koneksi,
misalnya ketika sedang melakukan remote ssh
.
tmux
tidak bergantung pada aplikasi terminal yang sedang berjalan, jadi ketika kita tidak sengaja menutup aplikasi terminal, server tmux
akan tetap
berjalan dan kita cukup meng-attach ke server tmux
yang sedang berjalan dengan perintah tmux attach
.
tmux
bukan program bawaan dari linux ataupun MacOS, jadi kita perlu install terlebih dahulu.
# MacOS
brew install tmux
# Arch linux
pacman -S tmux
# RHEL or CentOS
yum install tmux
# Debian or Ubuntu
apt install tmux
Untuk membuat sebuah sesi tmux
baru kita perlu menjalankan perintah berikut
tmux new -s <session-name>
Seperti program-program di linux lainnya, tmux
mempunyai keybinding yang dipakai untuk mengoperasikannya, antara lain:
ctrl+b
w
untuk menavigasi semua jendela (window) yang ada di server tmux
ctrl+b
c
untuk membuat (create) jendela baructrl+b
n
atau p
untuk lompat ke jendela setelahnya atau sebelumnyactrl+b
%
untuk membagi sebuah jendela menjadi dua panel secara horizontalctrl+b
”
untuk membagi sebuah jendela menjadi dua panel secara vertikalctrl+b
x
menutup paneltmux
juga bisa dikonfigurasi untuk menyesuaikan kebutuhan kita, misalnya mengganti keybinding yang lebih mudah diingat, mengganti tema warna, dan lain-lain.
Pada bagian ini kita akan berkenalan lebih jauh dengan beberapa perintah CLI yang umum dan sering digunakan baik di lokal komputer maupun di komputer server.
ls
melihat isi dari sebuah direktori
ls -l
: melihat isi directori dalam bentuk list beserta detailnya: pemilik, hak akses, terakhir diperbarui, filesize dalam bytels -a
menampilkan berkas dan direktori tersembunyi (all)ls -h
menampilkan ukuran file dalam format yang lebih mudah dibaca (human-readable) ketika disandingkan dengan -l
ls -t
mengurutkan berdasarkan waktu pembaruan (time) dari yang terbaruls -S
mengurutkan berdasarkan ukuran (size) dari yang terbesarls -r
membalikkan urutan (reverse order)Opsi-opsi diatas bisa digabungkan:
ls -ltr
melihat isi direktori dalam bentuk list dan diurutkan berdasarkan waktu pembaruan berkas tersebut dari yang terlama ke yang terbaruls -lSr
mengurutkan berkas dan direktori berdasarkan ukurannya dari yang terkecil ke yang terbesarmv
memindahkan (move) direktori atau berkas dari satu tempat ke tempat yang lain, bisa juga digunakan untuk mengubah nama direktori atau berkas
mv /home/budi/some-file.txt /home/budi/other-file.txt
cp
copy berkas dari satu tempat ke tempat yang lain
cp -r
copy direktori beserta semua isinya secara rekursif (recursive)
cp -r /home/budi/a-dir /home/budi/b-dir
Akan meng-copy a-dir
beserta semua isinya ke dalam b-dir
.
rm
menghapus sebuah berkas, untuk menghapus sebuah direktori kita gunakan opsi -r
rm -r /home/budi/a-dir
cd
masuk ke sebuah direktory
cd /home/budi/a-dir
mkdir
membuat direktory baru (make directory)
touch
membuat sebuah file kosong
touch new-file.txt
find
mencari file atau direktori berdasarkan ekspresi yang diberikan. Sintaksis dari perintah ini adalah
find [path...] [expression]
path
menspesifikasikan satu atau lebih direktori tempat pencarian, defaultnya adalah direktori pada saat ituexpression
menentukan berkas dan direktori mana yang perlu dicari dan juga aksi yang dilakukan terhadap berkas/direktori tersebut# mencari file dengan suffix *test.text di dalam direktori /path/to/test-find-dir
# kemudian tampilkan hasilnya dalam bentuk detail list
find /path/to/test-find-dir -name "*test.text" -ls
cat
untuk menampilkan isi dari sebuah berkas
cat text.txt
grep
menampilkan baris-baris yang sesuai dengan pola yang dispesifikasikan.
grep [pattern] [file...]
less
menampilkan isi sebuah berkas per satu layar, jika isi dari berkas tersebut panjang maka yang ditampilkan hanya yang muat pada satu layar yang ada saat itu.
less
mirip dengan more
tapi dengan fitur yang lebih. less
biasanya digunakan untuk membuka berkas dengan ukuran yang besar seperti log aplikasi.
Salah satu fitur yang berguna di less
adalah pencarian. Untuk mencari sebuah kata/frasa dari baris sekarang ke depan, ketik/
lalu kata yang dicari,
misalnya /granted
lalu tekan enter, less
akan mencari kata granted dan akan menyorot kata yang sesuai bila ditemukan.
Untuk berpindah ke hasil selanjutnya kita tekan n
, untuk kembali ke hasil sebelumnya tekan N
.
Untuk mencari dari baris sekarang ke belakang memakai ?
dengan cara yang sama dengan pencarian ke depan.
top
menampilkan penggunaan sumberdaya pada mesin komputer, htop
adalah versi yang lebih baru dengan penambahan interaksi user dan warna
free
menampilkan memory yang terpakai sekarang, menambahkan opsi -h
membuat outputnya menjadi lebih mudah dibaca manusia (human-readable).
Kolom yang perlu diperhatikan adalah available
jika kita mau tahu seberapa RAM yang tersedia pada saat itu.
du
menampilkan estimasi ukuran dari sebuah direktori atau file.
du -h /path/to/dir
Perintah diatas akan mengestimasi total ukuran dari direktori path/to/dir
secara rekursif, semua berkas yang ada di dalam direktori dan sub direktory akan dihitung
df
menampilkan penggunaan hard disk berdasarkan file system-nya
Kita bisa mengkombinasi beberapa perintah CLI dalam satu baris eksekusi agar lebih efisien.
;
mengeksekusi semua perintah tanpa memandang perintah sebelumnya gagal atau tidak
cd logs; du -sh; df -h
Jika salah satu perintah gagal, maka perintah selanjutnya akan tetap dieksekusi, ini bisa bisa menghasilkan hasil yang tidak sesuai ekspektasi
&&
(operator AND) mengeksekusi perintah hanya jika perintah sebelumnya sukses
cd some-dir && pwd
pwd
hanya akan dieksekusi ketika cd some-dir
berhasil dieksekusi.
||
(operator OR) mengeksekusi perintah selanjutnya hanya ketika perintah sebelumnya gagal (error)
cd some-dir || echo "directory is missing"
Perintah diatas akan menampilkan pesan error lalu mengeksekusi perintah selanjutnya, hasilnya akan seperti berikut:
cd: The directory 'some-dir' does not exist
directory is missing
|
(operator pipe) mengarahkan keluaran dari perintah satu menjadi masukan perintah sesudahnya
ls | grep test
Baris diatas mengeksekusi ls
lalu hasil dari perintah tersebut akan diarahkan sebagai input dari perintah selanjutnya grep test <hasil ls>
.
Hasilnya adalah deretan direktori yang mempunyai kata test di namanya.
CLI, apabila kita bisa menggunakannya dengan baik bisa menjadi lingkungan yang sangat efisien dan produktif. Banyak tools ataupun program yang menunjang pekerjaan kita di CLI yang tak jarang tidak ada padanannya dalam GUI. Sebagai pemrogram, cepat atau lambat kita akan bersentuhan dengan antar muka ini apalagi ketika berurusan dengan komputer server. Jadi, pengetahuan tentang CLI dan bagaimana menggunakannya dengan efektif adalah sebuah investasi yang akan membuahkan hasil positif di kemudian hari.
Hi, saya Nauval, seorang programmer yang senang belajar hal-hal baru. Sekarang saya sedang belajar bagaimana menulis hal-hal teknis dengan lebih baik