Linux 裝置檔案/dev/*詳解、查詢
Linux 裝置檔案/dev/*詳解、查詢
裝置管理是 Linux 中比較基礎的知識,與核心的關係也比較密切。隨著 Udev 的廣泛使用,Linux 發行版的智慧程度越來越高,許多 Linux 新使用者對 /dev 目錄下的東西變得不再熟悉,有時候遇見問題就會抓狂。
Linux 中的裝置按照存取方式的不同,可以分為兩種:
字元裝置:無緩衝且只能順序存取
塊裝置:有緩衝且可以隨機(亂序)存取,而按照是否對應物理實體,也可以分為兩種:
物理裝置,對實際存在的物理硬體的抽象。
虛擬裝置,不依賴於特定的物理硬體,僅是核心自身提供的某種功能。
無論是哪種裝置,在 /dev 目錄下都有一個對應的檔案(節點),並且每個裝置檔案都必須有主/次裝置號,主裝置號相同的裝置是同類裝置,使用同一個驅動程式(雖然目前的核心允許多個驅動共享一個主裝置號,但絕大多數裝置依然遵循一個驅動對應一個主裝置號的原則)。可以通過 cat /proc/devices 命令檢視當前已經載入的裝置驅動程式的主裝置號。
核心能夠識別的所有裝置都記錄在原碼樹下的 Documentation/devices.txt 檔案中。另外,在 http://www.lanana.org/docs/device-list/ 也有一份,貌似已經失去維護。
注意:在 /dev 目錄下除了各種裝置節點之外還通常還會存在:FIFO管道、Socket、軟/硬連線、目錄。這些東西並不是裝置檔案,因此也就沒有主/次裝置號。
裝置檔案
瞭解這些裝置的最基本要求就是對每個裝置檔案的含義瞭如指掌,下面列出了 Linux-3.13.2 核心中常見的已註冊裝置及其含義(省略了生僻與罕見的裝置)。
----------------------------------------------------------------------
主裝置號 裝置型別
次裝置號=檔名 簡要說明
----------------------------------------------------------------------
0 未命名裝置(例如NFS之類非裝置的掛載)
0 = 為空裝置號保留
參見主裝置號為144,145,146的塊裝置,以瞭解"擴充套件區域"(expansion area)
1 char 記憶體裝置
1 = /dev/mem 實體記憶體的全映象。可以用來直接存取實體記憶體。
2 = /dev/kmem 核心看到的虛擬記憶體的全映象。可以用來訪問核心中的內容(檢視核心變數或用作rootkit之類)。
3 = /dev/null 空裝置。任何寫入都將被直接丟棄(但返回"成功");任何讀取都將得到EOF(檔案結束標誌)。
4 = /dev/port 存取I/O埠
5 = /dev/zero 零流源。任何寫入都將被直接丟棄(但返回"成功");任何讀取都將得到無限多的二進位制零流。
7 = /dev/full 滿裝置。任何寫入都將失敗,並把errno設為ENOSPC(沒有剩餘空間);任何讀取都將得到無限多的二進位制零流。
這個裝置通常被用來測試程式在遇到磁碟無剩餘空間錯誤時的行為。
8 = /dev/random 真隨機數發生器。以背景噪聲資料或硬體隨機數發生器作為熵池,讀取時會返回小於熵池噪聲總數的隨機位元組。
若熵池空了,讀操作將會被阻塞,直到收集到了足夠的環境噪聲為止。建議用於需要生成高強度金鑰的場合。
[注意]雖然允許寫入,但企圖通過寫入此檔案來"預存"隨機數是徒勞的,因為寫入的資料對輸出並無影響。
9 = /dev/urandom 偽隨機數發生器。更快,但是不夠安全。僅用於對安全性要求不高的場合。
即使熵池空了,讀操作也不會被阻塞,而是把已經產生的隨機數做為種子來產生新的隨機數。
[注意]雖然允許寫入,但企圖通過寫入此檔案來"預存"隨機數是徒勞的,因為寫入的資料對輸出並無影響。
10 = /dev/aio 非同步I/O通知介面
11 = /dev/kmsg 任何對該檔案的寫入都將作為printk的輸出;而讀取則得到printk的輸出緩衝區內容。
1 block RAM disk [已過時,請用TMPFS]
0 = /dev/ram0 第1個 RAM disk
1 = /dev/ram1 第2個 RAM disk
...
[說明]將/dev/ram0用作initrd的做法已過時(因為它僅針對image-initrd格式),當下的主流是cpio-initrd格式。
4 char TTY(終端)裝置
0 = /dev/tty0 當前虛擬控制檯
1 = /dev/tty1 第1個虛擬控制檯
...
63 = /dev/tty63 第63個虛擬控制檯
64 = /dev/ttyS0 第1個UART串列埠
...
255 = /dev/ttyS191 第192個UART串列埠
[說明]"UART串列埠"是指 8250/16450/16550 UART序列控制晶片
4 block 如果根檔案系統以是以只讀方式掛載的,那麼就不可能建立真正的裝置節點,
此時就使用該裝置作為動態分配的主裝置的別名,並掛載為根檔案系統。
0 = /dev/root
5 char 輔助 TTY 裝置
0 = /dev/tty 當前 TTY 裝置
1 = /dev/console 系統控制檯(一般是/dev/tty0)
2 = /dev/ptmx 所有 Unix98 PTY master 的複用器
3 = /dev/ttyprintk 核心通過此裝置使用printk傳送內嵌的使用者訊息(依賴於CONFIG_TTY_PRINTK)
64 = /dev/cua0 對應於 ttyS0 的撥出(Callout)裝置
...
255 = /dev/cua191 對應於 ttyS191 的撥出(Callout)裝置
7 char 虛擬控制檯捕捉裝置(這些裝置既允許讀也允許寫)
0 = /dev/vcs 當前虛擬控制檯(vc)的文字內容
1 = /dev/vcs1 tty1 的文字內容
...
63 = /dev/vcs63 tty63 的文字內容
128 = /dev/vcsa 當前虛擬控制檯(vc)的文字/屬性內容
129 = /dev/vcsa1 tty1 的文字/屬性內容
...
191 = /dev/vcsa63 tty63 的文字/屬性內容
7 block 迴環裝置(用一個普通的檔案來模擬一個塊裝置)
0 = /dev/loop0 第1個迴環裝置
1 = /dev/loop1 第2個迴環裝置
...
[提示]對迴環裝置的繫結由 mount(8) 或 losetup(8) 處理
8 block SCSI 磁碟(0-15)
0 = /dev/sda 第1個 SCSI 磁碟(整個磁碟)
16 = /dev/sdb 第2個 SCSI 磁碟(整個磁碟)
32 = /dev/sdc 第3個 SCSI 磁碟(整個磁碟)
...
240 = /dev/sdp 第16個 SCSI 磁碟(整個磁碟)
分割槽表示方法如下(以第3個 SCSI 磁碟為例)
33 = /dev/sdc1 第1個分割槽
34 = /dev/sdc2 第2個分割槽
...
47 = /dev/sdc15 第15個分割槽
[提示]對於DOS分割槽來說,1-4是主分割槽,5-15是邏輯分割槽。但對於GPT分割槽來說,全是主分割槽,沒有邏輯分割槽的概念。
[提示]目前的核心將SATA/PATA/IED硬碟統一使用 /dev/sd* 來表示,已經不再使用 /dev/hd* 這種過時的裝置檔案了。
9 block Metadisk(RAID)裝置
0 = /dev/md0 第1組 metadisk
1 = /dev/md1 第2組 metadisk
...
[說明]MD驅動(CONFIG_BLK_DEV_MD)的作用是將同一個檔案系統分割到多個物理磁碟上。
10 char 各種雜項裝置(含非串列埠滑鼠)
1 = /dev/psaux PS/2滑鼠
128 = /dev/beep 能夠讓主機板的蜂鳴器發出不同頻率聲音的裝置(Fancy Beeper Daemon)
130 = /dev/watchdog 看門狗(CONFIG_WATCHDOG)
131 = /dev/temperature 機器內部溫度
135 = /dev/rtc 實時時鐘(Real Time Clock)
143 = /dev/pciconf PCI配置空間
144 = /dev/nvram 非易失配置RAM
151 = /dev/led 發光二極體(LED)燈
152 = /dev/kpoll 核心輪詢(Poll)驅動
156 = /dev/lcd 液晶(LCD)螢幕
161 = /dev/userdma 使用者空間DMA訪問
162 = /dev/smbus 系統管理匯流排(System Management Bus)
164 = /dev/ipmo Intel的智慧平臺管理(Intelligent Platform Management)介面
165 = /dev/vmmon VMware虛擬機器監視器
170 = /dev/thinkpad/thinkpad Thinkpad裝置
173 = /dev/ipmikcs 智慧平臺管理(Intelligent Platform Management)介面
175 = /dev/agpgart AGP圖形地址重對映表(Graphics Address Remapping Table)
182 = /dev/perfctr 效能監視計數器
183 = /dev/hwrng 通用硬體隨機數發生器
184 = /dev/cpu/microcode CPU微程式碼更新介面(依賴於CONFIG_MICROCODE)
186 = /dev/atomicps 程式狀態資料的原子快照
188 = /dev/smbusbios SMBus(系統管理匯流排) BIOS
189 = /dev/ussp_ctl 使用者空間串列埠控制器
200 = /dev/net/tun TAP/TUN 網路裝置(TAP/TUN以軟體的方式實現了網路裝置)
TAP模擬了乙太網幀(第二層),TUN模擬了IP包(第三層)。
202 = /dev/emd/ctl 增強型 Metadisk RAID (EMD) 控制器
203 = /dev/cuse 使用者空間的字元裝置(Character device in user-space)
212 = /dev/watchdogs/0 第一隻看門狗
213 = /dev/watchdogs/1 第二隻看門狗
214 = /dev/watchdogs/2 第三隻看門狗
215 = /dev/watchdogs/3 第四隻看門狗
220 = /dev/mptctl Message passing technology (MPT) control
223 = /dev/input/uinput 使用者層輸入裝置
224 = /dev/tpm TCPA TPM driver
227 = /dev/mcelog X86_64 Machine Check Exception driver
228 = /dev/hpet 高精度事件定時器(HPET)
229 = /dev/fuse Fuse(使用者空間的虛擬檔案系統)
231 = /dev/snapshot 系統記憶體快照
232 = /dev/kvm 核心虛構機(基於AMD SVM和Intel VT硬體虛擬技術)
234 = /dev/btrfs-control Btrfs檔案系統控制裝置
235 = /dev/autofs Autofs控制裝置
236 = /dev/mapper/control 裝置對映(Device-Mapper)控制器
237 = /dev/loop-control 迴環裝置控制器
238 = /dev/vhost-net 用於 virtio net 的宿主核心加速器
11 block SCSI CD-ROM 裝置
0 = /dev/scd0 第1個 SCSI CD-ROM
1 = /dev/scd1 第2個 SCSI CD-ROM
...
13 char 核心輸入裝置
0 = /dev/input/js0 第一個遊戲杆(joystick)
1 = /dev/input/js1 第二個遊戲杆(joystick)
...
32 = /dev/input/mouse0 第1個滑鼠
33 = /dev/input/mouse1 第2個滑鼠
...
63 = /dev/input/mice 所有滑鼠的合體
64 = /dev/input/event0 第1個事件佇列
65 = /dev/input/event1 第2個事件佇列
...
14 char OSS(Open Sound System)相容裝置[已過時]
0 = /dev/mixer OSS混音控制器(CONFIG_SND_MIXER_OSS)
1 = /dev/sequencer OSS音序器(CONFIG_SND_SEQUENCER_OSS)
3 = /dev/dsp OSS數字音訊波形輸出裝置(CONFIG_SND_PCM_OSS)
8 = /dev/sequencer2 第二OSS音序器(CONFIG_SND_SEQUENCER_OSS)
16 = /dev/mixer1 第二OSS混音控制器(CONFIG_SND_MIXER_OSS)
19 = /dev/dsp1 第二OSS數字音訊波形輸出裝置(CONFIG_SND_PCM_OSS)
21 char 通用 SCSI 裝置(通常是SCSI光碟機)
0 = /dev/sg0 第1個通用 SCSI 裝置
1 = /dev/sg1 第2個通用 SCSI 裝置
...
[說明]許多發行版還將這些裝置命名為 /dev/sga, /dev/sgb, /dev/sgc ...
29 char 通用幀緩衝(frame buffer)裝置
0 = /dev/fb0 第1個幀緩衝裝置
1 = /dev/fb1 第2個幀緩衝裝置
...
31 = /dev/fb31 第32個幀緩衝裝置
43 block 網路塊裝置(Network block devices)
0 = /dev/nb0 第1個網路塊裝置
1 = /dev/nb1 第2個網路塊裝置
...
44 block 快閃記憶體轉換層(Flash Translation Layer)檔案系統
0 = /dev/ftla 第1個MTD(Memory Technology Device)上的FTL
16 = /dev/ftlb 第2個MTD(Memory Technology Device)上的FTL
32 = /dev/ftlc 第3個MTD(Memory Technology Device)上的FTL
...
240 = /dev/ftlp 第16個MTD(Memory Technology Device)上的FTL
[說明]分割槽的表示方法與SCSI磁碟相同(最大15個)
65 block SCSI 磁碟(16-31)
0 = /dev/sdq 第17個 SCSI 磁碟(整個磁碟)
16 = /dev/sdr 第18個 SCSI 磁碟(整個磁碟)
32 = /dev/sds 第19個 SCSI 磁碟(整個磁碟)
...
240 = /dev/sdaf 第32個 SCSI 磁碟(整個磁碟)
66 block SCSI 磁碟(32-47)
0 = /dev/sdag 第33個 SCSI 磁碟(整個磁碟)
16 = /dev/sdah 第34個 SCSI 磁碟(整個磁碟)
32 = /dev/sdai 第35個 SCSI 磁碟(整個磁碟)
...
240 = /dev/sdav 第48個 SCSI 磁碟(整個磁碟)
67 block SCSI 磁碟(48-63)
0 = /dev/sdaw 第49個 SCSI 磁碟(整個磁碟)
16 = /dev/sdax 第50個 SCSI 磁碟(整個磁碟)
32 = /dev/sday 第51個 SCSI 磁碟(整個磁碟)
...
240 = /dev/sdbl 第64個 SCSI 磁碟(整個磁碟)
81 char video4linux
0 = /dev/video0 第1個視訊採集裝置(攝像頭)
...
63 = /dev/video63 第64個視訊採集裝置(攝像頭)
64 = /dev/radio0 第1個無線電裝置(收音機之類)
...
127 = /dev/radio63 第64個無線電裝置(收音機之類)
224 = /dev/vbi0 第1個垂直中斷(vertical blank interrupt)
...
255 = /dev/vbi31 第64個垂直中斷(vertical blank interrupt)
89 char I2C 匯流排介面
0 = /dev/i2c-0 第1個 I2C 介面卡
1 = /dev/i2c-1 第2個 I2C 介面卡
...
90 char 記憶體技術裝置(Memory Technology Device) (RAM, ROM, Flash)
0 = /dev/mtd0 第1個 MTD (讀寫)
1 = /dev/mtdr0 第1個 MTD (只讀)
...
30 = /dev/mtd15 第16個 MTD (讀寫)
31 = /dev/mtdr15 第16個 MTD (只讀)
93 block NAND快閃記憶體轉換層(Flash Translation Layer)檔案系統
0 = /dev/nftla 第1個NFTL層
16 = /dev/nftlb 第2個NFTL層
...
240 = /dev/nftlp 第16個NFTL層
[說明]分割槽的表示方法與SCSI磁碟相同(最大15個)
98 block 使用者模式下的虛擬塊裝置(分割槽處理方式與 SCSI 磁碟相同)
0 = /dev/ubda 第1個使用者模式塊裝置
16 = /dev/udbb 第2個使用者模式塊裝置
...
108 char 獨立於特定裝置的 PPP 介面
0 = /dev/ppp 獨立於特定裝置的 PPP 介面(CONFIG_PPP)
117 block 企業卷管理系統(Enterprise Volume Management System)
0 = /dev/evms/block_device EVMS塊裝置
1 = /dev/evms/legacyname1 第1個EVMS傳統裝置
2 = /dev/evms/legacyname2 第2個EVMS傳統裝置
...
兩個範圍都可以相互延伸(向上/向下)一直到它們相遇
...
254 = /dev/evms/EVMSname2 第2個EVMS本地裝置
255 = /dev/evms/EVMSname1 第1個EVMS本地裝置
[說明]"legacyname"來源於普通的塊裝置名,
例如 /dev/sda5 將會變成 /dev/evms/sda5
119 char VMware虛擬網路控制器
0 = /dev/vnet0 第1個虛擬網路
1 = /dev/vnet1 第2個虛擬網路
...
128-135 char Unix98 PTY master
這些裝置不應當存在裝置節點,而應當通過 /dev/ptmx 介面訪問。
136-143 char Unix98 PTY slave
0 = /dev/pts/0 第1個 Unix98 PTY slave
1 = /dev/pts/1 第2個 Unix98 PTY slave
...
這些裝置節點是自動生成的(伴有適當的許可權和模式),不能手動建立。
方法是通過使用適當的 mount 選項(通常是:mode=0620,gid=<"tty"組的gid>)
將 devpts 檔案系統掛載到 /dev/pts 目錄即可。
144 block 用於更多非裝置型掛載的擴充套件區域(Expansion Area)#1
0 = mounted device 256
255 = mounted device 511
145 block 用於更多非裝置型掛載的擴充套件區域(Expansion Area)#2
0 = mounted device 512
255 = mounted device 767
146 block 用於更多非裝置型掛載的擴充套件區域(Expansion Area)#3
0 = mounted device 768
255 = mounted device 1023
147 block DRBD(Distributed Replicated Block Device)
0 = /dev/drbd0 第1個 DRBD 裝置
1 = /dev/drbd1 第2個 DRBD 裝置
...
153 block EMD(Enhanced Metadisk RAID)儲存單元(分割槽處理方式與 SCSI 磁碟相同)
0 = /dev/emd/0 第1個儲存單元
1 = /dev/emd/0p1 第1個儲存單元的第1個分割槽
2 = /dev/emd/0p2 第1個儲存單元的第2個分割槽
...
15 = /dev/emd/0p15 第1個儲存單元的第15個分割槽
16 = /dev/emd/1 第2個儲存單元
32 = /dev/emd/2 第3個儲存單元
...
240 = /dev/emd/15 第16個儲存單元
179 block MMC(MultiMeidaCard)塊裝置
0 = /dev/mmcblk0 第1塊 SD/MMC 卡
1 = /dev/mmcblk0p1 第1塊 SD/MMC 卡的第1個分割槽
8 = /dev/mmcblk1 第2塊 SD/MMC 卡
...
[說明]每個MMC塊裝置保留的次裝置號數量由 CONFIG_MMC_BLOCK_MINORS 決定(預設=8)。
或者也可以通過核心引導引數 mmcblk.perdev_minors 進行修改。
180 char USB字元裝置
0 = /dev/usb/lp0 第1個USB印表機
...
15 = /dev/usb/lp15 第16個USB印表機
48 = /dev/usb/scanner0 第1個USB掃描器
...
63 = /dev/usb/scanner15 第16個USB掃描器
96 = /dev/usb/hiddev0 第1個USB人機介面裝置(滑鼠/鍵盤/遊戲杆/手寫版等)
...
111 = /dev/usb/hiddev15 第16個USB人機介面裝置(滑鼠/鍵盤/遊戲杆/手寫版等)
132 = /dev/usb/idmouse ID Mouse (指紋掃描器)
180 block USB塊裝置
0 = /dev/uba 第1個USB塊裝置
8 = /dev/ubb 第2個USB塊裝置
16 = /dev/ubc 第3個USB塊裝置
...
192 char 核心 profiling 介面
0 = /dev/profile Profiling 控制裝置
1 = /dev/profile0 CPU 0 的 Profiling 裝置
2 = /dev/profile1 CPU 1 的 Profiling 裝置
...
193 char 核心事件跟蹤介面
0 = /dev/trace 跟蹤控制裝置
1 = /dev/trace0 CPU 0 的跟蹤裝置
2 = /dev/trace1 CPU 1 的跟蹤裝置
...
195 char Nvidia 圖形裝置(比如顯示卡)
0 = /dev/nvidia0 第1個 Nvidia 卡
1 = /dev/nvidia1 第2個 Nvidia 卡
...
255 = /dev/nvidiactl Nvidia卡控制裝置
202 char 特定於CPU模式的暫存器(model-specific register,MSR)
0 = /dev/cpu/0/msr CPU 0 的 MSRs
1 = /dev/cpu/1/msr CPU 1 的 MSRs
...
202 block Xen 虛擬塊裝置
0 = /dev/xvda 第1個 Xen 虛擬磁碟(整塊磁碟)
16 = /dev/xvdb 第2個 Xen 虛擬磁碟(整塊磁碟)
32 = /dev/xvdc 第3個 Xen 虛擬磁碟(整塊磁碟)
...
240 = /dev/xvdp 第16個 Xen 虛擬磁碟(整塊磁碟)
[說明]分割槽的表示方法與SCSI磁碟相同(最大15個)
203 char CPU CPUID 資訊
0 = /dev/cpu/0/cpuid CPU0的CPUID
1 = /dev/cpu/1/cpuid CPU1的CPUID
...
226 char DRI(Direct Rendering Infrastructure)
0 = /dev/dri/card0 第1個顯示卡
1 = /dev/dri/card1 第2個顯示卡
...
232 char 生物識別裝置
0 = /dev/biometric/sensor0/fingerprint 第1個裝置的第1個指紋感測器
1 = /dev/biometric/sensor0/iris 第1個裝置的第1個虹膜感測器
2 = /dev/biometric/sensor0/retina 第1個裝置的第1個視網膜感測器
3 = /dev/biometric/sensor0/voiceprint 第1個裝置的第1個聲波感測器
4 = /dev/biometric/sensor0/facial 第1個裝置的第1個面部感測器
5 = /dev/biometric/sensor0/hand 第1個裝置的第1個手掌感測器
...
10 = /dev/biometric/sensor1/fingerprint 第2個裝置的第1個指紋感測器
...
20 = /dev/biometric/sensor2/fingerprint 第3個裝置的第1個指紋感測器
...
/dev 目錄中的其他內容
這部分詳細說明一些應該或可能存在於 /dev 目錄中的其他檔案。連結最好使用與這裡完全相同的格式(絕對路徑或相對路徑)。究竟是使用硬連結(hard)還是軟連線(symbolic)取決於不同的裝置,但最好與這裡給出示範保持一致。
必須的連結
必須在所有的系統上都存在這些連線:
連結 目標 連結型別 簡要說明
------------------------------------------------------------------------
/dev/fd /proc/self/fd symbolic 檔案描述符
/dev/stdin fd/0 symbolic stdin(標準輸入)檔案描述府
/dev/stdout fd/1 symbolic stdout(標準輸出)檔案描述府
/dev/stderr fd/2 symbolic stderr(標準錯誤)檔案描述府
/dev/nfsd socksys symbolic 僅為 iBCS-2 所必須
/dev/X0R null symbolic 僅為 iBCS-2 所必須
推薦的連結
推薦在所有的系統上都存在這些連線:
連結 目標 連結型別 簡要說明
------------------------------------------------------------------------
/dev/core /proc/kcore symbolic 為了向後相容
/dev/ramdisk ram0 symbolic 為了向後相容
/dev/ftape qft0 symbolic 為了向後相容
/dev/bttv0 video0 symbolic 為了向後相容
/dev/radio radio0 symbolic 為了向後相容
/dev/i2o* /dev/i2o/* symbolic 為了向後相容
/dev/scd? sr? hard 代替 SCSI CD-ROM 的名字
本地定義的連結
下面的連結很可能需要根據機器的實際硬體配置建立其中的一部分甚至全部。這些連結僅僅是為了迎合習慣用法,它們既非必須也非推薦。
連結 目標 連結型別 簡要說明
------------------------------------------------------------------------
/dev/mouse 滑鼠裝置 symbolic 當前滑鼠裝置
/dev/tape 磁帶裝置 symbolic 當前磁帶裝置
/dev/cdrom 光碟裝置 symbolic 當前光碟裝置
/dev/cdwriter 燒錄機裝置 symbolic 當前燒錄機裝置
/dev/scanner 掃描器裝置 symbolic 當前掃描器裝置
/dev/modem 調變解調器(貓) symbolic 當前撥號裝置
/dev/root 根檔案系統裝置 symbolic 當前根檔案系統裝置
/dev/swap swap裝置 symbolic 當前swap裝置
/dev/modem 不應當用於能夠同時支援接入(dialin)和撥出(dialout)的貓,因為往往會導致鎖檔案問題。如果存在 /dev/modem ,那麼它應當指向一個恰當的主 TTY 裝置。
對於SCSI裝置,/dev/tape 應該指向 /dev/st* ,而 /dev/cdrom 應該指向 /dev/sr* ;而 /dev/cdwriter 和 /dev/scanner 應當分別指向對應的 /dev/sg* 。
/dev/mouse 可以指向一個主序列 TTY 裝置、一個硬體滑鼠、或者一個對應滑鼠驅動程式的套接字(例如 /dev/gpmdata )。
套接字和管道
持久套接字和命名管道可以存在於 /dev 中。常見的有:
/dev/printer socket lpd 本地套接字
/dev/log socket syslog 本地套接字
/dev/gpmdata socket gpm 滑鼠多路複用器(multiplexer)
/dev/initctl fifo pipe init 監聽它並從中獲取資訊(使用者與 init 程式互動的通道)
掛載點
以下目錄被保留用於掛載特殊的檔案系統。這些特殊的檔案系統只提供核心介面而不提供標準的裝置節點。
/dev/pts devpts PTY slave 檔案系統
/dev/shm tmpfs 提供對 POSIX 共享記憶體的直接訪問
終端裝置
終端(或TTY)裝置是一種特殊的字元裝置。終端裝置是可以在會話中用作控制終端的任何裝置,包括:虛擬控制檯、序列介面、偽終端(PTY)。
所有終端裝置共享一個通用的功能集合(線路規則),這包含常規的終端線路規程以及SLIP和PPP模式。所有的終端裝置的命名都很相似。這部分內容將解釋命名規則和各種型別的TTY(終端)的使用。需要注意的是這些命名習慣包含了幾個歷史遺留包袱。其中的一些是Linux所特有的,另一些則是繼承自其他系統,還有一些反映了Linux在成長過程中拋棄了原來借用自其它系統的一些習慣。井號(#)在裝置名裡表示一個無前導零的十進位制數。
虛擬控制檯和控制檯裝置
虛擬控制檯是在系統視訊監視器上顯示的全屏終端。虛擬控制檯被命名為 /dev/tty# (編號從 /dev/tty1 開始)。/dev/tty0 是當前虛擬控制檯。/dev/tty0 用於在不能使用幀緩衝裝置(/dev/fb*)的機器上存取系統顯示卡,但 /dev/console 並不用於此目的。控制檯裝置(/dev/console)由核心直接管理,用於接收和顯示系統訊息,以及單使用者模式登陸。
序列介面
這裡所說的"序列介面"是指 RS-232 串列埠和任何模擬這種介面的裝置,無論是硬體(如調變解調器)還是軟體(如ISDN驅動)。Linux中的每一個串列埠都有兩個裝置名:主裝置或呼入(callin)裝置、輔裝置或撥出(callout)裝置。兩者之間使用字母的大小寫進行區分。比如,對於任意字母"X",裝置名分別為 /dev/ttyX# 與 /dev/cux# 。由於歷史原因,/dev/ttyS# 和 /dev/ttyC# 分別等價於 /dev/cua# 和 /dev/cub# 。名稱 /dev/ttyQ# 和 /dev/cuq# 被保留為僅供本地使用。
串列埠的仲裁是通過鎖檔案(/var/lock/LCK..ttyX#)來提供的。鎖檔案的內容應該是以ASCII碼錶示的鎖定程式的PID。常見的做法是安裝一個諸如 /dev/modem 這樣的連結來指向串列埠。為了確保能夠正確的預先鎖定這些連結,軟體應該追蹤符號連結並鎖定所有可能的名字。此外,還建議為相應的輔裝置安裝對應的鎖檔案。為了避免死鎖,建議按以下順序獲取鎖,並按相反的順序釋放鎖:
符號連結名,如果有(/var/lock/LCK..modem)
"tty"名(/var/lock/LCK..ttyS2)
輔裝置名(/var/lock/LCK..cua2)
在符號連結出現巢狀的情況下,鎖檔案應按照符號連結的解析順序來安裝。
在任何情況下,應用程式都應該等待另一個程式釋放鎖之後,再持有這個鎖。此外,試圖為輔裝置建立鎖檔案的應用程式應考慮被用於非串列埠的TTY埠的可能性(此時不存在輔裝置)。
偽終端(PTY)
偽終端既可以用於建立登陸會話,也可以為其他需要通過TTY線路規則(包括SLIP或者PPP功能)來生成資料的程式提供幫助。每一個 PTY 都有一個master端和一個slave端。按照 System V/Unix98 的 PTY 命名方案,所有master端共享同一個 /dev/ptmx 裝置節點(開啟它核心將自動給出一個未分配的PTY),所有slave端都位於 /dev/pts/ 目錄下,名為 /dev/pts/# (核心會根據需要自動生成和刪除它們)。
一旦master端被開啟,相應的slave裝置就可以按照與 TTY 裝置完全相同的方式使用。master裝置與slave裝置之間通過核心進行連線,等價於擁有 TTY 功能的雙向管道(pipe)。
About Me
........................................................................................................................ ● 本文作者:小麥苗,部分內容整理自網路,若有侵權請聯絡小麥苗刪除 ● 本文在itpub( http://blog.itpub.net/26736162 )、部落格園( http://www.cnblogs.com/lhrbest )和個人weixin公眾號( xiaomaimiaolhr )上有同步更新 ● 本文itpub地址: http://blog.itpub.net/26736162 ● 本文部落格園地址: http://www.cnblogs.com/lhrbest ● 本文pdf版、個人簡介及小麥苗雲盤地址: http://blog.itpub.net/26736162/viewspace-1624453/ ● 資料庫筆試面試題庫及解答: http://blog.itpub.net/26736162/viewspace-2134706/ ● DBA寶典今日頭條號地址: http://www.toutiao.com/c/user/6401772890/#mid=1564638659405826 ........................................................................................................................ ● QQ群號: 230161599 (滿) 、618766405 ● weixin群:可加我weixin,我拉大家進群,非誠勿擾 ● 聯絡我請加QQ好友 ( 646634621 ) ,註明新增緣由 ● 於 2019-03-01 06:00 ~ 2019-03-31 24:00 在魔都完成 ● 最新修改時間:2019-03-01 06:00 ~ 2019-03-31 24:00 ● 文章內容來源於小麥苗的學習筆記,部分整理自網路,若有侵權或不當之處還請諒解 ● 版權所有,歡迎分享本文,轉載請保留出處 ........................................................................................................................ ● 小麥苗的微店 : https://weidian.com/s/793741433?wfr=c&ifr=shopdetail ● 小麥苗出版的資料庫類叢書 : http://blog.itpub.net/26736162/viewspace-2142121/ ● 小麥苗OCP、OCM、高可用網路班 : http://blog.itpub.net/26736162/viewspace-2148098/ ● 小麥苗騰訊課堂主頁 : https://lhr.ke.qq.com/ ........................................................................................................................ 使用 weixin客戶端 掃描下面的二維碼來關注小麥苗的weixin公眾號( xiaomaimiaolhr )及QQ群(DBA寶典)、新增小麥苗weixin, 學習最實用的資料庫技術。
........................................................................................................................ |
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26736162/viewspace-2637691/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Linux 檔案查詢Linux
- Linux裝置名稱的查詢Linux
- Linux查詢大檔案Linux
- 【轉載】Linux查詢檔案安裝路徑Linux
- linux 查詢檔案命令 findLinux
- Linux檔案查詢工具的探索Linux
- Linux 查詢檔案的正確方式Linux
- linux-中塊裝置檔案和字元裝置檔案的本質區別Linux字元
- 檔案查詢
- 如何在Linux中查詢一個檔案Linux
- Linux 檔案系統詳解Linux
- Linux檔案系統詳解Linux
- 檔案批次查詢複製匯出,按檔名批次查詢檔案,按檔案內容批次查詢檔案
- linux一切皆檔案之塊裝置檔案(四)Linux
- git 查詢大檔案、刪除大檔案詳細步驟Git
- linux 中根據檔案的大小進行檔案的查詢Linux
- 檔案查詢命令
- Linux系列開坑記(四)-檔案查詢工具Linux
- Linux中查詢最大檔案的方法有哪些?Linux
- 詳解Linux中/etc/passwd檔案Linux
- linux網路卡配置檔案詳解Linux
- linux的啟動配置檔案inittab檔案詳解Linux
- Linux常用命令之檔案查詢which、find、locate命令講解Linux
- linux批次find查詢檔案並批次替換覆蓋該檔案Linux
- 如何在 Linux 中查詢最大的 10 個檔案Linux
- Linux檔案相關命令詳解(一)Linux
- 使用 udev 高效、動態地管理 Linux 裝置檔案devLinux
- 使用udev高效、動態的管理Linux裝置檔案devLinux
- DNS 查詢原理詳解DNS
- Linux 解壓zip檔案詳解之unzip命令!Linux
- LINUX下查詢大檔案及大的資料夾Linux
- Linux裝置驅動開發詳解:基於Linux4.0核心Linux
- Linux網路卡配置檔案 引數詳解Linux
- Linux常用檔案許可權命令詳解Linux
- 詳解Linux指令與檔案的搜尋Linux
- 查詢檔案位置路徑
- 裝置支援多箱號查詢,mybatis標籤MyBatis
- 詳解css媒體查詢CSS