mknod(Make Node)是 Linux 系統中用於建立特殊檔案的底層指令。這些特殊檔案不儲存實際資料,而是作為核心與硬體裝置(或虛擬裝置)溝通的介面入口,位於 /dev 目錄下。
| 類型代碼 | 名稱 | 適用場景 | 特徵 |
|---|---|---|---|
b | 區塊裝置 | 硬碟、SSD、USB 隨身碟 | 支援隨機存取、有緩衝區、以區塊為單位傳輸 |
c | 字元裝置 | 終端機、序列埠、音效卡、滑鼠 | 串流式存取、無緩衝、以字元為單位傳輸 |
p | 命名管道 (FIFO) | 行程間通訊 (IPC) | 先進先出,無磁碟 I/O,累記憶體緩衝 |
# 建立區塊/字元裝置
mknod [選項] <檔名> {b|c} <主裝置號> <次裝置號>
# 建立命名管道
mknod [選項] <檔名> p
a+rw)。# 建立 /dev/ttyS0 (字元裝置, 主號 4, 次號 64)
sudo mknod -m 660 /dev/ttyS0 c 4 64
sudo chown root:dialout /dev/ttyS0
# 建立管道
mknod /tmp/my_pipe p
# 終端機 A 寫入資料
echo "Hello from A" > /tmp/my_pipe
# 終端機 B 讀取資料 (會阻塞直到有資料寫入)
cat /tmp/my_pipe
# 緊急情況下重建黑洞裝置
sudo mknod -m 666 /dev/null c 1 3
現代 Linux 發行版普遍採用 udev 與 devtmpfs 自動管理 /dev 目錄,管理員極少需手動執行 mknod。但理解其原理對於:
仍具核心價值。
查看現有裝置的主/次號:
ls -l /dev/sda # 區塊裝置範例: brw-rw---- 1 root disk 8, 0
ls -l /dev/ttyUSB0 # 字元裝置範例: crw-rw---- 1 root dialout 188, 0
# 格式: 權限 連結數 擁有者 群組 主號, 次號 時間 檔名