What is a shell? 🐚 adalah kerang ajaib?

Dulu ↱ Sebelum adanya GUI cara user berinteraksi dengan komputer menggunakan CLI yaitu mengetik baris perintah pada sebuah antarmuka dalam bentuk baris teks serperti 👇.

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

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

User[1] tidak bisa secara langsung berkomunikasi dengan sebuah hardware komputer, maka dari itu kita membutuhkan sebuah sistem operasi; Kernel adalah program yang merupakan inti utama dari sistem operasi komputer.

kernel central of operating system
Fig 2. bagan kernel.

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

Ketika kita menginputkan suatu perintah pada terminal emulator, kernel tidak langsung mengerti perintah yang kita ketik, kita 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, ketika user mengetikan suatu inputan perintah di terminal dan menekan ENTER, maka shell akan mengubah perintah user 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. evaluasi 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, inisialiasi 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 ↱ memilki 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” ↱, plug-in 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 penginstallan dimasing-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 memilki berbagai macam, pilihlah shell yang sesuai dengan keinginanmu untuk menunjang produktivitas dan sesuaikan dengan kebutuhan, terlalu banyak plugin dan kebingungan memilih tema itu buruk 😁.

Terimakasih sudah baca, penulis menerima kritik dan saran.

Notes
[1] “User” Manusia yang mengoperasikan dan mengendalikan sistem komputer.

Resource
updated_at 02-02-2020