Linux---centos常用開發工具(vim、gcc/g++、gdb、Makefile、git)

一、Linux軟件包管理器yum

1.什麼是軟件包?

        將一些常用的軟件提前編譯好, 做成軟件包(可以理解成windows上的安裝程序)放在一個服務器上, 通過軟件包管理器可以很方便的獲取到這些編譯好的軟件包, 直接進行安裝。軟件包和軟件包管理器, 就好比 "App" "應用商店" 這樣的關係。yum(Yellow dog Updater, Modifified)是Linux下非常常用的一種包管理器. 主要應用在Fedora, RedHat, Centos等發行版上.

2.rz/sz的使用

        這個工具用於 windows 機器和遠端的 Linux 機器通過 XShell 傳輸文件。安裝完畢之後可以通過拖拽的方式將Windows機器中的程序上傳到Linux機器中。也可以以指令的方式進行使用。

3.yum基本命令和使用

1)查看軟件包

yum list 顯示所有軟件包   例:yum list | grep lrzsz  ---查找rzsz相關的軟件包

2)下載安裝軟件包

yum install 安裝軟件包  例:yum install lrzsz

3)卸載軟件包

yum remove 卸載軟件包  例:yum remove lrzsz

注意:安裝和卸載軟件包需要root權限,同時yum的所有操作必須保證主機網絡暢通(ping 指令可以驗證網絡是否暢通)

二、Linux編輯器---vim

1.vim的基本概念

        vim的3種常用模式(vim一共有12種模式,但只有3種模式最常用),分別是命令(普通)模式(normal mode)、底行模式(last line mode)、插入模式(insert mode)。

正常/普通/命令模式:控制屏幕光標的移動,字符、字或行的刪除,移動複製某區段及進入Insert mode下,或者到 last line mode

插入模式:只有在Insert mode下,纔可以做文字輸入,按「ESC」鍵可回到命令行模式。該模式是我們後面用的最頻繁的編輯模式。

底行模式:文件保存或退出,也可以進行文件替換,找字符串,列出行號等操作。 在命令模式下,shift+: 即可進入該模式。要查看你的所有模式:打開vim,底行模式直接輸入:help vim-modes

2.vim的基本操作

1)vim打開和退出文件

a.打開文件

基本命令:vim +文件名;例vim test.c

 注意:使用vim打開文件時,如果文件存在則打開文件,如果文件不存在則在當前目錄下創建該文件並打開。

b.退出文件

使用vim打開一個文件,要想退出必須在底行模式下使用命令退出。①w保存文件;②q!強制退出文件(不保存);③wq保存並退出;

2)vim三種模式的相互切換

a.插入模式、底行模式切換到普通模式:Esc鍵

b.普通模式切換到底行模式:shift+: 鍵

c.插入模式切換到底行模式:Esc鍵切換到普通模式,再shift+: 鍵切換到底行模式

d.正常模式切換到插入模式:i / a / o鍵均可切換到插入模式

                                              i:光標處於上次所在位置不變

                                              a:光標默認處於上次光標所在位置的下一個位置

                                              o:上次光標所在位置的下一行(會自動換行,使後邊內容後移一行)

3)vim下的基本命令

a.普通模式的基本命令

  • yy:複製當前行
  • nyy:複製n行內容,從當前光標所在行開始
  • p:粘貼
  • np:粘貼n行內容其實,將複製到的內容粘貼n次
  • dd:刪除當前行
  • ndd:刪除從當前行開始的n行內容
  • u:撤銷上次的操作
  • gg:將光標定位到文件的開始位置
  • shift + g:將光標定位到文件的最後一行的開始位置
  • ngg:將光標定位到第n行的開始位置
  • shift + 4($):將光標定位到當前行的末尾位置
  • shift + 6(^):將光標定位到當前行的開始位置
  • b ,w:按照單詞進行前後移動
  • nb,nw:前後移動n個單詞
  • x,nx:從左向右刪除光標所在位置的內容(nx刪除光標所在位置及之後的n個字符的內容)
  • shift + x:從右向左刪除光標所在位置的內容
  • shift + ~:批量化大小寫轉換
  • h j k l:左下上右移動光標

b.底行模式下的基本命令

  • /文本內容 or ?文本內容:查找文本,n選擇下一個
  • set nu / nonu:顯示或者取消行號
  • vs 文件名:多文件顯示,光標在哪個文件就編輯哪個文件

