文章目录
- 1.软件包管理器yum
- 2.Linux编辑器vim
-
- [2.1 三模式切换](#2.1 三模式切换)
- [2.2 正常模式](#2.2 正常模式)
- [2.3 底行模式](#2.3 底行模式)
- [2.4 可视化模式](#2.4 可视化模式)
- [2.5 vim 配置](#2.5 vim 配置)
- 3.Linux编译器gcc/g++
-
- [3.1 预处理](#3.1 预处理)
- [3.2 编译](#3.2 编译)
- [3.3 汇编](#3.3 汇编)
- [3.4 连接](#3.4 连接)
- [3.5 函数库](#3.5 函数库)
- 4.Linux自动化构建工具Makefile
- 5.Linux调试器gdb
- 希望读者们多多三连支持
- 小编会继续更新
- 你们的鼓励就是我前进的动力!
本文将介绍关于 Linux 系统常用的工具包,便于后续的代码操作
1.软件包管理器yum
对于 Linux 系统来说,下载软件是必不可少的,就像平常使用手机下载软件一样满足我们的日常需求,一般 Linux 有三种下载方式:
- 源代码下载: 从官网下载代码自行配置,虽说可以充分利用代码自行调配,但是上手使用难度太高
- rpm下载: 使用命令获取文件安装,但是会涉及该安装包依赖于其他安装包等问题,需要手动解决,过程繁琐
- yum下载: 也是使用命令获取文件安装,能够自动分析软件包的依赖关系,并从
yum源中下载并安装所需的依赖包,大大简化了软件安装过程,虽说安装的版本可能不是最新的,但是简单易上手,通常来说是够用的
因此我们主要使用 yum
🤔那么yum是如何下载的呢?
其实也没那么复杂,就拿手机来举例,跟 Linux 系统一样都叫做客户端,yum 就相当于是手机里的应用市场,是一个软件的仓库地址,告诉 yum 去哪里找软件,然后通过网络在服务器里找到对应的软件源来下载软件包,软件源又分为官方和第三方的
通常我们通过 yum list 查看可安装软件列表,或者 yum search 软件名 进行软件搜索
以rz、sz命令的下载为例
bash
[zzh_test@hcss-ecs-6aa4 ~]$ yum list | grep rzsz
lrzsz.x86_64 0.12.20-36.el7 @base
我们查询到该命令的安装包为 lrzsz
yum install -y 软件包名
下载的命令通常如上所示,-y 表示省略输入是否同意安装的步骤

对于该红框的信息可以解释为:
软件包名称: 主版本号,次版本号,源程序发行号-软件包的发行号,主机平台,cpu架构
x86_64 后缀表示 64 位系统的安装包,i686 后缀表示 32 位系统安装包,选择包时要和系统匹配,el7 表示操作系统发行版的版本,el7 表示的是 centos7/redhat7,el6 表示 centos6/redhat6,最后一列,base 表示的是 "软件源" 的名称,类似于 "小米应用商店","华为应用商店" 这样的概念
顺便一提,rz 命令用于从 Windows 上传文件到 Linux,sz 命令用于从 Linux 下载文件到 Windows,输入命令后会弹出文件选择对话框,选择要上传的文件即可,在本地直接拖动文件到窗口也是一样的
yum remove 软件包名
想要删除可以输入以上命令
🔥值得注意的是:
- 安装软件时由于需要向系统目录中写入内容,一般需要
sudo或者切到root账户下才能完成 yum安装软件只能一个装完了再装另一个,正在yum安装一个软件的过程中, 如果再尝试用yum安装另外一个软件,yum会报错
2.Linux编辑器vim

vim 文件名 进入编辑界面,可以理解为记事本,初始状态下是命令模式
2.1 三模式切换

通常最常用的三个模式:
- 命令模式:
i切换到插入模式,:(shift + ;)切换到底行模式 - 插入模式:
esc回到命令模式 - 底行模式:
esc回到命令模式
命令模式就是使用命令控制屏幕光标的移动,字符、字或行的删除,一般不做文本输入;插入模式就是允许编辑的模式,是我们后面用的最频繁的编辑模式;底行模式用于文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作
2.2 正常模式
正常模式就是命令模式,通常使用命令进行一些简单的操作
移动:
gg:定位光标到开头行第一位G(shift + g):定位到结尾行第一位n + shift + g:定位到第n行文本第一位$(shift + 4):定位到当前行的文本最后一位^(shift + 6):定位到当前行的文本第一位w、b:光标按照单词进行行内、跨行移动h、j、k、l:左下上右移动光标
复制粘贴:
(n)yy:复制光标所在(n)行(n)dd:删除(n)行(n)p:粘贴nu:撤回ctrl + r:撤回之前的撤回
转换:
~:大小写转换(n)r:对光标字符之后的所有字符进行批量化替换R(shirf + r):进入替换模式,对内容整体替换(n)x:对光标字符之后的字符进行删除
2.3 底行模式
在使用底行模式之前,请记住先按 esc 键确定您已经处于正常模式,再按 : 冒号即可进入底行模式
跳到文件中的某一行:
#:#号表示一个数字,在冒号后输入一个数字,再按回车键就会跳到该行了,如输入数字15,再回车,就会跳到文章的第15行
查找字符:
-
/ + 关键字:先按/键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按n会往后寻找到您要的关键字为止,从当前光标位置向下(往后) 查找 -
? + 关键字:先按?键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按n会往前寻找到您要的关键字为止,从当前光标位置向上(往前) 查找
保存文件:
w:在冒号输入字母w就可以将文件保存起来离开vimq:按q就是退出,如果无法离开vim,可以在q后跟一个!强制离开vimwq:一般建议离开时,搭配w一起使用,这样在退出的时候还可以保存文件
2.4 可视化模式
可视化模式一般用于批量操作,比如批量加注释:
批量注释:
在正常模式下按 ctrl + v ,进入 V-BLOCK 模式,按 J 键 或 K 键选择要注释的内容,J 向上 K 向下,按住 shift + i 进入插入模式,输入 //,点击 esc 键,完成注释
批量取消注释:
在正常模式下按 ctrl + v ,进入 V-BLOCK 模式,然后按两下 L 键(右移两格),选中注释的符号,按 J 键或 K 键选择要取消注释的内容,按 d 键完成批量取消注释
2.5 vim 配置
vim 可以通过在自己用户下添加 .vimrc 的文件进行功能、风格等配置,为了能够像在VS
、IDEA中那样使用方便,可以自行上网进行配置搜索,这里我推荐一个配置项目
传送门:VimForCpp
3.Linux编译器gcc/g++
gcc/g++ [选项] 要编译的文件 [选项] [目标文件]
gcc/g++ 是一款语言编译器,相当于 Linux 系统的 VS,gcc 专门编译 C 语言,g++ 既可以编译 C 语言,也可以编译 C++
生成可执行文件直接 ./目标文件 执行即可
3.1 预处理
bash
[zzh_test@hcss-ecs-6aa4 progressbar]$ ls
main.c makefile processBar.c processBar.h
[zzh_test@hcss-ecs-6aa4 progressbar]$ gcc -E processBar.c -o processBar.i
[zzh_test@hcss-ecs-6aa4 progressbar]$ ls
main.c makefile processBar.c processBar.h processBar.i
预处理功能主要包括宏定义,文件包含,条件编译,去注释等
-E 表示让 gcc 在预处理结束后停止编译过程,-o 后面一定是接目标文件,源头文件放哪儿无所谓
3.2 编译
bash
[zzh_test@hcss-ecs-6aa4 progressbar]$ ls
main.c makefile processBar.c processBar.h processBar.i
[zzh_test@hcss-ecs-6aa4 progressbar]$ gcc -S processBar.i -o processBar.s
[zzh_test@hcss-ecs-6aa4 progressbar]$ ls
main.c makefile processBar processBar.c processBar.h processBar.i processBar.s
编译主要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查无误后, gcc 把代码翻译成汇编语言
-S 表示让 gcc 在编译结束后停止编译过程,生成汇编代码
3.3 汇编
bash
[zzh_test@hcss-ecs-6aa4 progressbar]$ ls
main.c makefile processBar processBar.c processBar.h processBar.i processBar.s
[zzh_test@hcss-ecs-6aa4 progressbar]$ gcc -c processBar.s -o processBar.o
[zzh_test@hcss-ecs-6aa4 progressbar]$ ls
main.c makefile processBar.c processBar.h processBar.i processBar.o processBar.s
汇编主要生成机器可识别代码
-c 表示让 gcc 在汇编结束后停止编译过程,生成二进制代码
3.4 连接
bash
[zzh_test@hcss-ecs-6aa4 progressbar]$ ls
main.c makefile processBar.c processBar.h processBar.i processBar.o processBar.s
[zzh_test@hcss-ecs-6aa4 progressbar]$ gcc processBar.o -o processBar
[zzh_test@hcss-ecs-6aa4 progressbar]$ ls
main.c makefile processBar processBar.c processBar.h processBar.i processBar.o processBar.s
连接表示连接函数库生成可执行文件
3.5 函数库
函数库分为两种类型的库:
静态库:
静态库就是将需要展开的函数在函数定义的地方直接展开,把库文件的代码全部加入到可执行文件中,因此生成的文件比较大,但在运行时也就不再需要库文件了,其后缀名一般为 .a
动态库:
动态库与之相反,在编译链接时并没有把库文件的代码加入到可执行文件中,而是在程序执行时由运行时链接文件加载库,这样可以节省系统的开销。所以动态库也叫共享库,动态库一般后缀名为 .so,如前面所述的 libc.so.6 就是动态库,gcc 在编译时默认使用动态库
4.Linux自动化构建工具Makefile
make 是一条命令,makefile 是一个文件,两个搭配使用,完成项目自动化构建
通常我们需要不断的进行 gcc / g++ 编译、rm 删除执行文件等等指令,如果有大量文件需要多次重复以上操作的话,那么每次都手动输入一大长串必然是麻烦的,因此就需要编写 Makefile( makefile 也行,大小写无所谓)文件自动化使用指令

如图所示可解释为:
processBar 可执行文件依赖于 processBar.c、main.c,$^ 表示 : 后面的文件,$@ 表示 : 前面的文件,直接写文件名也可以,不过用符号比较方便就是了,下面的 clean 同理,: 后面是空的表示不依赖于任何文件就可以执行
bash
[zzh_test@hcss-ecs-6aa4 progressbar]$ ls
main.c makefile processBar.c processBar.h
[zzh_test@hcss-ecs-6aa4 progressbar]$ make processBar
gcc processBar.c main.c -o processBar
[zzh_test@hcss-ecs-6aa4 progressbar]$ ls
main.c makefile processBar processBar.c processBar.h
[zzh_test@hcss-ecs-6aa4 progressbar]$ make clean
rm -rf processBar
[zzh_test@hcss-ecs-6aa4 progressbar]$ ls
main.c makefile processBar.c processBar.h
通常使用 make+冒号前的依赖名 的方式执行自动化,如果只输入 make 指令的话默认执行第一条自动化指令,被依赖的文件总会更新,所以要多次执行 make processBar 的指令
make 的默认行为是:基于时间戳判断更新,检查目标是否是一个已存在的文件,如果文件存在且没有更新(即依赖项未变化),则跳过该目标的命令。像 clean 这种没有具体依赖目标的叫做 伪目标
但有些场景下,目标并不是实际文件(比如常见的 clean、all、install 等),若目录中恰好有与这些目标同名的文件(比如名为 clean 的文件),make 会误将其当作 "已完成的目标文件",认为无需执行,从而跳过本应运行的命令(如 rm -f *.o),导致清理、构建等预期操作失败
因此需要用 .PHONY 声明伪目标 ------ 强制 make 忽略同名文件,始终执行命令
🔥值得注意的是:
bash
hello:hello.o
gcc hello.o -o hello
hello.o:hello.s
gcc -c hello.s -o hello.o
hello.s:hello.i
gcc -S hello.i -o hello.s
hello.i:hello.c
gcc -E hello.c -o hello.i
make 会一层又一层地去找文件的依赖关系,直到最终编译出第一个目标文件,在找寻的过程中,如果出现错误,比如最后被依赖的文件找不到,那么 make 就会直接退出,并报错,而对于所定义的命令的错误,或是编译不成功,make 根本不理,make 只管文件的依赖性,即如果在我找了依赖关系之后,冒号后面的文件还是不在,那么对不起,我就不工作啦
5.Linux调试器gdb
Linux 系统中,程序的发布默认是 release 版本,无法直接发布,所以调试的前提是处于 debug 版本,那么在 gcc / g++ 编译时要加上 -g 使文件以 debug 版本输出
gdb 是用来调试可执行文件或者目标文件的,所以用 gdb 目标文件 指令启动调试器
以下是 gdb 代码调试时的指令

一般我们还是在 VS 里调试比较方便,因此 gdb 的调试就不过多叙述
希望读者们多多三连支持
小编会继续更新
你们的鼓励就是我前进的动力!
