Linux 軟體包管理器 yum
Linux下安裝軟體的方式:
yum:
yum是一條命令
注:
-
關於 yum 的所有操作必須保證主機(虛擬機器器或雲伺服器)網路暢通
-
安裝軟體時由於需要向系統目錄中寫入內容, 一般需要 sudo 或者切到 root 賬戶下才能完成.
-
yum安裝軟體只能一個裝完了再裝另一個. 正在yum安裝一個軟體的過程中, 如果再嘗試用yum安裝另外一個軟體, yum會報錯.
注:
-
yum makecache命令的功能是將伺服器的軟體包資訊快取到本地
-
yum search命令可以在所有軟體包中搜尋指定名稱的軟體包
-
yum clean all 命令可以清除快取中老舊的標頭檔案和軟體包
-
yum -y update:升級所有包同時,也升級軟體和系統核心;
-
yum -y upgrade:只升級所有包,不升級軟體和系統核心,軟體和核心保持原樣。
lrzsz.x86_64 0.12.20-36.el7 @os
- 軟體包名稱: 主版本號.次版本號.源程式發行號-軟體包的發行號.主機平臺.cpu架構.
- 「x86_64」 字尾表示64位元系統的安裝包, 「i686」 字尾表示32位元系統安裝包. 選擇包時要和系統匹配.
- 「el7」 表示作業系統發行版的版本. 「el7」 表示的是 centos7/redhat7. 「el6」 表示centos6/redhat6.
- 最後一列, os 表示的是 「軟體源」 的名稱, 類似於 「小米應用商店」, 「華為應用商店」 這樣的概念
centos7更新yum源
Linux編輯器-vim使用
vim的基本模式
- 正常/普通/命令模式(NORMAL )
控制螢幕遊標的移動,字元、字或行的刪除,移動複製某區段及進入Insert mode下,或者到 last line mode - 插入模式(INSERT)
只有在Insert mode下,才可以做文字輸入,按「ESC」鍵可回到命令列模式。該模式是我們後面用的最頻繁的編輯模式。 - 末行模式(COMMAND )
檔案儲存或退出,也可以進行檔案替換,找字串,列出行號等操作。 在命令模式下,shift+: 即可進入該模式。要檢視你的所有模式:開啟vim,底行模式直接輸入:help vim-modes。當進入該模式時,按「ESC」鍵可回到命令列模式 - 替換模式(REPLACE )
整體文字替換。在命令模式下,shift+r即可進入該模式,按「ESC」鍵可回到命令列模式
vim的基本操作
- 輸入a
- 輸入i
- 輸入o
-
[插入模式]切換至[正常模式]
目前處於[插入模式],就只能一直輸入文字,如果發現輸錯了字,想用遊標鍵往回移動,將該字刪除,可以先按一下「ESC」鍵轉到[正常模式]再刪除文字。當然,也可以直接刪除。
-
[正常模式]切換至[末行模式] 「shift + ;」, 其實就是輸入「:」
-
退出vim及儲存檔案,在[正常模式]下,按一下「:」冒號鍵進入「末行模式(COMMAND )」
- : w (儲存當前檔案)
- : wq (輸入「wq」,存檔並退出vim)
- : q! (輸入q!,不存檔強制退出vim)
vim正常模式命令集
- 按「i」切換進入插入模式「insert mode」,按「i」進入插入模式後是從遊標當前位置開始輸入檔案;
- 按「a」進入插入模式後,是從目前遊標所在位置的下一個位置開始輸入文字;
- 按「o」進入插入模式後,是插入新的一行,從行首開始輸入文字。
- 按「ESC」鍵。
-
vim可以直接用鍵盤上的遊標來上下左右移動,但正規的vim是用小寫英文字母 「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,每按一次,刪除遊標所在位置的「前面」一個字元
- 「#X」:例如,「20X」表示刪除遊標所在位置的「前面」20個字元
- 「dd」:刪除遊標所在行
- 「#dd」:從遊標所在行開始刪除#行
- 「yw」:將遊標所在之處到字尾的字元複製到緩衝區中。
- 「#yw」:複製#個字到緩衝區
- 「yy」:複製遊標所在行到緩衝區。
- 「#yy」:例如,「6yy」表示拷貝從遊標所在的該行「往下數」6行文字。
- 「p」:將緩衝區內的字元貼到遊標所在位置。注意:所有與「y」有關的複製命令都必須與「p」配合才能完成複製與貼上功能。
- 「dd」:剪下游標所在行
- 「#dd」:從遊標所在行開始剪下#行
- 「p」:將緩衝區內的字元貼到遊標所在位置。注意:所有與「d」有關的剪下命令都必須與「p」配合才能完成剪下與貼上功能。
-
「r」:替換遊標所在處的字元。
-
「R」:替換遊標所到之處的字元,直到按下「ESC」鍵為止。
- 「u」:如果您誤執行一個命令,可以馬上按下「u」,回到上一個操作。按多次「u」可以執行多次回覆。
- 「ctrl + r」: 復原的恢復
- 「cw」:更改遊標所在處的字到字尾處
- 「c#w」:例如,「c3w」表示更改3個字
- 「ctrl」+「g」列出遊標所在行的行號。
- 「#G」:例如,「15G」,表示移動遊標至文章的第15行行首
vim末行模式命令集
在使用末行模式之前,請記住先按「ESC」鍵確定您已經處於正常模式,再按「:」冒號即可進入末行模式。
- 「set nu」: 輸入「set nu」後,會在檔案中的每一行前面列出行號。
- 「#」:「#」號表示一個數位,在冒號後輸入一個數位,再按確認鍵就會跳到該行了,如輸入數位15,再回車,就會跳到文章的第15行。
- 「/關鍵字」: 先按「/」鍵,再輸入您想尋找的字元,如果第一次找的關鍵字不是您想要的,可以一直按「n」會往後尋找到您要的關鍵字為止。
- 「?關鍵字」:先按「?」鍵,再輸入您想尋找的字元,如果第一次找的關鍵字不是您想要的,可以一直按「n」會往前尋找到您要的關鍵字為止。
- 「w」: 在冒號輸入字母「w」就可以將檔案儲存起來
- 「q」:按「q」就是退出,如果無法離開vim,可以在「q」後跟一個「!」強制離開vim。
- 「wq」:一般建議離開時,搭配「w」一起使用,這樣在退出的時候還可以儲存檔案; wq 儲存並退出編輯,就算沒有修改也會寫入,並修改檔案時間屬性。
- 「x!」:儲存並退出編輯,僅當檔案有修改時會儲存,並修改檔案時間屬性批次化替換
- 「%s/關鍵字1/關鍵字2/g」:將關鍵字1全部替換成關鍵字2
- 「vs 檔案」:多屏顯示 ;「ctrl w w」:多屏切換
- 「!+命令」:執行該命令
補:
多行註釋:
- 首先按esc進入命令列模式下,按下Ctrl + v,進入列(也叫區塊)模式;
- 在行首使用上下鍵選擇需要註釋的多行;
- 按下鍵盤(大寫)「I」鍵,進入插入模式;
- 然後輸入註釋符(「//」、「#」等);
- 最後按下「Esc」鍵。
注:在按下esc鍵後,會稍等一會才會出現註釋,不要著急~~時間很短的
刪除多行註釋:
- 首先按esc進入命令列模式下,按下Ctrl + v, 進入列模式;
- 選定要取消註釋的多行;
- 按下「x」或者「d」.
注意:如果是「//」註釋,那需要執行兩次該操作,如果是「#」註釋,一次即可
vim設定
curl -sLf https:
source ~/.bashrc
執行完這幾行程式碼後如果想改縮排或tab的話
vim .vimrc
解除安裝方法
bash ~/.VimForCpp/uninstall.sh
Linux編譯器-gcc/g++使用
Linux編譯器-gcc使用
格式: gcc [選項] 要編譯的檔案 [選項] [目標檔案]
預處理(進行宏替換)
- 預處理功能主要包括宏定義,檔案包含,條件編譯,去註釋等。
- 預處理指令是以#號開頭的程式碼行。
- 範例: gcc –E hello.c –o hello.i
- 選項「-E」,該選項的作用是讓 gcc 在預處理結束後停止編譯過程。
- 選項「-o」是指目標檔案,「.i」檔案為已經過預處理的C原始程式。
編譯(生成組合)
- 在這個階段中,gcc 首先要檢查程式碼的規範性、是否有語法錯誤等,以確定程式碼的實際要做的工作,在檢查無誤後,gcc 把程式碼翻譯成組合語言。
- 使用者可以使用「-S」選項來進行檢視,該選項只進行編譯而不進行組合,生成組合程式碼。
- 範例: gcc –S hello.i –o hello.s
注:
- 編譯過程為掃描程式–>語法分析–>語意分析–>原始碼優化–>程式碼生成器–>目的碼優化;
- 語法分析的結果為分析樹parse tree或者語法樹syntax tree
編譯過程可分為幾個階段
組合(生成機器可識別程式碼)
- 組合階段是把編譯階段生成的「.s」檔案轉成目標檔案
- 在此可使用選項「-c」就可看到組合程式碼已轉化為「.o」的二進位制目的碼了
- 範例: gcc –c hello.s –o hello.o
連結(生成可執行檔案或庫檔案)
- 在成功編譯之後,就進入了連結階段。
- 範例: gcc hello.o –o hello
函數庫一般分為靜態庫和動態庫兩種
- 靜態庫是指編譯連結時,把庫檔案的程式碼全部加入到可執行檔案中,因此生成的檔案比較大,但在執行時也就不再需要庫檔案了。其字尾名一般為「.a」
- 動態庫與之相反,在編譯連結時並沒有把庫檔案的程式碼加入到可執行檔案中,而是在程式執行時由執行時連結檔案載入庫,這樣可以節省系統的開銷。動態庫一般字尾名為「.so」,如所述的 libc.so.6 就是動態庫。gcc 在編譯時預設使用動態庫。完成了連結之後,gcc 就可以生成可執行檔案,如下所示。 gcc hello.o –o hello
- gcc預設生成的二進位制程式,是動態連結的,這點可以通過 file 命令驗證
gcc選項
- -E 只啟用預處理,這個不生成檔案,你需要把它重定向到一個輸出檔案裡面
- -S 編譯到組合語言不進行組合和連結
- -c 編譯到目的碼
- -o 檔案輸出到 檔案
- -static 此選項對生成的檔案採用靜態連結
- -g 生成偵錯資訊。GNU 偵錯程式可利用該資訊。
- -shared 此選項將盡量使用動態庫,所以生成檔案比較小,但是需要系統由動態庫.
- -O0
- -O1
- -O2
- -O3 編譯器的優化選項的4個級別,-O0表示沒有優化,-O1為預設值,-O3優化級別最高
- -w 不生成任何警告資訊。
- -Wall 生成所有警告資訊。
總結:
- 預處理 -E:標頭檔案展開、宏替換、條件編譯、去註釋
- 編譯-S:程式語言轉換為組合語言
- 其中死程式碼刪除是編譯最佳化技術,指的是移除對程式執行結果沒有影響的程式碼
- 組合-c:組合語言轉化成目標檔案(.o,二進位制)
- 連結:形成可執行檔案
- 連結分為動態連結和靜態連結
- 靜態連結本質是將相關庫中的程式碼,拷貝到自己的可執行程式裡面
- 靜態連結相對消耗記憶體大,佔用磁碟大
- 動態連結相對不穩定,動態連結需要第三方庫,如果其中有一個庫不存在,那麼整個過程就以失敗告終
- gcc選項記憶 esc,iso例子
Linux編譯器-g++使用 (與gcc用法類似)
Linux幾乎可以直接在命令列中執行大部分後端語言(C語言、C++、Java、python……)
Linux偵錯程式-gdb使用
- gdb是Linux中的偵錯程式
- 在Linux中程式預設編譯時,預設生成的可執行程式是release版本是不可偵錯的;預設的連結是動態連結使用的是動態庫。
- Linux中程式預設編譯的時候需要-g(釋出程式以debug方式),才可以進行偵錯
- debug是一個可以偵錯的,它在生成程式時,會加入偵錯資訊(使用者不需要用到)
- release是不可偵錯的,它不會生成偵錯資訊(使用者需要的)
偵錯命令
gdb binFile 退出: ctrl + d 或 quit 偵錯命令:
-
list/l 行號:顯示binFile原始碼,接著上次的位置往下列,每次列10行。
-
list/l 函數名:列出某個函數的原始碼。
-
r或run:執行程式。相當於vs中的f5
-
n 或 next:單條執行。相當於vs中的f10
-
s或step:進入函數呼叫 。相當於vs中的f11
-
break(b) 行號:在某一行設定斷點。相當於vs中的f9
-
break 函數名:在某個函數開頭設定斷點
-
info break :檢視斷點資訊。
-
finish:執行到當前函數返回,然後挺下來等待命令
-
print ( p):列印表示式的值,通過表示式可以修改變數的值或者呼叫函數
-
p 變數:列印變數值。
-
set var:修改變數的值
-
continue(或c):從當前位置開始連續而非單步執行程式 。 相當於vs中的f5
-
run(或r):從開始連續而非單步執行程式 。相當於vs中的f5
-
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
注:
- 習慣:不論試調式程式完畢,還是中間過程,都必須要留偵錯痕跡
- finish:執行到當前函數返回,然後挺下來等待命令 。中的函數是非main函數
補:
Linux專案自動化構建工具-make/Makefile
多個原始檔完成專案自動化構建
注:不需要把.h標頭檔案新增到裡面,在預處理時,原始檔就會自動去找標頭檔案,並將標頭檔案在原始檔中展開
原理
- make會在當前目錄下找名字叫「Makefile」或「makefile」的檔案。
- 如果找到,它會找檔案中的第一個目標檔案(target),在上面的例子中,他會找到「test」這個檔案,並把這個檔案作為最終的目標檔案。
- 如果test檔案不存在,或是test所依賴的後面的test.o檔案的檔案修改時間要比test這個檔案新(可以用 touch 測試),那麼,他就會執行後面所定義的命令來生成test這個檔案。
- 如果test所依賴的test.o檔案不存在,那麼make會在當前檔案中找目標為test.o檔案的依賴性,如果找到則再根據那一個規則生成test.o檔案。(這有點像一個堆疊的過程)
- 當然,你的C檔案和H檔案是存在的啦,於是make會生成 test.o 檔案,然後再用 test.o 檔案宣告make的終極任務,也就是執行檔案test了。
- 這就是整個make的依賴性,make會一層又一層地去找檔案的依賴關係,直到最終編譯出第一個目標檔案。
- 在找尋的過程中,如果出現錯誤,比如最後被依賴的檔案找不到,那麼make就會直接退出,並報錯,而對於所定義的命令的錯誤,或是編譯不成功,make根本不理。
- make只管檔案的依賴性,即,如果在我找了依賴關係之後,冒號後面的檔案還是不在,那麼對不起,我就不工作啦。
專案清理
-
工程是需要被清理的
-
像clean這種,沒有被第一個目標檔案直接或間接關聯,那麼它後面所定義的命令將不會被自動執行,不過,我們可以顯示要make執行。即命令——「make clean」,以此來清除所有的目標檔案,以便重編譯。
-
但是一般我們這種clean的目標檔案,我們將它設定為偽目標,用 .PHONY 修飾,偽目標的特性是,總是被執行的。
-
可以將我們的 hello 目標檔案宣告成偽目標,測試一下
注:
- make是一條命令
- makefile 是個檔案,裡面記錄的是目標檔案和原始檔案的依賴關係
- make是一條命令,makefile是一個檔案,兩個搭配使用,完成專案自動化構建。
- 會不會寫makefile,從一個側面說明了一個人是否具備完成大型工程的能力
- 一個工程中的原始檔不計數,其按型別、功能、模組分別放在若干個目錄中,makefile定義了一系列的規則來指定,哪些檔案需要先編譯,哪些檔案需要後編譯,哪些檔案需要重新編譯,甚至於進行更復雜的功能操作
- makefile帶來的好處就是——「自動化編譯」,一旦寫好,只需要一個make命令,整個工程完全自動編譯,極大的提高了軟體開發的效率。
- make是一個命令工具,是一個解釋makefile中指令的命令工具,一般來說,大多數的IDE都有這個命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可見,makefile都成為了一種在工程方面的編譯方法。
補:
- makefile檔案儲存了編譯器和聯結器的引數選項
- 主要包含了五個東西:顯式規則、隱晦規則、變數定義、檔案指示和註釋
- 預設的情況下,make命令會在當前目錄下按順序找尋檔名為「GNUmakefile」、「makefile」、「Makefile」的檔案, 找到了解釋這個檔案
- 在Makefile可以使用include關鍵字把別的Makefile包含進來
- make會自動根據依賴物件檢測目標物件是否需要重新生成
- Makefile中宣告偽物件使用
Linux下的小程式-進度條
注:
- printf已經執行完之後,但並不代表字串就得顯示出來
- sleep期間,字串在緩衝區
- 緩衝區的本質是一段記憶體空間,暫存臨時資料,在合適的時候重新整理出去
- 重新整理的策略:
-
- 直接重新整理,不緩衝
-
- 緩衝區寫滿,再重新整理,全重新整理
-
- 碰到\n就重新整理出去,行重新整理(寫到顯示器上)
-
- 強制重新整理(把資料真正的寫入到磁碟、檔案、顯示器、網路等裝置或者檔案)
- 在任何一個C語言程式中,啟動的時候,預設會開啟三個輸入輸出流(檔案)(stdin(鍵盤)、stdout(顯示器)、stderr(顯示器) 它們都是檔案指標型別)
實現倒計時
進度條程式碼
使用 git 命令列
git上傳圖解
Linux中上傳git
0.安裝 git
yum install git
1. 下載專案到本地
建立好一個放置程式碼的目錄.
git clone [url]
這裡的 url 就是剛剛建立好的 專案 的連結.
2. 三板斧第一招: git add
git add [檔名]
將需要用 git 管理的檔案告知 git
3. 三板斧第二招: git commit
提交改動到本地
git commit .
最後的 「.」 表示當前目錄
提交的時候應該註明提交紀錄檔, 描述改動的詳細內容.
4. 三板斧第三招: git push
同步到遠端伺服器上
git push
需要填入使用者名稱密碼. 同步成功後, 重新整理 Github 頁面就能看到程式碼改動了
注:
設定免密碼提交
設定免密碼提交