Inventaris di chapter sebelumnya berhenti di nama: sda, nvme0n1, tty. Nama-nama itu bukan sekadar label — masing-masing adalah file sungguhan yang hidup di direktori /dev, penerapan paling literal dari filosofi Unix “semua adalah file”: kernel mengekspos setiap perangkat sebagai file yang bisa dibuka, dibaca, dan ditulis seperti file biasa. Chapter ini membedah isi /dev, membedakan block device dari character device lewat penanda b/c dan pasangan angka major-minor, lalu membiasakan kita dengan perangkat pseudo yang dipakai setiap hari.
/dev: Direktori Tempat Perangkat Menjadi File #
Direktori /dev tidak tersimpan di disk. Isinya ditumbuhi kernel saat boot melalui filesystem khusus bernama devtmpfs, lalu diperbarui setiap ada perangkat dicolok atau dicabut. Dahulu admin harus membuat node perangkat manual dengan mknod — pekerjaan yang kini diambil alih udev, topik chapter berikutnya.
Setiap file di /dev adalah file spesial: ia tidak menyimpan data, hanya menunjuk ke driver di kernel. Kita periksa empat di antaranya dengan stat:
stat -c '%n %A (%t:%T)' /dev/null /dev/zero /dev/random /dev/ttyOutput yang Dihasilkan:
/dev/null crw-rw-rw- (1:3)
/dev/zero crw-rw-rw- (1:5)
/dev/random crw-rw-rw- (1:8)
/dev/tty crw-rw-rw- (5:0)Ada dua hal penting yang dibawa output di atas: huruf pertama kolom permission — c pada crw-rw-rw- — menandakan file jenis character device, dan pasangan angka dalam kurung adalah major dan minor number. Bedah per barisnya:
/dev/null (1:3): major1adalah drivermem— kumpulan perangkat memori semu — dan minor3memilih anggotanya: perangkat penelan output./dev/zero (1:5): keluarga driver yang sama, dengan minor5untuk sumber byte nol tak terbatas./dev/random (1:8): penghasil byte acak, masih di bawah major1./dev/tty (5:0): major5adalah driver terminal; minor0berarti terminal pengendali proses yang berjalan.
Angka major dipetakan ke driver secara resmi oleh kernel — daftar lengkapnya ada di allocated devices
. Contoh yang paling sering dijumpai: keluarga disk sd bernaung di major 8, sehingga /dev/sda beralamat 8:0 dan /dev/sda1 beralamat 8:1.
Dua Wajah Perangkat: block dan character #
Karakter b milik block device — perangkat yang diakses acak per blok, seperti disk dan partisi. Karakter c milik character device — datanya mengalir sekuens byte, seperti terminal dan semua perangkat pseudo di atas. Peta singkatnya:
| Jenis | Penanda di ls -l | Contoh | Cara akses data |
|---|---|---|---|
| block device | brw-rw---- | /dev/sda, /dev/nvme0n1 | acak, bisa mundur-maju |
| character device | crw-rw-rw- | /dev/null, /dev/tty | sekuens, sekali lewat |
Penanda b hanya terlihat di mesin dengan disk sungguhan. Berikut contoh tampilan ls -l di mesin fisik dengan dua disk SATA:
brw-rw---- 1 root disk 8, 0 Jan 15 08:00 /dev/sda
brw-rw---- 1 root disk 8, 1 Jan 15 08:00 /dev/sda1
brw-rw---- 1 root disk 8, 2 Jan 15 08:00 /dev/sda2
brw-rw---- 1 root disk 8, 16 Jan 15 08:00 /dev/sdb
brw-rw---- 1 root disk 8, 17 Jan 15 08:00 /dev/sdb1Kolom 8, 0 di tengah adalah pasangan major,minor yang kita bahas tadi, dan /dev/sdb mendapat minor 16 karena minor 0–15 dicadangkan untuk sda beserta partisinya. Nama-nama itu sendiri mengikuti bus tempat disk menempel:
| Pola nama | Bus | Contoh |
|---|---|---|
sdX | SATA, SCSI, USB | /dev/sda, /dev/sdb |
nvmeXnYpZ | NVMe | /dev/nvme0n1p2 |
vdX | virtio (mesin virtual KVM) | /dev/vda |
mmcblkXpY | kartu SD, eMMC | /dev/mmcblk0p1 |
srX | drive optical | /dev/sr0 |
Nama NVMe terbaca aneh di awal, tetapi logis: nvme0 adalah controller pertama, n1 adalah namespace pertama di controller itu, dan p2 adalah partisi kedua dari namespace tersebut.
Perangkat Pseudo untuk Pekerjaan Harian #
Sebagian penghuni /dev bukan hardware sama sekali, melainkan jasa kecil dari kernel yang dipakai berulang kali setiap hari:
| Perangkat | Perilaku | Kegunaan khas |
|---|---|---|
/dev/null | menelan semua yang ditulis; baca langsung EOF | membuang output yang tak diperlukan |
/dev/zero | mengalirkan byte nol tanpa batas | menimpa area disk dengan nol |
/dev/full | menulis selalu gagal karena “penuh” | menguji penanganan disk penuh |
/dev/random | byte acak dari entropy pool, bisa berhenti menunggu | keperluan kriptografi ketat |
/dev/urandom | byte acak tanpa pernah menunggu | keperluan acak sehari-hari |
Kita buktikan dua perilakunya langsung:
head -c 16 /dev/zero | tr '\0' 'z' && echo
wc -c < /dev/nullOutput yang Dihasilkan:
zzzzzzzzzzzzzzzz
0Baris pertama menarik 16 byte nol dari /dev/zero, lalu tr menggantinya dengan huruf z agar terlihat — hasilnya 16 huruf berjajar. Baris kedua membaca /dev/null, dan wc -c melaporkan isinya: nol byte, karena null memang selalu kosong.
Peran yang paling sering dimainkan adalah > dan 2> yang diarahkan ke /dev/null:
printf 'pesan ini menguap\n' > /dev/null
ls /var/log/private 2> /dev/null
printf 'exit ls = %s\n' "$?"Output yang Dihasilkan:
exit ls = 2Baris pertama menulis ke null dan berhasil — pesannya memang menguap. Baris kedua mencoba membaca direktori yang dilindungi root: pesan galatnya dibuang lewat 2>, tetapi kegagalan tetap tercatat. Baris ketiga menangkapnya: "$?" menyimpan exit code perintah terakhir, dan nilai 2 itulah tanda ls gagal. Pola 2> /dev/null membuat skrip tampil bersih tanpa kehilangan kemampuan memeriksa keberhasilan.
Melengkapi Potret: lsblk dan udevadm info #
Kolom MAJ:MIN pada output lsblk di chapter Hardware Information
kini punya makna penuh — pasangan major-minor yang sama dengan yang dilihat stat. Perangkat yang menempel di pohon direktori melalui proses mount dibahas tuntas di Mount dan Unmount
. Terakhir, udevadm info /dev/sda menampilkan database udev untuk satu perangkat — vendor, serial, dan label yang dikenalnya — topik chapter berikutnya. Perilaku /dev/null dan kawan-kawannya terdokumentasi di null(4)
dan random(4)
.
Jadi siapa sebenarnya yang membuat file-file /dev ini muncul dan menghilang begitu USB dicolok dan dicabut? Jawabannya adalah daemon bernama udev — device manager modern yang bekerja dengan aturan, dan itulah topik kita berikutnya.