← Back to list

Melihat Shell Lebih Dalam: Apa yang Sebenarnya Terjadi Pada Perintah User?

Saat kita membuka suatu aplikasi, user (kita) akan memberikan suatu perintah seperti “tolong akses gambar ini” atau “tolong tampilkan teks…

Niko Rajani Syahputra · 2025-11-24 14:25 · 0 claps · 6.3 min read
#xinu #shell #system-call #sistem-operasi #tutorial
Open on Medium ↗

Melihat Shell Lebih Dalam: Apa yang Sebenarnya Terjadi Pada Perintah User?

Saat kita membuka suatu aplikasi, user (kita) akan memberikan suatu perintah seperti “tolong akses gambar ini” atau “tolong tampilkan teks ini”, dan ada banyak perintah lain.

Perintah ini yang kemudian di teruskan ke aplikasi nya dan kemudian di teruskan ke Processor suatu komputer untuk memprosesnya yang selanjutnya hasil akan di kembalikan ke user.

Tetapi, sebagian besar user (kita) tidak pernah menyadari bahwa ada perantara yang menerjemahkan perintah mereka kepada sistem operasi. Perantara itu bernama shell.

Shell adalah antarmuka tertua dalam sejarah komputasi modern, bahkan lebih tua dari graphical user interface (GUI) yang kita pakai sehari-hari. Di Linux, macOS, hingga server yang menjalankan miliaran request per hari, shell tetap menjadi alat utama para developer, sysadmin, dan engineer.

Di praktikum Sistem Operasi, kita belajar tentang shell Xinu, versi miniatur dari shell yang berjalan di OS kecil untuk sistem embedded. Meski tampak sederhana, Xinu memberikan banyak pelajaran berharga tentang desain sistem operasi dan bagaimana sebuah komputer memahami perintah manusia.

Artikel ini akan membawa kamu menyelam lebih dalam dari sekadar “cara menambahkan perintah pada Xinu”. Kita akan bahas bagaimana shell bekerja, dari perspektif OS hingga konsep parsing dan desain arsitektur yang jarang dibahas di modul praktikum.

Shell: Antarmuka Tertua yang Masih Kita Gunakan

Sebelum Windows, macOS, Linux Desktop, bahkan sebelum mouse ditemukan, shell adalah UI utama sebuah komputer.

Shell memungkinkan manusia:

  • mengetik perintah
  • menjalankan program
  • membaca output
  • dan mengakses layanan sistem operasi

Walaupun kini kita dikelilingi GUI, shell tetap menjadi alat paling powerful karena:

  • dapat diotomasi
  • dapat menangani ribuan operasi dalam satu baris
  • dan dapat mengakses fitur OS secara langsung melalui system call.

Shell menjembatani kebutuhan (perintah) pengguna ke sistem (Processor) sebagai alat komunikasi User — Processor.

Satu hal yang sering disalahpahami adalah anggapan bahwa shell merupakan bagian dari kernel. Padahal shell hanyalah sebuah program biasa yang berjalan di ruang pengguna (user space). Ia tidak memiliki hak istimewa seperti kernel, namun menjadi perantara yang mempermudah manusia mengakses layanan kernel melalui system call.

Ketika kamu mengetik “ls” atau “ping”, shell tidak melakukan operasi tersebut sendiri. Yang ia lakukan hanyalah menafsirkan perintahmu, kemudian memilih fungsi yang sesuai, dan akhirnya meminta sistem operasi menjalankan tugas tersebut.

Dari sudut pandang teknis, cara kerja shell mirip seperti sebuah compiler kecil. Ketika menerima input dari keyboard, shell melakukan pemecahan teks menjadi token (nama perintah dan argumennya), kemudian menentukan apa yang harus dijalankan berdasarkan struktur perintah tersebut.

Proses sederhana ini menunjukkan bahwa meskipun tampak sepele, shell mengimplementasikan konsep fundamental seperti lexical analysis dan dispatching, konsep yang juga digunakan oleh bahasa pemrograman dan perangkat lunak besar lainnya.

Mengapa Shell Xinu Berbeda dari Shell di Linux?

