???????
?
楓の個人主頁
你不能改變過去,但你可以改變未來
算法/C++/數據結構/C/Linux
Hello,這里是小楓。C語言與數據結構和算法初階兩個板塊都更新完畢,我們繼續來學習C++,C++更新的同時我也會更新Linux。Linux操作系統是很經典的操作系統,因此學習起來注定枯燥無味,西游記大家都看過吧~,我希望能帶著大家一起跨過九九八十一難,降伏各類難題,學會Linux,我會盡我所能,以通俗易懂、幽默風趣的方式帶給大家形象生動的知識,也希望大家遇到困難不退縮,遇到難題不放棄,學習師徒四人的精神!!!故此得名【Linux游記】
?話不多說,讓我們一起進入今天的學習吧~~~??
一、軟件包管理器
1.1 什么是軟件包
在 Linux 下安裝軟件,通常的辦法是下載源代碼并編譯得到可執行程序,但這種方式比較麻煩。于是有人將常用軟件提前編譯好,做成軟件包(類似 Windows 上的安裝程序)放在服務器上,通過包管理器可方便地獲取并直接安裝。
軟件包和軟件包管理器的關系,就好比 "App" 和 "應用商店"。其中,yum(Yellow dog Updater, Modified)是 Linux 下常用的包管理器,主要應用在 Fedora、RedHat、Centos 等發行版;Ubuntu 則主要使用 apt(Advanced Package Tool),它同樣能自動解決依賴關系,實現軟件包的下載和安裝。
1.2 Linux 軟件生態
Linux 下載軟件時,用戶通過包管理器(yum/apt)向軟件包服務器發送查找、下載請求,服務器返回軟件包,包管理器負責解決依賴關系并完成下載、安裝、卸載等操作。
評估操作系統的好壞,生態是重要因素,包括社區論壇、官網文檔、軟件體系、維護更新速度、操作系統自身及針對性客戶群體等。
軟件包可能存在依賴問題,一個軟件可能依賴多個庫文件,如某軟件可能依賴 libc.so、ssl.so 等。為提高下載速度,可使用國內鏡像源,以下是一些國內 Linux 軟件安裝源的官方鏈接:
- 阿里云官方鏡像站:阿里巴巴開源鏡像站-OPSX鏡像站-阿里云開發者社區,提供 CentOS、Ubuntu、Debian 等多種發行版鏡像。
- 清華大學開源軟件鏡像站:清華大學開源軟件鏡像站 | Tsinghua Open Source Mirror,提供多種 Linux 發行版鏡像及 Python、Perl 等編程語言擴展包,還有豐富文檔和教程。
- 中國科學技術大學開源鏡像站:USTC Open Source Software Mirror,提供多種 Linux 發行版鏡像和常用開發工具。
- 北京交通大學自由與開源軟件鏡像站:首頁 - 北京交通大學自由與開源軟件鏡像站,提供多種 Linux 發行版鏡像及相關軟件倉庫,還有詳細文檔和指南。
- 中國科學院軟件研究所鏡像站 (ISCAS):歡迎訪問 ISCAS 開源鏡像站,提供多種 Linux 發行版、編程語言和開發工具鏡像。
- 上海交通大學開源鏡像站:Index of /,提供豐富的 Linux 軟件資源,包括多種發行版鏡像和軟件倉庫。
- 網易開源鏡像站:歡迎訪問網易開源鏡像站,提供多種 Linux 發行版鏡像及相關軟件倉庫,還有便捷的搜索功能。
1.3 yum 具體操作
1.3.1 查看軟件包
使用yum list
命令可列出所有軟件包,結合grep
命令可篩選關注的包,例如:
# Centos
$ yum list | grep lrzsz
Lrzsz.x86_64 0.12.20-36.el7 @base# Ubuntu
$ apt search lrzsz
# 輸出省略
注意事項:
- 軟件包名稱格式為:主版本號。次版本號。源程序發行號 - 軟件包的發行號。主機平臺.cpu 架構。
- "x86_64" 表示 64 位系統安裝包,"i686" 表示 32 位系統安裝包,需與系統匹配。
- "el7" 表示 centos7/redhat7,"el6" 表示 centos6/redhat6。
- 最后一列的 base 表示 "軟件源" 名稱。
1.3.2 安裝軟件
通過簡單命令即可安裝軟件,例如安裝 lrzsz:
# Centos
$ sudo yum install -y lrzsz# Ubuntu
$ sudo apt install -y lrzsz
出現 "complete" 字樣或無報錯說明安裝完成。
注意事項:
- 安裝軟件需向系統目錄寫入內容,一般需要 sudo 或切換到 root 賬戶。
- yum/apt 需逐個安裝軟件,同時安裝多個會報錯。
1.3.3 卸載軟件
卸載軟件命令如下:
# Centos
sudo yum remove [-y] lrzsz# Ubuntu
sudo apt remove [-y] lrzsz
1.3.4 注意事項
yum/apt 的所有操作需保證主機網絡暢通,可通過ping www.baidu.com
驗證。
1.4 安裝源
Centos 安裝源路徑:
$ ll /etc/yum.repos.d/
# 顯示CentOS-Base.repo(標準源)和epel.repo(擴展源)等
可安裝擴展源:sudo yum install -y epel-release
。
Ubuntu 安裝源路徑:
$ cat /etc/apt/sources.list # 標準源
$ ll /etc/apt/sources.list.d/ # 擴展源
二、編輯器 Vim
2.1 vi 與 vim 的區別
vi 和 vim 都是多模式編輯器,vim 是 vi 的升級版本,兼容 vi 的所有指令,還具有語法加亮、可視化操作等新特性,可在終端、x window、mac os、windows 等環境運行。
2.2 vim 的基本概念
課堂主要講解三種模式:命令模式(command mode)、插入模式(Insert mode)和底行模式(last line mode):
- 命令模式:控制光標移動,可進行刪除、復制等操作,能進入插入模式或底行模式。
- 插入模式:可進行文字輸入,按 ESC 鍵回到命令模式。
- 底行模式:可進行文件保存、退出等操作,在命令模式下按 shift+:進入。
2.3 vim 的基本操作
進入 vim:$ vim test.c
,默認處于命令模式,需切換到插入模式才能輸入文字。
模式切換:
- 命令模式→插入模式:輸入 a、i 或 o。
- 插入模式→命令模式:按 ESC 鍵。
- 命令模式→底行模式:按 shift+;(即輸入:)。
退出與保存:在底行模式下,w
保存,wq
存盤并退出,q!
不存盤強制退出。
2.4 vim 正常模式命令集
- 插入相關:i(從光標處輸入)、a(從光標下一位輸入)、o(插入新行并從行首輸入)。
- 光標移動:h(左)、j(下)、k(上)、l(右);G(到文尾)、$(到行尾)、^(到行首)等。
- 刪除操作:x(刪除光標處字符)、#x(刪除光標后 #個字符)、dd(刪除當前行)等。
- 復制粘貼:yw(復制到字尾)、yy(復制當前行)、p(粘貼)。
- 替換操作:r(替換光標處字符)、R(持續替換至 ESC)。
- 撤銷操作:u(撤銷)、ctrl + r(恢復撤銷)。
2.5 vim 末行模式命令集
- 列出行號:
set nu
。 - 跳至某行:輸入行號后回車。
- 查找字符:
/關鍵字
(向后找)、?關鍵字
(向前找),按 n 繼續查找。 - 保存退出:
w
(保存)、q
(退出)、wq
(保存退出)。
2.6 vim 配置
- 系統公共配置文件:
/etc/vimrc
。 - 用戶私有配置文件:
~/.vimrc
,可設置語法高亮(syntax on
)、顯示行號(set nu
)等。 - 可安裝 TagList、WinManager 等插件增強功能。
三、編譯器 gcc/g++
3.1 編譯過程
gcc/g++ 編譯分為四個階段:
- 預處理:宏替換、去注釋、頭文件展開等,使用
-E
選項,生成.i
文件。 - 編譯:生成匯編代碼,使用
-S
選項,生成.s
文件。 - 匯編:生成機器碼,使用
-c
選項,生成.o
文件。 - 鏈接:生成可執行文件,無特殊選項,生成可執行程序。
3.2 動態鏈接與靜態鏈接
- 靜態鏈接:將庫代碼全部加入可執行文件,文件較大,運行時無需庫,但更新麻煩。
- 動態鏈接:程序運行時加載庫,文件較小,節省資源,更為常用。
Linux 下動態庫后綴為.so
,靜態庫為.a
;Windows 下動態庫為.dll
,靜態庫為.lib
。
3.3 常用選項
包括-E
(預處理)、-S
(編譯)、-c
(匯編)、-o
(指定輸出文件)、-g
(生成調試信息)等。
四、自動化構建工具 make/Makefile
4.1 基本概念
make 是命令工具,Makefile 是定義編譯規則的文件,兩者配合實現項目自動化構建,提高開發效率。
4.2 基本使用
例如,對于myproc.c
文件,Makefile 可寫為:
myproc:myproc.cgcc -o myproc myproc.c
.PHONY:clean
clean:rm -f myproc
myproc
依賴myproc.c
,通過gcc
命令生成;clean
為偽目標,用于清理文件。
4.3 make 工作流程
- 在當前目錄找 Makefile 或 makefile。
- 找到第一個目標文件作為最終目標。
- 若目標文件不存在或依賴文件更新時間更新,則執行命令生成目標。
- 遞歸查找依賴關系,直至生成最終目標。
五、Linux 第一個程序:進度條
5.1 相關知識
- 回車(\r):光標回到行首;換行(\n):光標下移一行。
- 行緩沖區:輸出帶
\n
會刷新緩沖區,否則需用fflush(stdout)
手動刷新。
5.2 進度條代碼
process.c
:實現進度條邏輯,包括版本 1 和版本 2 的函數。process.h
:聲明進度條函數。main.c
:調用進度條函數模擬下載過程。- Makefile:定義編譯規則。
六、版本控制器 Git
6.1 基本概念
Git 是主流版本控制器,可管理文件歷史版本,方便多人協作,支持各種格式文件,尤其適合管理源代碼。
6.2 安裝與使用
- 安裝:
yum install git
。 - 基本操作(三板斧):
git add
:將文件加入暫存區。git commit -m "日志"
:提交到本地倉庫。git push
:同步到遠程倉庫。
- 可配置免密碼提交,需設置用戶信息(
git config --global user.name
等)。
七、調試器 gdb
7.1 基本使用
- 程序需以 debug 模式編譯(加
-g
選項)。 - 常用命令:
gdb binFile
:啟動調試。l
:顯示源代碼。b 行號
:設置斷點。r
:運行程序。n
/s
:單步執行(n
不進函數,s
進函數)。p 變量
:打印變量值。q
:退出調試。
7.2 高級技巧
watch
:監視變量變化,值改變時暫停程序。set var
:修改變量值。- 條件斷點:
b 行號 if 條件
,滿足條件時觸發。
八、結語
今日C++到這里就結束啦,如果覺得文章還不錯的話,可以三連支持一下。感興趣的寶子們歡迎持續訂閱小楓,小楓在這里謝謝寶子們啦~小楓の主頁還有更多生動有趣的文章,歡迎寶子們去點評鴨~C++的學習很陡,時而巨難時而巨簡單,希望寶子們和小楓一起堅持下去~你們的三連就是小楓的動力,感謝支持~
?