萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 作業系統 >  >> Linux 教學

Linux mknod 命令完全指南:建立區塊、字元裝置與命名管道

命令簡介

mknod(Make Node)是 Linux 系統中用於建立特殊檔案的底層指令。這些特殊檔案不儲存實際資料,而是作為核心與硬體裝置(或虛擬裝置)溝通的介面入口,位於 /dev 目錄下。

三大特殊檔案類型

類型代碼名稱適用場景特徵
b區塊裝置硬碟、SSD、USB 隨身碟支援隨機存取、有緩衝區、以區塊為單位傳輸
c字元裝置終端機、序列埠、音效卡、滑鼠串流式存取、無緩衝、以字元為單位傳輸
p命名管道 (FIFO)行程間通訊 (IPC)先進先出,無磁碟 I/O,累記憶體緩衝

語法結構

# 建立區塊/字元裝置
mknod [選項] <檔名> {b|c} <主裝置號> <次裝置號>

# 建立命名管道
mknod [選項] <檔名> p

關鍵參數解析

  • 主裝置號:識別裝置驅動程式(如 IDE 控制器、SCSI 控制器)。
  • 次裝置號:識別該驅動程式管理的具體裝置實例(如第一顆硬碟、第二分區)。
  • -m, --mode=MODE:設定檔案權限(預設 0666,即 a+rw)。

實戰範例

1. 手動建立虛擬終端裝置

# 建立 /dev/ttyS0 (字元裝置, 主號 4, 次號 64)
sudo mknod -m 660 /dev/ttyS0 c 4 64
sudo chown root:dialout /dev/ttyS0

2. 建立命名管道用於腳本通訊

# 建立管道
mknod /tmp/my_pipe p

# 終端機 A 寫入資料
echo "Hello from A" > /tmp/my_pipe

# 終端機 B 讀取資料 (會阻塞直到有資料寫入)
cat /tmp/my_pipe

3. 修復遺失的 /dev/null

# 緊急情況下重建黑洞裝置
sudo mknod -m 666 /dev/null c 1 3

現代系統中的角色

現代 Linux 發行版普遍採用 udev 與 devtmpfs 自動管理 /dev 目錄,管理員極少需手動執行 mknod。但理解其原理對於:

  • 嵌入式系統開發(無 udev 環境)
  • 容器/虛擬化裝置直通除錯
  • 理解「一切皆檔案」的 Unix 哲學
  • 修復損壞的裝置節點

仍具核心價值。

補充:裝置號查詢

查看現有裝置的主/次號:

ls -l /dev/sda      # 區塊裝置範例: brw-rw---- 1 root disk 8, 0
ls -l /dev/ttyUSB0  # 字元裝置範例: crw-rw---- 1 root dialout 188, 0
# 格式: 權限 連結數 擁有者 群組 主號, 次號 時間 檔名
copyright © 萬盛學電腦網 all rights reserved