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:

bash
stat -c '%n %A (%t:%T)' /dev/null /dev/zero /dev/random /dev/tty

Output yang Dihasilkan:

text
/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:

  1. /dev/null (1:3): major 1 adalah driver mem — kumpulan perangkat memori semu — dan minor 3 memilih anggotanya: perangkat penelan output.
  2. /dev/zero (1:5): keluarga driver yang sama, dengan minor 5 untuk sumber byte nol tak terbatas.
  3. /dev/random (1:8): penghasil byte acak, masih di bawah major 1.
  4. /dev/tty (5:0): major 5 adalah driver terminal; minor 0 berarti 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:

JenisPenanda di ls -lContohCara akses data
block devicebrw-rw----/dev/sda, /dev/nvme0n1acak, bisa mundur-maju
character devicecrw-rw-rw-/dev/null, /dev/ttysekuens, sekali lewat

Penanda b hanya terlihat di mesin dengan disk sungguhan. Berikut contoh tampilan ls -l di mesin fisik dengan dua disk SATA:

text
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/sdb1

Kolom 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 namaBusContoh
sdXSATA, SCSI, USB/dev/sda, /dev/sdb
nvmeXnYpZNVMe/dev/nvme0n1p2
vdXvirtio (mesin virtual KVM)/dev/vda
mmcblkXpYkartu SD, eMMC/dev/mmcblk0p1
srXdrive 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:

PerangkatPerilakuKegunaan khas
/dev/nullmenelan semua yang ditulis; baca langsung EOFmembuang output yang tak diperlukan
/dev/zeromengalirkan byte nol tanpa batasmenimpa area disk dengan nol
/dev/fullmenulis selalu gagal karena “penuh”menguji penanganan disk penuh
/dev/randombyte acak dari entropy pool, bisa berhenti menunggukeperluan kriptografi ketat
/dev/urandombyte acak tanpa pernah menunggukeperluan acak sehari-hari

Kita buktikan dua perilakunya langsung:

bash
head -c 16 /dev/zero | tr '\0' 'z' && echo
wc -c < /dev/null

Output yang Dihasilkan:

text
zzzzzzzzzzzzzzzz
0

Baris 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:

bash
printf 'pesan ini menguap\n' > /dev/null
ls /var/log/private 2> /dev/null
printf 'exit ls = %s\n' "$?"

Output yang Dihasilkan:

text
exit ls = 2

Baris 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.