這篇具有很好參考價(jià)值的文章主要介紹了[Linux][環(huán)境配置][yum][vim][gcc/g++][gdb][makefile][git]詳細(xì)講解。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。
1.Linux軟件包管理 – yum
1.查看軟件包
- 通過yum list命令可以羅列出當(dāng)前一共有哪些軟件包,由于包的數(shù)目可能非常之多, 使用grep命令只篩選出我們關(guān)注的包
yum list | grep sl
-
注意事項(xiàng):
- 軟件包名稱: 主版本號(hào).次版本號(hào).源程序發(fā)行號(hào)-軟件包的發(fā)行號(hào).主機(jī)平臺(tái).cpu架構(gòu)
- “x86_64” 后綴表示64位系統(tǒng)的安裝包, “i686” 后綴表示32位系統(tǒng)安裝包. 選擇包時(shí)要和系統(tǒng)匹配
- “el7” 表示操作系統(tǒng)發(fā)行版的版本. “el7” 表示的是 centos7/redhat7. “el6” 表示 centos6/redhat6
- 最后一列, base 表示的是 “軟件源” 的名稱, 類似于 “小米應(yīng)用商店”, “華為應(yīng)用商店” 這樣的概念
2.如何安裝軟件
sudo yum install sl
- yum會(huì)自動(dòng)找到都有哪些軟件包需要下載
-
注意事項(xiàng):
- 安裝軟件時(shí)由于需要向系統(tǒng)目錄中寫入內(nèi)容,一般需要sudo或者切到root賬戶下才能完成
- yum安裝軟件只能一個(gè)裝完了再裝另一個(gè)
- yum正在安裝一個(gè)軟件的過程中,如果再嘗試用yum安裝另外一個(gè)軟件,yum會(huì)報(bào)錯(cuò)
3.如何卸載軟件
2.Linux編輯器 – vim
1.vim的基本概念
- 主要掌握三種模式:是命令模式、插入模式、和底行模式
-
正常/普通/命令模式(Normal mode)
- 控制屏幕光標(biāo)的移動(dòng),字符、字或行的刪除,移動(dòng)復(fù)制某區(qū)段及進(jìn)入Insert mode下,或者到last line mode
-
插入模式(Insert mode)
- 只有在Insert mode下,才可以做文字輸入,按「ESC」鍵可回到命令行模式。該模式是我們后面用的最頻繁的編輯模式
-
底行模式(last line mode)
- 文件保存或退出,也可以進(jìn)行文件替換,找字符串,列出行號(hào)等操作
- 在命令模式下,shift+: 即可進(jìn)入該模式
- 要查看所有模式:底行模式直接輸入:help vim-modes
2.vim的基本操作
-
[正常模式]切換至[插入模式]
- 按「a」進(jìn)入插入模式后,是從目前光標(biāo)所在位置的下一個(gè)位置開始輸入文字
- 按「i」進(jìn)入插入模式后,是從光標(biāo)當(dāng)前位置開始輸入文字
- 按「o」進(jìn)入插入模式后,是插入新的一行,從行首開始輸入文字
-
[插入模式]切換至[正常模式]
-
[正常模式]切換至[底行模式]
- 「shift + ;」, 其實(shí)就是輸入「:」
-
退出vim及保存文件
- 在[正常模式]下,按一下「:」冒號(hào)鍵進(jìn)入「底行模式」
-
: w(保存當(dāng)前文件)
-
:wq(存盤并退出vim)
-
:q!(不存盤,強(qiáng)制退出vim)
3.vim正常模式命令集
「h」「j」「k」「i」 |
左、下、上、右 |
|
|
「G」 |
進(jìn)入文本末端 |
n+「G」 |
定位到文件的任意行 |
「gg」 |
進(jìn)入文本開始 |
|
|
「^」 |
移動(dòng)光標(biāo)到當(dāng)前行"行首" |
|
|
「$」 |
移動(dòng)光標(biāo)到當(dāng)前行"行尾" |
|
|
「w」/「b」 |
以單詞為單位進(jìn)行光標(biāo)前后移動(dòng) |
|
|
「#l」 |
光標(biāo)移動(dòng)到當(dāng)前行的第#個(gè)位置 |
|
|
「Ctrl」+「f」/「b」 |
屏幕往"下"/"上"移動(dòng)一頁 |
|
|
「Ctrl」+「d」/「u」 |
屏幕往"下"/"上"移動(dòng)半頁 |
|
|
「x」 |
每按一次,刪除光標(biāo)所在位置的一個(gè)字符 |
n +「x」 |
刪除光標(biāo)及后面的n個(gè)字符 |
「X」 |
每按一次,刪除光標(biāo)所在位置前面的一個(gè)字符 |
n +「X」 |
刪除光標(biāo)前面的n個(gè)字符 |
「dd」 |
剪切(刪除)光標(biāo)所在行 |
n +「dd」 |
從光標(biāo)所在行開始剪切(刪除)n行 |
「yw」 |
將光標(biāo)所在之處到字尾的字符復(fù)制到緩沖區(qū)中 |
n+****「yw」 |
復(fù)制n個(gè)字到緩沖區(qū) |
「yy」 |
復(fù)制光標(biāo)所在行到緩沖區(qū) |
n+****「yy」 |
復(fù)制從當(dāng)前行開始,往下n行 |
「p」 |
將緩沖區(qū)內(nèi)的字符粘貼到光標(biāo)所在位置 |
|
|
「r」 |
替換光標(biāo)所在處的字符 |
n+「r」 |
替換光標(biāo)處及后面的n個(gè)字符 |
「R」 |
進(jìn)入替換模式 |
|
|
「~」 |
大小寫切換 |
|
|
「cw」 |
更改光標(biāo)所在處的字到字尾處 |
「c#w」 |
更改#個(gè)字 |
4.vim底行模式命令集
「set nu」 |
列出行號(hào) |
|
「#」 |
跳到文件中的某一行 |
**#**表示一個(gè)數(shù)字
|
「!cmd」 |
不退出vim執(zhí)行對(duì)應(yīng)的命令 |
|
「vs filename」 |
分屏模式 |
|
「/關(guān)鍵字」 |
如果第一次找的關(guān)鍵字不是想要的,可以一直按 「n」會(huì)往后尋找到要的關(guān)鍵字為止 |
「?關(guān)鍵字」 |
如果第一次找的關(guān)鍵字不是想要的,可以一直 按「n」會(huì)往前尋找到要的關(guān)鍵字為止 |
5.進(jìn)階補(bǔ)充
-
批量注釋
-
批量替換
- 底行模式下
- %s/要被替換的內(nèi)容/替換的內(nèi)容/g
- g表示全局替換
- VS下,多文件切換:CTRL +H/J/K/L
3.Linux編譯器 – gcc/g++
- **語法:**gcc [選項(xiàng)] 要編譯的文件 [選項(xiàng)] [目標(biāo)文件]
1.預(yù)處理
- 預(yù)處理功能主要包括宏定義,文件包含,條件編譯,去注釋等
- 預(yù)處理指令是以#號(hào)開頭的代碼行
- 選項(xiàng)**“-E”,該選項(xiàng)的作用是讓gcc在預(yù)處理結(jié)束后停止編譯過程**
- 選項(xiàng)"-o"是指目標(biāo)文件,“.i”文件為已經(jīng)過預(yù)處理的C原始程序
gcc –E hello.c –o hello.i
2.編譯–(C -> 匯編)
- 在這個(gè)階段中,gcc首先要檢查代碼的規(guī)范性、是否有語法錯(cuò)誤等,以確定代碼的實(shí)際要做的工作,在檢查無誤后,gcc把代碼翻譯成匯編語言
- 選項(xiàng)"-S",該選項(xiàng)的作用是讓gcc在編譯結(jié)束后就停止,不進(jìn)行匯編
gcc –S hello.i –o hello.s
3.匯編–(匯編 -> 可重定向二進(jìn)制目標(biāo)文件)
- 匯編階段是把編譯階段生成的".s"文件轉(zhuǎn)成目標(biāo)文件
- 在此可使用選項(xiàng)"-c“就可將匯編代碼轉(zhuǎn)化為”.o"的二進(jìn)制目標(biāo)代碼
gcc –c hello.s –o hello.o
4.鏈接–(鏈接多個(gè).o/.obj -> 合并形成一個(gè)可執(zhí)行)
- 在成功編譯之后,就進(jìn)入了鏈接階段
- 一般鏈接過程,是有兩種方式的
- 動(dòng)態(tài)鏈接:需要?jiǎng)討B(tài)庫 – 將庫中要的方法的地址,填入可執(zhí)行程序中,建立關(guān)聯(lián) – 節(jié)省資源
- 靜態(tài)鏈接:需要靜態(tài)庫 – 將庫中方法的實(shí)現(xiàn),真的拷貝到我們的可執(zhí)行程序中 – 占用資源
gcc hello.o –o hello
5.函數(shù)庫
- 我們的C程序中,并沒有定義"printf"的函數(shù)實(shí)現(xiàn),且在預(yù)編譯中包含的"stdio.h"中也只有該函數(shù)的聲明,而沒有定義函數(shù)的實(shí)現(xiàn),那么,是在哪里實(shí)"printf"函數(shù)的呢?
- 系統(tǒng)把這些函數(shù)實(shí)現(xiàn)都做到名為libc.so.6的庫文件中去了,在沒有特別指定時(shí),gcc會(huì)到系統(tǒng)默認(rèn)的搜索路徑"/usr/lib"下進(jìn)行查找,也就是鏈接到libc.so.6庫函數(shù)中去,這樣就能實(shí)現(xiàn)函數(shù)"printf"了,而這也就是鏈接的作用
6.函數(shù)庫 --> 靜態(tài)庫&動(dòng)態(tài)庫
-
靜態(tài)庫:
- 指編譯鏈接時(shí),把庫文件的代碼全部加入到可執(zhí)行文件中,因此生成的文件比較大,但在運(yùn)行時(shí)也就不再需要庫文件了
- 其后綴名一般為".a"
-
動(dòng)態(tài)庫:
- 與之相反,在編譯鏈接時(shí)并沒有把庫文件的代碼加入到可執(zhí)行文件中,而是在程序執(zhí)行時(shí)由運(yùn)行時(shí)鏈接文件加載庫,這樣可以節(jié)省系統(tǒng)的開銷
- 動(dòng)態(tài)庫一般后綴名為".so"
- gcc在編譯時(shí),默認(rèn)使用動(dòng)態(tài)庫,完成了鏈接之后,gcc就可以生成可執(zhí)行文件
- gcc默認(rèn)生成的二進(jìn)制程序,是動(dòng)態(tài)鏈接的,這點(diǎn)可以通過file命令驗(yàn)證
7.gcc選項(xiàng)
-E |
只激活預(yù)處理,這個(gè)不生成文件,你需要把它重定向到一個(gè)輸出文件里面 |
-S |
編譯到匯編語言不進(jìn)行匯編和鏈接 |
-c |
編譯到目標(biāo)代碼 |
-o |
文件 輸出到 文件 |
-static |
此選項(xiàng)對(duì)生成的文件采用靜態(tài)鏈接 |
-g |
生成調(diào)試信息 – GNU 調(diào)試器可利用該信息 |
-shared |
此選項(xiàng)將盡量使用動(dòng)態(tài)庫,所以生成文件比較小,但是需要系統(tǒng)由動(dòng)態(tài)庫 |
-O0 |
-O0****表示沒有優(yōu)化 |
-O1 |
-O1****為缺省值 |
-O2 |
|
-O3 |
編譯器的優(yōu)化選項(xiàng)的4個(gè)級(jí)別,-O3優(yōu)化級(jí)別最高 |
-w |
不生成任何警告信息 |
-Wall |
生成所有警告信息 |
8.gcc選項(xiàng)記憶
9.進(jìn)階補(bǔ)充
-
-D --> 用于定義預(yù)處理宏,它的作用是再編譯時(shí)為源代碼中定義一個(gè)符號(hào)常量
- 語法:-Dname=value
-
name代表宏的名稱,value是宏的值
4.Linux調(diào)試器 – gdb
0. 前期提要
- 程序的發(fā)布方式有兩種,debug模式和release模式
- Linux gcc/g++出來的二進(jìn)制程序,默認(rèn)是release模式
- 要使用gdb調(diào)試,必須在源代碼生成二進(jìn)制程序的時(shí)候, 加上 -g 選項(xiàng)
1.使用
- gdb會(huì)記錄最近一條命令,如果命令無變化,可以直接回車,則直接調(diào)用上一條命令
quit |
退出gdb |
|
l+行號(hào) |
顯示源碼,接著上次的位置往下列,每次列10行 |
list |
l+函數(shù)名 |
列出某個(gè)函數(shù)的源碼 |
|
r |
開始調(diào)試,如果沒有設(shè)置斷點(diǎn),就直接運(yùn)行結(jié)束 |
run |
b+行號(hào) |
給特定的行號(hào)打斷點(diǎn) |
break |
b+函數(shù)名 |
給特定的函數(shù)開頭打斷點(diǎn) |
|
info b |
查看斷點(diǎn)(斷點(diǎn)的編號(hào)) |
info break |
d 斷點(diǎn)編號(hào)
|
刪除斷點(diǎn) |
delete |
d breakpoints |
刪除所有斷點(diǎn) |
|
n |
逐過程 --> F10 |
next |
s |
逐語句 --> F11 |
step |
c |
運(yùn)行至下一個(gè)斷點(diǎn)處停下來 |
continue |
finish |
將當(dāng)前函數(shù)跑完,就停下來 |
|
p 變量名
|
打印變量內(nèi)容 |
print |
set var |
修改變量的值 |
|
bt |
查看當(dāng)前的調(diào)用堆棧 |
breaktrace |
display |
設(shè)置長顯示,類似于VS的監(jiān)視窗口 |
|
undisplay |
取消長顯示 |
|
until 行號(hào)
|
跳轉(zhuǎn)到指定行 |
|
disable/enable 斷點(diǎn)的編號(hào)
|
使能(打開和關(guān)閉)斷點(diǎn) |
|
5.Linux項(xiàng)目自動(dòng)化構(gòu)建工具 – make/Makefile
0.前情提要
- 會(huì)不會(huì)寫makefile,從一個(gè)側(cè)面說明了一個(gè)人是否具備完成大型工程的能力
- 一個(gè)工程中的源文件不計(jì)數(shù),其按類型、功能、模塊分別放在若干個(gè)目錄中,makefile定義了一系列的規(guī)則來指定,哪些文件需要先編譯,哪些文件需要后編譯,哪些文件需要重新編譯,甚至于進(jìn)行更復(fù)雜的功能操作
- makefile帶來的好處就是 – “自動(dòng)化編譯”,一旦寫好,只需要一個(gè)make命令,整個(gè)工程完全自動(dòng)編譯,極大的提高了軟件開發(fā)的效率
- make是一個(gè)命令工具,是一個(gè)解釋makefile中指令的命令工具
-
make****是一條命令,makefile是一個(gè)文件,兩個(gè)搭配使用,完成項(xiàng)目自動(dòng)化構(gòu)建
![[Linux][環(huán)境配置][yum][vim][gcc/g++][gdb][makefile][git]詳細(xì)講解,[Linux],linux,運(yùn)維,Linux環(huán)境配置,gcc/g++,vim,yum,gdb](https://imgs.yssmx.com/Uploads/2024/04/850037-1.png)
1.依賴關(guān)系
- 上面的mytest,它依賴hello.cpp
- 下面的mytest,它依賴hello.o,test.o
- test.o,它依賴test.cpp
- hello.o,它依賴hello.cpp
2.依賴方法
- 依賴關(guān)系與之對(duì)應(yīng)的依賴方法
g++ hello.cpp -o mytest
g++ hello.o test.o -o mytest
g++ -c test.cpp -o test.o
g++ -c hello.cpp -o hello.o
3.原理
- make會(huì)在當(dāng)前目錄下找名字叫**"Makefile"或"makefile"的文件**
- 如果找到,它會(huì)找文件中的第一個(gè)目標(biāo)文件(target),在上面的例子中,他會(huì)找到"mytest"這個(gè)文件, 并把這個(gè)文件作為最終的目標(biāo)文件
- 如果mytest文件不存在,或是mytest所依賴的后面的**.o**文件的文件修改時(shí)間要比mytest這個(gè)文件新(可以用touch測(cè)試),那么,他就會(huì)執(zhí)行后面所定義的命令來生成mytest這個(gè)文件
- 如果mytest所依賴的**.o文件不存在,那么make會(huì)在當(dāng)前文件中找目標(biāo)為.o文件的依賴性,如果找到則再根據(jù)那一個(gè)規(guī)則生成.o**文件(這有點(diǎn)像一個(gè)堆棧的過程)
- 這就是整個(gè)make的依賴性,make會(huì)一層又一層地去找文件的依賴關(guān)系,直到最終編譯出第一個(gè)目標(biāo)文件
- 在找尋的過程中,如果出現(xiàn)錯(cuò)誤
- 比如最后被依賴的文件找不到,那么make就會(huì)直接退出,并報(bào)錯(cuò)
- 而對(duì)于所定義的命令的錯(cuò)誤,或是編譯不成功,make根本不理
- make只管文件的依賴性
- 即:如果在我找了依賴關(guān)系之后,冒號(hào)后面的文件還是不在,那么對(duì)不起, 我就不工作啦
4.項(xiàng)目清理
- 工程是需要被清理的
- 像clean這種,沒有被第一個(gè)目標(biāo)文件直接或間接關(guān)聯(lián),那么它后面所定義的命令將不會(huì)被自動(dòng)執(zhí)行, 不過,可以顯式讓make執(zhí)行
- 即命令 – “make clean”,以此來清除所有的目標(biāo)文件,以便重編譯
- 但是一般我們這種clean的目標(biāo)文件,我們將它設(shè)置為偽目標(biāo),用**.PHONY**修飾
- 偽目標(biāo)的特性:總是被執(zhí)行的
5…PHONY理解
-
.PHONY是一個(gè)特殊的目標(biāo),用于指示"make"哪些目標(biāo)不代表實(shí)際的文件或目錄,而是偽目標(biāo)或動(dòng)作
- 通常,.PHONY用于列出那些不生成文件,只是執(zhí)行一些命令或操作的目標(biāo)
6.進(jìn)階補(bǔ)充
$@ |
依賴方法對(duì)應(yīng)的依賴關(guān)系的目標(biāo)文件 |
$^ |
冒號(hào)右側(cè)的所有文件 |
.PHONY:all
all: exec mycmd
6.git命令行
- git免密碼提交可以參考下面大佬的文章~
- 配置免密碼提交
文章來源地址http://www.zghlxwxcb.cn/news/detail-850037.html
文章來源:http://www.zghlxwxcb.cn/news/detail-850037.html
到了這里,關(guān)于[Linux][環(huán)境配置][yum][vim][gcc/g++][gdb][makefile][git]詳細(xì)講解的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!
本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!