【Linux第三课-基础开发工具的使用】yum、vim、gcc g+,2024年最新BAT面试&高级进阶

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Linux运维全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上运维知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024b (备注运维)
img

正文


#### yum搜索



yum list | grep lrzsz


#### yum安装


yum是先下载再安装



yum install 文件名



yum -y install 文件名


#### yum卸载



yum remove 文件名


-y:对于一些询问表示yes



yum -y remove 文件名


### yum的周边 - yum的整个生态问题


![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/8c9306ffc80b4b8688dac35e8f0c8d13.png)  
 **1、yum如何得知目标服务器的地址和下载链接?**  
 配置文件里面会记录下载的地址



ls /etc/yum.repos.d/


这里面对应的都是yum的本地仓库名  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/0053ab3c84e847f6909b45697ea09518.png)  
 其中CentOS-Base.repo就是yum源,可以更改yum源  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/35f5c6d9f095452dab63d5d1e2502347.png)  
 扩展软件源



yum install -y epel-release


**2、云服务器谁提供的?**  
 既得利益者提供的  
 **3、谁提供软件?**  
 大家愿意写的人开发的


## vim


写代码:vim  
 编代码:gcc/g++  
 调代码:gdb  
 维护项目结构、自动化编译:make/makefile


### 快速介绍vim


**vim是一款多模式的编辑器,vim里面还有很多的子命令,来进行代码的编写操作**  
 1、进入vim后一般没法写入,需要模式切换,i – insert插入模式  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/f7d5daa39ca44e1fb791825a7980cb10.png)


2、写完后按esc退出插入模式 -> shift+;(也就是:)进入低行模式 -> wq(保存并退出)-> 回车  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/0d72090ef61c4610b1604cbf90206e99.png)  
 3、gcc编译,运行  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/ef575d49cfdb445d98bce7d1f62b897f.png)


### vim的模式


![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/88b047f0726c47d1a4961ec578e78236.png)


#### 命令模式


插入模式 -> 命令模式:esc


#### 插入模式


命令模式 -> 插入模式 :i/a/o


#### 低行模式


命令模式 -> 低行模式:shift + ;(也就是:)  
 低行模式 -> 命令模式:esc


### 常见模式 – 命令、低行


#### 命令模式 – 光标的移动


将光标定位到最右侧结尾处:shift+4($)  
 将光标定位到最左侧开头处:shift+6(^)  
 将光标定位到文本的最后一行:shift+g(G)  
 将光标定位到文本的最开始一行:gg  
 将光标定位到特定一行,例如第五行:5 shift g  
 h:左  
 j:下  
 k:上  
 l:右  
 w:以单词为单位向后移动  
 b:以单词为单位向前移动


#### 命令模式 – 复制粘贴、剪贴、删除


n+yy:复制所在行/多行  
 n+p:在下一行进行粘贴一次/n次  
 u:撤销编辑操作,undo  
 ctrl+r:对刚刚的撤销进行撤销  
 n+dd:删除/剪切当前行/多行  
 dd、p:剪切


#### 命令模式 – 小写/大写


