man

Linux man命令的使用方法(整理收集自網絡)

Linux提供了豐富的幫助手冊,使用Linux man命令來查看一些不熟悉的命令的使用方法,還可以用來查詢系統庫文件中的一些函數定義和使用方法。

Linux man中的man就是manual的縮寫,用來查看系統中自帶的各種參考手冊,但是手冊頁分爲好幾個部分,如下所示:

1   Executable programs or shell commands

2   System calls (functions provided by the kernel)

3   Library calls (functions within program libraries)

4   Special files (usually found in /dev)

5   File formats and conventions eg /etc/passwd

6   Games

7   Miscellaneous (including macro packages and conventions), e.g. man(7), groff(7)

8   System administration commands (usually only for root)

9   Kernel routines [Non standard]

----------------------

解釋一下,

1是普通的命令

2是系統調用,如open,write之類的(通過這個,至少可以很方便的查到調用這個函數,需要加什麼頭文件)

3是庫函數,如printf,fread

4是特殊文件,也就是/dev下的各種設備文件

5是指文件的格式,比如passwd,就會說明這個文件中各個字段的含義

6是給遊戲留的,由各個遊戲自己定義

7是附件還有一些變量,比如向environ這種全局變量在這裏就有說明

8是系統管理用的命令,這些命令只能由root使用,如ifconfig

------------------------------------

n新文檔,可能要移到更適合的領域。

o老文檔,可能會在一段期限內保留。

l本地文檔,與本特定系統有關的。

------------------------------------

在shell中輸入man+數字+命令/函數即可以查到相關的命令和函數。若不加數字,那Linux man命令默認從數字較小的手冊中尋找相關命令和函數。

例 如:我們輸入man ls,它會在最左上角顯示“LS(1)”,在這裏,“LS”表示手冊名稱,而“(1)”表示該手冊位於第一節章,同樣,我們輸入“man ifconfig”它會在最左上角顯示“IFCONFIG(8)”。也可以這樣輸入命令:“man [章節號]手冊名稱”。

man是按照手冊的章節號的順序進行搜索的,比如:man sleep,只會顯示sleep命令的手冊,如果想查看庫函數sleep,就要輸入:man 3 sleep

------------------------------------

man -f command顯示man程序的所有手冊

例如:man -f kill

man n command顯示指定章節的手冊

man -a command顯示所有章節的手冊

man -w command顯示手冊所在的路徑

man -aw command結合-a參數顯示所有章節的手冊路徑

------------------------------------

在vim編輯器裏頭,可以通過大寫字母K獲取光標位置處相關內容的幫助,比如你把光標定位到printf,然後,按下ESC,再按下SHIFT+k就可以獲取幫助啦。

 

 

關於庫函數和系統調用

庫 函數是高層的,完全運行在用戶空間,爲程序員提供調用真正的在幕後完成實際事務的系統調用的更方便的接口。系統調用在內核態運行並且由內核自己提供。標準 C庫函數printf()可以被看做是一個通用的輸出語句,但它實際做的是將數據轉化爲符合格式的字符串並且調用系統調用write()輸出這些字符串。

是否想看一看printf()究竟使用了哪些系統調用?這很容易,編譯下面的代碼。

#i nclude <stdio.h>int main(void){ printf("hello"); return 0; }

使 用命令gcc -Wall -o hello hello.c編譯。用命令strace hello跟蹤該可執行文件。是否很驚訝?每一行都和一個系統調用相對應。strace是一個非常有用的程序,它可以告訴你程序使用了哪些系統調用和這些 系統調用的參數,返回值。這是一個極有價值的查看程序在幹什麼的工具。在輸出的末尾,你應該看到這樣類似的一行write(1, "hello", 5hello)。這就是我們要找的。藏在面具printf()的真實面目。既然絕大多數人使用庫函數來對文件I/O進行操作(像fopen, fputs, fclose)。你可以查看man說明的第二部分使用命令man 2 write。man說明的第二部分專門介紹系統調用(像kill()和read())。man說明的第三部分則專門介紹你可能更熟悉的庫函數(像 cosh()和random())。

你甚至可以編寫代碼去覆蓋系統調用,正如我們不久要做的。駭客常這樣做來爲系統安裝後門或木馬。但你可以用它來完成一些更有益的事,像讓內核在每次某人刪除文件時輸出“Tee hee, that tickles!”的信息。

 

