Linux系统proc详解
原文鏈接:https://www.cnblogs.com/liushui-sky/p/9354536.html
目錄
一、? ?? ???進程目錄中的常見文件介紹
1.1 cmdline
1.2、cwd
1.3、environ
1.4、exe?
1.5、fd
1.6、limits?
1.7、maps?
1.8、mem?
1.9、root
1.10、stat
1.11、statm
1.12、status
1.13、task
二、/proc目錄下常見的文件介紹
2.1、/proc/apm
2、/proc/buddyinfo
2.3、/proc/cmdline
2.4、/proc/cpuinfo
2.5、/proc/crypto
2.6、/proc/devices
2.7、/proc/diskstats
2.8、/proc/dma
2.9、/proc/execdomains
2.10、/proc/fb
2.11、/proc/filesystems
2.12、/proc/interrupts
2.13、/proc/iomem
2.14、/proc/ioports
2.15、/proc/kallsyms
2.16、/proc/kcore
2.17、/proc/kmsg
2.18、/proc/loadavg
2.19、/proc/locks
2.20、/proc/mdstat
2.21、/proc/meminfo
2.22、/proc/mounts
2.23、/proc/modules
2.24、/proc/partitions
2.25、/proc/pci
2.26、/proc/slabinfo
2.27、/proc/stat
2.28、/proc/swaps
2.29、/proc/uptime
2.30、/proc/version
2.31、/proc/vmstat
2.32、/proc/zoneinfo
三、/proc/sys目錄詳解
3.1、/proc/sys/debug 子目錄
3.2、/proc/sys/dev 子目錄
- 內容摘要:Linux系統上的/proc目錄是一種文件系統,即proc文件系統。
Linux系統上的/proc目錄是一種文件系統,即proc文件系統。與其它常見的文件系統不同的是,/proc是一種偽文件系統(也即虛擬文件系統),存儲的是當前內核運行狀態的一系列特殊文件,用戶可以通過這些文件查看有關系統硬件及當前正在運行進程的信息,甚至可以通過更改其中某些文件來改變內核的運行狀態。
基于/proc文件系統如上所述的特殊性,其內的文件也常被稱作虛擬文件,并具有一些獨特的特點。例如,其中有些文件雖然使用查看命令查看時會返回大量信息,但文件本身的大小卻會顯示為0字節。此外,這些特殊文件中大多數文件的時間及日期屬性通常為當前系統時間和日期,這跟它們隨時會被刷新(存儲于RAM中)有關。
為了查看及使用上的方便,這些文件通常會按照相關性進行分類存儲于不同的目錄甚至子目錄中,如/proc/scsi目錄中存儲的就是當前系統上所有SCSI設備的相關信息,/proc/N中存儲的則是系統當前正在運行的進程的相關信息,其中N為正在運行的進程(可以想象得到,在某進程結束后其相關目錄則會消失)。
大多數虛擬文件可以使用文件查看命令如cat、more或者less進行查看,有些文件信息表述的內容可以一目了然,但也有文件的信息卻不怎么具有可讀性。不過,這些可讀性較差的文件在使用一些命令如apm、free、lspci或top查看時卻可以有著不錯的表現。
一、? ?? ???進程目錄中的常見文件介紹
/proc目錄中包含許多以數字命名的子目錄,這些數字表示系統當前正在運行進程的進程號,里面包含對應進程相關的多個信息文件。
[root@rhel5 ~]# ll /proc total 0 dr-xr-xr-x 5 root root 0 Feb 8 17:08 1 dr-xr-xr-x 5 root root 0 Feb 8 17:08 10 dr-xr-xr-x 5 root root 0 Feb 8 17:08 11 dr-xr-xr-x 5 root root 0 Feb 8 17:08 1156 dr-xr-xr-x 5 root root 0 Feb 8 17:08 139 dr-xr-xr-x 5 root root 0 Feb 8 17:08 140 dr-xr-xr-x 5 root root 0 Feb 8 17:08 141 dr-xr-xr-x 5 root root 0 Feb 8 17:09 1417 dr-xr-xr-x 5 root root 0 Feb 8 17:09 1418上面列出的是/proc目錄中一些進程相關的目錄,每個目錄中是當程本身相關信息的文件。下面是作者系統(RHEL5.3)上運行的一個PID為2674的進程saslauthd的相關文件,其中有些文件是每個進程都會具有的,后文會對這些常見文件做出說明。
?
1.1 cmdline
啟動當前進程的完整命令,但僵尸進程目錄中的此文件不包含任何信息;
[root@rhel5 ~]# more /proc/2674/cmdline /usr/sbin/saslauthd1.2、cwd
指向當前進程運行目錄的一個符號鏈接;
1.3、environ
當前進程的環境變量列表,彼此間用空字符(NULL)隔開;變量用大寫字母表示,其值用小寫字母表示;
[root@rhel5 ~]# more /proc/2674/environ TERM=linuxauthd1.4、exe?
指向啟動當前進程的可執行文件(完整路徑)的符號鏈接,通過/proc/N/exe可以啟動當前進程的一個拷貝;
1.5、fd
這是個目錄,包含當前進程打開的每一個文件的文件描述符(file descriptor),這些文件描述符是指向實際文件的一個符號鏈接;
[root@rhel5 ~]# ll /proc/2674/fd total 0 lrwx------ 1 root root 64 Feb 8 17:17 0 -> /dev/null lrwx------ 1 root root 64 Feb 8 17:17 1 -> /dev/null lrwx------ 1 root root 64 Feb 8 17:17 2 -> /dev/null lrwx------ 1 root root 64 Feb 8 17:17 3 -> socket:[7990] lrwx------ 1 root root 64 Feb 8 17:17 4 -> /var/run/saslauthd/saslauthd.pid lrwx------ 1 root root 64 Feb 8 17:17 5 -> socket:[7991] lrwx------ 1 root root 64 Feb 8 17:17 6 -> /var/run/saslauthd/mux.accept1.6、limits?
當前進程所使用的每一個受限資源的軟限制、硬限制和管理單元;此文件僅可由實際啟動當前進程的UID用戶讀取;(2.6.24以后的內核版本支持此功能);
1.7、maps?
當前進程關聯到的每個可執行文件和庫文件在內存中的映射區域及其訪問權限所組成的列表;
[root@rhel5 ~]# cat /proc/2674/maps 00110000-00239000 r-xp 00000000 08:02 130647 /lib/libcrypto.so.0.9.8e 00239000-0024c000 rwxp 00129000 08:02 130647 /lib/libcrypto.so.0.9.8e 0024c000-00250000 rwxp 0024c000 00:00 0 00250000-00252000 r-xp 00000000 08:02 130462 /lib/libdl-2.5.so 00252000-00253000 r-xp 00001000 08:02 130462 /lib/libdl-2.5.so1.8、mem?
當前進程所占用的內存空間,由open、read和lseek等系統調用使用,不能被用戶讀取;
1.9、root
指向當前進程運行根目錄的符號鏈接;在Unix和Linux系統上,通常采用chroot命令使每個進程運行于獨立的根目錄;
1.10、stat
當前進程的狀態信息,包含一系統格式化后的數據列,可讀性差,通常由ps命令使用;
1.11、statm
當前進程占用內存的狀態信息,通常以“頁面”(page)表示;
1.12、status
與stat所提供信息類似,但可讀性較好,如下所示,每行表示一個屬性信息;其詳細介紹請參見 proc的man手冊頁;
[root@rhel5 ~]# more /proc/2674/status Name: saslauthd State: S (sleeping) SleepAVG: 0% Tgid: 2674 Pid: 2674 PPid: 1 TracerPid: 0 Uid: 0 0 0 0 Gid: 0 0 0 0 FDSize: 32 Groups: VmPeak: 5576 kB VmSize: 5572 kB VmLck: 0 kB VmHWM: 696 kB VmRSS: 696 kB …………1.13、task
目錄文件,包含由當前進程所運行的每一個線程的相關信息,每個線程的相關信息文件均保存在一個由線程號(tid)命名的目錄中,這類似于其內容類似于每個進程目錄中的內容;(內核2.6版本以后支持此功能)
二、/proc目錄下常見的文件介紹
2.1、/proc/apm
高級電源管理(APM)版本信息及電池相關狀態信息,通常由apm命令使用;
2、/proc/buddyinfo
用于診斷內存碎片問題的相關信息文件;
2.3、/proc/cmdline
在啟動時傳遞至內核的相關參數信息,這些信息通常由lilo或grub等啟動管理工具進行傳遞;
[root@rhel5 ~]# more /proc/cmdline ro root=/dev/VolGroup00/LogVol00 rhgb quiet2.4、/proc/cpuinfo
處理器的相關信息的文件;
2.5、/proc/crypto
系統上已安裝的內核使用的密碼算法及每個算法的詳細信息列表;
[root@rhel5 ~]# more /proc/crypto name : crc32c driver : crc32c-generic module : kernel priority : 0 type : digest blocksize : 32 digestsize : 4 …………2.6、/proc/devices
系統已經加載的所有塊設備和字符設備的信息,包含主設備號和設備組(與主設備號對應的設備類型)名;
[root@rhel5 ~]# more /proc/devices Character devices:1 mem4 /dev/vc/04 tty4 ttyS…………Block devices:1 ramdisk2 fd8 sd…………2.7、/proc/diskstats
每塊磁盤設備的磁盤I/O統計信息列表;(內核2.5.69以后的版本支持此功能)
2.8、/proc/dma
每個正在使用且注冊的ISA DMA通道的信息列表;
[root@rhel5 ~]# more /proc/dma 2: floppy 4: cascade2.9、/proc/execdomains
內核當前支持的執行域(每種操作系統獨特“個性”)信息列表;
[root@rhel5 ~]# more /proc/execdomains? 0-0? ???Linux? ?? ?? ?? ?? ?? ? [kernel]2.10、/proc/fb
幀緩沖設備列表文件,包含幀緩沖設備的設備號和相關驅動信息;
2.11、/proc/filesystems
當前被內核支持的文件系統類型列表文件,被標示為nodev的文件系統表示不需要塊設備的支持;通常mount一個設備時,如果沒有指定文件系統類型將通過此文件來決定其所需文件系統的類型
[root@rhel5 ~]# more /proc/filesystems nodev sysfs nodev rootfs nodev prociso9660ext3 ………… …………2.12、/proc/interrupts
X86或X86_64體系架構系統上每個IRQ相關的中斷號列表;多路處理器平臺上每個CPU對于每個I/O設備均有自己的中斷號;
[root@rhel5 ~]# more /proc/interrupts CPU0 0: 1305421 IO-APIC-edge timer1: 61 IO-APIC-edge i8042 185: 1068 IO-APIC-level eth0 …………2.13、/proc/iomem
每個物理設備上的記憶體(RAM或者ROM)在系統內存中的映射信息;
[root@rhel5 ~]# more /proc/iomem 00000000-0009f7ff : System RAM 0009f800-0009ffff : reserved 000a0000-000bffff : Video RAM area 000c0000-000c7fff : Video ROM…………2.14、/proc/ioports
當前正在使用且已經注冊過的與物理設備進行通訊的輸入-輸出端口范圍信息列表;如下面所示,第一列表示注冊的I/O端口范圍,其后表示相關的設備;
[root@rhel5 ~]# less /proc/ioports 0000-001f : dma1 0020-0021 : pic1 0040-0043 : timer0 0050-0053 : timer1 0060-006f : keyboard …………2.15、/proc/kallsyms
模塊管理工具用來動態鏈接或綁定可裝載模塊的符號定義,由內核輸出;(內核2.5.71以后的版本支持此功能);通常這個文件中的信息量相當大;
[root@rhel5 ~]# more /proc/kallsyms c04011f0 T _stext c04011f0 t run_init_process c04011f0 T stext…………2.16、/proc/kcore
系統使用的物理內存,以ELF核心文件(core file)格式存儲,其文件大小為已使用的物理內存(RAM)加上4KB;這個文件用來檢查內核數據結構的當前狀態,因此,通常由GBD通常調試工具使用,但不能使用文件查看命令打開此文件;
2.17、/proc/kmsg
此文件用來保存由內核輸出的信息,通常由/sbin/klogd或/bin/dmsg等程序使用,不要試圖使用查看命令打開此文件;
2.18、/proc/loadavg
保存關于CPU和磁盤I/O的負載平均值,其前三列分別表示每1秒鐘、每5秒鐘及每15秒的負載平均值,類似于uptime命令輸出的相關信息;第四列是由斜線隔開的兩個數值,前者表示當前正由內核調度的實體(進程和線程)的數目,后者表示系統當前存活的內核調度實體的數目;第五列表示此文件被查看前最近一個由內核創建的進程的PID;
[root@rhel5 ~]# more /proc/loadavg 0.45 0.12 0.04 4/125 5549[root@rhel5 ~]# uptime 06:00:54 up 1:06, 3 users, load average: 0.45, 0.12, 0.042.19、/proc/locks
保存當前由內核鎖定的文件的相關信息,包含內核內部的調試數據;每個鎖定占據一行,且具有一個惟一的編號;如下輸出信息中每行的第二列表示當前鎖定使用的鎖定類別,POSIX表示目前較新類型的文件鎖,由lockf系統調用產生,FLOCK是傳統的UNIX文件鎖,由flock系統調用產生;第三列也通常由兩種類型,ADVISORY表示不允許其他用戶鎖定此文件,但允許讀取,MANDATORY表示此文件鎖定期間不允許其他用戶任何形式的訪問;
[root@rhel5 ~]# more /proc/locks 1: POSIX ADVISORY WRITE 4904 fd:00:4325393 0 EOF 2: POSIX ADVISORY WRITE 4550 fd:00:2066539 0 EOF 3: FLOCK ADVISORY WRITE 4497 fd:00:2066533 0 EOF2.20、/proc/mdstat
保存RAID相關的多塊磁盤的當前狀態信息,在沒有使用RAID機器上,其顯示為如下狀態:
?
2.21、/proc/meminfo
系統中關于當前內存的利用狀況等的信息,常由free命令使用;可以使用文件查看命令直接讀取此文件,其內容顯示為兩列,前者為統計屬性,后者為對應的值;
[root@rhel5 ~]# less /proc/meminfo MemTotal: 515492 kB MemFree: 8452 kB Buffers: 19724 kB Cached: 376400 kB SwapCached: 4 kB …………2.22、/proc/mounts
在內核2.4.29版本以前,此文件的內容為系統當前掛載的所有文件系統,在2.4.19以后的內核中引進了每個進程使用獨立掛載名稱空間的方式,此文件則隨之變成了指向/proc/self/mounts(每個進程自身掛載名稱空間中的所有掛載點列表)文件的符號鏈接;/proc/self是一個獨特的目錄,后文中會對此目錄進行介紹;
[root@rhel5 ~]# ll /proc |grep mounts lrwxrwxrwx 1 root root 11 Feb 8 06:43 mounts -> self/mounts如下所示,其中第一列表示掛載的設備,第二列表示在當前目錄樹中的掛載點,第三點表示當前文件系統的類型,第四列表示掛載屬性(ro或者rw),第五列和第六列用來匹配/etc/mtab文件中的轉儲(dump)屬性;
[root@rhel5 ~]# more /proc/mounts rootfs / rootfs rw 0 0 /dev/root / ext3 rw,data=ordered 0 0 /dev /dev tmpfs rw 0 0 /proc /proc proc rw 0 0 /sys /sys sysfs rw 0 0 /proc/bus/usb /proc/bus/usb usbfs rw 0 0 …………2.23、/proc/modules
當前裝入內核的所有模塊名稱列表,可以由lsmod命令使用,也可以直接查看;如下所示,其中第一列表示模塊名,第二列表示此模塊占用內存空間大小,第三列表示此模塊有多少實例被裝入,第四列表示此模塊依賴于其它哪些模塊,第五列表示此模塊的裝載狀態(Live:已經裝入;Loading:正在裝入;Unloading:正在卸載),第六列表示此模塊在內核內存(kernel memory)中的偏移量;
[root@rhel5 ~]# more /proc/modules autofs4 24517 2 - Live 0xe09f7000 hidp 23105 2 - Live 0xe0a06000 rfcomm 42457 0 - Live 0xe0ab3000 l2cap 29505 10 hidp,rfcomm, Live 0xe0aaa000 …………2.24、/proc/partitions
塊設備每個分區的主設備號(major)和次設備號(minor)等信息,同時包括每個分區所包含的塊(block)數目(如下面輸出中第三列所示);
[root@rhel5 ~]# more /proc/partitions major minor #blocks name8 0 20971520 sda8 1 104391 sda18 2 6907950 sda28 3 5630782 sda38 4 1 sda48 5 3582463 sda52.25、/proc/pci
內核初始化時發現的所有PCI設備及其配置信息列表,其配置信息多為某PCI設備相關IRQ信息,可讀性不高,可以用“/sbin/lspci –vb”命令獲得較易理解的相關信息;在2.6內核以后,此文件已為/proc/bus/pci目錄及其下的文件代替;
2.26、/proc/slabinfo
在內核中頻繁使用的對象(如inode、dentry等)都有自己的cache,即slab pool,而/proc/slabinfo文件列出了這些對象相關slap的信息;詳情可以參見內核文檔中slapinfo的手冊頁;
[root@rhel5 ~]# more /proc/slabinfo slabinfo - version: 2.1 # name <active_objs> <num_objs> <objsize> <objperslab> <pagesperslab> : tunables <limit> <batchcount> <sharedfactor> : slabdata <ac tive_slabs> <num_slabs> <sharedavail> rpc_buffers 8 8 2048 2 1 : tunables 24 12 8 : slabdata 4 4 0 rpc_tasks 8 20 192 20 1 : tunables 120 60 8 : slabdata 1 1 0 rpc_inode_cache 6 9 448 9 1 : tunables 54 27 8 : slabdata 1 1 0 ………… ………… …………2.27、/proc/stat
實時追蹤自系統上次啟動以來的多種統計信息;如下所示,其中,
“cpu”行后的八個值分別表示以1/100(jiffies)秒為單位的統計值(包括系統運行于用戶模式、低優先級用戶模式,運系統模式、空閑模式、I/O等待模式的時間等);
“intr”行給出中斷的信息,第一個為自系統啟動以來,發生的所有的中斷的次數;然后每個數對應一個特定的中斷自系統啟動以來所發生的次數;
“ctxt”給出了自系統啟動以來CPU發生的上下文交換的次數。
“btime”給出了從系統啟動到現在為止的時間,單位為秒;
“processes (total_forks) 自系統啟動以來所創建的任務的個數目;
“procs_running”:當前運行隊列的任務的數目;
“procs_blocked”:當前被阻塞的任務的數目;
?
2.28、/proc/swaps
當前系統上的交換分區及其空間利用信息,如果有多個交換分區的話,則會每個交換分區的信息分別存儲于/proc/swap目錄中的單獨文件中,而其優先級數字越低,被使用到的可能性越大;下面是作者系統中只有一個交換分區時的輸出信息;
[root@rhel5 ~]# more /proc/swaps Filename Type Size Used Priority /dev/sda8 partition 642560 0 -12.29、/proc/uptime
系統上次啟動以來的運行時間,如下所示,其第一個數字表示系統運行時間,第二個數字表示系統空閑時間,單位是秒;
[root@rhel5 ~]# more /proc/uptime 3809.86 3714.132.30、/proc/version
當前系統運行的內核版本號,在作者的RHEL5.3上還會顯示系統安裝的gcc版本,如下所示;
[root@rhel5 ~]# more /proc/version Linux version 2.6.18-128.el5 (mockbuild@hs20-bc1-5.build.redhat.com) (gcc version 4.1.2 20080704 (Red Hat 4.1.2-44)) #1 SMP Wed Dec 17 11:42:39 EST 20082.31、/proc/vmstat
當前系統虛擬內存的多種統計數據,信息量可能會比較大,這因系統而有所不同,可讀性較好;下面為作者機器上輸出信息的一個片段;(2.6以后的內核支持此文件)
[root@rhel5 ~]# more /proc/vmstat nr_anon_pages 22270 nr_mapped 8542 nr_file_pages 47706 nr_slab 4720 nr_page_table_pages 897 nr_dirty 21 nr_writeback 0 …………2.32、/proc/zoneinfo
內存區域(zone)的詳細信息列表,信息量較大,下面列出的是一個輸出片段:
[root@rhel5 ~]# more /proc/zoneinfo Node 0, zone DMApages free 1208min 28low 35high 42active 439inactive 1139scanned 0 (a: 7 i: 30)spanned 4096present 4096nr_anon_pages 192nr_mapped 141nr_file_pages 1385nr_slab 253nr_page_table_pages 2nr_dirty 523nr_writeback 0nr_unstable 0nr_bounce 0protection: (0, 0, 296, 296)pagesetsall_unreclaimable: 0prev_priority: 12start_pfn: 0 …………三、/proc/sys目錄詳解
與/proc下其它文件的“只讀”屬性不同的是,管理員可對/proc/sys子目錄中的許多文件內容進行修改以更改內核的運行特性,事先可以使用“ls -l”命令查看某文件是否“可寫入”。寫入操作通常使用類似于“echo??DATA > /path/to/your/filename”的格式進行。需要注意的是,即使文件可寫,其一般也不可以使用編輯器進行編輯。
3.1、/proc/sys/debug 子目錄
此目錄通常是一空目錄;
3.2、/proc/sys/dev 子目錄
為系統上特殊設備提供參數信息文件的目錄,其不同設備的信息文件分別存儲于不同的子目錄中,如大多數系統上都會具有的/proc/sys/dev/cdrom和/proc/sys/dev/raid(如果內核編譯時開啟了支持raid的功能) 目錄,其內存儲的通常是系統上cdrom和raid的相關參數信息文件。
總結
以上是生活随笔為你收集整理的Linux系统proc详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ps如何修改图片大小尺寸_PS常用操作
- 下一篇: java 异常对象_在java中的异常处