Liunx:環境基礎開發工具使用總結(基本操作命令及使用詳解)
目錄
1vim的基本概念
vim基本分三種模式:
- 正常模式/命令模式(Normal mode):控制螢幕游標的移動,字元,字或行的刪除,移動複製某段區域
- 插入模式(Insert mode):只有在Insert mode模式下,才可以輸入文字,按[esc]可回到命令列模式
- 末行模式(last line mode):檔案的儲存或退出,也可以進行替換,字串查詢,列出行號等操作,在命令模式下,shift+:進入該模式
要檢視所有的模式:help vim-modes
一共有12中模式:six BASIC modes 和 six ADDITIONAL modes
2vim的基本操作
- vim + 檔名:進入全屏編輯畫面(正常模式),需要切換到[插入模式]才能輸入文字
- [正常模式]切換到[插入模式]: 1:---[a] 2:---[i] 3---[o].
- [插入模式]切換到[正常模式]: [esc]
- [正常模式]切換到[末行模式]: [shit + :]
- vim儲存及退出: w:儲存當前檔案 wq儲存並退出 q!不儲存強制退出 wq!儲存強制退出
- 程式碼縮排對齊: [gg = G]
- 程式碼遮蔽 [ctrl + v ]切換為檢視模式,[r]替換為‘/’
3vim正常模式命令集
1:插入模式
- 按[i] 切換插入模式從游標當前位置開始輸入
- 按[a] 進入插入模式後,從游標所在位置的下一個位置開始輸入
- 按[o] 進入插入模式,是插入新的一行,從行首開始輸入
- 從插入模式進入命令模式[esc],按兩下直接從底行模式回到正常模式
2:移動游標
- [h] [j] [k] [l] 分別是控制游標左,下,上,右
- [G]:移動到文章最後
- [w]:游標跳到下個字的開頭
- [e]:游標跳到下個字的字尾
- [b]:游標回到上個字的開頭
- [gg]:進入文字開始
- [shift + g]:進入文字末端
- [ctrl + b]:螢幕往後移動一頁
- [ctrl + f]:螢幕往前移動一頁
- [ctrl + u]:螢幕往後移動半頁
- [ctrl + d]:螢幕往前移動半頁
3:刪除文字
- [x]:每按一次刪除游標所在位置的一個字元
- [#x]:刪除游標所在位置後面包含自己在內的#個字元
- [X]:大寫X,表示刪除游標所在位置前一個字元
- [#X]:刪除不包含游標在內的前面#個字元
- [dd]:刪除游標所在行
- [#dd]:刪除游標開始的#行
4:複製
- [yw]:將游標所在之處到字尾的字元複製到緩衝區
- [#yw]:複製#個字到緩衝區
- [yy]:複製游標所在行
- [#yy]:從游標開始複製#行
- [p]:將緩衝區的字元貼到游標所在位置(所有與y有關的複製命令都必須與p配合)
5:替換
- [r]:替換游標所在處字元
- [R]:替換游標所到之處的字元,直到[esc]為止
6:撤銷
- [u]:回到上一個操作
- [ctrl + r]:撤銷的恢復
7:更改
- [cw]:更改游標所到處的字到字尾出
- [c#w]:表示更改#個字
8:跳到指定行
- [#G]:表示游標移動到#行
- [ctrl + g]:列出游標所在行佔比例
4vim末行模式命令集
- [set nu]:列出行號
- [#]:冒號後輸入一個數字按回車,就會跳到對應行
- [/關鍵字]:先按[/]在輸入想尋找的字元,如果第一次不是要找的,可以按[n]往後尋找
- [?關鍵字]:先按[?]在輸入想尋找的字元,如果第一次不是要找的,可以按[n]往前尋找
分屏操作
同時上下分屏(不管檔案存在不存在):
1:vim -on test1.c test2.c
2:split 檔名(已經開啟一個檔案時,在增加一個檔案)
同時左右分屏(不管檔案存在不存在):
1:vim -On test1.c test2.c (大寫O)
2:vnew 檔名(已經開啟一個檔案時,在增加一個檔案)
方向控制
ctrl + w + l 右
ctrl + w + h 左
ctrl + w + k 上
ctrl + w + j 下
(如果分屏少直接ctrl + w + w切換)
編譯器的使用
1:背景知識
- 預處理:進行巨集替換
- 編譯:生成彙編
- 彙編:生成機器可識別程式碼
- 連結:生成可執行檔案或庫檔案
2:gcc如何完成
格式:gcc [選項] 要編譯檔案 [選項] [目標檔案]
(!gcc:上一次執行的gcc)
預處理:
- 預處理主要功能是巨集定義,檔案包含,條件編譯,去註釋等
- 預處理指令以#開頭的程式碼行
- 例項:gcc -E hello.c -o hello.i
- -E:讓gcc在預處理之後停止編譯過程
- -o:是指目標檔案,-i為已經與預處理過的c程式
編譯
- 在這個階段,gcc首先檢查程式碼的規範性,是否有語法錯誤等,已確定程式碼實際要做的工作,檢查無誤後,gcc把程式碼翻譯成組合語言
- -S:可以檢視,只編譯而不彙編
彙編
- 彙編階段是把編譯階段生成的.s轉換為目標檔案
- 生成機器可識別程式碼
- -c:可以檢視已轉化為.o 的二進位制目的碼
連結
- 成功編譯後進入連結階段,刪除可執行檔案
- 實列:gcc hello.o hello
靜態庫與動態庫:
靜態庫:編譯時把程式碼連結到可執行檔案中。程式執行的時候將不再需要靜態庫
動態庫:程式執行時才去連結動態庫的程式碼,多個程式可以共享使用庫的程式碼
gcc選項
1、無選項編譯連結
例:命令:gcc test.c
//會預設生成a.out可執行程式
2、-E: 進行預處理和編譯,生成彙編檔案。
命令:gcc -E test.c
//會生成test.i檔案
3、-S: 進行預處理,編譯,彙編等步驟,生成“.s”檔案
例:命令:gcc -S test.c
//會生成test.s檔案
4、-c: 會直接生成二進位制目標檔案
例:命令:gcc -c test.c
//會生成test.o檔案
5、-o :對生成的目標進行重新命名
例:命令:gcc -o test test.c
//會生成名字是test可執行檔案而不是預設的a.out
6、-pipe: 使用管道代替編譯中的臨時檔案
例:命令:gcc -pipe -o test test.c
7、-include file :包含某個程式碼。相當於在檔案中加入#include
例:gcc test.c -include /root/file.h
8、-C:在預處理的時候不刪除註釋資訊,一般和-E使用。
9、-llibrary:定製編譯的時候使用的庫
例:gcc -lpthread test.c //在編譯的時候要依賴pthread這個庫
10、-Ldir:定製編譯的時候搜尋庫的路徑。如果是自己定製的庫,可以用它來定製搜尋目錄,否則編譯器只在標準庫目錄裡面找,dir就是目錄的名字
11、-O0(字母o和數字0):沒有優化
-O1:-O1位預設值
-O2:二級優化
-O3:最高階優化
級別越大優化越好,但編譯時間邊長。
偵錯程式gdb的使用
要使用gdb除錯,必須先在原始碼生成二進位制程式碼時,加上-g選項(在生成可執行程式時,在可執行程式新增可調式資訊)
實列:gcc -g test.c -o test
開始使用
- 開始除錯:gdb + 檔名,結束除錯:quit 或 ctrl + d
- list/l 行號:每次10行顯示程式碼
- list/l 函式名:列出函式的程式碼
- run/r:執行程式(需要在後面新增命令列引數 r -a 引數或是set + 引數)
- start:開始除錯(逐步)
- next/n:每次執行一句,不進入函式
- step/s:進去函式呼叫
- break/b 行號:在某一行設定斷點
- break/b 函式名:在某個函式開頭設定斷點
- info break/i b:檢視斷點資訊
- finish:執行到當前函式返回,然後停下來等待命令
- continue/c:從當前位置開始連續執行程式
- delete breakpoints:刪除所有斷點
- d n:刪除序號為n的斷點
- dispaly 變數名:跟蹤檢視一個變數,每次停下來都顯示它的值
- p var:列印var變數的值
- bt:列印函式呼叫棧
- watch var :監控變數var的改變(變數改變時停下)
自動化構建工具make/Makefile
背景
- make是一條命令,Makefile是一個檔案,兩個搭配使用
- make是一個解釋Makefile中指令的命令工具
- 一個工程中的原始檔不計其數,其按型別,功能,模組分別放在若干個目錄中,Makefile定義了一系列規則來指定,哪些檔案需要先編譯,後編譯,重新編譯,甚至於進行更復雜的過程操作
- 會不會寫Makefile,從側面說明一個人是否具有完成大專案的能力
- Makefile帶來的好處就是“自動化編譯”,一旦寫好只需要一個make命令,整個工程就能完全自動編譯,極大提高了效率
#表示註釋
#[要生成的目標檔名稱]:[依賴檔案]
#[製表符Tab]如何通過依賴檔案物件生成目標檔案的編譯命令
all:test test1
test:test.c tmp.c
gcc test.c tmp.c -o test
test1:test.c tmp.c
gcc test.c tmp.c -o test1
#永遠只生成第一個物件,生成後則退出,因此如果要生成多個物件,就需要在前邊一個包含所有要生成的物件
#幾個預定義變數
# [email protected] 代表要生成的目標物件
# $^ 代表依賴物件
# $< 代表所有檔案中的第一個
# .PHONY 宣告偽物件,這個偽物件每次都需要生成
.PHONY :test test1
all:test test1
test:test.c tmp.c
gcc $^ -o [email protected]
test1:test.c tmp.c
gcc $< -o [email protected]
依賴關係: .c 檔案依賴.i檔案,
.i檔案 依賴.s檔案,
.s檔案 依賴 .o檔案
原理
- make會在當前目錄下找名字叫“makefile”或“Makefile”的檔案
- 如果找到,它會找檔案中的第一個目標檔案,並把它作為最終的目標檔案
- 如果不存在那麼它就會執行後面所定義的命令來生成這個檔案
- 如果所依賴的.o檔案不存在,那麼make會在當前檔案中找目標為.o檔案的依賴性,再根據規則生成一個.o檔案
- .c和.h檔案肯定存在,於是make會生成.o檔案,然後在用.o檔案宣告執行檔案
- 這就是整個依賴性,make會一層一層去找檔案的依賴關係,直到最終編譯出第一個目標檔案
- 在尋找過程中,如果出現錯誤,比如最後被依賴的檔案找不到,make就會直接退出,並且報錯。而對於所以的命令錯誤,或編譯不成功,make根本不理
進度條程式
1 #include<stdio.h>
2 #include<unistd.h>
3 #include<string.h>
4 int main()
5 {
6 int i = 0;
7 char buff[102] = {0};//初始化為0,保證字串長度不會再改變
8 const char *cycle = "|/-\\";
9 while(i <= 100)
10 {
11 printf("[%-100s][%d%%][%c]\r",buff,i,cycle[i%5]);//“\r”回車符,與換行符區別是:不換行,游標跳的本行的行首然後開始覆蓋
12 fflush(stdout);//立即重新整理緩衝區,可以使進度條走的很流暢
13 buff[i++] = '#';
14 usleep(100000);
15 }
16 printf("\n");
17 return 0;
18 }
軟體管理器yum
有那些軟體包
- 在Linux下安裝軟體太麻煩,所以有人提前編譯好,做成軟體包放在一個伺服器上,可以直接進行安裝
- 軟體包和軟體管理器yum,就好比app和應用商店的關係
- yum需要在聯網狀態才能正常工作
yum list | grep gcc
yum list命令可以羅列出一個有那些包,數目非常多,可以使用grep篩選
軟體包名稱 :主版本號,次版本號,程式原始碼發行號,軟體包發行號,主機平臺,cpu構架
如何安裝
sudo yum install 檔名
最後只需要按Y確定即可
- 安裝軟體時由於需要向系統目錄寫入內容,所以需要root賬戶,或者sudo才能完成
- yum安裝只能一個裝完了才能再裝另一個,否則會報錯
如何解除安裝
sudo yum remove 檔名
Y確定即可