linux dev 常見特殊裝置介紹與應用(loop,null,zero,full,random)_linux shell

來源:互聯網
上載者:User

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</dev/stdintest#ctrl+D#cat從/dev/stdin獲得資料,然後將標準輸出,輸入的到teststdin檔案[chengmo@centos5 shell]$ cat teststdin test [chengmo@centos5 shell]$ cat>teststdintest#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 字元(NULL, ASCII NUL, 0x00)。其中的一個典型用法是用它提供的字元流來覆蓋資訊,另一個常見用法是產生一個特定大小的空白檔案。

如:

[chengmo@centos5 shell]$ dd if=/dev/zero of=testzero count=1024 bs=10241024+0 records in1024+0 records out1048576 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裡面的粉碎檔案工具。不過它是用\0x00填充整個分區。這樣做資料是不可以恢複的了。 [chengmo@centos5 shell]$cat /dev/zero>testinputzero#這個命令也不能隨便使用咯,/dev/zero裝置一個特效是,如果你讀取的話,是一個死迴圈會輸出無窮的\x00,這樣你將建立一個用\x00填充的檔案。如果你沒有限制該使用者磁碟配額。它將耗盡整個磁碟空間。

在linux資源配額限制裡面,如果沒有現在普通使用者的磁碟空間利用,或記憶體使用量。一個普通使用者就可以通過上面方法一會就塞滿整個磁碟。也可以通過while(true) {fork……}類程式,啟動無限線程,耗盡整個系統記憶體。

/dev/full裝置

類Unix系統中,/dev/full(常滿裝置)是一個特殊裝置檔案,總是在向其寫入時返回裝置無剩餘空間(錯誤碼為ENOSPC),讀取時則與/dev/zero相似,返回無限的Null 字元(NULL, ASCII NUL, 0x00)。這個裝置通常被用來測試程式在遇到磁碟無剩餘空間錯誤時的行為。

如:

[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 特殊裝置,其它象cpu,記憶體,磁碟,網路,鍵盤,終端裝置。跟我們windows裡面常見差不多。有什麼問題,歡迎交流!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.