shift+`(~):大小写快速切换


#### 替换模式


n+r:替换当前光标所在字符/n个字符  
 shift+r:替换模式  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/49597213549348a7b7fbe76dbc7febcd.png)


#### 命令模式 – 删除


n+x:删除光标所在字符/后面n个字符(往后删)  
 n+shift+x:往前删


#### 命令模式 – 查找


shift+3(#):高亮要查找的函数名  
 n:下一个查找到的函数名/字符串


#### 低行模式


wq:报存并退出  
 w!:强制写  
 q!:强制退出  
 wq!:强制保存并退出  
 !指令:可以在低行模式执行shell指令  
 /搜索的内容:  
 ?搜索的内容  
 vs 文件名:会形成一个并在旁边对比  
 set nu:调出行号  
 set nonu:取消行号  
 vim test.c 行号:光标直接定位到指定行  
 shift+zz:保存并退出vim(不建议用)  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/7816968d993e4f738d268d3bbbcb208f.png)  
 光标在哪个窗口就是在编辑哪个窗口  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/15ecca1fa2004adfa2e4c1d69de0d958.png)


![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/fdcd3ae7b49c4c0a81ac3db38b938f68.png)


#### 多窗口的光标移动


ctrl+ww


#### 批量化注释/去注释


**批量化注释**  
 1、ctrl+v:进入VISUAL BLOCK模式  
 2、按hjkl进行区域选择  
 3、shift+i:从VISUAL BLOCK模式切换成插入模式  
 4、//  
 5、按esc  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/4c35be547051444280c4f4a538e60071.png)  
 **批量化去注释**  
 1、ctrl+v:进入VISUAL BLOCK模式  
 2、hjkl选择区域  
 3、按d  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/48d8b238f4c7449a9bf92f75079a5b79.png)


### 配置问题


1、进入用户家目录下  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/842456c6fab04417bd3a1d2548ea131f.png)  
 2、创建.vimrc  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/46ebf80b7a5b49f8a5c55e591a8f6d7a.png)  
 3、vim .vimrc进行配置



set nu //显示行号
set cursorline //突出显示当前行
hi Cursorline cterm=bold ctermbg=black ctermfg=green guibg=green //粗体显示选中行,用黑色框,字体标绿
set cursorcolum //设置列高亮
set autoindent //自动缩进
set softtabstop=4 //统一缩进为4
set tabstop=4 //tab缩进为4
set cindent
set shiftwidth=4
set smartindent //提供自动缩进
syntax on //语法高亮

inoremap ’ ‘’i //自动补齐
inoremap " “”i
inoremap < <>i
inoremap ( ()i
inoremap [ []i
inoremap { {}O



> 
> 简便配置方法:  
>  `curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o ./install.sh && bash ./install.sh`  
>  一定在普通账号下运行
> 
> 
> 


### 解决sudo的白名单


![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/df8a358e82a74887ab220487fc1429e8.png)  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/4d0da8b843934877b6ebba6a65877b2d.png)  
 得有root账户改



vim /etc/sudoers


![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/35b12ba4408e4f0984c6057c05b3c941.png)  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/2e6de0f0694a4c52bc8441efedb85e81.png)


## gcc/g++


### 程序的翻译过程及gcc选项


编译C语言是默认是a.out,如果想要指定名称的话,下列两种方法。  
 默认形成  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/d990e85c32e04286b30253a95c4c059c.png)  
 指定名称  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/88ad0ac71b084f0f940500b8cea1d487.png)  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/270ebed3e10c475e9d42a047109b37e6.png)  
 凡是和 -o 紧邻的是形成的可执行程序



1 #include <stdio.h>
2 #define M 100
3
4 int main()
5 {
6 printf(“hello linux\n”);
7 printf(“hello linux: %d\n”, M);
8 //printf(“hello linux\n”);
9 //printf(“hello linux\n”);
10 //printf(“hello linux\n”);
11 //printf(“hello linux\n”);
12 //printf(“hello linux\n”);
13
14 return 0;
15 }


#### 预处理


头文件展开:本质在预处理的时候,将头文件内容拷贝至源文件  
 去注释  
 宏替换  
 条件编译



gcc -E test.c -o test.i


-E : 从现在开始进行程序的翻译过程,预处理做完的时候就停下来  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/01cf6793fdf042f7a11ca8792e6ceaef.png)  
 上面多出的八百多行代码都是头文件展开


##### 条件编译


条件编译的本质:对代码进行裁剪



1 #include <stdio.h>
2 #define VERSION1 1
3 // #define VERSION2 2
4
5 int main()
6 {
7 printf(“hello linux\n”);
8 #ifdef VERSION1
9 printf(“hello version1.0\n”);
10 #elif VERSION2
11 printf(“hello version2.0\n”);
12 #else
13 printf(“hello free version\n”);
14 #endif
15 //printf(“hello linux\n”);
16 //printf(“hello linux\n”);
17 //printf(“hello linux\n”);
18 //printf(“hello linux\n”);
19 //printf(“hello linux\n”);
20
21 return 0;
22 }


![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/d0eeb5ac21524b69b8a7b110e133db83.png)  
 将test.c里面的两个宏都注释掉,可以在gcc指令里面添加宏 -D



gcc test.c -o test.exe -D VERSION1=1
gcc test.c -o test.exe -DVERSION1=1
//可以连着也可也不连着


![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/13a934a2bd484473b875dd9012646ca7.png)



> 
> 应用场景  
>  1、对于软件的专业版与社区版,维护一份代码,可以用条件编译对里面的功能进行裁剪  
>  2、头文件定义上,防止头文件被重复包含
> 
> 
> 



#ifndef __CODE_H__
#define __CODE_H__
// XXXX
#endif


#### 编译


**C -> 汇编**  
 从test.c开始也许, -S 从现在开始进行语言的翻译,当编译工作完成就停止



gcc -S test.i -o test.s


形成汇编语言  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/2f140e16a48d4c4a82dc8c07a9a4e46c.png)


#### 汇编


汇编 -> 二进制,可重定位目标二进制文件(**不能执行**)  
 test.o : 可重定位目标二进制文件



gcc -c test.s -o test.o


vim是文本编辑器,所有对于二进制展现出来是乱码  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/9666e318041149cebdbab8171ba2aca4.png)


#### 链接


将可执行程序与库关联起来



gcc -o test test.o


ldd 命令可以查询一个可执行文件所依赖的库  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/2d2d50be2245424fb48f6e725e1c4cb4.png)  
 其中/lib64/libc.so.6就是所用的C语言的库


### g++


**1、编译失败问题**  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/4365990856624e298db359373fbde234.png)  
 输入下列指令



sudo yum -y install gcc+ gcc-c++


**2、编译形成指定名称的可执行程序**  
 C语言也可以用g++编译,g++的选项与gcc一样  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/ab7e8cd176e84038a789b65f5ddc1991.png)



g++ test.c -o mybincpp
g++ -o mybincpp test.c


### 动静态库的理解 – 链接


我们所写的代码都是代码+调用的库  
 库让我们写一份代码不用从零开始  
 都是文件  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/844ece53fbfd48919a09d13924308278.png)


下面这个是个动态库  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/4a3ff0d356334a5f807e86f78fe752ed.png)  
 去掉lib(所有库都以这个开头),去掉.so.6,所有这个库是个c库  
 动态库 -> 动态链接  
 静态库 -> 静态链接



> 
> **动态库**  
>  优点:节省资源,不会出现太多的重复代码 — 资源(磁盘、内存、网络(如果你在一个网站上传一份重复很多的代码,那别人下载也是在浪费资源)等)  
>  缺点:对库的依赖性比较强,一旦库丢失,所以使用这个库的程序都无法运行  
>  **静态库**  
>  优点:不依赖库,同类型平台中都可以直接运行使用  
>  缺点:可执行程序体积比较大,比较浪费资源 — 资源(磁盘、内存、网络(如果你在一个网站上传一份重复很多的代码,那别人下载也是在浪费资源)等)
> 
> 
> 


#### 动态链接、动态库


被多个使用者共享使用,一旦缺失,所有程序都不可以运行了!!  
 我们调用哪个库,只是在代码中指明库的地址  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/84dc31d899ad45ae89449f66e1e536e0.png)


### 静态链接、静态库


代码中我们用到哪个库,直接硬拷过来,成为静态链接  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/346d331faeb94127b87b93e0c4f9cda9.png)



ldd

最全的Linux教程,Linux从入门到精通

======================

  1. linux从入门到精通(第2版)

  2. Linux系统移植

  3. Linux驱动开发入门与实战

  4. LINUX 系统移植 第2版

  5. Linux开源网络全栈详解 从DPDK到OpenFlow

华为18级工程师呕心沥血撰写3000页Linux学习笔记教程

第一份《Linux从入门到精通》466页

====================

内容简介

====

本书是获得了很多读者好评的Linux经典畅销书**《Linux从入门到精通》的第2版**。本书第1版出版后曾经多次印刷,并被51CTO读书频道评为“最受读者喜爱的原创IT技术图书奖”。本书第﹖版以最新的Ubuntu 12.04为版本,循序渐进地向读者介绍了Linux 的基础应用、系统管理、网络应用、娱乐和办公、程序开发、服务器配置、系统安全等。本书附带1张光盘,内容为本书配套多媒体教学视频。另外,本书还为读者提供了大量的Linux学习资料和Ubuntu安装镜像文件,供读者免费下载。

华为18级工程师呕心沥血撰写3000页Linux学习笔记教程

本书适合广大Linux初中级用户、开源软件爱好者和大专院校的学生阅读,同时也非常适合准备从事Linux平台开发的各类人员。

需要《Linux入门到精通》、《linux系统移植》、《Linux驱动开发入门实战》、《Linux开源网络全栈》电子书籍及教程的工程师朋友们劳烦您转发+评论

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注运维)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
、系统安全等。本书附带1张光盘,内容为本书配套多媒体教学视频。另外,本书还为读者提供了大量的Linux学习资料和Ubuntu安装镜像文件,供读者免费下载。

华为18级工程师呕心沥血撰写3000页Linux学习笔记教程

本书适合广大Linux初中级用户、开源软件爱好者和大专院校的学生阅读,同时也非常适合准备从事Linux平台开发的各类人员。

需要《Linux入门到精通》、《linux系统移植》、《Linux驱动开发入门实战》、《Linux开源网络全栈》电子书籍及教程的工程师朋友们劳烦您转发+评论

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注运维)
[外链图片转存中…(img-5nuhaO0b-1713461247051)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 12
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值