关注分享主机优惠活动
国内外VPS云服务器

linux环境下基本开发工具的使用(Linux环境编程:从应用程序到内核)

摘要:它是世界上非常常见的一种包管理器,主要用于发行。同一时间只能安装一台服务器,不能同时安装多个软件。例如,它意味着将光标移动到文章的第一行。

文章目录Linux软件包管理器yum软件包查看软件包安装软件卸载软件Linux编辑器vim vim基本概念vim基本操作vim正常模式命令集vim最后一行模式命令集简单vim配置Linux编译器-gcc/g++使用Linux调试器-gdb使用Linux项目自动化构建工具-Make/Makefile Make/Makefile Linux第一个小程序-进度条使用git命令行。

Linux包管理器yum包安装软件一般有三种方法:1。源代码2.rpm包。有点像windows下载的安装包3.yum命令行。

Linux下安装软件的一种常见方式是下载程序的源代码,编译后得到可执行程序。但是这样太麻烦了,所以有人提前编译一些常用的软件,做成一个软件包(可以理解为windows上的安装程序)放在服务器上。编译后的软件包可以很容易地通过包管理器获得并直接安装。软件包和包管理器就像“App”和“包管理器”Yum(黄狗更新器,已修改)是Linux下非常常见的包管理器。主要用于Fedora、RedHat、Centos等发行版。一个服务器一次只能由一个yum安装,不能同时安装多个软件。Yum从服务器下载rpm包。所有关于yum的操作都必须确保主机(虚拟机)网络畅通,并且可以通过ping命令进行验证。例如:

查看套餐[ymz @ vm-16-9-centos ~] $ yum列表。

软件包名称:主版本号,次版本号,源程序发布号-软件包发布号,主机平台,cpu架构。后缀“x86_64”表示64位系统的安装包。后缀“i686”表示32位系统安装包。选择套餐时,要和系统匹配。“el7”表示操作系统发行版本。“el7”表示CentOS 7/Red Hat 7。“El6”表示centos6/redhat6。最后一栏,base表示“软件来源”的名称,类似于“小米应用商店”。“华为应用商店”的概念。yum list命令可用于列出当前可用的软件包。因为包的数量可能非常大,这里我们需要使用grep命令只过滤掉我们关注的包。例如:

[ymz @ vm-16-9-centos ~]$ yum list | grep lrzsz(lrzsz可以从Windows上传文件到Linux,也可以从Linux下载文件到Windows,实现云服务器和本地机器的信息交换)。

通过yum安装软件,我们可以通过一个非常简单的命令完成gcc的安装。

[ymz @ vm-16-9-centos ~]$ sudo yum install lrz szym会自动找出需要下载的软件包,然后点击“y”确认安装。出现“完成”字样,表示安装已完成。

卸载软件[ymz @ vm-16-9-centos ~]$ sudo yum删除lrzsz。

Linux editor -vim和vi/vim的区别在于都是多模态编辑器,但区别在于vim是vi的升级版,不仅兼容vi的所有指令,还有一些新的特性在里面。比如语法高亮,可视化操作不仅可以在终端运行,还可以在x window,mac os,windows中运行。

Vim的基本概念vim本质上是一个多模态的文本编辑器。这里主要介绍三种模式:命令模式、插入模式、末行模式。

1.正常/正常/命令模式控制屏幕光标的移动、字符、单词或行的删除、部分的移动和复制以及进入插入模式或最后一行模式。2.插入模式只有在插入模式下你才能输入文本,并按“ESC”键返回命令行模式。这种模式是我们后面使用最频繁的编辑模式。3.在命令模式下保存或退出文件,或者替换文件,找到字符串并列出行号。在命令模式下,shift+:可以进入这种模式。要查看您的所有模式:打开vim,直接进入底部模式:帮助vim -模式。

vim基本操作进入vim。在系统提示您输入vim和文件名后,您将进入vim全屏编辑屏幕。

[ymz @ vm-16-9-centos ~]$ vim test . c[正常模式]切换到[插入模式]输入a:在当前光标输入后面的位置进入插入模式I:在当前光标输入处进入插入模式O:在当前光标处开始新的一行进入插入模式。

