Linux环境基础开发工具(yum , vim , gcc/g++ , 动静态库)

目录

一.Linux 软件包管理器 yum

1.什么是软件包

2.关于yum

3.查看软件包

4.安装/卸载软件

二.Linux编辑器-vim使用

1.vim的基本概念

2.三种模式之间的切换

3.vim命令模式的操作(多练习)

4.vim底行模式操作

5.vim简单配置 

三.Linux编译器-gcc/g++使用

1.形成可执行程序的步骤

2.gcc/g++语法语法: gcc/g++ 选项 文件

3.编译程序的具体四个步骤

 补充:

四.动态库和静态库

1.链接是在做什么?

2.理解库的概念:为什么要有库?

3.函数库一般分为静态库和动态库两种:

4. ldd 查看可执行程序依赖库 ,file查看动静态链接 ​编辑

5.实现静态链接(gcc和g++默认生成的二进制程序是动态链接的)


一.Linux 软件包管理器 yum

1.什么是软件包

  • 在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序.
  • 但是这样太麻烦了, 于是有些人把一些常用的软件提前编译好, 做成软件包(可以理解成windows上的安 装程序)放在一个服务器上, 通过包管理器可以很方便的获取到这个编译好的软件包, 直接进行安装.
  • 软件包和软件包管理器, 就好比 "App" 和 "应用商店" 这样的关系.
  • yum(Yellow dog Updater, Modifified)是Linux下非常常用的一种包管理器. 主要应用在Fedora, RedHat, Centos等发行版上.

                                

2.关于yum

①Linux有以下三种方法安装软件:

①源码安装,自行编译(不友好)

②rpm安装(存在依赖关系问题)

③yum安装(常用)

                         

②yum如何安装软件 

yum是一个软件包管理器,能够从指定的服务器自动下载软件包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,也可以卸载软件。

                                        

③下载软件肯定是要联网的,使用ping命令查看网络情况:

                

④ 关于非标准软件

 有些软件服务是非标准的,在其他服务器上

3.查看软件包

①.查看所有软件包

[gsx@VM-0-2-centos ~]$ yum list

                

②.查找特定软件 

(1)lrzsz可以将Windows当中的文件上传到Linux当中,也可以将Linux当中的文件下载到Windows当中,实现云服务器和本地机器之间进行文件互传。                        

(2)通过管道和 grep找到特定软件

说明一下:
1)软件包名称:主版本号.次版本号.源程序发行号-软件包的发行号.主机平台.cpu架构。
2)"x86_64"后缀表示64位系统的安装包,"i686"后缀表示32位系统安装包,选择包时要和系统匹配。
3)"el7"表示操作系统发行版的版本,“el7"表示的是"centos7/redhat7”,“el6"表示"centos6/redhat6”。
4)最后一列表示的是“软件源”的名称,类似于“小米应用商店”这样的概念

                                        

4.安装/卸载软件

① 安装

yum会自动找到都有哪些软件包需要下载, 需要手动确认" y "进行安装。

②卸载

 yum自动卸载,清理软件,需要确认" y "卸载

③无交互式安装/卸载

 这里添加 -y 选项就不需要手动确认安装,省心。

补充:

1.centOS7中任何时刻只允许一个yum进行安装,如果再尝试用yum安装另外一个软件,yum会报错。

2.建议安装软件的时候都带上sudo,因为安装的时候一定是需要把对应的软件下载下来这是第一步,下载完毕之后下一步工作是吧下载好的软件拷贝到Linux系统指定的目录下面,而有的目录不允许你拷贝,为了防止拷贝出现问题的情况,建议yum下载的时候带sudo


3.client怎么知道包服务器在哪里?
client已经配置了目的服务器,以及软件源信息;以后安装的时候就会自动找到服务器,知道去哪里下载

        

                        

二.Linux编辑器-vim使用

1.vim的基本概念

vim在我们做开发的时候,主要解决我们编写代码的问题,本质上就是一个多模式的文本编辑器,vim是对vi的拓展。

vim最常用的三种模式:命令模式、插入模式、底行模式。
①. 命令模式(Normal mode)。
在命令模式下,我们可以控制屏幕光标的移动,字符、字或行的删除,复制粘贴,剪贴等操作。
②. 插入模式(Insert mode)。
只有在插入模式下才能进行文字输入,该模式是我们使用最频繁的编辑模式。
③. 底行模式(Command mode)。
在底行模式下,我们可以将文件保存或退出,也可以进行查找字符串等操作。在底行模式下我们还可以直接输入vim help-modes查看当前vim的所有模式。

                                         

2.三种模式之间的切换


命令模式  切换至  插入模式
(1)输入「i」:在当前光标处进入插入模式。
(2)输入「a」:在当前光标的后一位置进入插入模式。
(3)输入「o」:在当前光标处下一行进入插入模式。