c.其他命令(普通模式)

  • ctrl + r:反撤銷
  • ZZ:保存退出

三、Linux編譯器---gcc/g++

1.gcc編譯C語言程序的過程

C語言程序的編譯分預處理、編譯、彙編和鏈接四步,在gcc下每一步的具體操作如下:

預處理:展開頭文件、宏替換、去掉註釋、條件編譯

命令:gcc file.c -E -o file.i 使用E選項堆.c文件進行編譯生成.i文件

編譯:將c程序編譯形成彙編代碼

命令:gcc file.i -S -o file.s  .s文件爲生成的彙編代碼文件

彙編:將彙編形成二進制目標文件

命令:gcc file.s -c -o file.o  .o文件爲生成的二進制目標文件

鏈接:將目標文件和系統庫鏈接形成可執行程序

命令:gcc file.o -o file   file爲生成的可執行程序

gcc常用選項:-E(.i)  -S(.s)  -c(.o)  -o(可執行程序)

2.函數庫和鏈接方式

1)動態庫和靜態庫

靜態庫:靜態庫是指編譯鏈接時,把庫文件的代碼全部加入到可執行文件中,因此生成的文件比較大,但在運行時也就不再需要庫文件了。其後綴名一般爲“.a”。

動態庫:動態庫與之相反,在編譯鏈接時並沒有把庫文件的代碼加入到可執行文件中,而是在程序執行時由運行時鏈接文件加載庫,這樣可以節省系統的開銷。動態庫一般後綴名爲“.so”,如前面所述的 libc.so.6 就是動態庫。gcc 在編譯時默認使用動態庫。完成了鏈接之後,gcc

2)靜態鏈接和動態鏈接

gcc默認使用的是動態庫進行動態鏈接,在編譯時加上-static選項就會使用靜態庫進行靜態鏈接。

靜態鏈接和動態鏈接的比較

動態鏈接:程序體積比較小,節省系統資源;一旦庫確實所有依賴的程序都不可運行了

靜態鏈接:程序體積比較大,浪費系統資源;當庫缺失時不會影響其他程序的執行

四、Linux調試器---gdb

        gdb是Linux下常用的調試器工具,程序的發佈有兩種形式,debug版本和release版本,只有debug版本的程序才能進行調試(release版本的程序沒有調試信息)。Linux下默認生成的是release版本的,需要生成debug版本的程序需要加上-g選項即可。

相關命令

  • gdb文件名:開始調試文件
  • ctrl + d  or quit(q):退出調試
  • list(簡寫l)  n:顯示第n行的程序(其他行也可能顯示出來)
  • list(簡寫l) 函數名:顯示該函數內容
  • r  or  run:執行程序
  • n  or  next:單條執行函數
  • s  or  step:單條執行遇到函數會進入
  • break  or  b行號:在某一行打斷點(也可跟函數名,給該函數打斷點)
  • info  break:查看斷點信息
  • fifinish:執行到當前函數返回,然後挺下來等待命令
  • print(p):打印表達式的值,通過表達式可以修改變量的值或者調用函數
  • p 變量:打印變量值。 
  • set var:修改變量的值
  • continue(或c):從當前位置開始連續而非單步執行程序
  • run(或r):從開始連續而非單步執行程序
  • delete breakpoints:刪除所有斷點
  • delete breakpoints n:刪除序號爲n的斷點
  • disable breakpoints:禁用斷點
  • enable breakpoints:啓用斷點
  • info(或i) breakpoints:參看當前設置了哪些斷點
  • display 變量名:跟蹤查看一個變量,每次停下來都顯示它的值
  • undisplay:取消對先前設置的那些變量的跟蹤
  • until X行號:跳至X行
  • breaktrace(或bt):查看各級函數調用及參數
  • info(i) locals:查看當前棧幀局部變量的值
  • quit:退出gdb

五、Linux項目自動化構建工具make/Makefile

        make是一個命令工具,是一個解釋makefifile中指令的命令工具,一般來說,大多數的IDE都有這個命令,比如:DelphimakeVisual C++nmakeLinuxGNUmake。可見,makefifile都成爲了一種在工程方面的編譯方法。make是一條命令,makefifile是一個文件,兩個搭配使用,完成項目自動化構建。

1.原理

1) make會在當前目錄下找名字叫“Makefifile”“makefifile”的文件。