[插入模式]/[底线模式]切换到[正常模式]并按[Esc]。

【正常模式】切换到【末行模式】【Shift+;“,其实就是输入“:”

退出vim并保存文档。在【正常模式】下,点击“:”冒号键进入“底线模式”,例如::w保存当前文档:wq保存文档,退出vim :q!输入q!,被迫退出vim而没有保存。

Vim普通模式命令集移动光标vim可以直接用键盘上的光标上下左右移动,但普通vim使用小写英文字母“H”、“J”、“K”、“L”。控制光标分别向左、下、上、右移动一帧。按G:移到文章末尾。按$:移动到光标所在行的末尾。按W:移动到下一个单词的开头。按E:移动到下一个单词的末尾。按B: Cursor 56l按[[gg]]:输入文本时按[Shift+G];输入文字结尾时按“ctrl”+“b”;将屏幕向后移动时按“ctrl ”+“f ”;将屏幕移动到前面时按“CTRL+U”;将屏幕向后移动半页时,按“CTRL+U”

删除“X”字:每按一次,光标位置就删除一个字符“nx”:比如“6x”就是你在光标位置删除后面(包括你自己)六个字符“X”;每按一次,就会删除光标位置前面的一个字符“nX”:例如,“20X”

复制“yw”:将光标到后缀的字符复制到缓冲区中。“nyw”:将n个单词复制到缓冲区“yy”:将光标所在的行复制到缓冲区。“nyy”:比如“6yy”就是从光标所在行“向下”复制六行文本。“p”:将缓冲区中的字符粘贴到光标所在的位置。注意:所有与“Y”相关的复制命令必须与“P”匹配才能完成复制粘贴功能。

替换“r”:替换光标所在的字符。“R”:替换光标所在的字符,直到按下“ESC”键。

撤消上一次操作“u”:如果误执行了一个命令,可以立即按“u”返回上一次操作。多次按“u”以执行多次回复。“ctrl+r”:撤消恢复

改“cw”:把光标所在的单词改成后缀“c#w”:比如“c3w”就是改三个单词。

跳转到指定行“Ctrl”+“G”列出光标所在行的行号。“#G”:比如“15G”就是把光标移到文章第15行的开头。

Vim末行模式命令集在使用末行模式之前,请记得先按“ESC”键确认处于正常模式,再按“:”冒号进入末行模式。

列出行号“set nu”:输入“set nu”后,行号会列在文件中每一行的前面。跳转到文档“#”中的一行:“#”表示一个数字,在冒号后输入一个数字,然后按enter键跳转到该行。例如,输入数字15,按回车键跳转到文章的第15行。查找字符“/关键字”:先按“/”键,然后输入要查找的字符。如果你第一次找到的关键词不是你想要的,你可以继续按“n”在后面找到你想要的关键词。「?关键词":点击"?”键,然后输入您要查找的字符。如果你第一次找到的关键词不是你想要的,你可以一直按“n”来找到你想要的关键词。保存文档“w”:在冒号中输入字母“w”保存文档,留下vim“q”;按“q”退出;如果不能离开Vim,可以在“q”后面加一个“!“被迫离开维姆。”wq”:一般建议离开时和“w”一起使用,这样可以在退出时保存文档。分屏显示:简单vim配置文件的位置:

在/etc/目录下,有一个名为vimrc的文件,它是系统中的公共vim配置文件,对所有用户都有效。在每个用户的主目录中,您可以创建自己的名为“”的私有配置文件。vimrc”。例如,在/root目录中,通常已经存在一个. vimrc文件。如果不存在,就创建它。切换用户自己执行su,进入自己的主工作目录,执行cd ~打开。vimrc文件放在自己的目录中,并执行vim。vimrc Linux编译器-gcc/g++使用预处理(宏替换)。

预处理函数主要包括宏定义、文件包含、条件编译、取消注释等预处理指令都是以#开头的代码行。示例:gcc -E hello.c -o hello.i选项“-E”,用于使gcc在预处理后停止编译过程。选项“-o”指的是目标文件,而“.I”文件被编译(生成汇编)为预处理后的C源程序。

