用linux man命令,自己解決問題

嵌入式linux Debuger發表於2020-12-19

最近在極客時間上學習跟著老師學習“linux效能優化”的相關課程。
其中老師在課程實驗時,經常提到:

  1. “同樣你們可以先實驗,如果發現有問題,建議你第一時間通過自己的辦法解決,如搜尋引擎。如果最後無法解決再留言給我”
  2. “善於利用linux 的man /proc,可以幫助你在linux學習中很快速的知道某個結果的意義”。

linux本身是具有很強大的文件支援能力的。其實剛開始學習linux時候,第一時間是去百度,得到的結果千奇百怪,且很多錯誤,完全不知道man的強大。

  • 事實上,也有很多人是不知道man命令的具體作用的,或者沒有充分發揮作用。它能給到的答案,是正式的(official)且快速的,比在網上搜尋靠譜多了。
  • 還有最近的工作中,也是用工具產生一個圖片,預設的就是png,放大後效果不好。突然有人提示,工具加引數了應該可以生成svg。一檢視help手冊,果然如此,所以檢視手冊的重要性

好了,言歸正傳,在linux中man這個命令到底是怎麼一個概念呢:

  1. man其實是manual的縮寫;
  2. man就是用來檢視系統相關手冊的一個方法;
  3. man可以顯示手冊頁,上下滾動,查詢頁面等。

接下來,說說怎麼使用,這裡僅從最常用到的一些內容出發吧,畢竟龐大的文件內容,這個東西只需要知道大概,出現問題時知道從哪裡找到內容即可

  1. 最簡單的方法就
# man命令 + 執行命令(如write)/系統內容(如/proc)/系統API名(如fopen)
$ man program/utility/function 

這樣可以直接的檢視某個資訊的完整文件,有的文件還有被翻譯為各種語言,當該文件支援的翻譯語言有主機的語言時,會直接以該主機的語言顯示。

  1. 當某個名稱既有命令,又有API時,有兩種方法檢視:
    (1)直接加上 -a引數:你可以看完一部分後,再看另外的一部分,以mount為例
$ man -a mount
#按下【enter】後,就會顯示mount命令的內容:
$ MOUNT(8) System Administration MOUNT(8)
$ ...... SYNOPSIS
$ mount [-l|-h|-V]
$ ......

在顯示內容的最後,會有一個提示:

# Manual page mount(8) line 1 (press h for help or q to quit)

再按下【q】後,會提示是否進入下一頁:

# --Man-- 下一頁: mount(2) [ 檢視 (return) | 跳過 (Ctrl-D) | 退出 (Ctrl-C) ]

按下【enter】後,就顯示mount 這個api的文件內容:

$ MOUNT(2) Linux Programmer's Manual MOUNT(2)
$ ...... SYNOPSIS
$ #include <sys/mount.h>
$ ......

看上面的結果,就會發現mount後面有數字,命令後面是8,api後面是2,這就是第二種方法:

$ man + 名稱
# 在中間加一個數字,或者引數,如下面的命令直接檢視mount這個api的文件
# -s可以省略,即man 2 mount
$ man -s 2 mount 
  1. 這裡就涉及了這個-s引數的意義

-s就是section的意義,每個內容都是按照型別放在不同的section的,這裡簡單的解說下,知道常見的即可,平時就會用到。

section number說明
1可執行檔案或者shell命令
1可執行檔案或者shell命令
2系統呼叫(核心提供的函式,如open)
3庫函式呼叫(程式庫中的函式,如fopen,注意這是libc的api)
4特殊檔案(通常是/dev/下的,用到時候較少,如null)
5檔案格式或者約定的東西(如proc,就是對/proc下的海量引數)
7其他雜項(包括巨集包和約定,如ascii,是的,不用在網上找ascii碼)

其實不用記住這些編號的意義,需要使用的時候再看,比如想知道這個api是不是有一個對應的系統呼叫。

  1. 還是來看一個比較特別的
$ man proc # process information pseudo-file system,描述程式資訊的偽檔案系統

這就是linux系統跑起來後,/proc目錄下的各個檔案目錄的資訊,說一些常用到的

  • /proc/[pid]/environ,某個程式[pid]的環境變數資訊,獲取後可以通過strings輸出
    $ cat /proc/1/environ | strings (2)

  • /proc/[pid]/fd,這是個子目錄,包含了該程式開啟的每個檔案的條目,條目由檔案描述符命名

  • /proc/[pid]/maps,記憶體對映關係,對分析程式的記憶體使用很有幫助

  • /proc/[pid]/stat,程式狀態資訊,內容很多,可以看到程式的所有執行緒資訊,包括優先順序,執行緒名等

  • /proc/filesystems,檢視核心支援的檔案系統列表 (6)/proc/interrupts,記錄了CPU的中斷數

  • /proc/meminfo,/proc/cpuinfo,系統的記憶體資訊,CPU資訊

還有很多有用的東西,都可以在需要的時候,通過man查詢,其實大多數資訊,看名稱就知道是否是自己要的東西

相關文章