Linux 系統中有些特殊文件記錄了系統的設備信息以及運行時(shí)信息,很多系統命令都是通過(guò)操作這些文件來(lái)實(shí)現的,下面簡(jiǎn)單介紹一下這些文件
一、/dev目錄
/dev目錄里包含了系統所使用的所有物理設備和虛擬設備
設備文件分為兩種:塊設備文件(b)和字符設備文件(c)
設備文件一般存放在/dev目錄下,常見(jiàn)設備文件作如下:
/dev/hd[a-t]:IDE設備
/dev/sd[a-z]:SCSI設備
/dev/fd[0-7]:標準軟驅
/dev/md[0-31]:軟raid設備
/dev/loop[0-7]:本地回環(huán)設備
/dev/ram[0-15]:內存
/dev/null:無(wú)限數據接收設備,相當于黑洞
/dev/zero:無(wú)限零資源
/dev/tty[0-63]:虛擬終端
/dev/ttyS[0-3]:串口
/dev/lp[0-3]:并口
/dev/console:控制臺
/dev/fb[0-31]:framebuffer
/dev/cdrom => /dev/hdc
/dev/modem => /dev/ttyS[0-9]
/dev/pilot => /dev/ttyS[0-9]
/dev/random:隨機數設備
/dev/urandom:隨機數設備,非阻塞式
1)/dev/null
/dev/null 這是空設備,一般稱(chēng)作“黑洞”,所有寫(xiě)入它的內容都會(huì )丟失,而從它里面讀卻什么都讀不到,它一般做如下用途:
1、禁止標準輸出 cat $filename >/dev/null
2、禁止錯誤輸出 rm $dir 2>/dev/null
3、清除文件內容 cat /dev/null > lpscm/target/output/logs/sys/webx.log
2)/dev/zero
/dev/zero 該設備無(wú)窮盡地提供空字符(ASCII NUL, 0x00),可以使用任何你需要的數目。它通常用于向設備或文件寫(xiě)入字符串0,用于初始化數據存儲。
通過(guò)od /dev/zero 可以不停的讀出0x00
例如,以下可以初始化一個(gè)1k的文件內容為0x00
dd if=/dev/zero f=~/test bs=1k count=1
3)/dev/loop
/dev/loop 是一種偽設備,這種設備使得文件可以如同塊設備一樣被訪(fǎng)問(wèn)。這種設備文件經(jīng)常被用于光碟或是磁盤(pán)鏡像
mount -o loop example.img /home/you/dir
4)/dev/tcp
/dev/tcp/$host/$port ,當在該文件上進(jìn)行操作時(shí),相當與對指定的套接口進(jìn)行操作
例如,以下命令讀取時(shí)間服務(wù)器上的時(shí)間:
cat
56022 12-04-05 05:16:38 50 0 0 820.6 UTC(NIST) *
以下命令讀取80端口上的數據:
exec 5<>/dev/tcp/www.net.cn/80# 打開(kāi)百度服務(wù)器的80端口
echo -3 “GET /HTTP/1.1\n” >&5 #發(fā)送請求
cat <&5 #讀取數據
5)/dev/full
類(lèi)Unix系統中,/dev/full,或常滿(mǎn)設備是一個(gè)特殊設備文件,總是在向其寫(xiě)入時(shí)返回設備無(wú)剩余空間(錯誤碼為ENOSPC),讀取時(shí)則與/dev/zero相似,返回無(wú)限的空字符(NULL, ASCII NUL, 0x00)。這個(gè)設備通常被用來(lái)測試程序在遇到磁盤(pán)無(wú)剩余空間錯誤時(shí)的行為。
$ echo "test" > /dev/full
bash: echo: 寫(xiě)錯誤: 設備上沒(méi)有空間
6)/dev/urandom
/dev/random是一個(gè)特殊的設備文件,可以用作隨機數發(fā)生器或偽隨機數發(fā)生器
用/dev/urandom來(lái)產(chǎn)生隨機密碼
head -c 500 /dev/urandom | tr -dc a-z0-9A-Z | head -c 16; echo
7)/dev/ram
在開(kāi)發(fā)中,程序經(jīng)常需要頻繁地讀寫(xiě)某些臨時(shí)文件,遇到這種情況,RAM disk就是最好的解決辦法。
RAM disk就是將一塊內存模擬成為某個(gè)磁盤(pán)驅動(dòng)器,對應用程序來(lái)說(shuō),RAM disk和普通磁盤(pán)是完全一樣的,也就是說(shuō),RAM disk對應用程序是“透明”的——唯一的區別在于,系統重新啟動(dòng)或者關(guān)機時(shí),存儲在RAM disk上的數據會(huì )丟失。
創(chuàng )建一個(gè)RAM disk
a)mke2fs -m 0 /dev/ram0 #格式化/dev/ram0
b)mkdir /mnt/rd c)mount /dev/ram0 /mnt/rd #掛載/dev/ram0到文件系統
2、 /proc
proc 文件系統可以被用于收集有用的關(guān)于系統和運行中的內核的信息。下面是一些重要的文件:
/proc/cpuinfo - CPU 的信息 (型號, 家族, 緩存大小等)
/proc/meminfo - 物理內存、交換空間等的信息
/proc/mounts - 已加載的文件系統的列表
/proc/devices - 可用設備的列表
/proc/filesystems - 被支持的文件系統
/proc/modules - 已加載的模塊
/proc/version - 內核版本
/proc/cmdline – 系統啟動(dòng)時(shí)輸入的內核命令行參數
/proc/nnn
/proc/self
1)/proc/cmdline 這個(gè)文件給出了內核啟動(dòng)的命令行
實(shí)例: $ cat /proc/cmdline BOOT_IMAGE=/boot/vmlinuz-3.0.0-15-generic-pae root=UUID=bd8fa867-1ba4-4f9c-8c7e-eb979d949a6c ro quiet splash vt.handoff=7
2)/proc/cpuinfo 這個(gè)文件分別包含了系統各個(gè)CPU的信息,從0開(kāi)始一直到最后一個(gè)CPU,會(huì )列出型號,制造商,和版本等信息
3)/proc/devices
這個(gè)文件包含了字符設備和塊設備的主設備號,以及分配到這些設備號的名稱(chēng)
4)/proc/fielsystems
這個(gè)文件包含被編譯進(jìn)內核的文件系統,mount命令會(huì )讀取該文件來(lái)識別未指定文件系統的掛載。 第一行的”nodev”表示這個(gè)文件系統不需要掛載塊設備,也即是虛擬文件系統。
$ cat filesystems
…
nodev anon_inodefs
nodev devpts
ext3
ext2
ext4
…
6)/proc/loadavg 這個(gè)文件給出以幾個(gè)不同的時(shí)間間隔計算的系統平均負載,這就如同uptime命令顯示的結果那樣。前三個(gè)數字是平均負載。這是通過(guò)計算過(guò)去1分鐘,5分鐘,15分鐘里運行隊列中的平均任務(wù)數得到的。 接下來(lái)的第一個(gè)數字表示瞬時(shí)可以運行的任務(wù)數,即是馬上會(huì )被調度的任務(wù)數,接著(zhù)是系統當前總共在運行的進(jìn)程數,最后是最近一次運行的進(jìn)程的ID
$ cat loadavg
0.05 0.07 0.05 4/492 5954
7)/proc/uptime 這個(gè)文件包含了系統啟動(dòng)的時(shí)長(cháng)以及系統閑置的時(shí)長(cháng),都是用浮點(diǎn)數表示的,以秒為單位 $ cat uptime 9885.34 35197.49 7)/proc/nnn nnn對應進(jìn)程的ID,這個(gè)目錄里包含了nnn進(jìn)程的運行時(shí)信息 查看進(jìn)程相關(guān)信息:
1、用/usr/lib/firefox-8.0/firefox –test 啟動(dòng)firefox進(jìn)程
2、ps -aef | grep firefox
kenvizhu 8877 1 3 14:49 ? 00:05:02 /usr/lib/firefox-8.0/firefox
上述結果顯示有一個(gè)正在運行的firefox進(jìn)程的pid是8877,相對應的,/proc中會(huì )有一個(gè)叫8877的文件夾,里面包含了 該進(jìn)程運行時(shí)的信息
ls -l /proc/8877
dr-xr-xr-x 2 kenvizhu kenvizhu 0 2012-04-05 16:52 attr
-rw-r--r-- 1 kenvizhu kenvizhu 0 2012-04-05 16:52 autogroup
-r-------- 1 kenvizhu kenvizhu 0 2012-04-05 16:52 auxv
-r--r--r-- 1 kenvizhu kenvizhu 0 2012-04-05 16:52 cgroup
--w------- 1 kenvizhu kenvizhu 0 2012-04-05 16:52 clear_refs
-r--r--r-- 1 kenvizhu kenvizhu 0 2012-04-05 14:49 cmdline
-rw-r--r-- 1 kenvizhu kenvizhu 0 2012-04-05 16:52 comm
-rw-r--r-- 1 kenvizhu kenvizhu 0 2012-04-05 16:52 coredump_filter
-r--r--r-- 1 kenvizhu kenvizhu 0 2012-04-05 16:52 cpuset
lrwxrwxrwx 1 kenvizhu kenvizhu 0 2012-04-05 16:52 cwd -> /home/kenvizhu
-r-------- 1 kenvizhu kenvizhu 0 2012-04-05 16:52 environ
lrwxrwxrwx 1 kenvizhu kenvizhu 0 2012-04-05 14:49 exe -> /usr/lib/firefox-8.0/firefox
dr-x------ 2 kenvizhu kenvizhu 0 2012-04-05 14:49 fd
dr-x------ 2 kenvizhu kenvizhu 0 2012-04-05 16:52 fdinfo
-r-------- 1 kenvizhu kenvizhu 0 2012-04-05 16:52 io
-r--r--r-- 1 kenvizhu kenvizhu 0 2012-04-05 16:52 latency
-r--r--r-- 1 kenvizhu kenvizhu 0 2012-04-05 16:52 limits
-rw-r--r-- 1 kenvizhu kenvizhu 0 2012-04-05 16:52 loginuid
-r--r--r-- 1 kenvizhu kenvizhu 0 2012-04-05 14:49 maps
-rw------- 1 kenvizhu kenvizhu 0 2012-04-05 16:52 mem
-r--r--r-- 1 kenvizhu kenvizhu 0 2012-04-05 16:52 mountinfo
-r--r--r-- 1 kenvizhu kenvizhu 0 2012-04-05 16:52 mounts
-r-------- 1 kenvizhu kenvizhu 0 2012-04-05 16:52 mountstats
dr-xr-xr-x 5 kenvizhu kenvizhu 0 2012-04-05 16:52 net
-rw-r--r-- 1 kenvizhu kenvizhu 0 2012-04-05 16:52 oom_adj
-r--r--r-- 1 kenvizhu kenvizhu 0 2012-04-05 16:52 oom_score
-rw-r--r-- 1 kenvizhu kenvizhu 0 2012-04-05 16:52 oom_score_adj
-r--r--r-- 1 kenvizhu kenvizhu 0 2012-04-05 16:52 pagemap
-r--r--r-- 1 kenvizhu kenvizhu 0 2012-04-05 16:52 personality
lrwxrwxrwx 1 kenvizhu kenvizhu 0 2012-04-05 16:52 root -> /
-rw-r--r-- 1 kenvizhu kenvizhu 0 2012-04-05 16:52 sched
-r--r--r-- 1 kenvizhu kenvizhu 0 2012-04-05 16:52 schedstat
-r--r--r-- 1 kenvizhu kenvizhu 0 2012-04-05 16:52 sessionid
-r--r--r-- 1 kenvizhu kenvizhu 0 2012-04-05 16:52 smaps
-r--r--r-- 1 kenvizhu kenvizhu 0 2012-04-05 16:52 stack
-r--r--r-- 1 kenvizhu kenvizhu 0 2012-04-05 14:49 stat
-r--r--r-- 1 kenvizhu kenvizhu 0 2012-04-05 16:52 statm
-r--r--r-- 1 kenvizhu kenvizhu 0 2012-04-05 14:49 status
-r--r--r-- 1 kenvizhu kenvizhu 0 2012-04-05 16:52 syscall
dr-xr-xr-x 26 kenvizhu kenvizhu 0 2012-04-05 14:51 task
-r--r--r-- 1 kenvizhu kenvizhu 0 2012-04-05 16:52 wchan
cmdline 包含了啟用該進(jìn)程的命令行信息
cat /proc/9674/cmdline
/usr/lib/firefox-8.0/firefox-test
cwd -> /home/kenvizhu 表明進(jìn)程的當前工作目錄
environ 該文件存放了該進(jìn)程的環(huán)境變量
exe -> /usr/lib/firefox-8.0/firefox 指向可執行文件路徑
fd 存放了該進(jìn)程打開(kāi)的文件描述符
limits 存放了資源限制信息

