mknod
mknod
描述
mknod 命令建立一個目錄項和一個特殊文件的對應索引節點。第一個參數是 Name 項設備的名稱。選擇一個描述性的設備名稱。mknod 命令有兩種形式,它們有不同的標誌。
創建特殊文件。
只能由 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下用到的文件(或者說設備)模擬過來才可以。
看到類似
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(命名管道),字元專用或塊專用文件。
文件系統中的一個專用文件存貯著三種信息(布朗型、整型、整型)。布朗型在字元文件與塊文件之間作出選擇,
兩個整型是主、次設備號。
通常,一個專用文件並不在磁碟上佔用空間,僅僅是為操作系統提供交流,而不是為數據存貯服務。一般地,專用文件會指向一個硬體設備(如
塊文件通常類似於磁碟設備(在數據可以被訪問的地方賦予一個塊號,意味著同時設定了一個塊緩存)。所有其他設備都是字元文件。(以前,兩種文件類型間是有差別的。比如:字元文件I/O沒有緩存,而塊文件則有。)
mknod命令就是用來產生這種類型文件的。
以下參數指定了所產生文件的類型:
p
FIFO型
b
塊文件
c
字元文件
GNU版本還允許使用u('unbufferd'非緩衝化),以保持與C語言的一致。
當創建一個塊文件或字元文件時,主、次設備號必須在文件類型參數后給出。(十進位或八進位以0開頭;GNU 版本還允許使用以0x開頭的十六進位)預設地,所產生的文件模式為0666('a+rw')。
選項
-m mode, --mode=mode
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