Linux下常用系統工具及知識點

2021-06-07 03:11:07 字數 2569 閱讀 2962

strace -- 分析並輸出指定程序執行時的系統呼叫情況,及占用時間,可以列印出每個系統呼叫占用的時間情況,常用於系統效能分析;

truss -- 用來跟蹤乙個程序的系統呼叫或訊號產生的情況;

ltrace - 用來跟蹤程序呼叫庫函式的情況;

ldd -- 是用來分析程式執行時需要依賴的動態庫.so的工具,可以列出程式執行所需要動態庫列表;

ar --  靜態庫.a 檢視、修改、生成工具;

lsof -- 使用它既可以知道程序開啟了哪些檔案,也可以了解乙個檔案被哪個程序開啟;

系統呼叫 和 庫函式 呼叫區別與各自優勢:

linux下對檔案操作有兩種方式:系統呼叫(system call)和庫函式呼叫(library functions)。可以參考《linux程式設計》(英文原版為《beginning linux programming》,作者是neil matthew和richard stones)第三章: working with files。系統呼叫實際上就是指最底層的乙個呼叫,在linux程式設計裡面就是底層呼叫的意思。面向的是硬體。而庫函式呼叫則面向的是應用開發的,相當於應用程式的api,採用這樣的方式有很多種原因,第一:雙緩衝技術的實現。第二,可移植性。第三,底層呼叫本身的一些效能方面的缺陷。第四:讓api也可以有了級別和專門的工作面向。

1、系統呼叫

系統呼叫提供的函式如open, close, read, write, ioctl等,需包含標頭檔案unistd.h。以write為例:其函式原型為 size_t write(int fd, const void *buf, size_t nbytes),其操作物件為檔案描述符或檔案控制代碼fd(file descriptor),要想寫乙個檔案,必須先以可寫許可權用open系統呼叫開啟乙個檔案,獲得所開啟檔案的fd,例如 fd=open(\"/dev/video\", o_rdwr)。fd是乙個整型值,每新開啟乙個檔案,所獲得的fd為當前最大fd加1。linux系統預設分配了3個檔案描述符值:0-standard input,1-standard output,2-standard error。

系統呼叫通常用於底層檔案訪問(low-level file access),例如在驅動程式中對裝置檔案的直接訪問。

系統呼叫是作業系統相關的,因此一般沒有跨作業系統的可移植性。

系統呼叫發生在核心空間,因此如果在使用者空間的一般應用程式中使用系統呼叫來進行檔案操作,會有使用者空間到核心空間切換的開銷。事實上,即使在使用者空間使用庫函式來對檔案進行操作,因為檔案總是存在於儲存介質上,因此不管是讀寫操作,都是對硬體(儲存器)的操作,都必然會引起系統呼叫。也就是說,庫函式對檔案的操作實際上是通過系統呼叫來實現的。例如c庫函式fwrite()就是通過write()系統呼叫來實現的。

這樣的話,使用庫函式也有系統呼叫的開銷,為什麼不直接使用系統呼叫呢?這是因為,讀寫檔案通常是大量的資料(這種大量是相對於底層驅動的系統呼叫所實現的資料操作單位而言),這時,使用庫函式就可以大大減少系統呼叫的次數。這一結果又緣於緩衝區技術。在使用者空間和核心空間,對檔案操作都使用了緩衝區,例如用fwrite寫檔案,都是先將內容寫到使用者空間緩衝區,當使用者空間緩衝區滿或者寫操作結束時,才將使用者緩衝區的內容寫到核心緩衝區,同樣的道理,當核心緩衝區滿或寫結束時才將核心緩衝區內容寫到檔案對應的硬體媒介。

2、庫函式呼叫

標準c庫函式提供的檔案操作函式如fopen, fread, fwrite, fclose, fflush, fseek等,需包含標頭檔案stdio.h。以fwrite為例,其函式原型為size_t fwrite(const void *buffer, size_t size, size_t item_num, file *pf),其操作物件為檔案指標file *pf,要想寫乙個檔案,必須先以可寫許可權用fopen函式開啟乙個檔案,獲得所開啟檔案的file結構指標pf,例如pf=fopen(\"~/proj/filename\", \"w\")。實際上,由於庫函式對檔案的操作最終是通過系統呼叫實現的,因此,每開啟乙個檔案所獲得的file結構指標都有乙個核心空間的檔案描述符fd與之對應。同樣有相應的預定義的file指標:stdin-standard input,stdout-standard output,stderr-standard error。

庫函式呼叫通常用於應用程式中對一般檔案的訪問。

庫函式呼叫是系統無關的,因此可移植性好。

由於庫函式呼叫是基於c庫的,因此也就不可能用於核心空間的驅動程式中對裝置的操作。

※函式庫呼叫 vs 系統呼叫

函式庫呼叫

系統呼叫

在所有的ansi c編譯器版本中,c庫函式是相同的

各個作業系統的系統呼叫是不同的

它呼叫函式庫中的一段程式(或函式)

它呼叫系統核心的服務

與使用者程式相聯絡

是作業系統的乙個入口點

在使用者位址空間執行

在核心位址空間執行

它的執行時間屬於「使用者時間」

它的執行時間屬於「系統」時間

屬於過程呼叫,呼叫開銷較小

需要在使用者空間和核心上下文環境間切換,開銷較大

在c函式庫libc中有大約300個函式

在unix中大約有90個系統呼叫

典型的c函式庫呼叫:system fprintf malloc

典型的系統呼叫:chdir fork write brk;

Linux下常用日誌分析工具

linux下常用日誌分析工具 logcheck簡介 對於擁有大量賬戶 系統繁忙的linux系統而言,其日誌檔案是極其龐大的,很多沒有用的資訊會將值得注意的資訊淹沒,給使用者分析日誌帶來了很大的不便。現在有一些專門用於分析日誌的工具,如logcheck和friends。logcheck用來分析龐大的日...

linux 下常用工具

vim是類似於vi的著名的功能強大的,高度可定製的的文字編輯器,在vi的基礎上改進和增加了很多特性,是乙個自由軟體,其在 補全,編譯錯誤跳轉等程式設計的功能特別豐富,在程式設計師中被廣泛應用。普通模式 完成普通的基本命令 插入模式 向檔案中插入資料 底行模式 退出 儲存編輯 vim設定 模式切換 普...

Linux下常用工具

先貼乙個鏈結,可以快速一鍵將你的vim打造成功能強大的ide 全小白操作 在linux作業系統中,我們使用yum來安裝工具,這裡我只說幾個最常用的指令 yum install package1 安裝指定的安裝包package1 yum update package1 更新指定程式包package1 ...