文章目录
- 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
:粘贴n
u
:撤回ctrl + r
:撤回之前的撤回
转换:
~
:大小写转换(n)r
:对光标字符之后的所有字符进行批量化替换R(shirf + r)
:进入替换模式,对内容整体替换(n)x
:对光标字符之后的字符进行删除
2.3 底行模式
在使用底行模式之前,请记住先按 esc
键确定您已经处于正常模式,再按 :
冒号即可进入底行模式
跳到文件中的某一行:
#
:#
号表示一个数字,在冒号后输入一个数字,再按回车键就会跳到该行了,如输入数字15
,再回车,就会跳到文章的第15行
查找字符:
-
/ + 关键字
:先按/
键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按n
会往后寻找到您要的关键字为止,从当前光标位置向下(往后) 查找 -
? + 关键字
:先按?
键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按n
会往前寻找到您要的关键字为止,从当前光标位置向上(往前) 查找
保存文件:
w
:在冒号输入字母w
就可以将文件保存起来离开vim
q
:按q
就是退出,如果无法离开vim
,可以在q
后跟一个!
强制离开vim
wq
:一般建议离开时,搭配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
的调试就不过多叙述
希望读者们多多三连支持
小编会继续更新
你们的鼓励就是我前进的动力!