Shell Xinu berbeda cukup jauh dari shell di Linux karena keduanya dibuat untuk kebutuhan yang sangat berbeda. Linux berjalan di komputer umum yang memiliki penyimpanan besar, fleksibilitas tinggi, dan kebutuhan untuk dapat menambah atau menghapus program kapan saja.

Sementara itu, Xinu dirancang untuk perangkat embedded — perangkat kecil seperti router, sensor IoT, atau modul kontrol industri — yang membutuhkan sistem operasi yang ringan, stabil, dan tidak berubah-ubah selama perangkat bekerja.

Karena alasan ini, Linux menyimpan command seperti ls, cat, atau grep sebagai file executable di dalam direktori /bin. Setiap perintah adalah file yang bisa ditambah, dihapus, atau diganti secara mandiri tanpa mengubah OS-nya. Sebaliknya, Xinu tidak memiliki filesystem yang dinamis seperti Linux.

Semua perintah shell di Xinu justru dimasukkan langsung ke dalam image sistem operasinya saat proses kompilasi dilakukan. Dengan kata lain, command di Xinu adalah bagian dari OS itu sendiri, bukan file terpisah.

Alur sederhananya kurang lebih seperti ini: Linux -> perintah = file -> file disimpan di /bin -> shell menjalankan file tersebut

Xinu -> perintah = fungsi C -> fungsi dimasukkan ke tabel command (cmdtab[]) -> tabel dikompilasi bersama seluruh OS -> shell memanggil fungsi langsung dari image OS

Pendekatan Xinu ini memang terlihat membatasi karena setiap perubahan command mengharuskan kita mengompilasi ulang seluruh OS. Namun di sisi lain, desain ini membawa beberapa keuntungan yang penting untuk perangkat kecil.

Perintah dapat dipanggil lebih cepat karena sudah berada di memori sejak awal, penggunaan memori menjadi lebih stabil karena tidak ada file yang ditambahkan secara dinamis, dan seluruh perilaku sistem menjadi lebih mudah diprediksi.

Untuk perangkat yang harus menyala 24 jam tanpa boleh error — seperti router, sensor industri, atau perangkat IoT — stabilitas dan prediktabilitas seperti ini jauh lebih berharga dibanding fleksibilitas.

Bermain dengan Shell Xinu

Kita akan mencoba melakukan langkah registrasi, deklarasi dan implementasi untuk menambahkan perintah baru di Xinu yaitu “mycmd”

  1. Registrasi Perintah ke dalam shell.c

Pertama, kita perlu “mendaftarkan” nama perintah baru yaitu mycmd ke dalam tabel perintah di shell.c. Tujuannya agar shell Xinu mengenali bahwa mycmd adalah sebuah command yang valid dan dapat ditampilkan ketika kita mengetik help atau ls di shell.

Masuk ke direktori:

cd xinu/shell

Lalu buka file:

gedit shell.c

Setelah file terbuka, cari struktur tabel command (cmdtab[]) dan tambahkan baris berikut:

Simpan perubahan tersebut. Setelah langkah ini, shell sudah mengenali nama perintahnya, tetapi belum tahu fungsi apa yang harus dipanggil.

2. Deklarasi Fungsi di shprototypes.h

Selanjutnya, kita harus “memperkenalkan” fungsi xsh_mycmd kepada sistem secara global. Ini dilakukan lewat deklarasi extern pada header shprototypes.h. Deklarasi ini memberi tahu compiler bahwa fungsi tersebut ada dan akan didefinisikan di file lain.

Dari direktori shell, pindah ke folder include:

cd ../include

Lalu masuk ke shprototypes.h

gedit shprototypes.h

Di dalam file tersebut, cari daftar deklarasi fungsi perintah (di bawah xsh_help). Tambahkan baris berikut:

Salin extern shellcmd xsh_mycmd(int32 argc, char argv[]);*

Simpan file. Pada tahap ini, Xinu sudah mengenali “nama fungsi” dari command tersebut.

3. Mengimplementasikan Perintah mycmd

Setelah pendaftaran dan deklarasi, kita perlu membuat file implementasi xsh_mycmd.c yang berisi logika dari perintah tersebut.

a. Mengambil Template File Implementasi

Dari direktori xinu, jalankan perintah berikut untuk mendownload template file xsh_mycmd.c:

wget https://raw.githubusercontent.com/ramandarafky/implementation-practicum/refs/heads/main/xsh_mycmd.c

