首頁 >系統教程 >Linux >Linux /dev目錄:特殊裝置檔案的介紹與應用

Linux /dev目錄:特殊裝置檔案的介紹與應用

PHPz
PHPz轉載
2024-02-11 20:45:241283瀏覽

Linux系統中,一切皆檔案。這意味著,除了普通的文字檔案和二進位檔案外,系統中的各種設備也可以用檔案的形式來表示和存取。這些設備檔案通常存放在/dev目錄下,它們有一些特殊的屬性和功能,如主設備號、次設備號、字元設備、區塊設備等。 Linux系統中有哪些常見的特殊設備檔案呢?它們分別有什麼作用和用法呢?本文將從概念和實例的角度,詳細介紹Linux /dev目錄下的特殊裝置檔案。

Linux /dev目录:特殊设备文件的介绍与应用

#linux是檔案型系統,所有硬體如軟體都會在對於的目錄下方有對應的檔案表示。對於dev這個目錄,我們知道它下面的文件,表示的是linux的裝置。在windows系統中,設備大家很好理解,象硬碟,磁碟指的是實實在在硬體。而在檔案系統的linux下面,都有對於檔案與這些裝置關聯的。訪問它們就可以放到實際硬件,想想還是linux靈活了。變成文件,操作多簡單了。不用呼叫以前com,prt等介面了。直接讀取文件,寫文件就可以向設備發送讀取或寫入操作了。依照讀寫儲存資料方式,我們可以把設備分成以下幾種:字元型設備,區塊設備,偽設備。

一、裝置分類

  • # 字元型設備

字元裝置是指每次與系統傳送1個字元的裝置。這些設備節點通常為傳真、虛擬終端和串口調變解調器、鍵盤之類設備提供串流通訊服務,它通常不支援隨機存取資料。字元設備在實作時,大多不使用快取器。系統直接從裝置讀取/寫入每一個字元。例如,鍵盤這種裝置提供的就是一個資料流,當你敲入「cnblogs」這個字串時,鍵盤驅動程式會按照和輸入完全相同的順序傳回這個由七個字元組成的資料流。它們是順序的,先回c,最後是s。

  • 區塊設備

區塊裝置是指與系統間用區塊的方式移動資料的裝置。這些設備節點通常代表可尋址設備,如硬碟、CD-ROM和記憶體區域。

區塊裝置通常支援隨機存取和尋址,並使用快取器。作業系統為輸入輸出分配了快取以儲存一塊資料。當程式向裝置發送了讀取或寫入資料的請求時,系統會將資料中的每一個字元儲存在適當的快取中。當快取被填滿時,會採取適當的操作(把資料傳走),而後系統清空快取。它與字元設備不同之處就是,是否支援隨機儲存。字符型是流形式,逐一儲存。

  • 偽設備

#在類別Unix作業系統中,設備節點不一定要對應實體設備。沒有這種對應關係的設備是偽設備。作業系統運用了它們提供的多種功能。部經常使用到的偽設備包括: null,zero,full,loop,random,urandom

二、特殊設備及使用

這裡說到特殊設備除了硬碟主機板等,只是它在linux shell命令裡面,有特殊的作用,因此把它們單獨拿出來。這些設備分別是:

/dev/stdin

/dev/stdout

/dev/stderr

/dev/null

/dev/zero

/dev/full

/dev/random,urandom

#/dev/fd

/dev/tcp|upd

/dev/loop

1、標準輸出輸入設備

還記得上次說的,linux重定向嗎?可以看下:linux shell資料重定向(輸入重定向與輸出重定向)詳細分析 。它們就是與幾個特殊檔案描述子對應,fd0,fd1,fd2 (stdin,stdout,stderr)

如:

[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指的就是鍵盤裝置

[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/null裝置

是個黑洞設備,它丟棄一切寫入其中數據,而空設備通常被用來丟棄不需要的輸出流。記得當年用windows時候,有個類似的設備:NUL ,跟這個功能一樣。任何寫入該設備資料都會被丟棄掉。從這個裡面讀取資料回傳是空。將一些不用內容經常發送給這個設備,丟棄不需要的數據。

如:

[chengmo@centos5 shell]$ cat /dev/null
[chengmo@centos5 shell]$ cat test.sh >/dev/null
 
#读该设备为空,写入该设备数据都丢弃了

/dev/zero裝置

在類別UNIX 作業系統中, /dev/zero 是一個特殊的文件,當你讀它的時候,它會提供無限的空字元(NULL, ASCII NUL, 0×00)。其中一個典型的用法是用它提供的字元流來覆蓋訊息,另一個常見用法是產生一個特定大小的空白檔案。

如:

[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系统中的设备管理和访问机制。

以上是Linux /dev目錄:特殊裝置檔案的介紹與應用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:lxlinux.net。如有侵權,請聯絡admin@php.cn刪除