用途
創建特殊檔案。
語法
只能由 root 用戶或系統組成員運行
mknod Name { b | c } Major Minor
創建 FIFO(已命名的管道)
mknod Name { p }
描述
mknod 命令的第一種形式只能由 root 用戶或系統組成員執行。在第一種形式中,使用了b 或 c 標誌。b 標誌表示這個特殊檔案是面向塊的設備(磁碟、軟碟)。c 標誌表示這個特殊檔案是面向字元的設備(磁帶,鍵盤)。
第一種形式的最後兩個參數是指定主設備的數目,它幫助作業系統查找設備驅動程式代碼,和指定次設備的數目,也就是單元驅動器或行號,它們是十進制或八進制的。一個設備的主要和次要編號由該設備的配置方法分配,它們保存在 ODM 中的 CuDvDr 類里。在這個對象類中定義了主要和次要編號以確保整個系統設備定義的一致性,這是很重要的。
在 mknod 命令的第二種形式中,使用了 p 標誌來創建 FIFO(已命名的管道)。
標誌
b | 表示特殊檔案是面向塊的設備(磁碟、軟碟或磁帶)。 |
c | 表示特殊檔案是面向字元的設備(其他設備)。 |
p | 創建 FIFO(已命名的管道)。 |
------------------------------------------------------------------------
c.創建虛擬設備(dev),日誌記錄的時候有的選項可能用到它們。在默認情況下,是使用/dev目錄下的檔案,但是由於我們需要把DNS限制到一個目錄,所以必須完全把/dev下用到的檔案(或者說設備)模擬過來才可以。
ls -lL /dev/zero /dev/null /dev/random
看到類似
crw-rw-rw- 1 root root 1, 3 2003-09-15 /dev/null
crw-r--r-- 1 root root 1, 8 2003-09-15 /dev/random
crw-rw-rw- 1 root root 1, 5 2003-09-15 /dev/zero
這樣的,將其中的1,3這樣的數字記錄下來,這表示主設備號和次設備號(一般來說主設備號用來區分設備的種類;次設備號則是為了作唯一性區分,標明不同屬性——注意,在unix系統中是把設備也當作檔案來對待的),在redhat 9下,ls加不加-L參數都無所謂,但是在Solaris下則一定要加上才可以顯示。
mknod dev/null c 1 3
mknod dev/zero c 1 5
mknod dev/random c 1 8
============================================================================
mknod [options] name {bc} major minor
mknod [options] name p
GNU 選項(縮寫):
[-m mode] [--help] [--version] [--]
描述
mknod 用指定名稱產生一個FIFO(命名管道),字元專用或塊專用檔案。
檔案系統中的一個專用檔案存貯著三種信息(布朗型、整型、整型)。布朗型在字元檔案與塊檔案之間作出選擇,
兩個整型是主、次設備號。
通常,一個專用檔案並不在磁碟上占用空間,僅僅是為作業系統提供交流,而不是為數據存貯服務。一般地,專用檔案會指向一個硬體設備(如
:磁碟、磁帶、印表機、虛擬控制台)或者作業系統提供的服務(如:/dev/null, /dev/random)。
塊檔案通常類似於磁碟設備(在數據可以被訪問的地方賦予一個塊號,意味著同時設定了一個塊快取)。所有其他設備都是字元檔案。(以前,兩種檔案類型間是有差別的。比如:字元檔案I/O沒有快取,而塊檔案則有。)
mknod命令就是用來產生這種類型檔案的。
以下參數指定了所產生檔案的類型:
p
FIFO型
b
塊檔案
c
字元檔案
GNU版本還允許使用u('unbufferd'非緩衝化),以保持與C語言的一致。
當創建一個塊檔案或字元檔案時,主、次設備號必須在檔案類型參數後給出。(十進制或八進制以0開頭;GNU 版本還允許使用以0x開頭的十六進制)預設地,所產生的檔案模式為0666('a+rw')。
選項
-m mode, --mode=mode
為新建立的檔案設定模式,就象套用命令chmod一樣,以後仍然使用預設模式建立新目錄。
GNU 標準選項
--help
在標準輸出上顯示使用信息並順利退出。
--version
在標準輸出上顯示版本信息並順利退出
--
終端選項列表。
mknod命令詳解
mknod [options] name {bc} major minor
mknod [options] name p
GNU 選項(縮寫):
[-m mode] [--help] [--version] [--]
描述
mknod 用指定名稱產生一個FIFO(命名管道),字元專用或塊專用檔案。
檔案系統中的一個專用檔案存貯著三種信息(布爾型、整型、整型)。布爾型在字元檔案和塊檔案之間作出選擇,
兩個整型是主、次設備號。
通常,一個專用檔案並不在磁碟上占用空間,僅僅是為作業系統提供交流,而不是為數據存貯服務。一般地,專用檔案會指向一個硬體設備(如
:磁碟、磁帶、印表機、虛擬控制台)或作業系統提供的服務(如:/dev/null, /dev/random)。
塊檔案通常類似於磁碟設備(在數據能夠被訪問的地方賦予一個塊號,意味著同時設定了一個塊快取)。任何其他設備都是字元檔案。(以前,兩種文檔類型間是有差別的。比如:字元文檔I/O沒有快取,而塊文檔則有。)
mknod命令就是用來產生這種類型檔案的。
以下參數指定了所產生檔案的類型:
b create a block (buffered) special file
c, u create a character (unbuffered) special file
p create a FIFO
GNU版本還允許使用u('unbufferd'非緩衝化),以保持和C語言的一致。
當創建一個塊檔案或字元檔案時,主、次設備號必須在檔案類型參數後給出。但當指定一個p(FIFO)類型時,主次設備號必須省略。(設備號默認是以十進制表示;八進制以0開頭;GNU 版本還允許使用以0x開頭的十六進制)
選項
-m mode, --mode=mode
為新建立的文檔設定模式,就象套用命令chmod相同,以後仍然使用預設模式建立新目錄。 預設地,所產生的文檔模式為0666('a+rw')
GNU 標準選項
--help
在標準輸出上顯示使用信息並順利退出。
--version
在標準輸出上顯示版本信息並順利退出
主、次設備號可在核心原始碼的./Documentation/devices.txt里查到,mknod 可為這些指定的設備創建節點,當然節點的位置不是一定要在/dev下,但是為了便於管理一般都是指定/dev。驅動程式是根據主、次設備號定位的,但是你的應用程式open一個設備時,一定要是你指定的節點位置。例如:
mknod /dev/input/mouse0 c 13 32
也可以
mknod /tmp/mymouse c 13 32
/**********************************************************************************************************************/
下面是某個網友利用mknod成功解決找不到swap分區的問題。
開了一個大程式,用free看看記憶體是用,卻顯示如下
linuxman:~ # free
total used free shared buffers cached
-/+ buffers/cache: 18 75 28 60852
Swap: 0 0 0
怪了,swap怎么是零? 用#swapon -a,卻說是沒有這個檔案/dev/hda7!
關於swap,我的fstab檔案中有一行是這樣的:
/dev/hda7 swap swap pri=42 0 0
於是:#ls /dev/hda*,果然沒有hda7這個block設備!那就創建一個!
我就用#mknod /dev/hda7 b 3 7,再chmod 和 chgrp 一下就可以了!
這樣#ls /dev/hda7就顯示這樣了:
brw-rw---- 1 root disk 3, 7 2005-04-12 07:00 /dev/hda7
然後再#swapon -a就可以了;#free顯示
total used free shared buffers cached
-/+ buffers/cache: 181468 66912
Swap: 334616 0 334616