偉大的man手冊

2021-08-13 22:10:45 字數 2472 閱讀 2290

linux的man很強大,該手冊分成很多section,使用man時可以指定不同的section來瀏覽,各個section意義如下: 

1 - commands

2 - system calls

3 - library calls

4 - special files

5 - file formats and convertions

6 - games for linux

7 - macro packages and conventions

8 - system management commands

9 - 其他

解釋一下, 

1是普通的命令

2是系統呼叫,如open,write之類的(通過這個,至少可以很方便的查到呼叫這個函式,需要加什麼標頭檔案)

3是庫函式,如printf,fread

4是特殊檔案,也就是/dev下的各種裝置檔案

5是指檔案的格式,比如passwd, 就會說明這個檔案中各個欄位的含義

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

7是附件還有一些變數,比如向environ這種全域性變數在這裡就有說明

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

想要指定section就直接在man的後面加上數字,比如 :

man 1 ls

man 3 printf

等等對於像open,kill這種既有命令,又有系統呼叫的來說,man open則顯示的是open(1),也就是從最前面的section開始,如果想檢視open系統呼叫的話,就得man 2 open

關於庫函式和系統呼叫

庫函式是高層的,完全執行在使用者空間, 為程式設計師提供呼叫真正的在幕後完成實際事務的系統呼叫的更方便的介面。系統呼叫在核心態執行並且由核心自己提供。標準c庫函式printf()可以被看做是乙個通用的輸出語句,但它實際做的是將資料轉化為符合格式的字串並且呼叫系統呼叫write()輸出這些字串。

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

#i nclude int main(void)

使用命令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) 具備較高的可移植性,在不同的系統環境下,只要做很少的修改,通常情況是不需要修改的。

man 手冊不全

輸入sudo apt get install man後顯示 正在讀取軟體包列表.完成 正在分析軟體包的依賴關係樹 正在讀取狀態資訊.完成 注意,選取 man db 而非 man man db 已經是最新的版本了。共公升級了 0 個軟體包,新安裝了 0 個軟體包,要解除安裝 0 個軟體包,有 0 個軟...

man手冊使用

1 是普通的命令 2 是系統呼叫,如open,write之類的 通過這個,至少可以很方便的查到呼叫這個函式,需要加什麼標頭檔案 3 是庫函式,如printf,fread 4 是特殊檔案,也就是 dev下的各種裝置檔案 5 是指檔案的格式,比如passwd,就會說明這個檔案中各個欄位的含義 6 是給遊...

man手冊漢化

3.解壓包 tar jxvf manpages zh 1.5.2.tar.bz2 4.設定編譯引數 cd manpages zh 1.5.2 configure disable zhtw 5.編譯安裝 make make install 6.為了同時保留英文的man,所以我們這裡重新建乙個cman命...