粘貼不了新的東西(粘貼突然不能用了)
687
2025-04-01
@TOC
零、前言
本章主要將解學(xué)習(xí)軟件包的概念和yum工具以及vim編輯器的使用操作
一、Linux軟件包管理器yum
1、yum介紹
概念:
yum(Yellow dog Updater, Modified)是Linux下非常常用的一種包管理器
Linux上如何安裝軟件:
1.源代碼安裝(麻煩)
2.rpm包安裝(類(lèi)似windows上的安裝程序)
3.yum命令行(可以幫助搜索,下載,安裝,解決軟件依賴(lài)關(guān)系)
什么是軟件包:
安裝軟件通常的辦法是下載到程序的源代碼, 并進(jìn)行編譯, 得到可執(zhí)行程序,而軟件包是把一些軟件提前編譯好,從服務(wù)器上獲取后可以直接進(jìn)行安裝
注:軟件包和軟件包管理器, 就好比 “App” 和 “應(yīng)用商店” 這樣的關(guān)系
2、rzsz
注:首先在 root 權(quán)限下使用 yum install -y lrzsz 命令,進(jìn)行安裝 rzsz 這個(gè)工具
rz 命令:
windows 機(jī)器和遠(yuǎn)端的 Linux 機(jī)器通過(guò) XShell 傳輸文件,使用指令 rz 則可以進(jìn)行上傳本地文件了
示圖:
sz + 文件命令:
從linux終端將文件發(fā)送至本地 windows
示圖:
注: yum 的所有操作必須保證主機(jī)(虛擬機(jī))網(wǎng)絡(luò)暢通,可以通過(guò) ping 指令查看網(wǎng)絡(luò)狀況
ping www.baidu.com
2、yum工具的基本操作
1)查看軟件包
命令:
yum list
功能:
羅列出當(dāng)前一共有哪些軟件包
注:包的數(shù)目非常多, 可以使用 grep 命令篩選出需要的包
示例:
注意:
軟件包名稱(chē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 表示的是 “軟件源” 的名稱(chēng), 類(lèi)似于 “小米應(yīng)用商店”, “華為應(yīng)用商店” 這樣的概念
2)安裝軟件
命令:
sudo yum install 名稱(chēng)
常用選項(xiàng):
-y :表示在找到后確認(rèn)進(jìn)行安裝
注意:
一般需要 sudo 或者切到 root 賬戶(hù)下才能完成(需要向系統(tǒng)目錄中寫(xiě)入內(nèi)容)
無(wú)法多臺(tái)服務(wù)器同時(shí)使用 yum
3)卸載軟件
命令:
sudo yum remove 名稱(chēng)
注:也需要 root 權(quán)限
二、 Linux開(kāi)發(fā)工具vim
1、vim的介紹
概念:
vi/vim 的區(qū)別簡(jiǎn)單點(diǎn)來(lái)說(shuō),它們都是多模式編輯器,不同的是vim是vi的升級(jí)版本,它不僅兼容vi的所有指令,而且還有一些新的特性在里面(類(lèi)似C和C++的關(guān)系),Linux自帶 vim ,使用較多
基本概念:
vim的常用三種模式,分別是命令模式(command mode)、插入模式(Insert mode)和底行模式(last line mode)
正常/命令模式:
可以控制屏幕光標(biāo)的移動(dòng),對(duì)文本進(jìn)行字符、字或行的刪除,移動(dòng)復(fù)制某區(qū)段等操作
插入模式:
只有在Insert mode下,才可以進(jìn)行文字輸入
底行模式:
文件保存或退出,也可以進(jìn)行文件替換,使用命令等操作
2、vim基本操作
vim 編輯文件命令:vim 文本名
注:進(jìn)入vim之后,是處于[正常模式]
[正常模式]切換至[插入模式]
按「i」進(jìn)入插入模式后,是從光標(biāo)當(dāng)前位置開(kāi)始輸入文件 按「a」進(jìn)入插入模式后,是從目前光標(biāo)所在位置的下一個(gè)位置開(kāi)始輸入文字 按「o」進(jìn)入插入模式后,是插入新的一行,從行首開(kāi)始輸入文字
[正常模式]切換至[底行模式]
「shift + ;」 其實(shí)就是輸入「:」
注:在其他模式下都可以通過(guò)按 Esc 退回正常模式
退出vim及保存文件:
在[正常模式]下按一下「:」冒號(hào)鍵進(jìn)入底行模式 : w (保存當(dāng)前文件) : wq (輸入「wq」,存盤(pán)并退出vim) : q! (輸入q!,不存盤(pán)強(qiáng)制退出vim)
3、vim正常模式命令集
移動(dòng)光標(biāo):
上下左右:正規(guī)的vim是用小寫(xiě)英文字母「h」、「j」、「k」、「l」分別控制光標(biāo)左、下、上、右移一格,也可以直接用鍵盤(pán)上的光標(biāo)來(lái)上下左右移動(dòng) 按「w」:光標(biāo)跳到下個(gè)字的開(kāi)頭 按「e」:光標(biāo)跳到下個(gè)字的字尾 按「b」:光標(biāo)回到上個(gè)字的開(kāi)頭 按「$」:移動(dòng)到光標(biāo)所在行的“行尾” 按「^」:移動(dòng)到光標(biāo)所在行的“行首” 按「n+l」:光標(biāo)移到該行的第n個(gè)位置 按[gg]:光標(biāo)移到文本開(kāi)始 按[shift+g]:光標(biāo)移到文本末端 按[n+shift+g]:光標(biāo)移到文本第n行
刪除文字:
「x」:每按一次,刪除光標(biāo)所在位置的一個(gè)字符 「n+x」:刪除光標(biāo)所在位置的“后面(包含自己在內(nèi))”n個(gè)字符 「X」:大寫(xiě)的X,每按一次,刪除光標(biāo)所在位置的“前面”一個(gè)字符 「n+X」:表示刪除光標(biāo)所在位置的“前面”n個(gè)字符 「dd」:剪切光標(biāo)所在行 「n+dd」:從光標(biāo)所在行開(kāi)始剪切n行 //注意:dd與“p”配能完成剪切粘貼功能
復(fù)制:
「yw」:將光標(biāo)所在之處到字尾的字符復(fù)制到緩沖區(qū)中 「n+yw」:復(fù)制n個(gè)字到緩沖區(qū) 「yy」:復(fù)制光標(biāo)所在行到緩沖區(qū) 「n+yy」:表示拷貝從光標(biāo)所在的該行“往下數(shù)”n行文字 「p」:將緩沖區(qū)內(nèi)的字符貼到光標(biāo)所在位置 //注意:y相關(guān)的操作與“p”配能完成復(fù)制粘貼
替換:
「r」:輸入需要改成的字符,替換光標(biāo)所在處的字符 「R」:切換成替換模式,輸入可以替換光標(biāo)所到之處的字符,按下「ESC」鍵退回正常模式 「u」:如果您誤執(zhí)行一個(gè)命令,可以馬上按下「u」,回到上一個(gè)操作,按多次“u”可以執(zhí)行多次回復(fù) 「ctrl + r」: 撤銷(xiāo)的恢復(fù)
4、vim底行模式命令集
注:先按「ESC」鍵確定您已經(jīng)處于正常模式,再按「:」冒號(hào)即可進(jìn)入底行模式
列出行號(hào):
「set nu」: 輸入「set nu」后,會(huì)在文件中的每一行前面列出行號(hào)跳到文件中的某一行 「set nonu」: 輸入「set nonu」后會(huì)取消文件中 的行號(hào) 「#」:「#」號(hào)表示一個(gè)數(shù)字,在冒號(hào)后輸入一個(gè)數(shù)字,再按回車(chē)鍵就會(huì)跳到該行了
查找字符:
「/關(guān)鍵字」:先按「/」鍵,再輸入您想尋找的字符,如果第一次找的關(guān)鍵字不是您想要的,可以一直按「n」會(huì)往后尋找到您要的關(guān)鍵字為止(向下查找) 「?關(guān)鍵字」:先按「?」鍵,再輸入您想尋找的字符,如果第一次找的關(guān)鍵字不是您想要的,可以一直按「n」會(huì)往前尋找到您要的關(guān)鍵字為止(向上查找)
保存退出:
「w」: 在冒號(hào)輸入字母「w」就可以將文件保存起來(lái) 「q」:按「q」就是退出,如果無(wú)法離開(kāi)vim,可以在「q」后跟一個(gè)「!」強(qiáng)制離開(kāi)vim 「wq」:一般建議離開(kāi)時(shí),搭配「w」一起使用,這樣在退出的時(shí)候還可以保存文件
替換:
「%s/要被替換的字符或字符串/要替換成的字符或字符串/g」:將對(duì)應(yīng)字符或字符串替換成對(duì)應(yīng)字符或字符串(g表示全部)
更改:
「~」:從光標(biāo)所在行將單詞大寫(xiě)轉(zhuǎn)小寫(xiě),小寫(xiě)轉(zhuǎn)大寫(xiě)
打開(kāi)多個(gè)窗口:
vs + 文件名:(如果沒(méi)有那么就會(huì)創(chuàng)建一個(gè),如果有就會(huì)打開(kāi)對(duì)應(yīng)的文件)
多文件切換:
ctrl + w(雙擊):切換文件(注:在多窗口的情況下)
特別命令:
vim test.c +10 //打開(kāi)test.c文件將光標(biāo)定位到第10行 !vim //打開(kāi)歷史上最近一次執(zhí)行vim的操作
5、vim操作總結(jié)
簡(jiǎn)圖:
全圖:
6、簡(jiǎn)單vim配置
配置文件的位置:
在目錄 /etc/ 下面,有個(gè)名為vimrc的文件,這是系統(tǒng)中公共的vim配置文件,對(duì)所有用戶(hù)都有效,而在每個(gè)用戶(hù)的主目錄下,都可以自己建立私有的配置文件,命名為:“.vimrc”。例如,/root目錄下,通常已經(jīng)存在一個(gè).vimrc文件,如果不存在,則創(chuàng)建,切換用戶(hù)成為自己執(zhí)行 su ,進(jìn)入自己的主工作目錄,執(zhí)行 cd ~打開(kāi)自己目錄下的.vimrc文件,執(zhí)行 vim .vimrc 進(jìn)行配置
示圖:
常用配置選項(xiàng):
設(shè)置語(yǔ)法高亮: syntax on 顯示行號(hào): set nu 設(shè)置縮進(jìn)的空格數(shù)為4: set shiftwidth=4
注意:
建議使用網(wǎng)絡(luò)上已經(jīng)配置好的vim,學(xué)習(xí)教程進(jìn)行下載就行了
一般vimrc在每一個(gè)用戶(hù)下都有一個(gè),彼此之間互不影響
三、Linux編譯器-gcc/g++
1、程序生成過(guò)程
注:以gcc為示例展示過(guò)程
語(yǔ)法:
gcc [選項(xiàng)] 要編譯的文件 [選項(xiàng)] [目標(biāo)文件]
1)預(yù)處理
功能主要包括:
將源文件進(jìn)行宏定義替換,文件包含展開(kāi),條件編譯處理,去注釋等
示例:
gcc –E hello.c –o hello.i
示圖:
注:
選項(xiàng)“-E”的作用是讓 gcc 在預(yù)處理結(jié)束后停止編譯過(guò)程
選項(xiàng)“-o”是指目標(biāo)文件,“.i”文件為已經(jīng)過(guò)預(yù)處理的C原始程序(臨時(shí)文件)
2)編譯
功能主要包括:
首先 gcc 檢查代碼的規(guī)范性、是否有語(yǔ)法錯(cuò)誤;在檢查無(wú)誤后, gcc 把代碼翻譯成匯編語(yǔ)言
實(shí)例:
gcc –S hello.i –o hello.s
示圖:
注:
“-S”選項(xiàng)來(lái)進(jìn)行查看,該選項(xiàng)只進(jìn)行編,生成匯編代碼
3)匯編
功能主要包括:
匯編階段對(duì)全局變量生成符號(hào)表;把編譯階段生成的“.s”文件轉(zhuǎn)成目標(biāo)文件(由匯編指令轉(zhuǎn)成二進(jìn)制指令)
示例:
gcc –c hello.s –o hello.o
示圖:
注:
使用選項(xiàng)“-c”就可看到匯編代碼已轉(zhuǎn)化為“.o”的二進(jìn)制目標(biāo)代碼了
4)鏈接
功能主要包括:
合并段表,合并符號(hào)表以及符號(hào)表的重定位;每個(gè)目標(biāo)文件由鏈接器捆綁在一起,形成一個(gè)單一而完整的可執(zhí)行程序
示例:
gcc hello.o –o hello
示圖:
2、函數(shù)庫(kù)
概念:
在上面的C程序中并沒(méi)有定義“printf”的函數(shù)實(shí)現(xiàn),且在預(yù)編譯中包含的“stdio.h”中也只有該函數(shù)的聲明,而沒(méi)有定義函數(shù)的實(shí)現(xiàn),但是系統(tǒng)把這些函數(shù)實(shí)現(xiàn)都被放入到名為 libc.so.6 的庫(kù)文件中去了,在沒(méi)有特別指定時(shí) gcc 會(huì)到系統(tǒng)默認(rèn)的搜索路徑“/usr/lib”下進(jìn)行查找,也就是鏈接到 libc.so.6 庫(kù)函數(shù)中去,這樣就能間接實(shí)現(xiàn)函數(shù)“printf”了,而這也就是鏈接的作用
分類(lèi):
函數(shù)庫(kù)一般分為靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)兩種
靜態(tài)庫(kù):
指編譯鏈接時(shí),把庫(kù)文件的代碼全部加入到可執(zhí)行文件中,因此生成的文件比較大,但在運(yùn)行時(shí)也就不再需要庫(kù)文件了,其后綴名一般為“.a”
動(dòng)態(tài)庫(kù):
在編譯鏈接時(shí)并沒(méi)有把庫(kù)文件的代碼加入到可執(zhí)行文件中,而是在程序執(zhí)行時(shí)由運(yùn)行時(shí)鏈接文件加載庫(kù),這樣可以節(jié)省系統(tǒng)的開(kāi)銷(xiāo),一般后綴名為“.so”
注: gcc 在編譯時(shí)默認(rèn)使用動(dòng)態(tài)庫(kù),可以通過(guò) file 命令查看文件信息
示圖:
總結(jié):
以動(dòng)態(tài)庫(kù)鏈接方式生成的可執(zhí)行程序體積比較小,比較節(jié)省系統(tǒng)資源,缺點(diǎn)是一旦庫(kù)缺失,所以依賴(lài)的程序都不可運(yùn)行
而如果是以靜態(tài)庫(kù)鏈接方式生成的可執(zhí)行程序體積比較大,因?yàn)樗麜?huì)將庫(kù)里面的代碼拷貝至可執(zhí)行程序,缺點(diǎn)是程序的體積比較大,浪費(fèi)系統(tǒng)空間資源,但是如果庫(kù)缺失不影響程序運(yùn)行
gcc選項(xiàng)總結(jié):
-E 只激活預(yù)處理,這個(gè)不生成文件,你需要把它重定向到一個(gè)輸出文件里面 -S 編譯到匯編語(yǔ)言不進(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)庫(kù),所以生成文件比較小,但是需要系統(tǒng)由動(dòng)態(tài)庫(kù) -O0 -O1 -O2 -O3 編譯器的優(yōu)化選項(xiàng)的4個(gè)級(jí)別,-O0表示沒(méi)有優(yōu)化,-O1為缺省值,-O3優(yōu)化級(jí)別最高 -w 不生成任何警告信息 -Wall 生成所有警告信息(默認(rèn)生成)
四、Linux調(diào)試器-gdb
1、背景及概念
相關(guān)概念:
程序的發(fā)布方式有debug模式和release模式
Linux gcc/g++編譯鏈接出來(lái)的可執(zhí)行程序默認(rèn)是release模式
gdb 是 Linux 里的調(diào)試器,想調(diào)試必須在源代碼生成可執(zhí)行程序的時(shí)候加上 -g 選項(xiàng)
為什么要有debug和release:
在程序開(kāi)發(fā)時(shí)程序員遇到bug需要調(diào)試,而調(diào)試需要在程序里內(nèi)置調(diào)試信息
而對(duì)于發(fā)布面向的是用戶(hù),用戶(hù)不需要調(diào)試信息
示圖:
2、調(diào)試命令
示例:
#include
使用:
gdb +文件名:進(jìn)入調(diào)試 ctrl + d 或 quit/q :退出調(diào)試
展示:
list/l 行號(hào):顯示binFile源代碼,接著上次的位置往下列,每次列10行 list/l 函數(shù)名:列出某個(gè)函數(shù)的源代碼 info break/ info b :查看斷點(diǎn)信息 print/p:打印表達(dá)式的值,通過(guò)表達(dá)式可以修改變量的值或者調(diào)用函數(shù) display 變量名:跟蹤查看一個(gè)變量,每次停下來(lái)都顯示它的值 undisplay:取消對(duì)先前設(shè)置的那些變量的跟蹤 info(i) locals:查看當(dāng)前棧幀局部變量的值 breaktrace(或bt):查看各級(jí)函數(shù)調(diào)用及參數(shù)
示圖:
修改:
set var:修改變量的值
斷點(diǎn):
break/b 行號(hào):在某一行設(shè)置斷點(diǎn) break 函數(shù)名:在某個(gè)函數(shù)開(kāi)頭設(shè)置斷點(diǎn) delete breakpoints/d:刪除所有斷點(diǎn) delete breakpoints n/d n:刪除序號(hào)為n的斷點(diǎn) disable breakpoints/disable:禁用斷點(diǎn) enable breakpoints/enable:?jiǎn)⒂脭帱c(diǎn)
示圖:
注:禁用斷點(diǎn)的作用是在使用斷點(diǎn)后調(diào)試無(wú)誤用來(lái)記錄已經(jīng)調(diào)試過(guò)
執(zhí)行:
run/r:從開(kāi)始連續(xù)而非單步執(zhí)行程序(從新運(yùn)行,有斷點(diǎn)運(yùn)行到第一個(gè)斷點(diǎn),否則運(yùn)行完畢) next/n:?jiǎn)螚l執(zhí)行 continue/c:從當(dāng)前位置開(kāi)始連續(xù)而非單步執(zhí)行程序(執(zhí)行到下一個(gè)斷點(diǎn)處) step/s:進(jìn)入函數(shù)調(diào)用 finish:執(zhí)行到當(dāng)前函數(shù)返回,然后挺下來(lái)等待命令 until X行號(hào):執(zhí)行跳至X行
示圖:
五、Linux項(xiàng)目自動(dòng)化構(gòu)建工具-make/Makefile
1、背景及概念
一個(gè)工程中的源文件不計(jì)數(shù),其按類(lèi)型、功能、模塊分別放在若干個(gè)目錄中,makefile定義了一系列的規(guī)則來(lái)指定,哪些文件需要先編譯,哪些文件需要后編譯,哪些文件需要重新編譯,甚至于進(jìn)行更復(fù)雜的功能操作
make是一條命令,makefile是一個(gè)文件,兩個(gè)搭配使用,完成項(xiàng)目自動(dòng)化構(gòu)建
make是一個(gè)命令工具,是一個(gè)解釋makefile中指令的命令工具,一般來(lái)說(shuō),大多數(shù)的IDE都有這個(gè)命令
makefile帶來(lái)的好處就是“自動(dòng)化編譯”,一旦寫(xiě)好,只需要一個(gè)make命令,整個(gè)工程完全自動(dòng)編譯,極大的提高了軟件開(kāi)發(fā)的效率
2、使用及原理
確定目標(biāo)文件和源文件的依賴(lài)關(guān)系,有了依賴(lài)關(guān)系還需要依賴(lài)方法(用來(lái)確定具體如何執(zhí)行生成目標(biāo)文件)
示例:
注意:
依賴(lài)方法快捷寫(xiě)法示例:gcc -o $^ $@
@
:對(duì)應(yīng)的是目標(biāo)文件;
@:對(duì)應(yīng)的是目標(biāo)文件;
@:對(duì)應(yīng)的是目標(biāo)文件;^:表示依賴(lài)文件列表
執(zhí)行過(guò)程/原理:
在默認(rèn)的方式下只輸入make命令,則會(huì)在當(dāng)前目錄下找名字叫“Makefile”或“makefile”的文件
如果找到,它會(huì)找文件中的第一個(gè)目標(biāo)文件(target),在上面的例子中,它會(huì)找到“test”這個(gè)文件,并把這個(gè)文件作為最終的目標(biāo)文件
如果test文件不存在,或是test所依賴(lài)的后面的依賴(lài)文件的文件修改時(shí)間要比這個(gè)文件新,那么它就會(huì)執(zhí)行后面所定義的命令來(lái)生成test這個(gè)文件
如果test所依賴(lài)的文件不存在,那么make會(huì)在當(dāng)前文件中找目標(biāo)為以依賴(lài)文件的依賴(lài)性,如果找到則再根據(jù)那一個(gè)規(guī)則生成依賴(lài)文件
這就是整個(gè)make的依賴(lài)性,make會(huì)一層又一層地去找文件的依賴(lài)關(guān)系,直到最終編譯出第一個(gè)目標(biāo)文件
在找尋的過(guò)程中,如果出現(xiàn)錯(cuò)誤,比如最后被依賴(lài)的文件找不到,那么make就會(huì)直接退出,并報(bào)錯(cuò),而對(duì)于所定義的命令的錯(cuò)誤,或是編譯不成功,make根本不理
make只管文件的依賴(lài)性,即如果在找了依賴(lài)關(guān)系之后,之后如果還寫(xiě)有目標(biāo)文件都不會(huì)進(jìn)行生成
項(xiàng)目清理:
像clean這種,沒(méi)有被第一個(gè)目標(biāo)文件直接或間接關(guān)聯(lián),那么它后面所定義的命令將不會(huì)被自動(dòng)執(zhí)行,需要顯示make執(zhí)行,即命令“make clean”以此來(lái)清除所有的目標(biāo)文件,以便重編譯
對(duì)于clean這種目標(biāo)文件,我們將它設(shè)置為偽目標(biāo)(用 .PHONY 修飾),偽目標(biāo)的特性是總是可以被執(zhí)行(可以多次執(zhí)行)
示圖:
Linux
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶(hù)投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶(hù)投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。