Dalam sistem Linux, semuanya adalah fail. Ini bermakna sebagai tambahan kepada fail teks biasa dan fail binari, pelbagai peranti dalam sistem juga boleh diwakili dan diakses dalam bentuk fail. Fail peranti ini biasanya disimpan dalam direktori /dev Mereka mempunyai beberapa atribut dan fungsi khas, seperti nombor peranti utama, nombor peranti kecil, peranti aksara, peranti blok, dsb. Apakah fail peranti khas yang biasa dalam sistem Linux? Apakah fungsi dan kegunaannya? Artikel ini akan memperkenalkan fail peranti khas dalam direktori Linux /dev secara terperinci dari perspektif konsep dan contoh.
Linux ialah sistem fail, dan semua perkakasan seperti perisian akan mempunyai perwakilan fail yang sepadan di bawah direktori yang sepadan. Untuk direktori dev, kami tahu bahawa fail di bawahnya mewakili peranti Linux. Dalam sistem Windows, peranti difahami dengan baik oleh semua orang, seperti cakera keras, dan cakera merujuk kepada perkakasan sebenar. Di bawah sistem fail Linux, terdapat fail yang dikaitkan dengan peranti ini. Mengaksesnya boleh diletakkan pada perkakasan sebenar Fikirkanlah, Linux lebih fleksibel. Tukarkannya menjadi fail, betapa mudahnya operasi itu. Tidak perlu memanggil com sebelumnya, prt dan antara muka lain. Baca dan tulis terus fail untuk menghantar operasi baca atau tulis ke peranti. Mengikut cara membaca, menulis dan menyimpan data, kami boleh membahagikan peranti kepada jenis berikut: peranti aksara, peranti sekat dan peranti pseudo.
1. Klasifikasi peralatan
Peranti aksara merujuk kepada peranti yang menghantar 1 aksara ke sistem pada satu masa. Nod peranti ini biasanya menyediakan perkhidmatan komunikasi penstriman untuk peranti seperti faks, terminal maya dan modem dan papan kekunci bersiri Mereka biasanya tidak menyokong data akses rawak. Apabila peranti aksara dilaksanakan, kebanyakannya tidak menggunakan penimbal. Sistem membaca/menulis setiap aksara terus daripada peranti. Sebagai contoh, peranti seperti papan kekunci menyediakan aliran data Apabila anda menaip rentetan "cnblogs", pemacu papan kekunci akan mengembalikan aliran data tujuh aksara ini dalam susunan yang sama seperti input. Mereka berurutan, mengembalikan c dahulu dan s terakhir.
Peranti sekat merujuk kepada peranti yang menggunakan blok untuk memindahkan data antara sistem. Nod peranti ini biasanya mewakili peranti yang boleh dialamatkan seperti cakera keras, CD-ROM dan kawasan memori.
Sekat peranti biasanya menyokong akses rawak dan pengalamatan, dan menggunakan cache. Sistem pengendalian memperuntukkan penimbal untuk input dan output untuk menyimpan blok data. Apabila program menghantar permintaan untuk membaca atau menulis data ke peranti, sistem menyimpan setiap aksara dalam data dalam cache yang sesuai. Apabila cache diisi, tindakan yang sesuai diambil (data dipindahkan) dan sistem mengosongkan cache. Perbezaan antara peranti itu dan watak ialah sama ada ia menyokong storan rawak. Jenis aksara adalah dalam bentuk strim dan disimpan satu demi satu.
Dalam sistem pengendalian seperti Unix, nod peranti tidak semestinya sepadan dengan peranti fizikal. Peranti tanpa surat-menyurat ini adalah peranti pseudo. Sistem pengendalian menggunakan pelbagai fungsi yang mereka sediakan. Beberapa peranti pseudo yang biasa digunakan termasuk: nol, sifar, penuh, gelung, rawak, urandom
2. Peralatan dan kegunaan khas
Peranti khas yang dinyatakan di sini adalah kecuali cakera keras, papan induk, dsb., tetapi ia mempunyai fungsi khas dalam perintah shell Linux, jadi ia dikeluarkan secara berasingan. Peranti ini ialah:
/dev/stdin
/dev/stdout
/dev/stderr
/dev/null
/dev/sifar
/dev/penuh
/dev/random,urandom
/dev/fd
/dev/tcp|upd
/dev/gelung
1. Peranti output dan input standard
Ingat apa yang saya katakan kali terakhir, pengalihan Linux? Anda boleh membaca: Pengalihan semula data shell Linux (pengalihan semula input dan pengalihan keluaran) analisis terperinci. Ia sepadan dengan beberapa deskriptor fail khas, fd0, fd1, fd2 (stdin, stdout, stderr)
Contohnya:
[chengmo@centos5 shell]$ cat>teststdin/stdin test #ctrl+D #cat从/dev/stdin获得数据,然后将标准输出,输入的到teststdin文件 [chengmo@centos5 shell]$ cat teststdin test [chengmo@centos5 shell]$ cat>teststdin test #ctrl+D #不指定输入,默认输入设备就是/dev/stdinn
/dev/stdin merujuk kepada peranti papan kekunci
[chengmo@centos5 shell]$ cat test.sh >/dev/stdout |grep 'echo' echo "very good!"; echo "good!"; echo "pass!"; echo "no pass!" #/dev/stdout指向就是标准输出,因此重定向给它的数据,最终发送到屏幕上(fd1) [chengmo@centos5 shell]$ cat test.sh |grep 'echo' echo "very good!"; echo "good!"; echo "pass!"; echo "no pass!"; [chengmo@centos5 shell]$ cat test.sh >/dev/stderr |grep 'echo' #!/bin/sh scores=40; if [[ $scores -gt 90 ]]; then echo "very good!"; elif [[ $scores -gt 80 ]]; then echo "good!"; elif [[ $scores -gt 60 ]]; then echo "pass!"; else echo "no pass!"; fi; #/dev/stderr 指是错误输出,默认也是输出到屏幕上面,但是它的内容不能通过管道传递给grep,管道只能传递标准输出
/dev/peranti null
ialah peranti lubang hitam, yang membuang semua data yang ditulis kepadanya Peranti kosong biasanya digunakan untuk membuang aliran keluaran yang tidak diperlukan. Saya masih ingat bahawa semasa saya menggunakan Windows, terdapat peranti yang serupa: NUL, yang mempunyai fungsi yang sama. Sebarang data yang ditulis pada peranti akan dibuang. Membaca data daripada ini kembali kosong. Kerap menghantar beberapa kandungan yang tidak digunakan ke peranti ini dan buang data yang tidak diperlukan.
Contohnya:
[chengmo@centos5 shell]$ cat /dev/null [chengmo@centos5 shell]$ cat test.sh >/dev/null #读该设备为空,写入该设备数据都丢弃了
/dev/peranti sifar
Dalam sistem pengendalian seperti UNIX, /dev/zero ialah fail khas yang menyediakan aksara null tanpa had (NULL, ASCII NUL, 0×00) apabila anda membacanya. Satu kegunaan biasa ialah untuk menulis ganti maklumat dengan aliran aksara yang disediakannya. Satu lagi kegunaan biasa ialah untuk menjana fail kosong dengan saiz tertentu.
Contohnya:
[chengmo@centos5 shell]$ dd if=/dev/zero of=testzero count=1024 bs=1024 1024+0 records in 1024+0 records out 1048576 bytes (1.0 MB) copied, 0.0107194 seconds, 97.8 MB/s #创建一个大小为1M文件,该文件一个块是1024字节,一共是1024块(刚好1M),用/dev/zero文件内容填充它。输出创建到:testzero文件 [chengmo@centos5 shell]$dd if=/dev/zero of=/dev/磁盘分区 #这个命令一定不要随便用,有点象windows里面的粉碎文件工具。不过它是用x00填充整个分区。这样做数据是不可以恢复的了。 [chengmo@centos5 shell]$cat /dev/zero>testinputzero #这个命令也不能随便使用咯,/dev/zero设备一个特效是,如果你读取的话,是一个死循环会输出无穷的\x00,这样你将创建一个用\x00填充的文件。如果你没有限制该用户磁盘配额。它将耗尽整个磁盘空间。
在linux资源配额限制里面,如果没有现在普通用户的磁盘空间利用,或内存使用。一个普通用户就可以通过上面方法一会就塞满整个磁盘。也可以通过while(true) {fork……}类程序,启动无限线程,耗尽整个系统内存。
/dev/full设备
类Unix系统中,/dev/full(常满设备)是一个特殊设备文件,总是在向其写入时返回设备无剩余空间(错误码为ENOSPC),读取时则与/dev/zero相似,返回无限的空字符(NULL, ASCII NUL, 0×00)。这个设备通常被用来测试程序在遇到磁盘无剩余空间错误时的行为。
如:
[chengmo@centos5 shell]$ echo 'chengmo' >/dev/full -bash: echo: write error: 设备上没有空间 [chengmo@centos5 shell]$ echo $? 1 #命令执行返回错误
/dev/random[urandom]
在类UNIX操作系统中,/dev/random是一个特殊的设备文件,可以用作随机数发生器或伪随机数发生器。它允许程序访问来自设备驱动程序或其它来源的背景噪声。常用作随机数发生器。具体参考:linux shell实现随机数多种方法(date,random,uuid)
/dev/fd
记录用户打开的文件描述符
[chengmo@centos5 shell]$ ls /dev/fd/
0 1 2 3
详细参考:
linux shell数据重定向(输入重定向与输出重定向)详细分析 文件描述符介绍。
/dev/tcp[udp]/host/port
读取该类形式设备,将会创建一个连接host主机port端口的tcp[upd]连接。打开一个socket通讯接口。
详细使用可以参考:
linux shell 脚本实现tcp/upd协议通讯(重定向应用)
/dev/loop
在类UNIX操作系统中,Loop设备 可以把loop 文件,作为块设备挂载使用。
如:
[chengmo@centos5 shell]$mount -o loop example.img /home/chengmo/img
#将img镜像文件挂载到/home/chengmo/img目录下面,有了这个设备,我们不需要通过虚拟光驱就可以读虚拟磁盘格式的文件。
本文介绍了Linux /dev目录下的特殊设备文件,包括它们的分类、属性、命名规则等。我们还了解了一些常见的特殊设备文件,如/dev/null、/dev/zero、/dev/random、/dev/tty、/dev/sda等,以及它们的作用和用法。通过本文,我们可以更清楚地了解Linux系统中的设备管理和访问机制。
Atas ialah kandungan terperinci Direktori Linux /dev: pengenalan dan aplikasi fail peranti khas. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!