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