Sebagai seorang penerjemah yang peduli dengan perkembangan teknologi di Indonesia, saya prihatin melihat banyaknya ahli IT di negara kita yang kemampuannya masih kurang memadai. Hal ini seringkali menyebabkan sistem yang dibuat menjadi rentan dan tidak aman. Saya menduga bahwa akar permasalahannya adalah kurangnya pemahaman mereka tentang hal-hal mendasar dalam pemrograman.
Untuk membantu mengatasi masalah ini dan berkontribusi dalam meningkatkan kualitas IT di Indonesia, saya akan menerjemahkan sebuah artikel yang membahas tentang dasar-dasar penting dalam pemrograman. Saya berharap, dengan memahami konsep-konsep fundamental ini, para ahli IT di Indonesia dapat mengembangkan sistem yang lebih baik dan aman.
Daftar Isi
- Daftar Isi
- Motivasi
- Struktur Kelas
- Topik 1: Shell
- Langkah Selanjutnya
- Latihan
- Rangkuman Analogi
- Penutup
Motivasi
Sebagai ilmuwan komputer, kita tahu bahwa komputer sangat membantu dalam tugas-tugas yang berulang. Namun, seringkali kita lupa bahwa ini berlaku sama banyaknya pada penggunaan komputer oleh kita sendiri seperti halnya pada komputasi yang ingin kita lakukan pada program kita. Kita memiliki berbagai macam alat yang tersedia di ujung jari kita yang memungkinkan kita lebih produktif dan memecahkan masalah yang lebih kompleks ketika mengerjakan masalah apapun yang berhubungan dengan komputer. Namun, banyak dari kita hanya menggunakan sebagian kecil dari alat-alat tersebut; kita hanya tahu cukup banyak mantra ajaib yang dipelajari untuk bertahan, dan menyalin-tempel perintah dari internet secara membabi buta ketika kita terjebak.
Umpamanya, seorang tukang tidak hanya mengetahui cara menggunakan palu, tetapi juga tahu tentang berbagai peralatan lain seperti obeng, gergaji, dan sebagainya. Dengan menguasai berbagai alat, tukang dapat menyelesaikan proyek yang lebih kompleks dan efisien. Begitu pula, sebagai ilmuwan komputer, kita perlu menguasai berbagai alat yang tersedia agar dapat menyelesaikan tugas dengan lebih baik.
Struktur Kelas
Kelas terdiri dari 11 kuliah masing-masing berdurasi 1 jam, setiap kuliah berpusat pada topik tertentu. Kuliah-kuliah tersebut sebagian besar independen, meskipun seiring berjalannya semester, kami akan mengasumsikan bahwa Kita sudah terbiasa dengan materi dari kuliah sebelumnya. Kami memiliki catatan kuliah online, tetapi akan ada banyak konten yang dibahas di kelas (misalnya dalam bentuk demo) yang mungkin tidak ada dalam catatan. Kami akan merekam kuliah dan memposting rekaman secara online.
Kami mencoba mencakup banyak hal hanya dalam 11 kuliah masing-masing 1 jam, jadi kuliah-kuliahnya cukup padat. Untuk memberi Kita waktu membiasakan diri dengan materi sesuai kecepatan Kita sendiri, setiap kuliah menyertakan serangkaian latihan yang memandu Kita melalui poin-poin kunci kuliah. Setelah setiap kuliah, kami mengadakan jam kantor di mana kami akan hadir untuk membantu menjawab pertanyaan yang mungkin Kita miliki. Jika Kita mengikuti kelas online, Kita dapat mengirim pertanyaan kepada kami di [email protected].
Ini seperti memasak. Jika Kita hanya tahu cara menggunakan pisau, Kita mungkin bisa memasak makanan sederhana. Tetapi jika Kita menguasai berbagai alat dapur seperti wajan, oven, blender, dll., Kita dapat menyiapkan hidangan yang lebih kompleks dan lezat. Begitu pula, menguasai berbagai alat komputer memungkinkan kita memecahkan masalah yang lebih rumit.
Topik 1: Shell
Apa itu Shell?
Shell adalah antarmuka tekstual yang memungkinkan kita memberikan perintah pada komputer. Hampir semua platform memiliki shell dalam berbagai bentuk. Meskipun detailnya mungkin berbeda, pada intinya semua shell kurang lebih sama: mereka memungkinkan kita untuk menjalankan program, memberikan input, dan memeriksa output dengan cara yang terstruktur.
Analoginya, shell seperti pusat komando di pesawat ruang angkasa. Melalui shell, Kita dapat mengendalikan berbagai komponen komputer, menjalankan program, dan memantau output mereka, sama seperti mengendalikan sistem pesawat ruang angkasa dari satu tempat.
Dalam kuliah ini, kita akan fokus pada Bourne Again SHell, atau “bash” singkatnya. Ini adalah salah satu shell yang paling banyak digunakan, dan sintaksnya mirip dengan yang akan Kita lihat di banyak shell lainnya. Untuk membuka prompt shell (tempat Kita dapat mengetik perintah), Kita terlebih dahulu memerlukan terminal. Perangkat Kita mungkin sudah menyertakan terminal yang terinstal, atau Kita dapat menginstalnya dengan cukup mudah.
Menggunakan Shell
Ketika Kita meluncurkan terminal, Kita akan melihat prompt yang seringkali terlihat seperti ini:
missing:~$
Ini adalah antarmuka tekstual utama ke shell. Ini memberi tahu Kita bahwa Kita berada di mesin missing dan bahwa “direktori kerja saat ini” Anda, atau tempat Kita saat ini berada, adalah ~ (singkatan dari “home”). Tanda $ memberi tahu Kita bahwa Kita bukan pengguna root (lebih lanjut tentang ini nanti). Pada prompt ini Kita dapat mengetik perintah, yang kemudian akan ditafsirkan oleh shell. Perintah paling dasar adalah untuk menjalankan program:
missing:~$ date
Fri 10 Jan 2020 11:49:31 AM EST
missing:~$
Di sini, kami menjalankan program date
, yang (mungkin tidak mengherankan) mencetak tanggal dan waktu saat ini. Shell kemudian meminta kami untuk perintah lain untuk dieksekusi. Kita juga bisa menjalankan perintah dengan argumen:
missing:~$ echo hello
hello
Dalam hal ini, kami memberi tahu shell untuk menjalankan program echo
dengan argumen hello
. Program echo
hanya mencetak argumennya. Shell mengurai perintah dengan memisahkannya berdasarkan spasi, lalu menjalankan program yang ditunjukkan oleh kata pertama, memasok setiap kata berikutnya sebagai argumen yang dapat diakses program. Jika Kita ingin memberikan argumen yang berisi spasi atau karakter khusus lainnya (misalnya, direktori bernama “My Photos”), Kita dapat mengutip argumen dengan '
atau "
(“My Photos”), atau escape karakter yang relevan saja dengan \
(My\ Photos).
Analog sederhananya, ini seperti memberi perintah kepada asisten atau robot. Kita mengatakan “echo hello
” dan asisten akan mengulang kembali dengan mengatakan “hello”. Argumen bertindak sebagai informasi tambahan yang Kita berikan kepada asisten untuk melakukan tugas.
Tapi bagaimana shell mengetahui cara menemukan program date
atau echo
? Nah, shell adalah lingkungan pemrograman, sama seperti Python atau Ruby, sehingga memiliki variabel, kondisional, loop, dan fungsi. Ketika Kita menjalankan perintah di shell Anda, Kita sebenarnya menulis sedikit kode yang ditafsirkan oleh shell Anda. Jika shell diminta untuk menjalankan perintah yang tidak cocok dengan salah satu kata kunci pemrogramannya, ia berkonsultasi dengan variabel lingkungan yang disebut $PATH
yang mencantumkan direktori yang harus dicari shell untuk program ketika diberi perintah.
Ini seperti mencari buku di perpustakaan. Variabel $PATH
seperti katalog yang mencantumkan lokasi berbagai buku. Ketika Kita ingin menemukan buku tertentu (atau dalam hal ini, program), Kita memeriksa katalog untuk melihat di bagian mana buku itu berada. Perintah which
seperti pustakawan yang dapat memberi tahu Kita lokasi spesifik buku berdasarkan katalog. Jika buku tidak terdaftar dalam katalog, Kita masih bisa menemukannya jika Kita tahu lokasi pastinya di rak, sama seperti memberikan path lengkap ke program alih-alih mengandalkan $PATH
.
Navigasi dalam Shell
Path di shell adalah daftar direktori yang dipisahkan oleh /
pada Linux dan macOS, atau \
pada Windows. Pada Linux dan macOS, path /
adalah “root” dari sistem file, di bawahnya semua direktori dan file berada. Sebaliknya, di Windows, setiap partisi disk memiliki root yang terpisah (mis., C:\
).
Analoginya, direktori kerja seperti “ruangan” Kita saat ini berada di rumah. Perintah pwd
memberi tahu Kita di ruangan mana Kita berada, dan perintah cd
digunakan untuk berpindah antar ruangan. .
merujuk ke ruangan saat ini, dan ..
berarti kembali ke ruangan sebelumnya. Path absolut seperti memberikan alamat rumah lengkap, sementara path relatif seperti memberikan petunjuk arah dari ruangan Kita saat ini.
Untuk melihat apa yang ada di direktori tertentu, kita menggunakan perintah ls
:
missing:~$ ls
missing:~$ cd ..
missing:/home$ ls
missing
missing:/home$ cd ..
missing:/$ ls
bin
boot
dev
etc
home
...
Kecuali direktori diberikan sebagai argumen pertamanya, ls
akan mencetak isi direktori saat ini. Sebagian besar perintah menerima flag dan opsi (flag dengan nilai) yang dimulai dengan -
untuk memodifikasi perilakunya. Misalnya, ls --help
memberi tahu kita:
-l gunakan format daftar panjang
missing:~$ ls -l /home
drwxr-xr-x 1 missing users 4096 Jun 15 2019 missing
Ini memberi kami banyak informasi tambahan tentang setiap file atau direktori yang ada. Kode seperti drwxr-xr-x
menunjukkan izin apa yang dimiliki pemilik file, grup pemilik, dan semua orang lainnya pada item yang relevan. Ini seperti sistem kunci di gedung perkantoran. Izin “read (r)” berarti Kita memiliki kunci untuk membuka pintu dan melihat ke dalam ruangan. Izin “write (w)” berarti Kita dapat mengubah isi ruangan. Izin “execute (x)” untuk direktori seperti memiliki akses untuk memasuki ruangan.
Beberapa program berguna lainnya yang perlu diketahui adalah mv
(untuk mengganti nama/memindahkan file), cp
(untuk menyalin file), dan mkdir
(untuk membuat direktori baru).
Jika Kita ingin informasi lebih lanjut tentang suatu program, cobalah perintah man
. Ini seperti memiliki buku panduan untuk setiap alat. Kita dapat merujuk ke manual (halaman “man”) alih-alih harus mencari tahu semuanya sendiri melalui trial and error.
Menghubungkan Program
Di shell, program memiliki dua “stream” utama: stream input dan stream output. Biasanya, input dan output program adalah terminal Kita (papan ketik sebagai input, layar sebagai output). Namun, kita dapat mengubah stream tersebut!
Operator |
memungkinkan Kita “merangkai” program sedemikian rupa sehingga output satu program menjadi input program lain:
missing:~$ ls -l / | tail -n1
drwxr-xr-x 1 root root 4096 Jun 20 2019 var
Ini seperti menghubungkan selang taman. Kita dapat menghubungkan output satu program (ls -l /
) ke input program lain (tail -n1
) untuk membentuk “pipa” pemrosesan data, memungkinkan Kita membentuk rantai perintah yang kompleks.
Alat yang Serbaguna dan Kuat
Pada sebagian besar sistem Unix, ada satu pengguna istimewa: pengguna “root”. Pengguna root memiliki hak akses hampir tak terbatas dan dapat membuat, membaca, memperbarui, dan menghapus file apa pun dalam sistem.
Ini seperti memiliki “kunci master” yang dapat membuka kunci pintu apa pun. Dengan hak akses root, Kita pada dasarnya dapat melakukan apa saja pada sistem. Jadi penting untuk berhati-hati dan hanya menggunakan kekuatan ini bila perlu, untuk menghindari perubahan yang tidak disengaja atau merusak.
Salah satu hal yang memerlukan akses root adalah menulis ke sistem file sysfs
yang dipasang di bawah /sys
. sysfs
memaparkan sejumlah parameter kernel sebagai file, sehingga Kita dapat dengan mudah mengonfigurasi ulang kernel tanpa alat khusus. Perhatikan bahwa sysfs
tidak ada di Windows atau macOS.
Ini seperti menggunakan kunci master untuk masuk ke ruang kendali tersembunyi di gedung. Dengan akses root dan menulis ke file sistem /sys
, Kita dapat memodifikasi berbagai pengaturan tingkat rendah dan berinteraksi dengan komponen perangkat keras yang biasanya tidak dapat diakses oleh pengguna biasa. Namun seperti memiliki kunci master, akses ini harus digunakan dengan hati-hati dan tanggung jawab.
Langkah Selanjutnya
Pada titik ini, Kita mengetahui cara kerja shell yang cukup untuk menyelesaikan tugas-tugas dasar. Kita harus dapat menavigasi untuk menemukan file yang menarik dan menggunakan fungsi dasar sebagian besar program.
Dalam kuliah berikutnya, kita akan membahas tentang cara melakukan dan mengotomatisasi tugas yang lebih kompleks menggunakan shell dan banyak program baris perintah yang berguna di luar sana.
Latihan
Semua kelas dalam kursus ini disertai dengan serangkaian latihan. Beberapa memberikan Kita tugas spesifik untuk dikerjakan, sementara yang lain bersifat terbuka, seperti “coba gunakan program X dan Y”. Kami sangat menyarankan Kita untuk mencobanya.
Untuk kursus ini, Kita perlu menggunakan shell Unix seperti Bash atau ZSH. Jika Kita menggunakan Linux atau macOS, Kita tidak perlu melakukan apa pun yang istimewa. Jika Kita menggunakan Windows, Kita perlu memastikan bahwa Kita tidak menjalankan cmd.exe atau PowerShell; Kita dapat menggunakan Windows Subsystem for Linux atau mesin virtual Linux untuk menggunakan alat baris perintah gaya Unix.
Ini seperti memastikan Kita memiliki peralatan yang tepat sebelum memulai proyek. Dengan mengatur lingkungan Kita dengan shell Unix yang tepat, Kita memiliki fondasi yang diperlukan untuk mengikuti latihan dan mempelajari cara kerja alat baris perintah.
Berikut adalah beberapa latihan yang dapat Kita coba:
- Buat direktori baru bernama
missing
di bawah/tmp
. - Gunakan
touch
untuk membuat file baru bernamasemester
dimissing
. - Tulis beberapa baris perintah ke dalam file
semester
. - Buat file
semester
menjadi dapat dieksekusi menggunakan perintahchmod
. - Gunakan
|
dan>
untuk menulis output tanggal “terakhir diubah” olehsemester
ke dalam file bernamalast-modified.txt
.
Rangkuman Analogi
Sebelumnya, kita membahas beberapa analogi untuk membantu memahami konsep-konsep shell:
- Shell seperti pusat komando di pesawat ruang angkasa, memungkinkan Kita mengendalikan berbagai komponen sistem.
- Memberi perintah ke shell ibarat memberi instruksi kepada asisten atau robot.
- Variabel
PATH
seperti katalog perpustakaan yang mencantumkan lokasi program. - Direktori kerja seperti “ruangan” Kita saat ini berada di rumah.
- Path absolut seperti alamat rumah lengkap, sementara path relatif seperti petunjuk arah dari lokasi Kita saat ini.
- Izin file seperti kunci dan akses ke ruangan dalam gedung.
- Pipa (
|
) seperti menghubungkan selang taman, memungkinkan output satu program menjadi input yang lain. - Akses root seperti memiliki kunci master gedung yang dapat membuka semua pintu.
- Menulis ke file sistem
/sys
seperti mengakses ruang kendali tersembunyi untuk memodifikasi pengaturan tingkat rendah. - Memilih shell yang tepat seperti memastikan Kita memiliki peralatan yang diperlukan sebelum memulai proyek.
Analogi ini dimaksudkan untuk memberikan intuisi dasar tentang bagaimana shell dan berbagai komponennya bekerja, dengan menghubungkannya ke konsep yang lebih akrab dalam kehidupan sehari-hari. Tentu saja, ada batasan untuk setiap analogi, tetapi saya harap ini memberikan gambaran umum dan menjadikan materi yang sebelumnya tampak abstrak menjadi lebih mudah diakses. Tujuannya adalah untuk membantu membangun model mental shell yang masuk akal saat Kita mulai bekerja dengannya dan menjelajahi fungsionalitasnya lebih dalam.
Penutup
Sebagai seorang penerjemah yang ingin berkontribusi pada bidang IT di negara saya, saya yakin memahami dan menguasai fondasi ini akan menjadi langkah penting. Dengan memahami cara kerja shell dan alat baris perintah, kita dapat mendekati masalah teknis dengan cara yang lebih efektif dan efisien. Saya berharap dengan menyebarkan pengetahuan ini, kita dapat membantu meningkatkan standar dan kapabilitas para profesional IT di Indonesia.
Industri IT yang maju dibangun di atas pemahaman yang kuat tentang alat dan konsep dasar seperti ini. Dengan menguasainya, kita dapat memberdayakan lebih banyak orang untuk membangun sistem dan solusi yang lebih baik, yang pada akhirnya bermanfaat bagi masyarakat kita secara keseluruhan. Jadi, mari kita belajar dan menggali lebih dalam, dan menggunakan pengetahuan ini untuk melahirkan generasi IT Indonesia yang baru dan lebih kuat. Ini adalah kesempatan kita untuk membuat perbedaan nyata dan membantu menyongsong masa depan digital negara kita.