Linux 裝置檔案/dev/*詳解、查詢

lhrbest發表於2019-03-06

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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章