什么是软件包?
在Linux下安装软件,一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序.
但是这样太麻烦了,于是有些人把一些常用的软件提前编译好,做成软件包(可以理解成windows上的安装程序)放在一个服务器上,通过包管理器可以很方便的获取到这个编译好的软件包, 直接进行安装.
软件包和软件包管理器, 就好比 "App" 和 "应用商店" 这样的关系.
yum(Yellow dog Updater,Modified)是Linux下非常常用的一种包管理器,主要应用在Fedora, RedHat,Centos等发行版上
注意事项:关于 yum 的所有操作必须保证主机(虚拟机)网络畅通
可以通过 ping 指令验证:ping www.baidu.com
查看软件包
因为yum list命令可以列举当前所有的软件包,数量过大,一般用grey进行筛选,
例如
命令:yum list | grey sl
注意事项:
1.软件包名称: 主版本号.次版本号.源程序发行号-软件包的发行号.主机平台.cpu架构.
2."x86_64" 后缀表示64位系统的安装包, "i686" 后缀表示32位系统安装包. 选择包时要和系统匹配.
3."el7" 表示操作系统发行版的版本. "el7" 表示的是 centos7/redhat7. "el6" 表示 centos6/redhat6.
4.最后一列,update 表示的是 "软件源" 的名称, 类似于 "小米应用商店", "华为应用商店" 这样的概念
sudo yum install sl
yum会自动找到哪些软件包需要下载,这时候敲y确认安装,出现complete,说明安装完成
注意:
1.安装软件时由于需要向系统目录中写入内容,一般需要 sudo 或者切到 root 账户下才能完成.
2.yum安装软件只能一个装完了再装另一个,正在yum安装一个软件的过程中, 如果再尝试用yum安装另外一个软件, yum会报错
sudo yum remove sl
命令:vim 文件名称 --- 打开文件
如果文件为空,用vim打开后的样子如下(因为vim没有被配置)
如果有人打字就会发现,没有任何效果,屏幕不会显示任何字符,(如果有,那是摁到关键字了),那么为什么打不出字?
因为vim有好多模式,刚开始打开时,vim处于命令模式下,该模式下不能输入文本,这里顺便介绍一下vim的三种常用的模式
1.命令模式(Normal mode):控制光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode下,或者到 last line mode
2.插入模式(Insert mode):只有在Insert mode下,才可以做文字输入,按ESC键返回命令模式,在命令模式下按 a \ i \ o,就能就如插入模式,但是进入的方式略有差异,可以自己试试看
3.末行模式(last line mode):文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作。 在命令模式下,shift+;(即英文下的':')即可进入该模式。要查看你的所有模式:打开vim,底行模式直接输入:help vim-modes
(当然vim中不只有这3中,但这三种是最常用的,其他的该文章不做过多介绍)
按「i」 进入插入模式,按“i”进入插入模式后是从光标当前位置开始输入文件
按「a」进入插入模式后,是从目前光标所在位置的下一个位置开始输入文字
按「o」进入插入模式后,是插入新的一行,从行首开始输入文字
vim可以直接用键盘的位移键来上下左右移动,但正规的vim是用「h」「j」「k」「l」分别控制光标左、下、上、右移一格
按「G」:移动到文章的最后
按「 $ 」:移动到光标所在行的“行尾”
按「^」:移动到光标所在行的“行首”
按「w」:光标跳到下个字的开头
按「e」:光标跳到下个字的字尾
按「b」:光标回到上个字的开头
按「数字l」:光标移到该行的第#个位置,如:5l,56l
按[gg]:进入到文本开始
(以上是基本的光标移动命令)
「x」:每按一次,删除光标所在位置的一个字符
「#x」:例如,「6x」表示删除光标所在位置的“后面(包含自己在内)”6个字符
「X」:大写的X,每按一次,删除光标所在位置的“前面”一个字符
「#X」:例如,「20X」表示删除光标所在位置的“前面”20个字符
「dd」:删除光标所在行(效果和将本行剪切到剪切板类似,可以和「p」配合使用)
「#dd」:从光标所在行开始删除#行
「yy」:复制光标所在行到缓冲区
「#yy」:例如,「6yy」表示拷贝从光标所在的该行“往下数”6行文字
「p」:将缓冲区内的字符贴到光标所在位置。注意:所有与“y”有关的复制命令都必须与“p”配合才能完成复制与粘贴功能
「r」:替换光标所在处的字符
「R」:替换光标所到之处的字符,直到按下「ESC」键为止
「u」:如果误执行一个命令,可以按下「u」,回到上一个操作。按多次“u”可以执行多次回复
「ctrl + r」: 撤销的恢复
「ctrl」+「g」列出光标所在行的行号。
「#G」:例如,「15G」,移动光标至文章的第15行行首
在使用末行模式之前,请记住先按「ESC」键确定您已经处于正常模式,再按「:」冒号即可进入末行模式
其他的模式这里就不做过多介绍了,有兴趣的话,可以自己百度一下
注意:如果想更加便捷的使用vim,需要配置vim,装插件等等,比较繁琐,这里简单展示一下我配置完成后的效果,就不做详细讲解了(这里主要给大家讲如何快速上手vim),大家可以去网上看看别人是怎么配置的
编辑器在生成可执行程序的过程中,共有4个阶段分别是:预处理,编译,汇编、链接
预处理功能主要包括宏定义,文件包含,条件编译,去注释等。
预处理指令是以#号开头的代码行
在底行模式下输入 vs+文件名 可以打开多个窗口
在这个阶段中,gcc 首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,gcc 把代码翻译成汇编语言。
汇编阶段是把编译阶段生成的“.s”文件转成目标文件
在成功编译之后,就进入了链接阶段
这里涉及到库函数的概念
函数库一般分为动态库和静态库两种
1.静态库是指编译链接时,把库文件的代码全部加入到可执行文件中,因此生成的文件比较大,但在运行时也就不再需要库文件了,其后缀名一般为“.a”
2.动态库与之相反,在编译链接时并没有把库文件的代码加入到可执行文件中,而是在程序执行时由运行时链接文件加载库,这样可以节省系统的开销。动态库一般后缀名为“.so”gcc 在编译时默认使用动态库。完成了链接之后,gcc 就可以生成可执行文件
gcc默认生成的二进制程序,是动态链接的,这点可以通过 file 命令验证
(g++的使用和gcc基本一摸一样,这里就不在赘述了)
背景介绍
程序的发布方式有两种,debug模式和release模式
Linux gcc/g++出来的二进制程序,默认是release模式
要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项
gdb 可执行文件名 退出: ctrl + d 或 quit 调试命令
(这里篇幅有限,还有些指令请读者自行回去试试效果)
Make是一个常用的构建工具,它可以通过Makefile文件定义项目的构建规则和依赖关系,实现自动化构建。Makefile是一个文本文件,其中包含一系列规则和命令,用来描述如何生成目标文件。
Make的工作原理是根据源文件的依赖关系和时间戳判断哪些文件需要重新编译,从而实现增量构建,提高构建效率。
以下是Makefile中常见的元素和用法:
1. 目标(Target):目标是Makefile中的构建单元。每个目标关联着一系列依赖项和构建命令。目标与规则之间使用冒号(:)分隔。
2. 依赖项(Dependencies):描述目标所依赖的文件或其他目标。Make会检查依赖项的时间戳,若依赖项的时间戳较新,则认为该依赖项需要重新构建。
3. 构建命令(Build Commands):在Makefile中,通过命令行来执行构建操作。构建命令在目标行后面缩进一个Tab,并在同一行或多行中定义。
4. 变量(Variables):在Makefile中,可以定义变量来保存一些常用的值,如编译器、编译选项等。使用$(变量名)或${变量名}来引用变量。
5. 隐式规则(Implicit Rules):Make内置了一些常见的规则,用来推导目标文件的依赖关系和构建命令。例如,针对.c文件,Make会自动推导出对应的编译命令。
6. 注释(Comments):在Makefile中可以使用#符号添加注释,注释会被忽略。
Makefile的使用步骤通常包括以下几个步骤:
1. 编写Makefile文件,定义目标、依赖项和构建命令。
2. 运行make命令,Make会读取Makefile文件并执行相应的构建规则。
3. Make会根据目标的依赖关系和时间戳,判断哪些文件需要重新构建,并执行相应的构建命令。
4. 构建完成后,会生成目标文件或执行对应的操作。
Make的优点是简单易用,适用于许多项目的构建和管理。它可以自动化执行编译、链接、依赖管理等操作。同时,Make支持自定义规则和变量,可以根据项目的需求进行灵活配置和定制。