前言
在這篇文章中,我將深入學習和理解Linux環境基礎開發工具的使用。無論你是初學者還是有一定經驗的開發者,相信這篇文章都會對你有所幫助。我們將詳細講解軟件包管理器、編輯器、編譯器、調試器、自動化構建工具以及版本控制工具的使用。
Linux軟件包管理器YUM
什么是軟件包
在Linux下安裝軟件,一個常用的辦法是下載到程序的源代碼,并進行編譯,得到可執行程序。但是這樣太麻煩了,于是有些人把一些常用的軟件提前編譯好,做成軟件包(可以理解成Windows上的安裝程序)放在一個服務器上,通過包管理器可以很方便地獲取到這個編譯好的軟件包,直接進行安裝。軟件包和軟件包管理器,就好比 “App” 和 “應用商店” 這樣的關系。YUM(Yellow dog Updater, Modified)是Linux下非常常用的一種包管理器,主要應用在Fedora、RedHat、CentOS等發行版上。
關于rzsz
rzsz是一個用于Windows機器和遠端的Linux機器通過XShell傳輸文件的工具。安裝完畢之后可以通過拖拽的方式將文件上傳到遠端服務器,非常方便。需要注意的是,使用yum進行操作時,必須確保主機(虛擬機)網絡暢通,可以通過ping指令驗證網絡連接是否正常。
查看軟件包
通過yum list
命令可以列出當前系統中所有的軟件包。由于包的數目可能非常多,我們可以使用grep
命令篩選出我們關注的包。例如:
yum list | grep lrzsz
結果如下:
lrzsz.x86_64 0.12.20-36.el7 @base
軟件包名稱包括主版本號、次版本號、源程序發行號、軟件包的發行號、主機平臺和CPU架構。例如,x86_64
表示64位系統的安裝包,i686
表示32位系統安裝包。選擇包時要和系統匹配。el7
表示操作系統發行版的版本,如CentOS7/RedHat7,el6
表示CentOS6/RedHat6。最后一列base
表示軟件源的名稱,類似于"小米應用商店"、"華為應用商店"的概念。
安裝軟件
通過YUM,我們可以通過很簡單的一條命令完成軟件的安裝。例如安裝lrzsz
:
sudo yum install lrzsz
YUM會自動找到需要下載的軟件包,用戶需要敲"y"確認安裝,出現"complete"字樣,說明安裝完成。需要注意的是,安裝軟件時由于需要向系統目錄中寫入內容,一般需要使用sudo
或切換到root
賬戶下才能完成。另外,YUM安裝軟件時只能一個裝完了再裝另一個,如果在安裝過程中再嘗試用YUM安裝另一個軟件,YUM會報錯。如果遇到YUM報錯,可以自行百度解決方法。
卸載軟件
卸載軟件同樣非常簡單:
sudo yum remove lrzsz
Linux編輯器VIM使用
VIM的基本概念
VIM是VI的升級版本,它不僅兼容VI的所有指令,而且還有一些新的特性,例如語法加亮、可視化操作等。VIM具有多種模式,目前我們主要掌握三種:命令模式(Command Mode)、插入模式(Insert Mode)和末行模式(Last Line Mode)。
- 命令模式(Command Mode):控制屏幕光標的移動、字符、字或行的刪除、復制某區段等操作,以及進入插入模式或末行模式。
- 插入模式(Insert Mode):在此模式下可以進行文字輸入,按
ESC
鍵可回到命令模式。 - 末行模式(Last Line Mode):進行文件保存或退出操作,也可以進行文件替換、找字符串、列出行號等操作。在命令模式下按
:
即可進入末行模式。
VIM的基本操作
進入VIM
在系統提示符下輸入vim
及文件名稱后進入VIM全屏幕編輯界面。例如:
vim test.c
進入VIM后,默認處于命令模式,需要切換到插入模式才能輸入文字。
模式切換
- 命令模式切換至插入模式:按
a
、i
或o
。a
:從光標當前位置的下一個位置開始輸入文字。i
:從光標當前位置開始輸入文字。o
:插入新的一行,從行首開始輸入文字。
- 插入模式切換至命令模式:按
ESC
鍵。 - 命令模式切換至末行模式:按
shift + :
。
退出VIM及保存文件
在命令模式下,按一下:
進入末行模式。例如:
:w # 保存當前文件
:wq # 保存并退出VIM
:q! # 不保存強制退出VIM
VIM正常模式命令集
插入模式
i
:切換進入插入模式,從光標當前位置開始輸入文件。a
:切換進入插入模式,從光標當前位置的下一個位置開始輸入文字。o
:切換進入插入模式,插入新的一行,從行首開始輸入文字。
移動光標
- 使用
h
、j
、k
、l
分別控制光標左、下、上、右移一格。 G
:移動到文章的最后。$
:移動到光標所在行的行尾。^
:移動到光標所在行的行首。w
:光標跳到下一個字的開頭。e
:光標跳到下一個字的字尾。b
:光標回到上一個字的開頭。#l
:光標移到該行的第#
個位置,例如5l
、56l
。gg
:進入文本開頭。shift + g
:進入文本末尾。ctrl + b
:屏幕往后移動一頁。ctrl + f
:屏幕往前移動一頁。ctrl + u
:屏幕往后移動半頁。ctrl + d
:屏幕往前移動半頁。
刪除文字
x
:每按一次,刪除光標所在位置的一個字符。#x
:例如,6x
表示刪除光標所在位置的后面(包含自己在內)6個字符。X
:每按一次,刪除光標所在位置的前一個字符。#X
:例如,20X
表示刪除光標所在位置的前20個字符。dd
:刪除光標所在行。#dd
:從光標所在行開始刪除#
行。
復制和粘貼
yw
:將光標所在處到字尾的字符復制到緩沖區中。#yw
:復制#
個字到緩沖區。yy
:復制光標所在行到緩沖區。#yy
:例如,6yy
表示拷貝從光標所在的該行往下數6行文字。p
:將緩沖區內的字符貼到光標所在位置。注意:所有與“y”有關的復制命令都必須與“p”配合才能完成復制與粘貼功能。
替換
r
:替換光標所在處的字符。R
:替換光標所到之處的字符,直到按下ESC
鍵為止。
撤銷操作
u
:撤銷上一次操作。按多次u
可以執行多次撤銷。ctrl + r
:恢復撤銷的操作。
更改
cw
:更改光標所在處的字到字尾處。c#w
:例如,c3w
表示更改3個字。
跳至指定行
ctrl + g
:列出光標所在行的行號。#G
:例如,15G
表示移動光標至文章的第15行行首。
VIM末行模式命令集
列出行號
set nu
:在文件中的每一行前面列出行號。
跳到文件中的某一行
#
:輸入數字#
,再按回車鍵就會跳
到該行。例如,輸入數字15
,再回車,就會跳到文章的第15行。
查找字符
/關鍵字
:按/
鍵,再輸入想尋找的字符,如果第一次找的關鍵字不是想要的,可以一直按n
會往后尋找。?關鍵字
:按?
鍵,再輸入想尋找的字符,如果第一次找的關鍵字不是想要的,可以一直按n
會往前尋找。
保存文件
w
:保存文件。
離開VIM
q
:退出,如果無法離開VIM,可以在q
后跟一個!
強制退出。wq
:保存并退出。
VIM操作總結
VIM有三種主要模式:正常模式、插入模式和末行模式。我們可以使用各種命令進行文件的編輯、查看、查詢、插入、刪除、替換、撤銷、復制等操作。此外,VIM還有許多其他模式,用戶可以通過研究VIM的幫助文檔來了解更多。
簡單VIM配置
配置文件的位置
在目錄/etc/
下面,有個名為vimrc
的文件,這是系統中公共的VIM配置文件,對所有用戶都有效。而在每個用戶的主目錄下,可以自己建立私有的配置文件,命名為.vimrc
。例如,/root
目錄下,通常已經存在一個.vimrc
文件,如果不存在,則可以創建一個。
切換用戶到自己的工作目錄:
su
cd ~
打開自己目錄下的.vimrc
文件:
vim .vimrc
常用配置選項
- 設置語法高亮:
syntax on
- 顯示行號:
set nu
- 設置縮進的空格數為4:
set shiftwidth=4
使用插件
要配置更強大的VIM,原生的配置可能功能不全,可以選擇安裝插件來完善配置。例如,安裝TagList插件和WinManager插件。
安裝TagList插件
- 下載
taglist_xx.zip
,解壓完成后,將解壓出來的doc
內容放到~/.vim/doc
,將解壓出來的plugin
內容拷貝到~/.vim/plugin
。 - 在
~/.vimrc
中添加:let Tlist_Show_One_File=1 let Tlist_Exit_OnlyWindow=1 let Tlist_Use_Right_Window=1
安裝文件瀏覽器和窗口管理器插件WinManager
- 下載
winmanager.zip
,解壓完成后,將解壓出來的doc
內容放到~/.vim/doc
,將解壓出來的plugin
內容拷貝到~/.vim/plugin
。 - 在
~/.vimrc
中添加:let g:winManagerWindowLayout='FileExplorer|TagList' nmap wm :WMToggle<cr>
- 重啟VIM,打開文件,在正常模式下輸入
wm
。
Linux編譯器GCC/G++使用
背景知識
GCC是GNU Compiler Collection的縮寫,是Linux系統中的標準編譯器。它支持多種編程語言,如C、C++、Objective-C、Fortran、Ada等。GCC編譯器的工作過程分為四個階段:預處理、編譯、匯編和連接。
- 預處理:進行宏替換、文件包含、條件編譯和去注釋等操作。
- 編譯:將預處理后的代碼翻譯成匯編語言。
- 匯編:將匯編代碼轉化為機器碼。
- 連接:將目標文件與庫文件鏈接,生成可執行文件或庫文件。
GCC如何完成
預處理
預處理主要包括宏定義、文件包含、條件編譯、去注釋等操作。預處理指令是以#
號開頭的代碼行。用戶可以使用-E
選項進行預處理,停止編譯過程。例如:
gcc -E hello.c -o hello.i
其中,-E
選項的作用是讓GCC在預處理結束后停止編譯過程,-o
選項指定輸出文件,.i
文件是已經過預處理的C源代碼。
編譯
編譯階段中,GCC首先檢查代碼的規范性、是否有語法錯誤等,在檢查無誤后,將代碼翻譯成匯編語言。用戶可以使用-S
選項只進行編譯而不進行匯編,生成匯編代碼。例如:
gcc -S hello.i -o hello.s
匯編
匯編階段是將匯編代碼轉化為機器碼。用戶可以使用-c
選項生成目標文件。例如:
gcc -c hello.s -o hello.o
連接
連接階段是將目標文件與庫文件鏈接,生成可執行文件或庫文件。例如:
gcc hello.o -o hello
函數庫
在C程序中,常用的庫函數如printf
的實現并不在源代碼中定義,而是在庫文件中。系統將這些函數實現放在名為libc.so.6
的庫文件中,GCC會在鏈接階段將其鏈接到程序中。函數庫分為靜態庫和動態庫兩種。
- 靜態庫:在編譯鏈接時將庫文件的代碼全部加入到可執行文件中,生成的文件較大,但運行時不需要庫文件。靜態庫的后綴名一般為
.a
。 - 動態庫:在編譯鏈接時不將庫文件的代碼加入到可執行文件中,而是在程序執行時由運行時鏈接器加載庫文件,節省系統開銷。動態庫的后綴名一般為
.so
。
GCC選項
GCC提供了許多選項,用戶可以根據需要進行配置。例如:
-E
:只激活預處理,不生成文件。-S
:只進行編譯,不進行匯編和鏈接。-c
:只進行編譯,不進行連接。-o
:指定輸出文件。-static
:生成靜態鏈接的文件。-g
:生成調試信息。-shared
:盡量使用動態庫,生成的文件較小,但需要系統有動態庫。-O0
至-O3
:編譯器優化選項的4個級別,-O0
表示沒有優化,-O1
為默認值,-O3
優化級別最高。-w
:不生成任何警告信息。-Wall
:生成所有警告信息。
Linux調試器GDB使用
背景
程序發布方式有兩種:debug模式和release模式。Linux下GCC/G++生成的二進制程序默認是release模式,要使用GDB調試,必須在源代碼生成二進制程序時加上-g
選項。
開始使用
GDB是GNU Debugger的縮寫,用于調試程序。用戶可以通過以下命令啟動GDB:
gdb binFile
調試過程中可以使用以下命令:
list
或l 行號
:顯示源代碼,每次列10行。run
或r
:運行程序。next
或n
:單條執行。step
或s
:進入函數調用。break
或b 行號
:在某一行設置斷點。info break
:查看斷點信息。finish
:執行到當前函數返回。print
或p 表達式
:打印表達式的值。set var
:修改變量的值。continue
或c
:從當前位置開始連續執行程序。delete breakpoints
:刪除所有斷點。disable breakpoints
:禁用斷點。enable breakpoints
:啟用斷點。display 變量名
:跟蹤查看變量值。undisplay
:取消對變量的跟蹤。until 行號
:跳至指定行。backtrace
或bt
:查看函數調用及參數。info locals
:查看當前棧幀局部變量的值。quit
:退出GDB。
理解
通過實際操作理解GDB的使用方法,可以幫助用戶在調試過程中快速定位和解決問題。
Linux項目自動化構建工具Make/Makefile
背景
Makefile是一種自動化編譯工具,定義了一系列的規則來指定哪些文件需要先編譯,哪些文件需要后編譯,哪些文件需要重新編譯等。Makefile極大地提高了軟件開發的效率,特別是在大型項目中。Make是一個命令工具,用于解釋Makefile中的指令。
理解
Makefile定義了一系列依賴關系和命令。例如:
hello: hello.ogcc hello.o -o hellohello.o: hello.sgcc -c hello.s -o hello.ohello.s: hello.igcc -S hello.i -o hello.shello.i: hello.cgcc -E hello.c -o hello.i
Makefile通過依賴關系定義了編譯順序,Make會根據依賴關系自動進行編譯。
項目清理
在Makefile中定義清理目標,可以方便地清除所有生成的文件。例如:
.PHONY: clean
clean:rm -f hello.i hello.s hello.o hello
偽目標clean
用于清除所有目標文件,以便重編譯。
Linux第一個小程序:進度條
\r和\n
回車\r
和換行\n
的概念在進度條顯示中非常重要。回車\r
將光標移到行首,換行\n
將光標移到下一行。
行緩沖區概念
行緩沖區會導致輸出無法立即顯示,可以通過fflush(stdout)
刷新緩沖區。例如:
#include <stdio.h>
#include <unistd.h>int main() {printf("hello Makefile!");fflush(stdout);sleep(3);return 0;
}
進度條代碼
下面是一個簡單的進度條實現代碼:
#include <stdio.h>
#include <unistd.h>
#include <string.h>int main() {int i = 0;char bar[102];memset(bar, 0, sizeof(bar));const char *lable = "|/-\\";while (i <= 100) {printf("[%-100s][%d%%][%c]\r", bar, i, lable[i % 4]);fflush(stdout);bar[i++] = '#';usleep(10000);}printf("\n");return 0;
}
使用Git命令行
安裝Git
可以通過以下命令安裝Git:
yum install git
在GitHub創建項目
注冊賬號
在GitHub官網注冊賬號,并進行郵箱校驗。
創建項目
- 登錄成功后,進入個人主頁,點擊左下方的
New repository
按鈕新建項目。 - 在新頁面中輸入項目名稱,點擊
Create repository
按鈕確認創建。 - 在創建好的項目頁面中復制項目的鏈接,備用下載。
下載項目到本地
創建好一個放置代碼的目錄,然后使用以下命令下載項目:
git clone [url]
Git操作三板斧
git add
將需要用Git管理的文件告知Git:
git add [文件名]
git commit
提交改動到本地:
git commit -m "提交日志"
git push
同步到遠端服務器上:
git push
需要輸入用戶名和密碼,提交成功后,刷新GitHub頁面就能看到代碼改動了。
配置免密碼提交
可以參考CSDN博客進行配置。
總結
從軟件包管理器、編輯器、編譯器、調試器、自動化構建工具到版本控制工具,每個工具都有其獨特的功能和用法。掌握這些工具,可以幫助我們更高效地進行開發和管理項目。
嗯,就是這樣啦,文章到這里就結束啦,真心感謝你花時間來讀。
覺得有點收獲的話,不妨給我點個贊吧!
如果發現文章有啥漏洞或錯誤的地方,歡迎私信我或者在評論里提醒一聲~