【Linux操作系统】简学深悟启示录:Linux环境基础开发工具使用

本文将介绍关于 Linux 系统常用的工具包,便于后续的代码操作

1.软件包管理器yum

对于 Linux 系统来说,下载软件是必不可少的,就像平常使用手机下载软件一样满足我们的日常需求,一般 Linux 有三种下载方式:

  • 源代码下载: 从官网下载代码自行配置,虽说可以充分利用代码自行调配,但是上手使用难度太高
  • rpm下载: 使用命令获取文件安装,但是会涉及该安装包依赖于其他安装包等问题,需要手动解决,过程繁琐
  • yum下载: 也是使用命令获取文件安装,能够自动分析软件包的依赖关系,并从 yum 源中下载并安装所需的依赖包,大大简化了软件安装过程,虽说安装的版本可能不是最新的,但是简单易上手,通常来说是够用的

因此我们主要使用 yum

🤔那么yum是如何下载的呢?

其实也没那么复杂,就拿手机来举例,跟 Linux 系统一样都叫做客户端,yum 就相当于是手机里的应用市场,是一个软件的仓库地址,告诉 yum 去哪里找软件,然后通过网络在服务器里找到对应的软件源来下载软件包,软件源又分为官方和第三方的


通常我们通过 yum list 查看可安装软件列表,或者 yum search 软件名 进行软件搜索

以rz、sz命令的下载为例

[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/redhat7el6 表示 centos6/redhat6,最后一列,base 表示的是 “软件源” 的名称,类似于 “小米应用商店”,“华为应用商店” 这样的概念

顺便一提,rz 命令用于从 Windows 上传文件到 Linuxsz 命令用于从 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 系统的 VSgcc 专门编译 C 语言,g++ 既可以编译 C 语言,也可以编译 C++

生成可执行文件直接 ./目标文件 执行即可

3.1 预处理

[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 编译

[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 汇编

[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 连接

[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 删除执行文件等等指令,如果有大量文件需要多次重复以上操作的话,那么每次都手动输入一大长串必然是麻烦的,因此就需要编写 Makefilemakefile 也行,大小写无所谓)文件自动化使用指令

在这里插入图片描述

如图所示可解释为:

processBar 可执行文件依赖于 processBar.c、main.c$^ 表示 : 后面的文件,$@ 表示 : 前面的文件,直接写文件名也可以,不过用符号比较方便就是了,下面的 clean 同理,: 后面是空的表示不依赖于任何文件就可以执行

[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 这种没有具体依赖目标的叫做 伪目标

但有些场景下,目标并不是实际文件(比如常见的 cleanallinstall 等),若目录中恰好有与这些目标同名的文件(比如名为 clean 的文件),make 会误将其当作 “已完成的目标文件”,认为无需执行,从而跳过本应运行的命令(如 rm -f *.o),导致清理、构建等预期操作失败

因此需要用 .PHONY 声明伪目标 —— 强制 make 忽略同名文件,始终执行命令

🔥值得注意的是:

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 的调试就不过多叙述


希望读者们多多三连支持

小编会继续更新

你们的鼓励就是我前进的动力!

请添加图片描述

评论 52
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值