您好,登錄后才能下訂單哦!
本篇內(nèi)容介紹了“l(fā)inux dev中常見特殊設(shè)備有哪些”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
linux是文件型系統(tǒng),所有硬件如軟件都會在對于的目錄下面有相應(yīng)的文件表示。對于dev這個目錄,我們知道它下面的文件,表示的是linux的設(shè)備。在windows系統(tǒng)中,設(shè)備大家很好理解,象硬盤,磁盤指的是實實在在硬件。而在文件系統(tǒng)的linux下面,都有對于文件與這些設(shè)備關(guān)聯(lián)的。訪問它們就可以放到實際硬件,想想還是linux靈活了。變成文件,操作該多簡單了。不用調(diào)用以前com,prt等接口了。直接讀文件,寫文件就可以向設(shè)備發(fā)送讀或者寫操作了。 按照讀寫存儲數(shù)據(jù)方式,我們可以把設(shè)備分為以下幾種:字符型設(shè)備,塊設(shè)備,偽設(shè)備。
一、設(shè)備分類
字符型設(shè)備
字符設(shè)備是指每次與系統(tǒng)傳輸1個字符的設(shè)備。這些設(shè)備節(jié)點通常為傳真、虛擬終端和串口調(diào)制解調(diào)器、鍵盤之類設(shè)備提供流通信服務(wù),它通常不支持隨機(jī)存取數(shù)據(jù)。 字符設(shè)備在實現(xiàn)時,大多不使用緩存器。系統(tǒng)直接從設(shè)備讀取/寫入每一個字符。例如,鍵盤這種設(shè)備提供的就是一個數(shù)據(jù)流,當(dāng)你敲入“cnblogs”這個字符串時,鍵盤驅(qū)動程序會按照和輸入完全相同的順序返回這個由七個字符組成的數(shù)據(jù)流。它們是順序的,先返回c,最后是s。
塊設(shè)備
塊設(shè)備是指與系統(tǒng)間用塊的方式移動數(shù)據(jù)的設(shè)備。這些設(shè)備節(jié)點通常代表可尋址設(shè)備,如硬盤、CD-ROM和內(nèi)存區(qū)域。
塊設(shè)備通常支持隨機(jī)存取和尋址,并使用緩存器。操作系統(tǒng)為輸入輸出分配了緩存以存儲一塊數(shù)據(jù)。當(dāng)程序向設(shè)備發(fā)送了讀取或者寫入數(shù)據(jù)的請求時,系統(tǒng)把數(shù)據(jù)中的每一個字符存儲在適當(dāng)?shù)木彺嬷?。?dāng)緩存被填滿時,會采取適當(dāng)?shù)牟僮鳎ò褦?shù)據(jù)傳走),而后系統(tǒng)清空緩存。它與字符設(shè)備不同之處就是,是否支持隨機(jī)存儲。字符型是流形式,逐一存儲。
偽設(shè)備
在類Unix操作系統(tǒng)中,設(shè)備節(jié)點并不一定要對應(yīng)物理設(shè)備。沒有這種對應(yīng)關(guān)系的設(shè)備是偽設(shè)備。操作系統(tǒng)運用了它們提供的多種功能。部份經(jīng)常使用到的偽設(shè)備包括: null,zero,full,loop,random,urandom
二、特殊設(shè)備及使用
這里說到特殊設(shè)備除了硬盤主板等,只是它在linux shell命令里面,有特殊的作用,因此把它們單獨拿出來。這些設(shè)備分別是:
/dev/stdin
/dev/stdout
/dev/stderr
/dev/null
/dev/zero
/dev/full
/dev/random,urandom
/dev/fd
/dev/tcp|upd
/dev/loop
1、標(biāo)準(zhǔn)輸出輸入設(shè)備
還記得上次說的,linux重定向嗎?可以看下:linux shell數(shù)據(jù)重定向(輸入重定向與輸出重定向)詳細(xì)分析 。它們就是與幾個特殊文件描述符對應(yīng),fd0,fd1,fd2 (stdin,stdout,stderr)
如:
[chengmo@centos5 shell]$ cat>teststdin</dev/stdin test #ctrl+D #cat從/dev/stdin獲得數(shù)據(jù),然后將標(biāo)準(zhǔn)輸出,輸入的到teststdin文件 [chengmo@centos5 shell]$ cat teststdin test [chengmo@centos5 shell]$ cat>teststdin test #ctrl+D #不指定輸入,默認(rèn)輸入設(shè)備就是/dev/stdinn
/dev/stdin指的就是鍵盤設(shè)備
[chengmo@centos5 shell]$ cat test.sh >/dev/stdout |grep 'echo' echo "very good!"; echo "good!"; echo "pass!"; echo "no pass!" #/dev/stdout指向就是標(biāo)準(zhǔn)輸出,因此重定向給它的數(shù)據(jù),最終發(fā)送到屏幕上(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 指是錯誤輸出,默認(rèn)也是輸出到屏幕上面,但是它的內(nèi)容不能通過管道傳遞給grep,管道只能傳遞標(biāo)準(zhǔn)輸出
/dev/null設(shè)備
是個黑洞設(shè)備,它丟棄一切寫入其中數(shù)據(jù),空設(shè)備通常被用于丟棄不需要的輸出流。記得當(dāng)年用windows時候,有個類似的設(shè)備:NUL ,跟這個功能一樣。任何寫入該設(shè)備數(shù)據(jù)都會被丟棄掉。從這個里面讀取數(shù)據(jù)返回是空。將一些不用內(nèi)容經(jīng)常發(fā)送給這個設(shè)備,丟棄不需要的數(shù)據(jù)。
如:
[chengmo@centos5 shell]$ cat /dev/null [chengmo@centos5 shell]$ cat test.sh >/dev/null #讀該設(shè)備為空,寫入該設(shè)備數(shù)據(jù)都丟棄了
/dev/zero設(shè)備
在類UNIX 操作系統(tǒng)中, /dev/zero 是一個特殊的文件,當(dāng)你讀它的時候,它會提供無限的空字符(NULL, ASCII NUL, 0x00)。其中的一個典型用法是用它提供的字符流來覆蓋信息,另一個常見用法是產(chǎn)生一個特定大小的空白文件。
如:
[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 #創(chuàng)建一個大小為1M文件,該文件一個塊是1024字節(jié),一共是1024塊(剛好1M),用/dev/zero文件內(nèi)容填充它。輸出創(chuàng)建到:testzero文件 [chengmo@centos5 shell]$dd if=/dev/zero of=/dev/磁盤分區(qū) #這個命令一定不要隨便用,有點象windows里面的粉碎文件工具。不過它是用\0x00填充整個分區(qū)。這樣做數(shù)據(jù)是不可以恢復(fù)的了。 [chengmo@centos5 shell]$cat /dev/zero>testinputzero #這個命令也不能隨便使用咯,/dev/zero設(shè)備一個特效是,如果你讀取的話,是一個死循環(huán)會輸出無窮的\x00,這樣你將創(chuàng)建一個用\x00填充的文件。如果你沒有限制該用戶磁盤配額。它將耗盡整個磁盤空間。
在linux資源配額限制里面,如果沒有現(xiàn)在普通用戶的磁盤空間利用,或內(nèi)存使用。一個普通用戶就可以通過上面方法一會就塞滿整個磁盤。也可以通過while(true) {fork……}類程序,啟動無限線程,耗盡整個系統(tǒng)內(nèi)存。
/dev/full設(shè)備
類Unix系統(tǒng)中,/dev/full(常滿設(shè)備)是一個特殊設(shè)備文件,總是在向其寫入時返回設(shè)備無剩余空間(錯誤碼為ENOSPC),讀取時則與/dev/zero相似,返回?zé)o限的空字符(NULL, ASCII NUL, 0x00)。這個設(shè)備通常被用來測試程序在遇到磁盤無剩余空間錯誤時的行為。
如:
[chengmo@centos5 shell]$ echo 'chengmo' >/dev/full -bash: echo: write error: 設(shè)備上沒有空間 [chengmo@centos5 shell]$ echo $? 1 #命令執(zhí)行返回錯誤
/dev/random[urandom]
在類UNIX操作系統(tǒng)中,/dev/random是一個特殊的設(shè)備文件,可以用作隨機(jī)數(shù)發(fā)生器或偽隨機(jī)數(shù)發(fā)生器。它允許程序訪問來自設(shè)備驅(qū)動程序或其它來源的背景噪聲。常用作隨機(jī)數(shù)發(fā)生器。具體參考:linux shell實現(xiàn)隨機(jī)數(shù)多種方法(date,random,uuid)
/dev/fd
記錄用戶打開的文件描述符
[chengmo@centos5 shell]$ ls /dev/fd/
0 1 2 3
詳細(xì)參考:
linux shell數(shù)據(jù)重定向(輸入重定向與輸出重定向)詳細(xì)分析 文件描述符介紹。
/dev/tcp[udp]/host/port
讀取該類形式設(shè)備,將會創(chuàng)建一個連接host主機(jī)port端口的tcp[upd]連接。打開一個socket通訊接口。
詳細(xì)使用可以參考:
linux shell 腳本實現(xiàn)tcp/upd協(xié)議通訊(重定向應(yīng)用)
/dev/loop
在類UNIX操作系統(tǒng)中,Loop設(shè)備 可以把loop 文件,作為塊設(shè)備掛載使用。
如:
[chengmo@centos5 shell]$mount -o loop example.img /home/chengmo/img
#將img鏡像文件掛載到/home/chengmo/img目錄下面,有了這個設(shè)備,我們不需要通過虛擬光驅(qū)就可以讀虛擬磁盤格式的文件。
說了很多l(xiāng)inux 特殊設(shè)備,其它象cpu,內(nèi)存,磁盤,網(wǎng)絡(luò),鍵盤,終端設(shè)備。跟我們windows里面常見差不多。
“l(fā)inux dev中常見特殊設(shè)備有哪些”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。