命令模式  切换至  底行模式
(shift + ;)其实等价于 :

插入模式底行模式  切换至  命令模式
插入模式或底行模式切换至命令模式都是直接按一下「Esc」键即可。
                        

                         

3.vim命令模式的操作(多练习)

①移动光标

(1)按「k」:光标上移。
(2)按「j」:光标下移。
(3)按「h」:光标左移。
(4)按「l」:光标右移。

( h ,i ,j ,k 是对之前的兼容,很早的时候没有 ↑↓←→四个键)
(5)按「$」(shift+4):移动到光标所在行的行尾。
(6)按「^」(shift+6):移动到光标所在行的行首。
(7)按「gg」:移动到文本开始。
(8)按「Shift+g」:移动到文本末尾。
(9)按「n+Shift+g」:移动到第n行行首。
(10)按「n+Enter」:当前光标向下移动n行。
(11)按「w ,nw」:光标从左到右,从上到下的跳到下一个单词的开头。
(12)按「e ,ne」:光标从左到右,从上到下的跳到下一个单词的结尾。
(13)按「b ,nb」:光标从右到左,从下到上的跳到上一个单词的开头

                

②删除

(1) 按「x」:删除光标所在位置的字符。
(2) 按「nx」:删除光标所在位置开始往后的n个字符。
(3) 按「X(shift+x)」:删除光标所在位置的前一个字符。
(4) 按「nX」:删除光标所在位置的前n个字符。
(5) 按「dd」:删除光标所在行(更像是剪切,如果不粘贴就是删除)。
(6) 按「ndd」:删除光标所在行开始往下的n行。

                         

③复制粘贴 

(1) 按「yy」:复制光标所在行到缓冲区。
(2) 按「nyy」:复制光标所在行开始往下的n行到缓冲区。
(3) 按「yw」:将光标所在位置开始的单词复制到缓冲区。
(4) 按「nyw」:将光标所在位置开始往后的n个单词复制到缓冲区。
(5) 按「p」:将已复制的内容在光标的下一行粘贴上。
(6) 按「np」:将已复制的内容在光标的下一行粘贴n次。

                        

④撤销 

(1)按「u」:撤销。
(2)按「Ctrl+r」:恢复刚刚的撤销。

                         

⑤大小写切换

