Linux中的工具使用
工具:
1.程序的开发
1.1 软硬件的安装(yum)
功能:安装/卸载软件
指令(根目录):yum install app/yum removu app
指令(普通用户):sudo yum install app / sudo yum remove app
指令(不交互,直接进行):sudo yum -y install app /sudo yum -y remove app
指令(查找我要下载的文件):sudo yum list | grep app 前提:不知道app的全称
从我们手机上的软件管家来说,我们点击安装,怎么知道软件管家是去哪里下载这个软件呢?
所以这些软件管家一般都是有内置下载链接的地址的(配置文件)
同理:我们的yum也是(拥有自己的配置文件——yum源)
说白了就是:yum自带的配置文件中有各个软件的下载地址
更新yum源问题:
a.先进行备份老的yum源 CentOS-Base.repo
b.wegt 获取新的yum源配置文件 – 可以通过网络搜索得到
c.mv 重命名成为CentOS-Base.repo
d.yum clean all && yum makecache (先清空原来的缓存,然后重置缓存的意思)
并且如果你想要安装的软件,找不到,就有可能是在扩展的yum源中:epel.repo
指令:sudo yum install -y epel-release (根据base yum源,帮我们找到和他匹配的扩展yum源),然后直接sudo yum install -y 即可!
如何写代码(vim)
Linux编辑器–vim的使用
vim是一个具有多模式的编辑器–各种模式的用法都有差别–各种模式的切换
一但在Linux中使用了vim这个指令,接下来我们就只需要在vim中进行一系列的操作
首先已进入vim(命令模式)
我们输入命令(i/a/o)表示进入插入模式(不同的指令只是进入的方式不一样而已)
进入了插入模式,我们就可以进行代码的编写了
编写完代码之后,我们先要用esc退出插入模式,然后进入底行模式
进入底行模式方法(shift+:)
进入底行模式之后,就是退出(q),但是退出前要保存,所以(wq),退出并保存
此时就可以编译和执行了
并且我们有时可能还会用到替换模式(shift+r)
2.1 vim的最小集
想从别的模式进入到命令模式就是无脑esc
vim就是一个编辑器(不是编译器)
退出的时候一般都是先保存再退出
我们在进行vim模式的切换的时候,我们一般只使用3到5中模式
2.2 vim的指令集
2.2.1 底行模式:
底行模式下,调出和去掉行号:set nu/set nonu
%s///g:把想要替换的内容进行替换,例:%s/hello/Hello/g
/key :表示进行搜索(key表示的是搜索的内容)
!command:表示不需要退出vim进行对vim的指令操作(如:!gcc 、!./a.out)
vs file :进行分屏,文件名由我自己输入
并且在vim的分屏模式下,光标在哪里,就表示我们在写哪一个文件
切换光标到不同的界面:Ctrl+ww
2.2.2 命令模式:
因为在进行vim的操作时,大部分的命令,都是在命令模式下进行的(切记不是底行模式也不是插入模式)
2.2.2.1
复制/粘贴指令:
yy:复制当前行
nyy:复制当前行以下的n行
p:粘贴一行
np:粘贴多行相同的内容到当前光标之下
2.2.2.2
撤销/反撤销指令:
u:撤销刚刚的操作(Windows中的Ctrl+z)
Ctrl + r 反撤销(Windows中的Ctrl+y)
2.2.2.3
剪切/删除指令:
dd:对当前行进行剪切/删除
ndd:对当前行以下的n行内容进行剪切/删除
若不粘贴就是删除,粘贴就是剪切
2.2.2.4
光标的灵活移动指令:
G:将光标定位到文档的最结尾(Windows中的Home键)
gg:将光标定位到文档的最开始(Windows中的End键)
nG:将光标定位到文档的指定行
$:将光标定位到文档行的最后面
^:将光标定位到文档行的最前面
nw/nb:在文档行中进行前后移动,w向前,b向后,前提是按照单词为单位
~:快速大小写的切换
r:替换光标所在的字符
nr:替换光标后面的n个字符
nx:删除光标以后的n个字符
nX:删除光标以前的n个字符
2.3 vim的配置
我们正常一打开vim,vim就会先去访问.vimrc这个配置文件
所以我们想要对vim进行改变,就是对.vimrc进行改变
指令:vim .vimrc
配置不需要麻烦:自动配置你值得拥有
如何编译(gcc/g++)
编译我们在鹏哥的C语言上是有学过的
但是当时可能是比较不明白(听的懵懵懂懂的)
我们这边把编译给复习一下:
3.1 预处理
包括:头文件的展开合并到源文件,条件编译,宏替换,去注释等
3.2 编译
包括:将C语言转换成汇编语言
3.3 汇编
包括:将汇编文件转换为(可重定位的)目标二进制文件(目前还不可以被执行)-----只是把我们自己写的(除了printf和scanf之类的库函数)翻译成为二进制目标文件
3.4 链接
包括:将我们自己形成的.obj文件和库文件进行结合,从而形成可执行文件
以上就是大致的编译过程,我们现在就使用Linux中的gcc来具体的看一下这些过程都是怎样的
例:我们直接得到可执行程序(a.out)指令:gcc file.c
或:gcc -o file.obj file.c -> gcc -o file file.c => 同理,(.obj)只是写给我们自己看的而已
编译原理展开理解:
3.1.1 预处理(后缀.i)
指令:gcc -E test.c -o test.i => 表示:将我的test.c文件进行预处理完之后,再把预处理之后的代码存到test.i中
这样我们就得到了预处理之后的test.i文件了(我们就可以进到文件之中看一下我们自己的代码和预处理之后的代码的区别了)
3.2.1 编译(后缀.s)
指令:gcc -S test.i -o test.s => 表示:将我预处理之后的test.i文件进行C语言转换成汇编语言,然后把转换成汇编语言之后的文件存到test.s文件中
这样我们就得到了C语言转换为汇编语言之后的test.s文件了(我们就可以进到文件之中看一下C语言变成汇编语言之后是什么样子的了)
3.3.1 汇编(后缀.o)
指令:gcc -c test.s -o test.o => 表示:将我的汇编语言文件转换成一个二进制的文件,然后把这个二进制的文件存到test.o文件中
这样我们就得到了汇编语言变成二进制test.o文件了(我们就可以进到文件之中看一下此时的test.o文件是长什么样了)
注意:此时的这个test.o 文件是一个不可执行文件(因为:还没有进行链接),并且不是权限的问题,可以通过提权证明
3.4.1 链接
链接过程涉及到:调用C语言库之类的问题,具体不容易看到,理解就行
总:虽然我们可以直接通过 gcc test.c来编译一个文件,但是,上述过程可以让我们更好的理解编译的具体原理!
C语言库分为两种:本质就是文件
静态库:libxxxxx.a 以a为后缀的就是静态库
动态库:libxxxxx.so 以so为后缀的就是动态库
如何理解动态库:
情景:一个初中生考上了高中,然后设置需要完成的作业列表(包括去网吧),并且通过学长得知如何去网吧,然后完成作业,前往网吧,找到网管,找到电脑,回到学校
此时有了这个情景,我们可以进行理解:
初中生(一个程序)
高中(内存) |
作业列表(程序中的具体代码)
完成作业(进行代码的编译)
学长(编译器的链接过程)
网管(搜索相应的库函数)
静态链接指令:
gcc test.c -o test.static -static (前提是你有静态库)
如何调式(gdb)
后面再说
代码的自动化构建(make/makefile)
make是一个命令
makefile是一个文件
规则:
Makefile是一个围绕依赖关系和依赖方法构建的一个自动化编译的工具
依赖关系、依赖方法
完成一件事情一定要有正确的依赖关系和依赖方法
.PHONY file – 表示:file总是被执行,就是每次make都会被执行
如何进行重新执行,就是通过更改对比文件创建的时间来判断(通过touch来更改文件的创建时间)