
你不能改变过去,但你可以改变未来
算法/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
命令可筛选关注的包,例如:
cpp
# 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:
cpp
# Centos
$ sudo yum install -y lrzsz
# Ubuntu
$ sudo apt install -y lrzsz
出现 "complete" 字样或无报错说明安装完成。
注意事项:
- 安装软件需向系统目录写入内容,一般需要 sudo 或切换到 root 账户。
- yum/apt 需逐个安装软件,同时安装多个会报错。
1.3.3 卸载软件
卸载软件命令如下:
cpp
# Centos
sudo yum remove [-y] lrzsz
# Ubuntu
sudo apt remove [-y] lrzsz
1.3.4 注意事项
yum/apt 的所有操作需保证主机网络畅通,可通过ping www.baidu.com
验证。
1.4 安装源
Centos 安装源路径:
cpp
$ 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.c
gcc -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++的学习很陡,时而巨难时而巨简单,希望宝子们和小枫一起坚持下去~你们的三连就是小枫的动力,感谢支持~