在这个阶段,gcc首先要检查代码的规范性,是否有语法错误等。,以确定代码的实际工作情况。检查无误后,gcc会将代码翻译成汇编语言。用户可以使用“-S”选项查看,只编译不汇编,生成汇编代码示例:gcc–hello . I–o hello . S assembly(生成机器可读代码)。

在装配阶段。在编译阶段生成的“s”文件被转换成目标文件。你可以使用选项“-c”来查看汇编代码已经被转换成了“的二进制目标代码。o”。示例:gcc -c hello.s -o hello.o链接(生成可执行文件或库文件)。

编译成功后,我们进入链接阶段实例:gcc hello.o -o hello函数库。

在我们的C程序中,没有定义“printf”的函数实现,预编译中包含的“stdio.h”只有这个函数的声明,但没有定义函数实现。那么,“printf”的功能实现在哪里呢?最后的答案是:系统在一个名为libc.so.6的库文件中实现了所有这些函数,当没有指定时,gcc会在默认的搜索路径“/usr/lib”下进行搜索,即链接到libc.so.6库函数,这样就可以实现函数“printf”,这就是链接的函数。

函数库一般分为静态库和动态库。

1.静态库是指在编译链接时,将库文件的所有代码都添加到可执行文件中,所以生成的文件比较大,但运行时不再需要库文件。它的后缀一般是”。一个”。2.而动态库则是在编译链接时不把库文件的代码添加到可执行文件中,而是在程序执行时由运行时链接文件加载库,这样可以节省系统开销。动态库通常被命名为。所以”,如上所述,libc.so.6是一个动态库。默认情况下,Gcc在编译时使用动态库。链接完成后,gcc可以生成一个可执行文件,如下所示。gcc hello.o -o hello 3.gcc默认生成的二进制程序是动态链接的,可以通过file命令验证。

Gcc选项

-E只激活预处理。这不会生成文件。您需要将其重定向到输出文件。-S编译成汇编语言,没有汇编和链接。-c编译成目标代码。-o文件输出到文件。-static该选项使用静态链接-g为生成的文件生成调试信息。GNU调试器可以使用这个信息-共享。这个选项会尽量使用动态库,所以生成的文件比较小,但是系统需要动态库-OO,-O1,-O2,-O3编译的四级优化选项。-OO表示不优化,-O1是默认值,-O3的优化级别最高,为-w,不产生任何警告信息。-Wall生成所有警告消息。_

Linux调试器-gdb使用两种方式释放程序,调试模式和释放模式。Linux gcc/g++二进制程序,默认是发布模式。并且是使用动态库的动态链接。要使用gdb进行调试,在从源代码生成二进制程序时,必须添加-g选项(在调试模式下发布)。可以看出,调试版本的文件大小比发布版本大,因为调试版本有更多的调试信息(debuginfo):用readelf可以看到发布版本没有调试信息,而调试版本有。

进入调试:gdb binFile退出:退出或ctrl+d

调试命令:

List/L行号:显示binFile的源代码,然后最后一个位置到下面,一次10行。List/l函数名:列出函数的源代码。r或run:运行程序。(重新运行)n或next:单次执行。(相当于F10)s in VS) s or step:进入函数调用。(相当于VS中的F11)break(b)行号:在一行上设置断点。(F9)中断函数名:在函数的开头设置断点。信息断点:查看断点信息。Finish:执行直到当前函数返回,然后等待命令。打印:打印表达式的值,通过它可以修改变量值或调用函数。p变量:打印变量值。Set var:修改变量的值。继续(或c):从当前位置连续执行程序,而不是一步一步执行。Run(或r):从头开始连续运行程序,而不是一步一步地运行。删除断点:删除所有断点。删除断点n:删除序列号为n的断点,禁用断点:禁用断点。启用断点:启用断点。信息(或I)断点:查看当前设置了哪些断点。显示变量名:跟踪一个变量,并在每次停止时显示其值。取消显示:取消对先前设置的变量的跟踪。直到X行号:跳到X行。Breaktrace(或bt):查看所有级别的函数调用和参数。Info(i) locals:查看当前堆栈框架的局部变量的值。退出:退出广发。Linux项目自动化构建工具-make/Makefile make/Makefile一个项目中的源文件不算,按照类型、功能、模块放在几个目录中。Makefile定义了一系列规则来指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重编译,甚至更复杂的函数操作。makefile的好处是“自动编译”。一旦写好,只需要一个make命令,整个项目自动编译,大大提高了软件开发的效率。Make是一个命令工具,它是一个解释makefile中指令的命令工具。一般来说,大部分IDE都有这个命令,比如Delphi的make,Visual C++的nmake,Linux下GNU的make。可见,makefile已经成为工程中的一种编译方法。Make是命令,makefile是文件,两者一起使用完成项目的自动构建。

