兰州西固区公司网站建设,wordpress后台不提醒更新,石家庄市市政建设工程公司网站,国际站关键词推广目录
Linux软件包管理器 yum
rzsz
Linux编辑器——vim vim的使用 vim的基本操作 命令模式的常见命令 底行模式的常见命令 vim是需要配置的
Linux编译器——gcc/g 预处理 编译 汇编 链接
函数库
Linux项目自动化构建工具 make/makefile
make原理
项目清理
Linux调试器g…目录
Linux软件包管理器 yum
rzsz
Linux编辑器——vim vim的使用 vim的基本操作 命令模式的常见命令 底行模式的常见命令 vim是需要配置的
Linux编译器——gcc/g 预处理 编译 汇编 链接
函数库
Linux项目自动化构建工具 make/makefile
make原理
项目清理
Linux调试器gdb Linux软件包管理器 yum 简单的把它理解为“应用商店”就可以我们可以来安装第一个软件。 rzsz 这个工具用于windows机器和远端的linux机器通过xshell传输文件可以通过拖拽的方式将文件传上去。 通过yum list命令可以看到所有的软件包。 yum list | grep lrzsz 使用下面这个指令就可以下载它了。 sudo yum install lrzsz -y 想要卸载的话使用这个就可以了。 sudo yum remove lrzsz Linux编辑器——vim 我们在网上随便一找就可以找到这张键盘图这就是大部分的vim的使用方法但也没有必要全记住用哪个记哪个就可以了。 vim它是一个编辑器换言之它只能写代码和我们平常用的编译器还是有差别的我用的vs编译器它是一个集成的开发环境它既可以编写代码、调试代码也可以运行程序等但是vim它只能写代码就像记事本一样。 那它只能写代码我们为什么还要用它呢在linux下的编辑器还是很多的但是对于初学的时候vim还是能在众多编辑器中脱颖而出的它是许多系统默认装机数最高的虽然学习成本有一点高但是不要灰心并没有那么难学在linux下我们还是要编写代码的所以vim是比较优的选择。 vim的使用 首先要进入vim #vim //会出现一些版本信息等
#vim [文件名] //如果这个文件没有就创建并进入vim 想要退出vim首先按下键盘的Esc输入(:q)(这是一个整体)就可以退出。 这个只是测试vim能不能使用。 vim的基本操作 vim是一款多模式的编辑器它有命令模式、编辑(插入)模式和底行模式。 首先输入vim [文件名]命令进入vim这是一个全屏幕编辑画面进入vim默认的就是命令模式我们需要进入到插入模式才可以编写代码。 开始进入默认的命令模式的左下角就是这样的或者什么都没有。 [命令模式]切换至[插入模式] 输入a 输入i 输入o 输入过后左下角就会变成这样这就进入到了插入模式。 [插入模式]切换至[命令模式] 直接按下键盘左上角的Esc 输入后屏幕左下角就变成了空白。 那我们想要退出vim就可以进入到底行模式 [命令模式]切换至[底行模式] 输入也就是冒号 再输入命令 :w (保存当前文件) :q (退出) :wp (保存并退出) :! (加上 ! 就代表强制,出现问题的时候可以加上!) 由图可知插入模式和底行模式不能切换。 命令模式的常见命令 yy将当前光标所在行进行复制nyy可以复制多行 p 将复制的内容进行粘贴np可以粘贴多次 dd将当前光标所在的行进行剪切(删除)也可以使用ndd u 撤销 ctrl r撤销u的操作 shift g(G)将光标定位到文件的结尾 gg将光标定位到文件的最开始 n shift g将光标定位到文件的第n行 shift 6(^) 将光标定位到当前行的最开始 shift 4($) 将光标定位到当前行的结尾 w、b以单词为单位进行光标的向后、向前移动也可以nw、nb使用 h、j、k、l向左、向下、向上、向右移动光标 shift ~大小写的切换 shift r 进入替换模式可以替换光标指向的内容 r 替换光标所在的字符同样可以使用nr x or shift x(X)删除光标所在的字符之后or之前也支持nx 底行模式的常见命令 :set nu显示行号 :set nonu取消显示行号 :vs (文件名)分屏操作 ctrl ww分屏下切换操作的文件 :! 指令在vim的底行模式下执行linux下的指令 vim是需要配置的 如果你现在正在使用原生的vim来写代码那么第一个感觉应该就是很麻烦那是因为vim是需要配置的我们需要配置一个好用的环境来写代码。 首先我们要在当前的用户目录下要有一个.vimrc的文件我们需要在这个文件中添加vim的配置项那有哪些配置项呢那可以百度一下想要什么样的效果就添加什么效果的配置项到文件.vimrc中如果嫌麻烦也可以找一些插件这里我就不过多介绍了。 Linux编译器——gcc/g 前面的vim满足我们写代码的要求gcc和g就可以帮我们编译代码gcc这个软件可以说是大部分操作系统自动默认安装的g可能没有不要担心就算是gcc没有我们也可以下载。 在这之前我们也可以先来讨论一下程序的翻译过程编译器做的工作不就是把我们认识的语言转化成计算机认识的语言吗。下面我们就来介绍我们写的代码是怎么一步步的翻译成了计算机认识的语言也就是二进制的指令。 预处理 在这一部分要处理的就是 1.去注释 2.宏替换 3.头文件展开 4.条件编译 下面我们介绍一下简单的选项 -E让gcc在预处理结束后停止翻译过程 -o让.c文件编译成指定名字的文件 因为在Linux下直接gcc -E .c文件他会把内容直接打印出来所以我们用gcc -E .c文件 -o 指定的文件。 //我的.c文件就是mytest.c里面有简单的代码
# gcc -E mytest.c -o mytest.i//指定的文件就是指定文件名 然后就可以看到目录下有一个mytest.i的文件我们用vim打开G选项直接到最底可以看到原来的代码变成了800多行的这就是把头文件全展开了进行了宏替换注释都没有了条件编译执行了所以这就是预处理的操作。 最后在说一下我们写代码的时候在头文件中的开头都会写上#pragma once这句代码就是让我们的头文件不要重复编译以免代码过长。 编译 编译就是把C语言转换为汇编语言。 # gcc -S mytest.i -o mytest.s 选项-S让gcc在编译结束后停止翻译过程生成汇编语言 这里用.i或者.c都可以都是到编译就停止 汇编 把汇编语言变成可重定位目标二进制文件 # gcc -c mytest.s -o mytest.o这个.o文件和我们Windows下的obj文件是一样的 选项-c让gcc在汇编结束后停止翻译过程生成可重定位目标二进制文件 链接 # gcc mytest.o -o mytest 执行这个命令就可以生成可执行程序 函数库 在链接的过程还可以再说一点其他的一般的链接过程有两种方式动态链接和静态链接。 动态链接需要动态库静态链接需要静态库。这也是我们一直默默在用的只是我们自己可能不知道。 静态库是指编译链接时把库文件的代码全部加入到可执行文件当中因此生成的文件比较大但在运行时也就不再需要库文件了静态库一般以.a为后缀。动态库不是这样的在编译链接时并没有把库文件的代码加入到可执行文件当中而是在程序运行时由链接文件加载库这样可以节省系统的开销动态库一般以.so为后缀。 动态链接 优点省空间磁盘的空间内存的空间bin体积小加载速度快。 缺点依赖动态库程序可移植性较差。静态链接 优点不依赖第三方库程序的可移植性较高。 缺点浪费空间。 gcc和g生成的文件默认就是动态链接使用file指令就可以查看。 使用ldd指令可以查看动态链接的可执行文件所依赖的库。 这个/lib64/libc.so.6就是c标准库linux下的很多指令也是用c语言写的使用ldd /user/bin/ls也可以看到这条依赖关系。 可执行文件就是把函数和库中的实现链接起来你写的C语言的printf函数它到最后也是要和库中链接起来的。gcc和g默认采用的是动态链接但如果我们需要使用静态链接带上-static选项即可。有的云服务器可能没有一些静态库这时候就需要你自己去下载了。 由此可见动态和静态链接的内存还是差别很大的。 Linux项目自动化构建工具 make/makefile 简单来说make是一个命令makefile是一个文件以后的工程的源文件会有很多个文件的编译顺序也是有要求的而make和makefile写好就可以帮助我们自动化构建项目。 想要编写makefile就要知道两点依赖关系和依赖方法。 依赖关系文件1改变会影响文件2这就是文件2依赖于文件1。 比如.o文件是由.c文件通过预处理、编译、汇编之后生成的文件.c文件就会影响.o文件所以.o文件依赖于.c文件。 依赖方法文件2依赖于文件1那么由文件1生成文件2的方法就是依赖方法。 .o文件依赖于.c文件那么gcc -c -o test.c test.o这条命令就是.o依赖于.c的依赖方法。 那么下面就来用一下make和makefile。 在目录下随便写了一段代码下面这张就是makefile文件写完了之后就可以使用make来生成可执行程序。 make原理 make会在当前目录下找名字为“Makefile”或“makefile”的文件。如果找到它会找文件中的第一个目标文件也就是上图中会找到mytest这个文件并把这个文件作为最终的目标文件。简单来说就是看看makefile中的第一个目标文件是否存在也就是mytest是否存在。但是一开始这个文件是不存在的或者mytest的所依赖的文件被修改了或者说根据文件的修改时间那就会通过依赖方法生成这个文件也就是gcc编译生成一个文件。 使用stat命令就可以查看文件的修改时间。 这也是Linux下文件的ACM。 如果mytest所依赖的文件test.c不存在那么make会在makefile文件中寻找目标为mytest依赖的文件test.c的依赖关系例如test.c: ... 如果找到则再根据其依赖方法生成test.c文件但是上面实例中没有可以生成test.c的依赖关系。这就是整个make的依赖性make会一层又一层地去找文件的依赖关系直到最终编译出第一个目标文件。在寻找的过程中如果出现错误比如最后被依赖的文件找不到那么make就会直接退出并报错。 Makefile文件的简写方式 $表示依赖关系中的目标文件冒号左边例如mytest。$^表示依赖关系中的依赖文件列表冒号右边全部上面的例子只有一个。 下面就是简写的样式 项目清理 项目是需要被清理的。clean这个就是清理的依赖关系通常命名成clean它不需要依赖任何文件使用的时候直接输入make clean命令就可以执行下面的依赖方法。clean通常要设置为伪目标使用.PHONY修饰后无论输入多少次都会执行这句如果不修饰就会出现这样的情况。 修饰后就会一直执行 Linux调试器gdb 程序的发布方式有两种分别是debug和release。Linux下gcc和g编译出来的二进制可执行程序默认是release的想要变成debug模式就要加-g选项。 之后就可以进入gdb调试界面了。 gdb会记录最近一条命令如果还想使用这个命令可以直接使用回车。接下来就开始介绍需要使用的命令。 r/run开始调试类似于vs下的f5如果没有设置断点就直接结束
bbreak行号在这一行打断点
iinfobbreakpoint查看当前所有断点
ddelete断点编号删掉这一行的断点
nnext逐过程类似f10
sstep逐语句类似f11
pprint打印表达式的值
btbreaktrace查看各级函数调用及参数相当于查看调用堆栈
finish执行到当前函数返回
display变量名跟踪查看一个变量每次停下都显示它的值
undisplay常显示编号取消常显示
until行号跳转至该行
ccontinue从当前位置开始运行到下一个断点处
disable断点编号禁用断点
enable断点编号启用断点
qquit退出gdb 这些就是常用的命令熟能生巧多多练习才可以熟练的使用。