it-swarm-id.com

Memahami / dev dan subdir serta file-nya

$ ls -l /dev/stdin /dev/fd/0
lrwx------ 1 tim tim 64 2011-08-07 09:53 /dev/fd/0 -> /dev/pts/2
lrwxrwxrwx 1 root root 15 2011-08-06 08:14 /dev/stdin -> /proc/self/fd/0
$ ls -l /dev/pts/2 /proc/self/fd/0
crw--w---- 1 tim tty  136, 2 2011-08-07 09:54 /dev/pts/2
lrwx------ 1 tim tim     64 2011-08-07 09:54 /proc/self/fd/0 -> /dev/pts/2
  1. Saya bertanya-tanya apakah semua file di bawah /dev dan subdirektori semua deskriptor file perangkat?
  2. Mengapa ada begitu banyak tautan dari satu sama lain? Sebagai contoh, /dev/fd/0, /dev/stdin, /proc/self/fd/0 semua adalah tautan ke /dev/pts/2.
  3. Jika l dalam lrwx------ tautan berarti, apa artinya c dalam crw--w---- maksud?
55
Tim

Hampir semua file di bawah /dev are 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 pada umumnya berkomunikasi dengan perangkat keras (perangkat perangkat keras, maka namanya).

Ada dua jenis file perangkat: blokir perangkat (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 (mis. Dipancarkan pada baris serial) dan membaca byte juga memiliki efek langsung (mis. Itu 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 menggerakkan beberapa perangkat¹. Angka-angka ini muncul di ls -l daftar, tempat Anda biasanya menemukan ukuran file. Misalnya. brw-rw---- 1 root disk 8, 0 Jul 12 15:54 /dev/sda → perangkat ini adalah major 8, minor 0.

Beberapa file perangkat di bawah /dev tidak berhubungan 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 sebuah perintah (>/dev/null) atau jalankan perintah tanpa input (</dev/null). Contoh umum lainnya adalah /dev/zero (yang mengembalikan byte nol tak terhingga iklan ) --- /dev/urandom (yang mengembalikan byte acak tak terhingga ).

Beberapa file perangkat memiliki arti yang tergantung pada proses yang mengaksesnya. Sebagai contoh, /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 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 untuk dirujuk (bukan hanya 0, 1 dan 2 di bawah metode tradisional); sebagai contoh /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 di Linux; keduanya menunjuk perangkat CD pertama. Alasan lain untuk tautan simbolik adalah organisasi: di Linux, Anda akan menemukan hard disk dan partisi Anda di beberapa tempat: /dev/sda dan /dev/sda1 dan teman-teman (setiap disk yang ditunjuk oleh huruf acak, 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 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 itu mungkin tautan ke /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, untuk alasan tradisional. Anda tidak akan menemukan hal yang sama di setiap sistem. Di sebagian besar unices, /dev/log adalah socket 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 dev , usang MAKEDEV.

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

  1. Ya - baik secara langsung atau sebagai symlink - itulah yang /dev/ adalah untuk.
  2. Untuk berbagai tujuan: kadang-kadang untuk kompatibilitas antara skema penamaan, kadang-kadang diperlukan untuk lingkungan kerja - seperti dalam contoh /dev/stdin. Ini tidak tidak menunjuk secara statis ke /dev/pts/2 atau yang lainnya - cukup pindah ke terminal lain dan Anda akan melihat. /dev/stdin adalah input standar terkini sesi terminal Anda. Itu juga contoh mengapa perlu symlink.
  3. Lihat man mknod dan info coreutils 'mknod invocation'. Secara umum, c adalah singkatan dari tipe perangkat karakter.
14
rozcietrzewiacz

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

File-file itu terikat dengan driver yang menangani perangkat menggunakan nomor utama dan kecil. (Misalnya, "136, 2" di keluaran ls Anda merujuk ke driver perangkat yang terikat ke nomor utama 136, dan menentukan perangkat # 2 yang ditangani oleh driver itu.)

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

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

11
rulingminds