當前位置:
首頁 > 知識 > Linux中不可錯過的信息寶庫

Linux中不可錯過的信息寶庫



來自:編程珠璣(微信號:shouwangxiansheng)


作者:守望先生


前言


proc文件系統是一個虛擬文件系統,它存儲了當前內核運行狀態相關文件,並且文件的內容都是動態創建的。用戶可以通過查看這些文件獲取系統狀態以及當前正在運行的進程信息。而通過了解這些信息,能夠幫助我們幫助我們定位疑難問題。本文將簡單介紹通過proc文件系統能夠獲取哪些有用的信息。


總覽

我們進入到/proc目錄下,查看所有文件:


cd

 /proc
ls -al
774  acpi         iomem        mtrr           uptime
775  asound       ioports      net            version
781  buddyinfo    irq          pagetypeinfo   version_signature
782  bus          kallsyms     partitions     vmallocinfo
8    cgroups      kcore        sched_debug    vmstat
813  cmdline      keys         schedstat      zoneinfo
9    consoles     key-users    scsi
973  cpuinfo      kmsg         self
974  crypto       kpagecgroup  slabinfo
978  devices      kpagecount   softirqs
98   diskstats    kpageflags   

stat


983  dma          loadavg      swaps
984  driver       locks        sys
987  execdomains  mdstat       sysrq-trigger
99   fb           meminfo      sysvipc
994  filesystems  misc         thread-self
996  fs           modules      timer_list
998  interrupts   mounts       tty
(列出部分內容)

可以看到有三類內容:




  • 普通文件,如version,它存放的是內核版本相關信息



  • 以數值命名的文件夾,如1,它存放的是init進程相關信息



  • 非數字命名的文件夾,如drivers,它存放的是驅動相關信息


事實上,很多獲取系統信息的命令都是通過讀取/proc下相關文件內容獲取的,例如uname,df,ps等。多數情況下,它們能滿足我們對系統狀態的查看需求,但是並不盡然,因此我們需要簡單了解/proc下的文件,幫助我們獲取更多信息。畢竟它是一個巨大的信息寶庫。


查看系統狀態信息


查看cpu信息-cpuinfo


cat

 /proc/cpuinfo

列出的內容較多,這裡不展示。舉例說明幾點,其他內容可自行查閱:




  • processor,邏輯CPU。例如本人的電腦的邏輯CPU有4個,那麼cpuinfo中會有4條CPU信息記錄。



  • model name,CPU信息。例如本人的CPU信息為:Intel(R) Core(TM) i5-5200U CPU @ 2.20GHz,表明是intel的i5 低壓處理器,主頻為2.2GHz。



  • cache size,CPU二級緩存大小。


查看物理內存,交換空間信息-meminfo

head

 -

2

 meminfo 

#讀取前兩行內容


MemTotal:        

8039600

 kB 

#可支配內存


MemFree:         

2762872

 kB 

#尚未使用內存



查看網路流量情況-dev

watch

 -n 

1

 cat /proc/net/dev 

#實時刷新網路流量信息



因篇幅有限,系統狀態信息文件不再一一介紹,它們所包含內容大致如下:




  • loadavg 負載均衡



  • swaps 交換空間使用情況



  • mounts 已載入的文件系統列表



  • iomem 物理地址分配情況



  • version 內核版本信息



  • partitions 分區表



  • diskstats 每塊磁碟設備的磁碟I/O統計信息列表



  • interrupts  中斷的使用及觸發情況



  • zoneinfo 內存區域的詳細信息列表


查看進程相關信息


以數字命名的文件夾中存儲著進程的相關信息。而數字本身就是該進程的pid。也就是說,如果想要知道某個進程當前更多的狀態信息,只需要知道該進程的pid(

參考ps命令常見實用用法

https://www.huyanbing.me/2018/04/06/53515.html

),然後讀取/proc/pid下的文件夾或文件內容即可。



