Linux下你還知道這些特殊文件?
我們都知道Linux下一切皆文件,主要有:
- - 普通文件
- d 目錄
- l 符號(hào)鏈接
- s 套接字
- b 塊設(shè)備
- c 字符設(shè)備
- p 管道
這么幾種文件。
這里的前綴字符可以通過ls命令觀察到:
- $ ls -l test.log
- -rw-r--r-- 1 root root 33 Nov 17 17:03 test.log
它的結(jié)果最前面是-,因此它是普通文件。
- $ ls -al /dev/null
- crw-rw-rw- 1 root root 1, 3 Sep 11 20:33 /dev/null
它的結(jié)果最前面是c,因此它是字符設(shè)備。文件簡(jiǎn)單介紹幾種字符設(shè)備文件,它能在我們功能測(cè)試的時(shí)候提供很好的幫助。
/dev/null
/dev/null 可無限接收數(shù)據(jù),你可以認(rèn)為是一個(gè)黑洞,因此如果我們需要丟棄某些終端輸出,可以重定向到這里:
- $ echo "shouwangxiansheng" > /dev/null
所以如果你有不需要的數(shù)據(jù)可以盡情的往這里寫。
/dev/full
它在讀取時(shí)會(huì)讀取到連續(xù)的NUL(零值)字節(jié)流,而在寫入的時(shí)候,會(huì)返回磁盤空間已滿的結(jié)果,后者在測(cè)試你的程序的時(shí)候會(huì)有幫助,即測(cè)試磁盤滿的場(chǎng)景:
- $ echo "bianchengzhuji" > /dev/full
- -bash: echo: write error: No space left on device
/dev/zero
和/dev/null類似,向其中寫入時(shí)會(huì)丟棄所有數(shù)據(jù),但是讀取時(shí),會(huì)產(chǎn)生NUL(零值)字節(jié)流。
- $ cat /dev/zero |od -x
- 0000000 0000 0000 0000 0000 0000 0000 0000 0000
/dev/random
/dev/random可以提供隨機(jī)數(shù)據(jù)流,它保證數(shù)據(jù)的隨機(jī)性,但是讀取時(shí)會(huì)造成等待,例如:
- $ cat /dev/random | od -x
- 0000000 2b07 daac 42f4 e1fd fb62 2098 870e e0af
- 0000020 3022 2099 e5da 4e1c d6db 548b a979 1217
- 0000040 3777 bb6a 957d 1279 ab29 e8a4 6a36 ecca
- 0000060 39ec 2285 126c 30ea ea67 1526 5e4a 2dd9
稍過會(huì)才會(huì)出現(xiàn)數(shù)據(jù),為了便于查看,我們利用od命令查看其十六進(jìn)制內(nèi)容。
/dev/urandom
從名字就可以看出來,是用來產(chǎn)生隨機(jī)數(shù)據(jù)的。它的產(chǎn)生速度很快,但是數(shù)據(jù)的隨機(jī)性不如/dev/random
- cat /dev/urandom | od -x
- 0547560 f43e 696a 8936 2b27 36c8 4446 2802 1d47
- 0547600 b8af 249d aae9 edbf 8971 b1d1 0c73 3e2d
- 0547620 237b 9a81 6348 cb2a 1972 4486 028a 3573
- 0547640 1690 c388 64e1 aec1 d5f4 1964 bbb9 192f
- 0547660 f242 7194 51ba 62a3 fc13 ff53 fb50 e3d8
- 0547700 ef32 3658 b335 75ee 62de 4096 6468 c979
- 0547720 01b9 c233 878d 12fc 5cfa 5691 89e1 e1f9
/dev/pts
/dev/pts是遠(yuǎn)程登陸(telnet,ssh等)后創(chuàng)建的控制臺(tái)設(shè)備文件所在的目錄。有什么用呢?舉個(gè)例子,你打開一個(gè)終端,獲取到當(dāng)前的pts:
- $ tty
- /dev/pts/0
然后你又打開一個(gè),輸入:
- $ echo "hahahaha">/dev/pts/0
你就會(huì)發(fā)現(xiàn)內(nèi)容被打印到前面一個(gè)終端了。通常我們運(yùn)行一個(gè)程序,其printf的打印都會(huì)打印在當(dāng)前終端。
總結(jié)
實(shí)際上在/dev下還有非常多的特殊文件,但是不一一介紹。以上特殊文件在一定場(chǎng)合下能幫助我們開發(fā)或者測(cè)試。