Pada masa-masa awal Linux, program hanya didistribusikan sebagai kode sumber, bersama dengan halaman manual yang diperlukan, file konfigurasi yang diperlukan, dan banyak lagi. Saat ini, sebagian besar distributor Linux menggunakan program bawaan atau kumpulan program yang disebut package, yang disajikan kepada pengguna yang siap untuk diinstal pada distribusi tersebut. Berikut beberapa kkonsep dalam package management yang perlu diketahui :
-
Repository
Repositori adalah penyimpanan sentral tempat paket perangkat lunak disimpan dan dikelola. Repositori ini berisi berbagai perangkat lunak yang telah dikompilasi untuk digunakan pada distribusi Linux tertentu. Repository ini yang nantinya akan diakses oleh package manager untuk menginstal package yang dibutuhkan. List konfigurasi dapat dikonfigurasi pada path
/etc/apt/sources.list
jika pada distro ubuntu. Contohnya ini adalah repository ubuntu lokal yang ada di Indonesia. -
Package
package adalah suatu unit perangkat lunak yang telah dikemas bersama dengan informasi tambahan yang diperlukan untuk instalasi dan manajemen perangkat lunak tersebut. Contohnya adalah pacakge
.deb
jika di distro debian dan.exe
jika pada windows. Package ini berisi file yang dibutuhkan oleh user untuk menjalankan suatu program. File yang dibutuhkan oleh user untuk menjalankan suatu program ini disebut denganbinary file
. Binary file ini berisi kode program yang sudah dikompilasi. Kode program yang sudah dikompilasi ini akan dijalankan oleh kernel. Kernel adalah bagian dari sistem operasi yang bertugas untuk mengatur semua sumber daya yang ada pada komputer.perbedaan package pada linux dan windows adalah pada linux package yang diinstal akan disimpan pada path
/usr/bin
sedangkan pada windows package yang diinstal akan disimpan pada pathC:\Program Files
. Untuk melihat package apa saja yang sudah terinstal pada linux dapat menggunakan commanddpkg -l
atauapt list --installed
. -
Dependency
Dependency adalah suatu package yang dibutuhkan oleh package lainnya untuk bisa berjalan. Contohnya adalah package
libssl-dev
yang dibutuhkan oleh packagenginx
untuk bisa berjalan. Packagelibssl-dev
ini disebut dengan package dependensi. Package dependensi ini akan diinstal secara otomatis oleh package manager jika package utama diinstal. Untuk melihat package apa saja yang dibutuhkan oleh package lainnya dapat menggunakan commandapt-cache depends <package-name>
. -
Package Manager
Package manager adalah perangkat lunak yang dirancang untuk membantu pengguna mengelola instalasi, pembaruan, konfigurasi, dan penghapusan perangkat lunak pada sistem operasi. Package Manager dapat dikelompokkan menjadi 2 jenis yaitu
low-level
danhigh-level
. Seperti pada contoh dibawah ini :contohnya dpkg pada debian hanya bisa menginstal package .deb yang sudah tersedia pada host saja, sedangkan apt bisa menginstal package .deb dan juga bisa menginstal package dependensinya dari repository. Package manager yang berada diatas package manager lainnya disebut dengan high-level package manager. Package manager yang berada dibawah package manager lainnya disebut dengan low-level package manager.
Selain itu ada pacakage manager yang compatible di multi distro linux seperti
snap
danflatpak
. Snap dan flatpak ini berbeda dengan package manager lainnya karena package yang diinstal menggunakan snap dan flatpak akan diisolasi dari package lainnya. Snap dan flatapak ini sudah tersedia pada repository ubuntu. Sehingga bisa langsung diinstal dengan commandapt-get install snapd
danapt-get install flatpak
.Contohnya adalah jika kita menginstal package
nginx
menggunakan apt, maka packagenginx
akan diinstal pada path/usr/bin/nginx
dan packagenginx
ini bisa diakses oleh package lainnya. Sedangkan jika kita menginstal packagenginx
menggunakan snap, maka packagenginx
akan diinstal pada path/snap/bin/nginx
dan packagenginx
ini tidak bisa diakses oleh package lainnya. Untuk melihat package apa saja yang sudah terinstal menggunakan snap dapat menggunakan commandsnap list
.Sedangkan Flatpak ini berbeda dengan snap karena package yang diinstal menggunakan flatpak akan diinstal pada path
/var/lib/flatpak
dan package ini juga tidak bisa diakses oleh package lainnya. Untuk melihat package apa saja yang sudah terinstal menggunakan flatpak dapat menggunakan commandflatpak list
.
Jadi kesimpulannya user linux akan menggunakan command package manager untuk menginstal package yang dibutuhkan. Package manager akan mengambil package yang dibutuhkan dari repository yang sudah dikonfigurasi sebelumnya. Package yang dibutuhkan tersebut bisa berupa package utama atau package dependensi. Package utama adalah package yang dibutuhkan oleh user untuk bisa berjalan. Package dependensi adalah package yang dibutuhkan oleh package utama untuk bisa berjalan.
Beberapa command yang dapat dilakukan untuk memanage package pada linux yang sering digunakan adalah sebagai berikut :
-
apt-get update
Command ini digunakan untuk mengupdate list package yang ada pada repository. Command ini harus dijalankan sebelum menginstal package agar package yang diinstal adalah package terbaru.
-
apt-get install <package-name>
Command ini digunakan untuk menginstal package yang dibutuhkan. Contohnya adalahapt-get install nginx
. -
apt-get remove <package-name>
Command ini digunakan untuk menghapus package yang sudah terinstal. Contohnya adalahapt-get remove nginx
. -
apt-get purge <package-name>
Command ini digunakan untuk menghapus package yang sudah terinstal beserta konfigurasinya. Contohnya adalahapt-get purge nginx
. -
apt-get autoremove
Command ini digunakan untuk menghapus package yang sudah terinstal dan tidak dibutuhkan oleh package lainnya. Contohnya adalahapt-get autoremove
. -
apt-get upgrade
Command ini digunakan untuk mengupgrade package yang sudah terinstal.Selain command command diatas masih banyak lagi command yang dapat digunakan untuk melihatnya dapat menggunakan command
apt-get --help
atau mengunjungi link berikut.
Selain menggunakan apt-get
, package juga dapat diinstal menggunakan command dpkg
. Command ini digunakan untuk menginstal package yang sudah terdownload. Contohnya adalah dpkg -i nginx.deb
. dengan syarat kita sudah memiliki file yang akan diinstal terlebih dahulu beda dengan apt-get
yang akan mengambil package dari repository. untuk mengetahui command apa saja yang dapat dilakukan dengan dpkg
dapat menggunakan command dpkg --help
.
Process adalah suatu kode program yang sedang berjalan di memory. Setiap process memiliki ID yang unik yang disebut dengan PID. PID ini digunakan untuk mengidentifikasi process yang sedang berjalan. Untuk Lebih jelasnya dapat dilihat pada gambar dibawah ini :
Berikut adalah daur hidup dari suatu process pada sistem operasi linux :
Pada state Created
process belum dijalankan oleh kernel. Setelah dijalankan oleh kernel process akan berada pada state Running
. Setelah process selesai dijalankan oleh kernel process akan berada pada state Terminated
. Setelah process berada pada state Terminated, process akan dihapus dari memory dan akan berada pada state Zombie.
-
Zombie process
adalah process yang sudah selesai dijalankan oleh kernel namun masih ada di memory. Zombie process ini akan dihapus dari memory setelah parent processnya memanggil wait() system call. -
Process juga memiliki parent process yang merupakan process yang membuat process tersebut. Process yang dibuat oleh parent process disebut dengan
child process
. -
Process yang tidak memiliki parent process disebut dengan
init process
. Init process ini adalah process pertama yang dijalankan oleh kernel saat booting. Init process ini memiliki PID 1.
Berdasarkan cara untuk proses dijalankan, proses terbagi menjadi 2 yaitu foreground process dan background process.
-
Foreground process
adalah proses yang dijalankan secara interaktif. Contohnya adalah saat kita menjalankan commandapt update
pada terminal. Saat menjalankan command tersebut terminal akan terblokir dan tidak bisa menjalankan command lainnya sampai command tersebut selesai dijalankan. -
Background process
adalah proses yang dijalankan secara non-interaktif. Contohnya adalah saat kita menjalankan commandapt update &
pada terminal. Saat menjalankan command tersebut terminal tidak akan terblokir dan bisa menjalankan command lainnya. Untuk melihat process yang sedang berjalan dapat menggunakan commandjobs
.
Pada gambar diatas terlihat command sleep
dijalankan pada foreground maka terminal akan terblokir dan tidak bisa menjalankan command lainnya. Sedangkan pada gambar dibawah command sleep
dijalankan pada background maka terminal tidak akan terblokir dan bisa menjalankan command lainnya dan dapat dilihat dengan perintah jobs
.
Namun terkadang &
tetap berjalan di foreground, solusinya dapat menggunakan nohup
, nohup
adalah command yang digunakan untuk menjalankan command pada background dan tidak akan terpengaruh oleh SIGHUP (signal hangup) yang dikirimkan saat terminal ditutup. Contohnya adalah nohup ping &
. namun nohup perlu diinstal terlebih dahulu dengan command sudo apt-get install coreutils
.
- Berikut adalah beberapa perintah yang dapat digunakan untuk melihat process yang sedang berjalan :
-
ps
danps aux
Command ini digunakan untuk melihat process yang sedang berjalan. Command yang paling sering digunakan adalah
ps -aux
. dengan arti argumen a untuk melihat semua process, u untuk menampilkan informasi lebih ranci, dan x untuk melihat semua proses tanpa terikat oleh previlage user tertentu. -
pstree
Dan ada juga command
pstree
yang digunakan untuk melihat process yang sedang berjalan dalam bentuk tree (terlihat hubungan parent dan child), namun harus diinstal terlebih dahulu dengan commandapt-get install pstree
.
- berikut adalah beberapa perintah yang dapat digunakan untuk menghentikan process yang sedang berjalan :
-
kill
danpkill
Command ini digunakan untuk menghentikan process yang sedang berjalan. Command ini dapat digunakan dengan menggunakan PID. Contohnya adalah
kill -<nomor signal> 1234
, jika tidak menyebutkan nomor signalnya maka akan menggunakan signal 15 (SIGTERM). Sedangankan pkill dapat digunakan dengan menggunakan nama process. Contohnya adalahpkill -<nomor signal> nginx
. Untuk informasi selngkapnya bisa gunakan commandkill --help
ataupkill --help
. -
kill -l
Command ini digunakan untuk melihat daftar signal yang dapat digunakan untuk menghentikan process. Untuk lebih memahami setiap arti signal yang ada bisa mengunjungi link berikut.
- Berikut adalah beberapa perintah yang dapat digunakan untuk memonitoring process yang sedang berjalan :
-
top
danhtop
Command ini dapat digunakan untuk memonitoring dan menghentikan process yang sedang berjalan. Namun untuk htop haru diinstal terlebih dahulu dengan command
apt-get install htop
sedangkan top sudah terinstall secara default. -
lsof
Command ini digunakan untuk melihat file mana yang diakses oleh suatu process. Contohnya adalah
lsof -p 1
dengan arti -p untuk melihat file yang sedang digunakan oleh process dengan PID 1, atau bisa menggunakan argumen -c untuk melihat file yang sedang digunakan oleh process dengan nama tertentu sepertilsof -c docker
. -
netstat
Command ini digunakan untuk melihat port yang sedang digunakan oleh suatu process. Contohnya adalah
netstat -tulpn
dengan arti -t untuk melihat port TCP, -u untuk melihat port UDP, -l untuk melihat port yang sedang mendengarkan, -p untuk melihat process yang sedang menggunakan port tersebut, dan -n untuk melihat port dalam bentuk angka. -
whereis
danwhich
Command
which
digunakan untuk menemukan lokasi eksekusi dari suatu perintah. Sedangkanwhereis
lebih detail yaitu dapat digunakan untuk menemukan lokasi eksekusi, source code, dan manual dari suatu perintah. Contohnya adalahwhich ls
danwhereis ls
. jika ingin tahu argumen apa saja yang tersedia untukwhereis
dapat menggunakan commandwhereis --help
.