我們隨意進入一個進程id的進程信息文件夾,例如:

cd

 /proc/7263
ls
attr             exe        mounts         projid_map    status
autogroup        fd         mountstats     root          syscall
auxv             fdinfo     net            

sched

         task
cgroup           gid_map    ns             schedstat     timers
clear_refs       io         numa_maps      sessionid     timerslack_ns
cmdline          limits     oom_adj        setgroups     uid_map
comm             loginuid   oom_score      smaps         wchan
coredump_filter  map_files  oom_score_adj  smaps_rollup
cpuset           maps       pagemap        stack
cwd              mem        patch_state    

stat


environ          mountinfo  personality    statm

我們可以看到該進程的很多內容,包括:




  • cmdline 用於開始進程的命令



  • cwd 當前進程工作目錄的一個符號鏈接



  • environ 可用進程環境變數的列表



  • exe 正在進程中運行的程序鏈接



  • fd/ 這個目錄包含了進程打開的文件描述符



  • mem 進程在內存中的內容



  • status 進程的狀態信息



  • statm 進程的內存使用信息



  • limits 進程的軟限制,硬限制等信息



  • maps 進程的內存區域映射信息



  • stack 當前進程的內核調用棧信息



  • syscall 進程正在執行的系統調用



  • task 進程下的線程信息




/proc/pid下的內容很多,我們不一一列舉。那麼這些內容有什麼用呢?我們舉幾個簡單的例子。例如我們發現程序運行時打開一個文件失敗,並且沒有足夠的信息判斷失敗原因,那麼我們就可以考慮查看該進程打開的文件描述符是否已達到上限。這裡我們可以查看/proc/pid下的limits中的文件描述符限制數量:

sed

 -n 

"/open/p"

 limits
Max open files            

1024

                 

1048576

              files 

可以看到最大可打開的文件數量的軟限制為1024,而再次進入到fd目錄,計算總的打開的文件數量(參考ls命令常見實用用法

https://www.huyanbing.me/2018/09/16/51043.html

):

ls

 -lR | grep 

"^l"

 | wc -l

4



這裡得到的大小為4,很顯然沒有超出打開的最大文件數量限制。我們甚至還可以看到到底打開了哪些文件:

ls -al
lrwx------ 

1

 hyb hyb 

64

 

11

月 

18

 

11

:

36

 

0

 -> 

/dev/

pts/

2


lrwx------ 

1

 hyb hyb 

64

 

11

月 

18

 

11

:

36

 

1

 -> 

/dev/

pts/

2


lrwx------ 

1

 hyb hyb 

64

 

11

月 

18

 

11

:

18

 

2

 -> 

/dev/

pts/

2


(列出部分內容)

註:文件描述符0,1,2分別代表了標準輸入,標準輸出和標準錯誤輸出。


再比如,進程在當前目錄創建一個文件失敗,而又無更多異常信息,可以查看進程的cwd鏈接指向,如果指向了一個不在預期內的目錄,那麼可能是工作目錄被意外更改掉了。


總結


proc文件系統相關內容過於豐富,本文僅僅做簡單介紹。每一項的具體內容含義,以及在實際中的應用,本文不做過多闡述,後面的文章將會繼續介紹。/proc/pid下的內容對於問題的定位也十分地有幫助,本文只有簡單舉例,更多的使用也會在後續文章中不斷應用。



●編號652,輸入編號直達本文



●輸入m獲取文章

目錄

推薦↓↓↓



運維


更多推薦

25個技術類公眾微信


涵蓋:程序人生、演算法與數據結構、黑客技術與網路安全、大數據技術、前端開發、Java、Python、Web開發、安卓開發、iOS開發、C/C++、.NET、Linux、資料庫、運維等。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Linux學習 的精彩文章:

diff,Linux下文本比對方法
nginx常用功能全揭秘

TAG:Linux學習 |