Hampir semua file di bawah /dev
adalah file perangkat . Sedangkan membaca dan menulis ke file biasa menyimpan data pada disk atau sistem file lain, mengakses file perangkat berkomunikasi dengan driver di kernel, yang umumnya pada gilirannya berkomunikasi dengan perangkat keras (perangkat perangkat keras, maka namanya).
Ada dua jenis file perangkat: perangkat blok (ditunjukkan oleh b
sebagai karakter pertama dalam output ls -l
), dan perangkat karakter (ditunjukkan oleh c
). Perbedaan antara perangkat blok dan karakter tidak sepenuhnya universal. Block device adalah hal-hal seperti disk, yang berperilaku seperti file besar berukuran tetap: jika Anda menulis byte pada offset tertentu, dan kemudian membaca dari perangkat pada offset itu, Anda mendapatkan byte itu kembali. Perangkat karakter hanya tentang hal lain, di mana menulis byte memiliki efek langsung (misalnya dipancarkan pada baris serial) dan membaca byte juga memiliki efek langsung (misalnya dibaca dari port serial).
Arti file perangkat ditentukan oleh nomornya, bukan oleh namanya (nama itu penting untuk aplikasi, tetapi tidak untuk kernel). Jumlahnya sebenarnya adalah dua angka: angka utama menunjukkan driver mana yang bertanggung jawab untuk perangkat ini, dan nomor minor memungkinkan pengemudi untuk mendorong beberapa perangkat several. Angka-angka ini muncul dalam ls -l
daftar, di mana Anda biasanya akan menemukan ukuran file. Misalnya brw-rw---- 1 root disk 8, 0 Jul 12 15:54 /dev/sda
→ perangkat ini adalah 8 utama, minor 0.
Beberapa file perangkat di bawah /dev
tidak sesuai dengan perangkat perangkat keras. Salah satu yang ada pada setiap sistem unix adalah /dev/null
; menulis ke sana tidak berpengaruh, dan membaca darinya tidak pernah mengembalikan data apa pun. Seringkali nyaman dalam skrip shell, ketika Anda ingin mengabaikan output dari perintah ( >/dev/null
) atau menjalankan perintah tanpa input ( </dev/null
). Contoh umum lainnya adalah /dev/zero
(yang mengembalikan null byte ad infinitum ) /dev/urandom
(yang mengembalikan byte acak ad infinitum ).
Beberapa file perangkat memiliki arti yang tergantung pada proses yang mengaksesnya. Misalnya, /dev/stdin
menunjuk input standar dari proses saat ini; membuka dari memiliki efek yang kira-kira sama dengan membuka file asli yang dibuka sebagai input standar proses. Agak serupa, /dev/tty
menunjuk terminal tempat proses terhubung. Di Linux, saat ini, /dev/stdin
dan teman tidak diimplementasikan sebagai perangkat karakter, melainkan sebagai tautan simbolis ke mekanisme yang lebih umum yang memungkinkan setiap deskriptor file untuk direferensikan (bukan hanya 0, 1 dan 2 di bawah metode tradisional); misalnya /dev/stdin
adalah tautan simbolis ke /proc/self/fd/0
. Lihat Bagaimana / dev / fd berhubungan dengan / proc / self / fd /? .
Anda akan menemukan sejumlah tautan simbolis di bawah /dev
. Ini dapat terjadi karena alasan historis: file perangkat dipindahkan dari satu nama ke nama lain, tetapi beberapa aplikasi masih menggunakan nama lama. Sebagai contoh, /dev/scd0
adalah tautan simbolis ke /dev/sr0
Linux; keduanya menunjuk perangkat CD pertama. Alasan lain untuk link simbolik adalah organisasi: di Linux, Anda akan menemukan hard disk dan partisi di beberapa tempat: /dev/sda
dan /dev/sda1
dan teman-teman (setiap disk yang ditunjuk oleh surat sewenang-wenang, dan partisi sesuai dengan tata letak partisi), /dev/disk/by-id/*
(disk yang ditunjuk oleh nomor seri unik), /dev/disk/by-label/*
(partisi dengan sistem file, ditunjuk oleh label pilihan manusia); dan lainnya. Tautan simbolik juga digunakan ketika nama perangkat generik dapat menjadi salah satu dari beberapa; sebagai contoh/dev/dvd
mungkin tautan simbolis ke /dev/sr0
, atau mungkin tautan /dev/sr1
jika Anda memiliki dua pembaca CD dan yang kedua adalah menjadi pembaca DVD default.
Akhirnya, ada beberapa file lain yang mungkin Anda temukan di bawah /dev
, karena alasan tradisional. Anda tidak akan menemukan hal yang sama di setiap sistem. Pada sebagian besar unices, /dev/log
adalah soket yang digunakan program untuk memancarkan pesan log. /dev/MAKEDEV
adalah skrip yang membuat entri dalam /dev
. Pada sistem Linux modern, entri dalam /dev/
dibuat secara otomatis oleh udev , usang MAKEDEV
.
¹ Ini sebenarnya tidak lagi berlaku di Linux, tetapi detail ini hanya penting bagi penulis driver perangkat.