2) 如果找到,它會找文件中的第一個目標文件(target),在上面的例子中,他會找到“hello”這個文件,並把這個文件作爲最終的目標文件。

3) 如果hello文件不存在,或是hello所依賴的後面的hello.o文件的文件修改時間要比hello這個文件新(可以用 touch 測試),那麼,他就會執行後面所定義的命令來生成hello這個文件。

4) 如果hello所依賴的hello.o文件不存在,那麼make會在當前文件中找目標爲hello.o文件的依賴性,如果找到則再根據那一個規則生成hello.o文件。(這有點像一個堆棧的過程)

5) 當然,你的C文件和H文件是存在的啦,於是make會生成 hello.o 文件,然後再用 hello.o 文件聲明make的終極任務,也就是執行文件hello了。

6) 這就是整個make的依賴性,make會一層又一層地去找文件的依賴關係,直到最終編譯出第一個目標文件。

7) 在找尋的過程中,如果出現錯誤,比如最後被依賴的文件找不到,那麼make就會直接退出,並報錯,而對於所定義的命令的錯誤,或是編譯不成功,make根本不理。

8) make只管文件的依賴性,即,如果在我找了依賴關係之後,冒號後面的文件還是不在,那麼對不起,我就不工作啦。

2.依賴關係和依賴方法

依賴關係:在使用gcc命令編譯C語言程序時,如:gcc -c hello.s -o hello.o命令中,需要通過hello.s文件生成hello.o文件,即生成hello.o文件需要依賴hello.s文件。同樣在Makefile中也需要這樣的依賴關係,例如Makefile中hello.o:hello.s就是依賴hello.s生成hello.o文件。

依賴方法在Makefile中除了需要這樣的依賴關係之外,還需要執行這樣依賴關係的依賴方法,Makefile中的依賴方法就形如:gcc -c hello.s -o hello.o這樣的命令。同時需要注意的是Makefile中依賴方法需要以tab鍵開頭。

僞目標:Makefile中.PHONY修飾的表明是一個僞目標,如.PHONY:clean就表示clean是一個僞目標,僞目標的表明該目標總是被執行的。

3.項目清理

在軟件工程項目中,像clean這種,沒有被第一個目標文件直接或間接關聯,那麼它後面所定義的命令將不會被自動執行,不過,我們可以顯示要make執行。即命令——“make clean”,以此來清除所有的目標文件,以便重編譯。但是一般我們這種clean的目標文件,我們將它設置爲僞目標,.PHONY 修飾,僞目標的特性是,總是被執行的。可以將我們的 hello 目標文件聲明成僞目標,測試一下

4.示例

//初級版
hello:hello.o    //生成hello需要依賴hello.o
    gcc hello.o -o hello  //上條語句所需的依賴方法
hello.o:hello.s  //生成hello.o需要依賴hello.s文件
    gcc hello.s -c -o hello.o
hello.s:hello.i
    gcc hello.i -S -o hello.s
hello.i:hello.c
    gcc hello.c -E -o hello.i
.PHONY:clean   //生成clean僞目標
clean:
    rm -rf *.i *.s *.o

//中級版,可以使用$@代替待生成文件,#^代替依賴關係文件
hello:hello.o    //生成hello需要依賴hello.o
    gcc $^ -o $@  //上條語句所需的依賴方法
hello.o:hello.s  //生成hello.o需要依賴hello.s文件
    gcc $^ -c -o $@
hello.s:hello.i
    gcc $^ -S -o $@
hello.i:hello.c
    gcc $^ -E -o $@
.PHONY:clean   //生成clean僞目標
clean:
    rm -rf *.i *.s *.o

//高級版,Makefile文件中可以定義變量
h=hello
h1=hello.o
h:h1    //生成hello需要依賴hello.o
    gcc $^ -o $@  //上條語句所需的依賴方法
h1:hello.s  //生成hello.o需要依賴hello.s文件
    gcc $^ -c -o $@
hello.s:hello.i
    gcc $^ -S -o $@
hello.i:hello.c
    gcc $^ -E -o $@
.PHONY:clean   //生成clean僞目標
clean:
    rm -rf *.i *.s *.o   //其他文件名也可以使用定義變量的方式進行替換




六、git在Linux下的使用

1.克隆本地倉庫:git clone 倉庫連接

2.git add 添加代碼

3.git comnit -m ’information‘提交改動到本地

4.git push同步到遠程服務器

Linux下默認使用的是動態鏈接,生成的是release版本

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