Mengenal shell di lingkungan Linux

Dulu Sebelum adanya GUI cara kita berinteraksi dengan komputer menggunakan CLI yaitu mengetik baris perintah pada sebuah antarmuka dalam bentuk baris teks seperti 👇, namun saat ini penggunaan CLI juga masih sering digunakan khususnya dikalangan para developer.

installing nginx in ubuntu
Fig 1. Terminal emulator, instalasi package dan check service.

Jika kamu pernah menggunakan unix/linux, mungkin pernah menggunakan program diatas, atau setiap hari menggunakannya untuk mengeksekusi suatu perintah melalui terminal emulator.

Pernahkah kita berpikir 🤔️ bagaimana perintah tersebut bisa dipahami oleh komputer?. Kita[1] tidak bisa secara langsung berkomunikasi dengan sebuah hardware komputer, maka dari itu kita membutuhkan sebuah sistem operasi, dalam sebuah sistem operasi terdapat kernel; Kernel salah satu bagian program dari sistem operasi komputer, yang bertindak menjembatani antara perangkat lunak dengan perangkat keras.

kernel central of operating system
Fig 2. Bagan kernel.

Kernel memfasilitasi interaksi antara komponen perangkat keras dan perangkat lunak, berperan untuk menangani permintaan input/output dari perangkat lunak, selanjutnya menerjemahkannya ke dalam pemrosesan data untuk diinstruksikan ke CPU, sehingga Hardware(cpu, memory, devices) mengerti perintah yang dimaksud dari pengguna.

Ketika kita memberikan suatu perintah pada terminal emulator, kernel tidak langsung mengerti perintah yang kita berikan, disini membutuhkan suatu interface sebagai perantara menuju kernel yaitu Shell.

shell
Fig 3. Bagan komunikasi shell.

Shell adalah sebuah command-line interpreter; program yang berperan sebagai penerjemah perintah yang diinputkan oleh User yang melalui terminal, sehingga perintah tersebut bisa dimengerti oleh si Kernel.

Login shell biasanya ditetapkan oleh local System Administrator ketika pada saat pertama user kamu dibuat, kamu bisa lihat login shell yang sedang kamu gunakan dengan perintah dibawah ini.

$ echo $SHELL
# atau
$ echo $0

Setiap shell mempunyai default prompt. beberapa shell yang paling umum:

$ (dollar sign)   # sh, ksh, bash
% (percent sign)  # csh, tcsh
Terminologi pada shell prompt

Shell prompt adalah tempat dimana kita menuliskan suatu perintah, berikut adalah terminologinya ini membantu, jika kamu ingin mengetahui bagian-bagianya.

shell
Fig 4. Bagian-bagin dari shell prompt.

Dibawah ini salah satu contoh perintah sederhana untuk menampilkan sebuah arsitektur CPU komputer yang sedang saya gunakan.

installing nginx in ubuntu
Fig 5. Menampilkan informasi tentang arsitektur CPU.

Dari perintah yang contohkan diatas, ketika mengetikan suatu inputan perintah di terminal dan menekan ENTER, maka shell akan mengubah perintah yang diberikan menjadi bahasa yang bisa dipahami oleh kernel, dan Kernel menerjemahkannya ke dalam pemrosesan data untuk diintruksikan ke Hardware sehingga menghasilkan output yg sesuai dengan perintah user.

Shell mempunyai beberapa macam dan turunan, berikut yang paling umum.

shell evolution
Fig 6. Perkembangan shell dari tahun ke tahun.

Sedikit penjelasan dari gambar diatas.

  • Bourne shell sh Dikembangkan oleh Stephen Bourne di Bell Labs, yang kala itu sebagai pengganti Thompson shell(diciptakan Ken Thompson), banyak sistem unix-like tetap memiliki /bin/sh—yang mana menjadi symbolic link atau hard link, bahkan ketika shell lain yang digunakan tetap sh adalah sebagai dasarnya, sebagai kompatibilitas perintah.
  • Korn shell ksh Unix shell yang dikembangkan oleh David Korn di Bell Labs, inisialisasi pengembangan ini berdasar pada source code Bourne shell, namun juga memiliki fitur csh dan sh, pengembanganya pun pada saat saya menulis ini pun terus terawat.
  • Bourne again shell bash adalah proyek ini open source GNU project memiliki kompatibel dengan sh yang menggabungkan fitur penting dari ksh dan csh, dan menjadi salah satu shell yang paling umum digunakan (umumnya menjadi default shell login Linux dan Apple’s macOS Mojave).
  • Z shell zsh ini mempunyai wadah komunitasnya disebutnya “Oh My Zsh”, plugin dan theme zsh bisa kita temukan di komunitas ini, saya saat ini menggunakan zsh, shell ini juga menjadi default dari sistem operasi macOS Catalina, yang menggantikan bash.
  • friendly interactive shell fish yah sesuai dengan deskripsi di web nya, menurut saya shell ini fun banget, fitur yang saya sukai dari shell ini autosuggestions, dan konfigurasi yang mudah melalui web based.

Masih banyak yang belum dijelaskan pada tulisan ini jika masih tertarik, baca lebih banyak dan juga komparasinya masing-masing shell.


Jika kamu tertarik untuk mengubah default shell login pada sistem operasi, kamu bisa menginstall dengan cara mengikuti didokumentasi/cara penginstalan masing-masing shell disini saya tidak membahas karena distro yang kita pakai mungkin berbeda-beda.

Untuk menjadikan default shell login pada OS bisa menggunakan perintah ini.

# command
$ sudo chsh [options] [LOGIN]

# contoh penggunaan
$ sudo chsh -s /user/bin/zsh harpi
# mengubah default shell user harpi menjadi zsh shell.
$ reboot

# atau kamu juga bisa mengubah file /etc/passwd dan edit secara manual user shellnya.
# jika masih bingung manfaatkan perintah man untuk melihat manual page.
$ man chsh

Terakhir untuk tulisan ini, shell memiliki berbagai macam, pilihlah shell yang sesuai dengan keinginanmu untuk menunjang produktivitas dan sesuaikan dengan kebutuhan, terlalu banyak plugin dan kebingungan memilih theme itu buruk 😁.

Terimakasih sudah baca, penulis menerima kritik dan saran.

Resources
updated_at 07-06-2021