一. 基礎命令部分
1. 基礎命令
(1) ps:顯示正在運行的進程;
(2) mpstat:實時監測多處理器系統上的每個CPU使用情況;
(3) vmstat:實時輸出系統各個資源的使用情況;
(4) tcpdump:用於過濾數據包或制定打開格式;
(5) lsof:列出當前系統打開的文件描述符;
(6) ipcs:查看信號量;
(7) ipcsm:查看已經銷燬的信號量;
(8) poweroff:立即關機;
(9) reboot:立即重啓;
(10)locate:查找包含指定字符串的文件或目錄;(locate + 字符串);
(11)more:分屏顯示文件內容;
(12)nl:可以顯示文件內容和行號;
(13)eject:將光盤驅動中的光盤彈出和收回
(14)fdisk:列出系統中所有的儲存設備;
具體歸納:
(1)操作文件的命令:tail:默認在屏幕上顯示指定文件的最後10行;
more:以全屏方式按頁顯示文本文件的內容;
vi:編輯模式下可以完成文本的編輯功能,命令模式下可以完成對文件的操作命令;
find:在給定目錄下查找符合給定條件的文件;
grep:篩選過濾文本文件的行。(1.在test.txt文件中,篩選包括mother的行:grep mother test.txt;2.在test.txt文件中,篩選不包含mother的行:grep -v mother test.txt;3.查找以特定字符串結尾的行:grep "\.$" test.txt[這裏\表示轉義,這裏查找以.結尾的行]);
awk:在文件或者字符串中基於指定瀏覽和抽取信息;(工作流程:讀入有“\n”換行符分割的一條記錄,然後將記錄按指定的域分隔符劃分域,填充域,$0表示所有域;$1表示第一個域,$n表示第n個域。默認域分割符是“空白鍵”或【tab】鍵);
(2)與進程相關的:ps:顯示正在運行的進程;
kill:用來刪除執行中的程序或者工作
top:用來監控linux的系統狀況,比如cpu、內存的使用情況
jobs:用於顯示linux中任務列表以及任務狀態,包括後臺運行的任務。該命令可以顯示任務號及其對應的進程號
(3)系統用戶管理類:useradd:用來建立用戶賬戶號和創建用戶的起始目錄,使用權限是超級用戶
passwd:用來更改使用者的密碼
(4)網絡方面:netstat:用於顯示各種網絡相關信息,如網絡連接,路由表,接口狀態等;
lsof:列出當前系統打開的文件描述符
tcpdump:根據使用者的定義對網絡上的數據包進行截獲的包分析工具。可以將網絡中 傳送的數據包的“頭”完全截獲下來提供分析;
2. gdb調試命令
(1) 調試多進程
gdb set follow-fork-mode mode
*mode 可以選擇爲parent 或者 child
(2)調試多線程
a.利用info threads查看線程信息;
b.thread id 調試目標id指定的線程;
c.set scheduler-locking off | on | step
*“off”表示不鎖定任何線程;
“on”只有當前被調試的線程繼續運行;
“step”在單步執行的時候,只有當前線程會執行;
(3)普通調試
-l:顯示代碼;
-r:運行;
-p:打印;
-s:進入到函數;
-b:加上斷點;
-bt:查看函數執行到那塊;
-n:單步執行;
-c:程序繼續向下一個執行
3.makefile文件
(1)功能:實現自動化編譯整個工程;
(2)簡單的編寫步驟:
現在有5個文件,分別爲:main.c my1.h my2.h my1.c my2.c
現在編寫makefile文件,名稱爲makefile.過程如下:
a. main: main.o my1.o my2.o
gcc –o main main.o my1.o my2.o
main.o:main.c my1.h my2.h
gcc –c main.c
my1.o:my1.c my1.h
gcc –c my1.c
my2.o:my2.c my2.h
gcc –c my2.c
clean:
rm –f *.o main
b.執行命令:make 就可以生成可執行文件main.如果要刪除可執行文件以及所有的中間目標文件,只需要執行下 make clean .
**clean不是一個文件,它只是一個動作的名字。
(3)文件說明
在上面的makefile文件當中,目標文件包括:執行文件main 和中間目標文件(*.o),依賴文件(就是冒號後面的那些文件)。每一個 .o 文件都有一組依賴文件,而這些 .o 文件又是執行文件main的依賴文件。依賴關係的實質上就是說明了目標文件是由那些文件生成的。
(4)make的工作原理
當我們輸入make時:
a. make首先會在當前目錄下尋找makefile文件。
b. 如果找到,它會找到文件中的第一個目標文件main,並把這個文件作爲最終的目標文件。
c. 如果main文件不存在或者是main所依賴的後面的 .o 文件的修改時間要比main這個文件新,那麼,他就會執行後面所定義的命令來生成main這個文件。
d. 如果main所依賴的 .o 文件也存在,那麼make會在當前文件中找目標爲 .o 文件的依賴性,如果找到則再根據那一個規則生成 .o 文件。
e. 由於我的c文件和h文件都是存在的,所以make會生成 .o 文件,然後再用 .o 文件聲明make的最終文件,也就是執行文件main.
(5)make和makefile的聯繫
make是一個命令,makefile是一個文件,當makefile 文件寫好後,只需要一個make命令就可以將makefile文件運行起來。
4.庫
(1)庫是什麼?
預先編譯好的方法的集合。
(2) 分類
a. 靜態庫
I 特點:程序在鏈接的過程當中,連接器從庫文件中取得所需代碼,複製到生成的可執行文件當中。因此,靜態庫
是在程序的鏈接階段被複制到程序當中,和程序的執行過程沒有關係。
II 創建
Eg:有兩個源文件:main.c max.c
a) gcc –c main.c max.c (得到main.o 和max.o)
b) 使用ar將目標文件歸檔
ar crv libxxx.a main.o max.o
**libxxx.a即爲我們創建的靜態庫。
a. 動態庫
I 特點:動態庫在鏈接階段並沒有被加載到程序當中,而程序在運行時被系統動態加載到內存當中供程序使用
II 創建
Eg:有一個源文件 max.c
a) gcc –fPIC –shared –o libxx.so max.c
上行代碼等價與:gcc –c –fPIC max.c
gcc –shared –o libxx.so max.o
(3) 區別
靜態庫的可執行文件當中包含了庫代碼的一份完整的拷貝,因此,當它被多次使用時就會有多份沒用的拷貝在內存當中,所以它比較佔內存;而動態庫系統只需載入一次動態庫,不同的程序可以得到內存當中相同的動態庫的副本,因此會節省很多內存。