總結:

從程序完成的功能來看,函數庫提供的函數通常是不需要操作系統的服務,函數是在用戶空間內執行的,除非函數涉及到I/O操作等,一般是不會切到核心態的。系統調用是要求操作系統爲用戶提供進程,提供某種服務,通常是涉及系統的硬件資源和一些敏感的軟件資源等。

    函 數庫的函數,尤其與輸入輸出相關的函數,大多必須通過Linux的系統調用來完成。因此我們可以將函數庫的函數當成應用程序設計人員與系統調用程序之間的 一箇中間層,通過這個中間層,我們可以用一致的接口來安全的調用系統調用。這樣程序員可以只要寫一次代碼就能夠在不同版本的linux系統間使用積壓種具 體實現完全不同的系統調用。至於如何實現對不同的系統調用的兼容性問題,那是函數庫開發者所關心的問題。

    從程序執行效率來看,系統 調用的執行效率大多要比函數高,尤其是處理輸入輸出的函數。當處理的數據量比較小時,函數庫的函數執行效率可能比較好,因爲函數庫的作法是將要處理的數據 先存入緩衝區內,等到緩衝區裝滿了,再將數據一次寫入或者讀出。這種方式處理小量數據時效率比較高,但是在進行系統調用時,因爲用戶進程從用戶模式進入系 統核心模式,中間涉及了許多額外的任務的切換工作,這些操作稱爲上下文切換,此類的額外工作會影響系統的執行效率。但是當要處理的數據量比較大時,例如當 輸入輸出的數據量超過文件系統定義的盡寸時,利用系統調用可獲得較高的效率。

    從程序的可移植性的角度來看,相對於系統調用,C語言的標準備函數庫(ANSI C)具備較高的可移植性,在不同的系統環境下,只要做很少的修改,通常情況是不需要修改的。

 

===================================================================

ubuntu安裝c語言的庫函數man手冊的

1.添加庫函數手冊

ubuntu默認是沒有安裝c語言的庫函數man手冊的,所以你在man perror和sendto之類的函數時會顯示沒有相關文檔的問題,這個問題讓我鬱悶了我好久。解決方法:

sudo apt-get install manpages-dev

 

2.讓man顯示中文

ubuntu源裏面已經包含了中文的man包,所以不用從其他地方down了,直接

sudo apt-get install manpages-zh

但是這樣man默認顯示的還不是中文,還需要以下兩步

a.把中文man包轉換成utf8格式的

新建一個腳本文件

gedit t.sh

把下面內容添加進去

#!/bin/bashcd /usr/share/man/zh_CN/for k in *docd $kfor i in *.gzdo j=`echo ${i%.gz}` gunzip $i iconv -f gb18030 -t utf8 $j >tmp mv tmp $j gzip $jdonecd ..done

然後

sudo ./t

b.修改man默認的語言

sudo gedit /etc/manpath.config把裏面的所有的/usr/share/man改成/usr/share/man/zh_CN

保存後退出,然後你再試一下man ls

 

3.讓沒有中文幫助的顯示英文

做 完上面第二部還不夠,這時你再man一下一些c語言函數(不要用printf,socket之類比較有名的函數,這些已經有中文幫助了)的時候就會發現竟 然沒有幫助,而剛纔明明在第一步已經安裝了啊。這是因爲你上面把/usr/share/man改成/usr/share/man/zh_CN的操作使 man只在中文幫助中搜索,如果沒有就直接放棄,因此還需要以下操作,才能讓man在沒有中文幫助的時候自動顯示英文的幫助,如果英文的也沒有,哪就真的 沒有了。

sudo gedit /etc/manpath.config

然後搜索你剛纔改過的地方,然後在其後面添加同樣的一行,只是後面的目錄還用原來的/usr/share/man,比如在修改後的

MANPATH_MAP /bin          /usr/share/man/zh_CN

再添加一行

MANPATH_MAP /bin          /usr/share/man

 

新安裝了ubuntu 8.04版本,發現安裝過的系統中缺少很多手冊頁。

用以下命令搞定了

sudo apt-get install manpages

sudo apt-get install manpages-de

sudo apt-get install manpages-de-dev

sudo apt-get install manpages-dev

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章