Jika berhasil, file akan tersimpan di direktori saat ini. Kamu dapat membuka file tersebut untuk melihat isi fungsinya.

b. Memindahkan File Ke Folder shell

File implementasi harus berada di folder xinu/shell. Jika kamu memilih menggunakan file xsh_uptime.c sebagai referensi atau contoh, kamu dapat menyalinnya seperti berikut:

cp xsh_uptime.c ../shell

perintah di atas akan melakukan copy-paste (CP) ke direktori shell.

Isi kode nya seperti di bawah ini:

setelah itu pastikan file xsh_mycmd.c sudah ada di direktori shell.

4. Compile Ulang Xinu

Karena Xinu menanam command langsung ke dalam image OS, setiap perubahan harus dikompilasi ulang seluruhnya.

Pindah ke direktori compile:

cd ../compile

Lalu jalankan:

make clean
make

Perintah make clean membersihkan file build sebelumnya, sedangkan make menghasilkan image OS yang baru dengan command mycmd di dalamnya.

5. Menjalankan dan Menguji Perintah di Minicom

selanjutnay anda tinggal menguji dengan mengentik perintah:

sudo minicom

lalu jika di minta sandi, masukkan sandi xinu anda. untuk modul ini sandinya adalah: xinurocks

Hidupkan backendnya, ketika backend Xinu sudah berjalan, coba ketik:

help

Jika berhasil, kamu akan melihat mycmd muncul dalam daftar perintah yang tersedia.

Jika sudah, anda bisa mencobanya dengan memberikan perintah:

mycmd
mycmd 111
mycmd 111 xxx

Outputnya akan menunjukkan bagaimana logika xsh_mycmd memproses argumen. Lihat gambar di bawah ini:

Penjelasan Mengenai Argumen mycmd

Fungsi mycmd dirancang menerima tepat dua argumen:

mycmd arg1 arg2

Maka hasil uji akan seperti ini:

  • mycmd→ error, karena tidak ada argumen
  • mycmd 111→ error, karena baru ada 1 argumen
  • mycmd 111 xxx→ berhasil, karena argumen lengkap

Dengan demikian, kita dapat memastikan bahwa implementasi fungsi berhasil dan command mycmd sudah berjalan sesuai desain.

Kesimpulan

Shell, baik di Linux maupun dalam versi minimal seperti Xinu adalah jembatan utama antara manusia dan sistem operasi. Ia bertugas membaca perintah, memecahnya menjadi nama perintah dan argumen, lalu memanggil fungsi yang sesuai melalui mekanisme system call.

Melihat cara kerja shell dari dalam memberi kita pemahaman bahwa shell sebenarnya adalah interpreter kecil yang mengubah teks menjadi aksi sistem, dan bahwa interaksi sederhana yang kita lakukan di terminal adalah hasil dari proses parsing, pencocokan tabel command, dan eksekusi fungsi yang sudah terstruktur dengan rapi.

Melalui praktikum penambahan perintah mycmd di Xinu, kita belajar bahwa perintah shell pada OS embedded tidak berdiri sebagai file terpisah seperti di Linux, melainkan ditanam langsung ke dalam image sistem. Ini membuat proses seperti registrasi perintah, deklarasi fungsi, implementasi file, dan compile ulang menjadi bagian penting dalam desain OS yang stabil dan deterministik.

Pengalaman ini bukan hanya latihan teknis, tetapi juga gambaran nyata bagaimana sistem operasi kecil mengutamakan efisiensi, prediktabilitas, dan kesederhanaan dalam arsitektur mereka.


메타데이터
post_id
d6b631dadd8f
slug
melihat-shell-lebih-dalam-apa-yang-sebenarnya-terjadi-pada-perintah-user-d6b631dadd8f
url
https://medium.com/@einstenkhaled/melihat-shell-lebih-dalam-apa-yang-sebenarnya-terjadi-pada-perintah-user-d6b631dadd8f
canonical_url
https://medium.com/@einstenkhaled/melihat-shell-lebih-dalam-apa-yang-sebenarnya-terjadi-pada-perintah-user-d6b631dadd8f
author_url
https://medium.com/@einstenkhaled
status
ok
fetched_at
2026-07-09 18:09:57