您好,登錄后才能下訂單哦!
本篇內(nèi)容介紹了“l(fā)inux設(shè)備文件指的是什么”的有關(guān)知識,在實(shí)際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
在linux中,設(shè)備文件是設(shè)備驅(qū)動程序的接口,允許應(yīng)用程序通過標(biāo)準(zhǔn)輸入輸出系統(tǒng)調(diào)用使用其設(shè)備驅(qū)動程序與設(shè)備進(jìn)行交互。linux系統(tǒng)中有兩種常用的設(shè)備文件:字符特殊文件和塊特殊文件,它們間的區(qū)別在于操作系統(tǒng)和硬件讀取和寫入的數(shù)據(jù)量。
本教程操作環(huán)境:linux5.9.8系統(tǒng)、Dell G3電腦。
設(shè)備文件概述
在類Unix操作系統(tǒng)中,設(shè)備文件或特殊文件是設(shè)備驅(qū)動程序的接口,出現(xiàn)在文件系統(tǒng)中就好像它是普通文件一樣。在MS-DOS,OS / 2和Microsoft Windows中也有特殊文件。 這些特殊文件允許應(yīng)用程序通過標(biāo)準(zhǔn)輸入/輸出系統(tǒng)調(diào)用使用其設(shè)備驅(qū)動程序與設(shè)備進(jìn)行交互。使用標(biāo)準(zhǔn)系統(tǒng)調(diào)用簡化了許多編程任務(wù),并且無論設(shè)備的特性和功能如何,都可以實(shí)現(xiàn)一致的用戶空間I / O機(jī)制。
設(shè)備文件通常提供與標(biāo)準(zhǔn)設(shè)備(如打印機(jī)和串行端口)的簡單接口,但也可用于訪問這些設(shè)備(如磁盤分區(qū))上的特定獨(dú)特資源。此外,設(shè)備文件對于訪問與任何實(shí)際設(shè)備(如數(shù)據(jù)接收器和隨機(jī)數(shù)生成器)無關(guān)的系統(tǒng)資源非常有用。
圖1 應(yīng)用程序、塊文件、驅(qū)動、硬件之間的關(guān)系
類Unix操作系統(tǒng)中有兩種常用的設(shè)備文件,稱為字符特殊文件和塊特殊文件。它們之間的區(qū)別在于操作系統(tǒng)和硬件讀取和寫入的數(shù)據(jù)量。 與命名管道不同,它們可以稱為設(shè)備專用文件,但命名管道并不連接到設(shè)備,但也不是普通文件。
在一些類Unix系統(tǒng)中,大多數(shù)設(shè)備文件作為傳統(tǒng)上安裝在/ dev的虛擬文件系統(tǒng)的一部分進(jìn)行管理,可能與控制守護(hù)進(jìn)程相關(guān)聯(lián),該守護(hù)進(jìn)程在運(yùn)行時監(jiān)視硬件添加和刪除,對設(shè)備文件系統(tǒng)進(jìn)行相應(yīng)更改,如果對設(shè)備文件系統(tǒng)進(jìn)行更改的操作不是內(nèi)核自動完成的,則控制守護(hù)進(jìn)程可能調(diào)用系統(tǒng)或用戶空間中的腳本來處理特殊設(shè)備需求。
FreeBSD和DragonFly BSD實(shí)現(xiàn)已經(jīng)命名了虛擬設(shè)備文件系統(tǒng)devfs和關(guān)聯(lián)的守護(hù)進(jìn)程devd。 Linux主要使用稱為udev的用戶空間實(shí)現(xiàn),但有許多變體。 Darwin以及基于它的macOS等操作系統(tǒng)都有純粹的基于內(nèi)核的設(shè)備文件系統(tǒng)。
在支持chroot進(jìn)程隔離的Unix系統(tǒng)中,比如Solaris Containers,通常每個chroot環(huán)境都需要它自己的/ dev; 這些安裝點(diǎn)將在全局文件系統(tǒng)樹中各個節(jié)點(diǎn)上的主機(jī)操作系統(tǒng)上可見。通過限制將設(shè)備節(jié)點(diǎn)填充到/ dev的chroot實(shí)例中,硬件隔離可以由chroot環(huán)境強(qiáng)制實(shí)施(程序不能插入硬件,它既不能看到也不能訪問名稱 - 這是比Unix文件系統(tǒng)權(quán)限更強(qiáng)的訪問控制形式)。
設(shè)備節(jié)點(diǎn)對應(yīng)于操作系統(tǒng)內(nèi)核已經(jīng)分配的資源。 Unix通過一個主號碼和一個次號碼來標(biāo)識這些資源, 都作為節(jié)點(diǎn)結(jié)構(gòu)的一部分存儲。 這些編號的分配在不同的操作系統(tǒng)和不同的計算機(jī)平臺上獨(dú)特地發(fā)生。通常,主號碼標(biāo)識設(shè)備驅(qū)動程序,次號碼標(biāo)識驅(qū)動程序控制的特定設(shè)備(可能超出許多設(shè)備): 在這種情況下,系統(tǒng)可能會將次號碼傳遞給驅(qū)動程序。 但是,在動態(tài)分配數(shù)字的情況下,情況可能并非如此(例如,在FreeBSD 5及更高版本上)。
與其他特殊文件類型一樣,計算機(jī)系統(tǒng)使用標(biāo)準(zhǔn)系統(tǒng)調(diào)用訪問設(shè)備節(jié)點(diǎn),并將它們視為普通計算機(jī)文件。存在兩種標(biāo)準(zhǔn)類型的設(shè)備文件; 不幸的是,由于歷史原因,他們的名字相當(dāng)反直覺,因此解釋兩者之間的差異通常是不正確的。
塊文件分類
字符設(shè)備(Character devices)
字符特殊文件或字符設(shè)備提供無緩沖,直接訪問硬件設(shè)備。 它們不一定允許程序一次讀取或?qū)懭雴蝹€字符; 這取決于所討論的設(shè)備。 例如,硬盤的字符設(shè)備通常會要求所有讀寫操作都對齊到塊邊界,并且絕對不允許讀取單個字節(jié)。
字符設(shè)備有時被稱為原始設(shè)備,以避免圍繞一個基于塊的硬件的字符設(shè)備通常需要程序讀取和寫入對齊的塊的事實(shí)混淆。
塊設(shè)備(Block devices)
塊特殊文件或塊設(shè)備提供對硬件設(shè)備的緩沖存取,并提供一些抽象的細(xì)節(jié)。 與字符設(shè)備不同,塊設(shè)備將始終允許程序員讀取或?qū)懭肴魏未笮〉膲K(包括單個字符/字節(jié))和任何對齊。缺點(diǎn)是由于塊設(shè)備被緩沖,編程人員不知道在寫入數(shù)據(jù)從內(nèi)核的緩沖區(qū)傳遞到實(shí)際設(shè)備之前需要多長時間,或者實(shí)際上兩個單獨(dú)的寫入將以什么順序到達(dá)物理設(shè)備? 此外,如果相同的硬件暴露字符和塊設(shè)備,則由于客戶端使用字符設(shè)備不知道塊設(shè)備的緩沖區(qū)中所做的更改而導(dǎo)致數(shù)據(jù)損壞的風(fēng)險。
偽設(shè)備(Pseudo-devices)
類Unix系統(tǒng)上的設(shè)備節(jié)點(diǎn)不一定要與物理設(shè)備相對應(yīng)。缺乏這種對應(yīng)關(guān)系的節(jié)點(diǎn)形成了一組偽裝置。 它們提供操作系統(tǒng)處理的各種功能。 一些最常用的(基于字符的)偽裝置包括:
/ dev / null - 接受并放棄所有輸入; 不產(chǎn)生輸出(總是在讀取時返回文件結(jié)束指示) / dev / zero - 接受并放棄所有輸入; 產(chǎn)生連續(xù)的NUL(零值)字節(jié)流 / dev / full - 讀取時會產(chǎn)生連續(xù)的NUL(零值)字節(jié)流,并在寫入時返回“磁盤已滿”消息 / dev / random和/ dev / urandom - 它們產(chǎn)生一個可變長度的偽隨機(jī)數(shù)字流。
節(jié)點(diǎn)創(chuàng)建
節(jié)點(diǎn)由mknod系統(tǒng)調(diào)用創(chuàng)建。用于創(chuàng)建節(jié)點(diǎn)的命令行程序也稱為mknod。 通常的文件系統(tǒng)調(diào)用(重命名,取消鏈接)和命令(mv,rm)可以移動或刪除節(jié)點(diǎn)。 當(dāng)復(fù)制設(shè)備節(jié)點(diǎn)時傳遞選項(xiàng)-R或-a時,cp -l命令會創(chuàng)建一個與原始屬性相同的新設(shè)備節(jié)點(diǎn)。
某些Unix版本包含一個名為makedev或MAKEDEV的腳本,用于在目錄/ dev中創(chuàng)建所有必需的設(shè)備。 只有在其設(shè)備被靜態(tài)分配主要編號的系統(tǒng)上(例如,通過在其內(nèi)核模塊中對其進(jìn)行硬編碼)才有意義。
塊文件命名規(guī)則
以下前綴用于/ dev層次結(jié)構(gòu)中某些設(shè)備的名稱,以標(biāo)識設(shè)備的類型:
lp:行式打印機(jī)(比較lp) pt:偽終端(虛擬終端) tty:終端 一些額外的前綴已經(jīng)在一些操作系統(tǒng)中普遍使用: fb:幀緩沖區(qū) fd :(平臺)軟盤,盡管這個縮寫也常用來指文件描述符 高清:(“經(jīng)典”)IDE驅(qū)動程序(以前用于ATA硬盤驅(qū)動器,ATAPI光盤驅(qū)動器等) hda:第一個ATA通道上的主設(shè)備(通常由主編號3和次編號0標(biāo)識) hdb:第一個ATA通道上的從屬設(shè)備 hdc:第二個ATA通道上的主設(shè)備 hdc1:此磁盤上的第一個主分區(qū)(示例) hdc5:擴(kuò)展分區(qū)中的第一個邏輯驅(qū)動器(示例) hdd:第二個ATA通道上的從屬設(shè)備 parport,pp:并行端口 SCSI驅(qū)動程序,也被libATA(現(xiàn)代PATA / SATA驅(qū)動程序),USB,IEEE 1394等使用。 sd:大容量存儲驅(qū)動程序 sda:首次注冊的設(shè)備 sda4:此磁盤上的最后一個分區(qū)(示例) sda6:擴(kuò)展分區(qū)中的第二個邏輯驅(qū)動器(示例) sdb,sdc等:第二,第三等注冊設(shè)備 ses:機(jī)箱驅(qū)動程序 sg:通用SCSI層 sr:“ROM”驅(qū)動程序(面向數(shù)據(jù)的光盤驅(qū)動器; scd只是一個輔助別名) st:磁帶驅(qū)動器 tty:終端 ttyS :(平臺)串口驅(qū)動程序 ttyUSB:USB串口轉(zhuǎn)換器,調(diào)制解調(diào)器等
在Linux中使用的前綴規(guī)范列表可以在Linux設(shè)備列表中找到,Linux設(shè)備列表是Linux操作系統(tǒng)的分配設(shè)備編號和/ dev目錄節(jié)點(diǎn)的正式注冊表。
對于大多數(shù)設(shè)備而言,此前綴后面跟著唯一標(biāo)識特定設(shè)備的編號。 對于硬盤驅(qū)動器,使用字母來標(biāo)識設(shè)備,然后使用數(shù)字來標(biāo)識分區(qū)。因此,文件系統(tǒng)可以通過/dev/sda3找到磁盤上的區(qū)域;把/dev/pts/14與聯(lián)網(wǎng)的終端會話聯(lián)系起來。
操作設(shè)備文件的相關(guān)命令
mknod
“l(fā)inux設(shè)備文件指的是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。