(1) 按「~ (shift+`) 」:完成光标所在位置字符的大小写切换。
(2) 按「n~」:完成光标所在位置开始往后的n个字符的大小写切换。

                        
⑥替换

(1) 按「r」:替换光标所在位置的字符。
(2) 按「R(shift+r)」:替换光标所到位置的字符,直到按下「Esc」键为止。(进入替换模式)

                

⑦修改

1)按「cw」:将光标所在位置开始到字尾的字符删除,并进入插入模式。
2)按「cnw」:将光标所在位置开始往后的n个字删除,并进入插入模式。 

                        
⑧翻页

(1) 按「Ctrl+b」:上翻一页。
(2) 按「Ctrl+f」:下翻一页。
(3) 按「Ctrl+u」:上翻半页。
(4) 按「Ctrl+d」:下翻半页。

                                                 

⑨常用: 

                                        

补充:

(1)

                                 

(2)!vim(执行上一次的vim指令)

                                

4.vim底行模式操作

进入底行模式前必须是命令模式,然后shift + ;。

①设置行号
(1)「set nu」:显示行号。
(2) 「set nonu」:取消行号。

②保存退出
(1)「w」:保存文件。
(2)「q」:退出vim,如果无法离开vim,可在「q」后面跟一个「!」表示强制退出。
(3)「wq」:保存退出。

③分屏
(1)「vs 文件名」:实现多文件的编辑。
(2)「Ctrl+w+w」:光标在多屏幕下进行切换。

④执行指令(底行模式下也可以进行外部操作)
「!+指令」:在文本编辑的情况下,可以在指令前面加上「!」就可以执行Linux的指令,例如查看目录、编译当前代码等

                        

⑤查找字符
(1)「/关键字」: 先按「/」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按 「n」会往后寻找到您要的关键字为止。
(2)「?关键字」:先按「?」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直 按「n」会往前寻找到您要的关键字为止。

                        

5.vim简单配置 

①在目录/etc/下面,有个名为vimrc的文件,这是系统中公共的配置文件,对所有用户都有效。


②在每个用户的主目录/home/xxx下,都可以自己建立私有的配置文件,命名为“.vimrc”,这是该用户私有的配置文件,仅对该用户有效。

③vim的配置比较复杂,某些vim配置还需要使用插件,建议不要自己一个个去配置。比较简单的方法是使用别人做好的,在自己的当前用户登录的账号执行以下指令(剩下的按照提示一步步做就行了):curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o ./install.sh && bash ./install.sh 

                        

                

三.Linux编译器-gcc/g++使用

1.形成可执行程序的步骤

gcc和g++分别是GNU的C和C++的编译器,gcc和g++在执行编译程序的时候一般有以下四个步骤
(1) 预处理(头文件展开、去注释、宏替换、条件编译)。
(2) 编译(将C/C++代码翻译成汇编语言)。
(3) 汇编(汇编代码转为二进制目标文件)(可重定向目标文件)。
(4) 链接(目标文件和系统库进行链接形成可执行程序)。

gcc最终是要把代码变成二进制程序,为什么要把代码翻译成二进制的可执行程序?
计算机只认识二进制,准确点,磁盘,cpu,网卡,内存,显卡,各种电子设备只认识二进制;程序要能够被内存保存起来,被cpu执行你的程序只能是二进制。

                        

2.gcc/g++语法
语法: gcc/g++ 选项 文件

常用选项:
(1) -E 只进行预处理,这个不生成文件,你需要把他重定向到一个输出文件里面(否则将预处理后的结果显示到屏幕上)。
(2) -S 编译到汇编语言,不进行汇编和链接
(3) -c 编译到目标代码
(4) -o 将处理结果输出到指定文件,该选项后需紧跟输出文件名。
(5) -static 此选项对生成的文件采用静态链接。
(6) -g 生成调试信息(若不携带该选项则默认生成release版本)。
(7) -shared 此选项将尽量使用动态库,生成文件较小。
(8) -w 不生成任何警告信息。
(9) -Wall 生成所有警告信息。
(10) -O0/-O1/-O2/-O3 编译器优化选项的四个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高。

                

3.编译程序的具体四个步骤

①预处理 

[gsx@VM-0-2-centos 2022.6.2]$ gcc -E test.c -o test.i

 补充:

(1) 头文件展开:通过编译器找到指定的头文件,并且将该头文件对应的内容拷贝至源文件

(2) 当宏不存在的时候默认是假

                

(3)gcc有个选项 -D动态指定宏 

  •  宏的命令行定义,进行编译器级别的宏重新设定
  • 如果将来我们能够通过某种方式识别我们的OS,那么就可以经过编译器动态的设置参数,就可以进行动态的代码裁剪,是Windows的就编译Windows的,是Linux就编译Linux的。通过设置gcc对应的命令行参数实现代码级别的条件编译。
     

                                 

②编译

[gsx@VM-0-2-centos 2022.6.2]$ gcc -S test.i -o test.s

                                

③汇编

 [gsx@VM-0-2-centos 2022.6.2]$ gcc -c test.s -o test.o

                         

④链接

[gsx@VM-0-2-centos 2022.6.2]$ gcc test.o -o mytest 

 

  • gcc/g++不带-E、-S、-c选项时,就默认生成预处理、编译、汇编、链接全过程后的文件。
  • 若不用-o选项指定生成文件的文件名,则默认生成的可执行文件名为a.out
  • gcc -o mytest test.c(-o选项后面接文件名,不论放在那里)

        

                        

四.动态库和静态库

1.链接是在做什么?
目标文件,只有函数调用,没有函数的实现,链接的过程本质是将自己的调用过程和具体的实现过程关联起来

                        

2.理解库的概念:为什么要有库?

①减少开发者的工作量(站在巨人的肩膀上)
②其实是软件分工的一种表现

                                                 

3.函数库一般分为静态库和动态库两种:

(1)静态库是指编译链接时,把库文件的代码全部加入到可执行文件当中,因此生成的文件比较大,但在运行时也就不再需要库文件了,静态库一般以.a为后缀。

静态链接:
 优点:不依赖第三方库,程序的可移植性较高。
 缺点:浪费空间(多个程序之间调用相同的库函数,每个库函数都有一份实现),加载慢。

                        
(2) 动态库与之相反,在编译链接时并没有把库文件的代码加入到可执行文件当中,而是在程序运行时由链接文件加载库,这样可以节省系统的开销,动态库一般以.so为后缀。
动态链接:
 优点:省空间(磁盘的空间(存储),内存的空间(运行)),可执行程序体积小,加载速度快(从磁盘加载到内存)。
 缺点:依赖动态库,程序可移植性较差(运行时)。

                                         

(3)库的命名        

libname.so(a)

                 

①动态库和静态库没有绝对的好坏,取决于应用场景。 

②所谓的静态链接就是把库中的实现拷贝到自己的可执行程序当中;

                

4. ldd 查看可执行程序依赖库 ,file查看动静态链接
 

         

                        

 5.实现静态链接(gcc和g++默认生成的二进制程序是动态链接的)

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值