GNU/Linux >> Belajar Linux >  >> Linux

Memahami /dev dan subdirektori serta file-filenya

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, oleh karena itu namanya).

Ada dua jenis file perangkat:blokir perangkat (ditunjukkan dengan b sebagai karakter pertama dalam keluaran ls -l ), dan perangkat karakter (ditunjukkan dengan c ). Perbedaan antara perangkat blok dan karakter tidak sepenuhnya universal. Perangkat blok 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 hanyalah tentang hal lain, di mana menulis byte memiliki beberapa efek langsung (mis. Dipancarkan pada baris serial) dan membaca byte juga memiliki beberapa efek langsung (mis. Dibaca dari port serial).

Arti dari file perangkat ditentukan oleh nomornya, bukan oleh namanya (nama penting untuk aplikasi, tetapi tidak untuk kernel). Angka tersebut sebenarnya adalah dua angka:angka mayor menunjukkan driver mana yang bertanggung jawab atas perangkat ini, dan angka minor memungkinkan driver untuk menggerakkan beberapa perangkat¹. Angka-angka ini muncul di ls -l daftar, di mana Anda biasanya menemukan ukuran file. Misalnya. brw-rw---- 1 root disk 8, 0 Jul 12 15:54 /dev/sda → perangkat ini mayor 8, minor 0.

Beberapa file perangkat di bawah /dev tidak sesuai dengan perangkat keras. Salah satu yang ada di setiap sistem unix adalah /dev/null; menulis padanya tidak berpengaruh, dan membaca darinya tidak pernah mengembalikan data apa pun. Seringkali nyaman dalam skrip shell, ketika Anda ingin mengabaikan keluaran dari perintah (>/dev/null ) atau jalankan 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 bergantung pada proses yang mengaksesnya. Misalnya, /dev/stdin menunjuk input standar dari proses saat ini; membuka dari memiliki efek yang kurang lebih sama dengan membuka file asli yang dibuka sebagai input standar proses. Agak mirip, /dev/tty menunjuk terminal tempat proses terhubung. Di Linux, saat ini, /dev/stdin dan teman-teman tidak diimplementasikan sebagai perangkat karakter, melainkan sebagai tautan simbolis ke mekanisme yang lebih umum yang memungkinkan setiap deskriptor file dirujuk (berbeda dengan 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 simbolik 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. Misalnya, /dev/scd0 adalah tautan simbolis ke /dev/sr0 di bawah Linux; keduanya menunjuk perangkat CD pertama. Alasan lain untuk tautan simbolis 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 sembarang huruf, 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, yang ditunjuk oleh label pilihan manusia); dan banyak lagi. Tautan simbolik juga digunakan ketika nama perangkat generik bisa menjadi salah satu dari beberapa; misalnya /dev/dvd mungkin merupakan tautan simbolis ke /dev/sr0 , atau mungkin link ke /dev/sr1 jika Anda memiliki dua pembaca CD dan yang kedua menjadi pembaca DVD default.

Terakhir, 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 kebanyakan unice, /dev/log adalah soket yang digunakan program untuk memancarkan pesan log. /dev/MAKEDEV adalah skrip yang membuat entri di /dev . Pada sistem Linux modern, entri dalam /dev/ dibuat secara otomatis oleh udev, menghapus MAKEDEV .

¹ Hal ini sebenarnya tidak berlaku lagi di Linux, tetapi detail ini hanya penting bagi penulis driver perangkat.


  1. Ya - baik secara langsung atau sebagai symlink - itulah /dev/ adalah untuk.
  2. Untuk berbagai keperluan:terkadang untuk kompatibilitas antar skema penamaan, terkadang diperlukan untuk lingkungan kerja - seperti pada contoh /dev/stdin . Ini tidak titik secara statis ke /dev/pts/2 atau lainnya - cukup beralih ke terminal lain dan Anda akan melihat. /dev/stdin adalah input standar saat ini Anda sesi terminal. Itu juga contoh mengapa harus berupa symlink.
  3. Lihat man mknod dan info coreutils 'mknod invocation' . Secara umum, c singkatan dari tipe perangkat karakter.

Untuk pertanyaan pertama Anda, itu bukan deskriptor file, itu adalah file perangkat. (a.k.a. "dev node")

File tersebut terikat dengan driver yang menangani perangkat menggunakan nomor mayor dan minor. (Misalnya, "136, 2" di ls Anda output mengacu pada driver perangkat yang terikat ke nomor utama 136, dan menentukan perangkat #2 yang ditangani oleh driver tersebut.)

Huruf pertama keluaran ls -l adalah jenis perangkat dalam hal file perangkat. Jika 'c' itu adalah perangkat karakter, atau jika 'b', itu adalah perangkat blok.

Untuk pertanyaan kedua Anda, lihat jawaban di atas oleh rozcietrzewiacz.


Linux
  1. Apa itu file /dev/zero dan /dev/null di Linux?

  2. gema atau cetak /dev/stdin /dev/stdout /dev/stderr

  3. Mengapa < atau > diperlukan untuk menggunakan /dev/tcp

  1. Linux:Perbedaan Antara /dev/console , /dev/tty Dan /dev/tty0?

  2. Cara membuat ulang file perangkat LVM di bawah direktori /dev menggunakan vgmknodes

  3. Perbedaan antara /dev/sda dan /dev/sda1

  1. Bagaimana cara menyandikan base64 /dev/random atau /dev/urandom?

  2. Kapan saya harus menggunakan /dev/shm/ dan kapan saya harus menggunakan /tmp/?

  3. Linux:Perbedaan antara /dev/console , /dev/tty dan /dev/tty0