在Makefile中触摸Makefile/Makefile,目标之后。假的也代表一个假的目标,而不是真正的文件目标。注意,默认情况下,makefile的目标是一个文件。Makefile第二次拒绝执行make(文章1),因为文件mytest存在。另一方面,Makefile总是执行clean后面的规则。这说明。虚伪:清洁发挥了作用。

依赖项下的文件mytest依赖于mytest.o,mytest.o依赖于mytest.s mytest.s依赖于mytest.c。

取决于方法原理,make如何工作,在默认方式下,也就是我们只输入make命令。所以:

Make将在当前目录中找到一个名为“makefile”或“Makefile”的文件。如果找到了,它会在文件中找到第一个目标文件。在上面的例子中,它将找到文件“mytest ”,并将这个文件作为最终的目标文件。如果mytest文件不存在,或者mytest所依赖的mytest.o文件的文件修改时间比mytest文件新(可以用touch测试),那么他会执行后面定义的命令来生成mytest文件。如果mytest所依赖的mytest.o文件不存在,那么make会在当前文件中查找mytest.o文件的依赖关系,如果找到,则根据哪个规则生成mytest.o文件。(有点像堆栈进程)当然,你的C文件和H文件是存在的,所以make会生成mytest.o文件,然后用mytest.o文件声明make的终极任务,也就是执行mytest文件。这是整个make的依赖,make会一层一层的找文件的依赖,直到最后编译出第一个目标文件。在搜索的过程中,如果出现错误,比如找不到最后一个依赖文件,那么make会直接退出并报错,而make只是简单的忽略定义命令的错误或者编译不成功。Make只关心文件的依赖关系,也就是说,如果我找到依赖关系后,冒号后面的文件仍然不在,那么对不起,我就不行了。项目清理,比如clean,和第一个目标文件没有直接或者间接的关联,所以后面定义的命令不会自动执行,但是我们可以表明它会被make执行。即命令——“make clean”,以清除所有目标文件进行重新编辑。但是一般来说,我们干净的目标文件,我们把它设置成一个伪目标,用。假的,而伪目标的特点就是总是被执行。

Linux的第一个小程序——进度条/r&&/nLine feed:在原行位置换到下一行;回车:直接返回本行起始位置,不换下一行;换行和回车。

/n是回车换行/r是回车不换行。

请看下面的代码:

printf(" hello ");睡眠(5);执行这段代码,5秒后才会显示hello。可以肯定的是,printf是先执行的,但是printf已经执行了,并不意味着必须显示字符串。在睡眠期间,字符串在缓冲区中。buffer的本质是一个内存空间,临时存储临时数据,并在适当的时候刷新。刷新策略:1。不缓存直接刷新。2.缓冲区已满,然后刷新,缓冲区已满。3.触摸/n时刷新,刷新行(显示)。4.强制刷新。将数据写入磁盘、文件、显示器、网络和其他设备或文件。任何C程序在启动时,默认情况下都会打开三个iostream(文件)stdin、stdout和stderr。

倒计时代码:

1 # include " mytest . h " 2 # include 3 4 int main()5 { 6 int count = 9;7 while(count>=0){ 8 printf("%d/r ",count);9 fflush(stdout);10睡眠(1);11 count --;12 } 13 14返回0;15}进度条代码:

1 # include 2 # include 3 # include 4 5 # define NUM 100 6 7 int main()8 { 9 char bar[NUM+2];10 memset(bar,0,sizeof(bar));11 12 const char * lable = " |/-//";13 int I = 0;14 15 while(我

未经允许不得转载:主机频道 » linux环境下基本开发工具的使用(Linux环境编程:从应用程序到内核)

评论 抢沙发

评论前必须登录!