一、Linux软件包管理器 yum
软件包和软件包管理器, 就好比 "App" 和 "应用商店" ,我们现在要安装的yum就是相当于在我们的Linux终端安装一个"应用商店"。
但使用yum时,我们一定要保证主机(虚拟机)网络畅通!这点也非常好理解,因为在日常操作中我们的手机进入应用商店也是必须要联网的。
我们可以通过 ping 指令检验网络的速度:
ping [网址]
我们这里以www.csdn.com为例:
1.搜索软件
在软件商城里下载软件我们一定要进行相关的搜索对不对?我们现在来看看使用yum如何进行相关软件的搜索:
yum list | grep [软件名]
[| grep]是以列表的形式列出,[软件名]可以是你想要的软件全名或者部分名。
这里以 yum list | grep nb 来演示一下:
2.下载软件
我们想来下载一下软件,我们输入一下 yum install nb ,现在我们来看一下操作系统给我们的提示
注意到最后一行,需要我们是 root 才可以下载软件(软件需要下载到root用户目录下的某个文件,然后拷贝到系统中),而之前我们又学过一个指令,让我们能直接行使 root 的权力而不切换到 root 用户—— sudo ,下面我们来看看完整指令:
sudo yum install [软件名]
但是当我们执行sudo语句时,可能会产生以下的报错,这是因为系统检测到我们当前用户并没有在 sudoer 这个文件中配置(好比我访问你的私有成员但是我不是友元函数),这个问题我们在上一篇博客中也讲过,或者可以直接跳转到本篇博客的 vim 中会教大家配置。
3.卸载软件
卸载软件和下载软件其实都是差不多的,我们还是要以root的身份卸载。
sudo yum remove [软件名]
执行 remove 时,系统还会询问是否删除[yes/No]:
我们还有办法让系统不再询问:sudo yum -y remove [软件名]
其中,-y 就是直接回答了yes
4.实践一下
如果当前用户没有在sudoer文件中,可以直接用root登录,给大家介绍一个好玩的软件:
sudo yum install sl
下载好后我们输入sl运行,就会有一辆小火车从屏幕前走过。
二、Linux编辑器 vim
我们在windows下编译有VS,而我们之前在Linux下只是学了一个记事本Nano,不禁好奇Linux下没有什么更高级的语言编辑器了吗?当然有,我们先来学习一下vim
1.认识vim
vim不只是简单的指令,我们先要来学习一下什么是vim呢?
vim是一款多模式的编辑器,但是我们只需要学习它的三个模式就好了:
命令模式:控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入[插入模式]下,或者进入[末行模式]
插入模式:只有在[插入模式]下,才可以做文字输入,按[ESC]键可回到命令行模式。
末行模式:文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作。 在命令模式下,[shift+:]即可进入该模式。
2.vim的基本操作
进入vim,在系统提示符号输入vim及文件名称后,就进入vim全屏幕编辑画面:
vim test.c
当我们用vim打开一个文件时,
1.首先进入的是[命令模式],我们需要手动输入[i]进入[插入模式]。
2.最后编辑完文本按[Esc]就可以回到命令模式,再按[shift+;]可以进入[底行模式](此时光标也是在最后一行)。
3.再输入wq(保存并退出)或q!(强制退出,某些时候wq不管用时可用)即可退出文件。、
3.vim正常模式命令集
我们再来多讲一些批量化注释和批量去注释化的操作:
批量化注释:
批量化去注释:
4.vim配置sudoers
5.vim插件
在VS中我们有自动纠错或者自动补齐等功能,但是我们的vim编辑器就好像最原始的Dec-C++一样,什么功能都没有,这里就要用到我们的一些插件啦,类似游戏里的mod一样,这里我们提供一个链接,但是只能centos7的用户使用,也可以自己去网上搜罗顺手的插件。
curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o./install.sh && bash ./install.sh
三、Linux调试器 gbd
程序的发布方式有两种,我们在使用VS时也可以看到,分为release版本和debug版本,其中release版本一般是发行版本,而debug版本是程序员进行程序编写测试时的版本。
在Linux中,gcc/g++编译出的自动是release版本,如果想让其生成debug版本,需要加-g。
现在我们要聊的就是Linux下进行程序调试的操作,也就是VS中的F10或F11。
进入调试:gdb binFile (binFile即此次要调试的文件名)
(gdb都支持简写,以下命令可以写全也可以写首字母)退出调试:[ctrl+d]或[quit]调试命令
list/l [行号]:显示binFile源代码
(会记录上次显示的末尾,若继续使用则会接着上次的末尾继续往下列,每次列10行)。
list/l [函数名]:列出某个函数的源代码。
r / run:运行程序。
n / next:单条执行(类似于F11)。
s / step:进入函数调用。
break / b 行号:在某一行设置断点(类似于F9)。
delete breakpoints:删除所有断点
delete breakpoints n:删除序号为n的断点
disable breakpoints:禁用断点
enable breakpoints:启用断点
break [函数名]:在某个函数开头设置断点。
info break :查看断点信息。
finish:执行到当前函数返回,然后停下来等待命令。
print / p:打印表达式的值,通过表达式可以修改变量的值或者调用函数。
p 变量:打印变量值。
set var:修改变量的值
continue / c:从当前位置开始连续而非单步执行程序
run / r:从开始连续而非单步执行程序
info / i breakpoints:参看当前设置了哪些断点
display 变量名:跟踪查看一个变量,每次停下来都显示它的值
undisplay:取消对先前设置的那些变量的跟踪
until X行号:跳至X行
breaktrace / bt:查看各级函数调用及参数
info(i) locals:查看当前栈帧局部变量的值
quit:退出gdb
四、Linux项目自动化构建工具 make/Makefile
makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率,其中make是一条命令,makefile是一个文件,两个搭配使用,完成项目自动化构建。
1.简单认识makefile
首先我们先来见一下什么是makefile:
然后我们再随便创建一个C语言文件:
我们在makefile中编写如下代码:
然后我们退出以后直接使用命令[make],我们发现系统直接帮我们执行了代码的编译,并形成了名为mytest的可执行文件:
然后我们再执行[make clean],我们发现,我们刚才生成的可执行程序被删除了:
有了这些初步认识,我想我们对make和makefile也有了一定的了解,下面我们来讲讲它的结构。
2.makefile基本结构
我把makefile文件中分了模块,我们现在逐个来说明。
依赖关系:依赖方法要对应的若干文件,mytest:test.c
依赖方法:必须以[Tab]开头(不能是4个空格)对依赖关系进行的相关操作,
gcc -o mytest test.c目标文件:通过依赖方法生成的文件名称,mytest
依赖关系列表:test.c,可以为空,若多个文件可用空格分隔(test1.c test2.c)
.PHONY:其后面的内容会被强制执行
一些特殊符号的含义:@指代目标文件,^指代依赖关系列表,$可以理解为读取符号
类似于宏操作:bin目标文件,src依赖关系列表,可直接替换
3.makefile原理
初识makefile原理
1.make会在当前目录下找名字叫“Makefile”或“makefile”的文件。
2. 如果找到,它会找文件中的第一个目标文件,在上面的例子中,他会找到“mytest”这个文件,并把这个文件作为最终的目标文件。
3.makefile会自上而下根据依赖关系执行。4.如果有多条依赖关系,makefile会依次执行每条关系,如图(类似递归调用)
这就是整个make的依赖性,make会一层又一层地去找文件的依赖关系,直到最终编译出第一个目标文件。
makefile对最新的可执行程序默认不会再重新生成:
为什么会这样?提高编译效率。
那么makefile如何得知这个程序已经被编译过了呢?
makefile会对比可执行文件的最近修改时间和源文件最近的修改时间。
makefile是不是很聪明呢?
——The End——