资讯动态

linux笔记归纳3:linux开发工具

发布时间:2026/9/26 10:44:51 来源:尧图企业网站定制
linux开发工具目录linux开发工具一、软件包管理器二、Linux安装软件的方式三、Linux软件生态四、镜像源4.1.镜像的概念4.2.切换镜像源五、软件包管理器的操作5.1.查看软件包5.2.安装软件5.3.卸载软件5.4.查看安装源5.5.软件的分类六、编辑器vim6.1.vim的三种主模式6.2.命令模式的操作6.3.底行模式的操作6.4.vim配置七、编译器gcc/g7.1.编译与链接7.2.ldd指令7.3.条件编译7.4.预处理的本质7.5.汇编的本质7.6.链接的本质7.7.动静态库7.8.静态链接7.9.动态链接7.10.补充知识八、自动化构建工具8.1.,Makefile的基本概念8.2.依赖关系与依赖方法8.3.项目清理与伪目标8.3.Makefile的基本使用8.4.文件时间详解8.5.make的工作原理8.6.Makefile的扩展语法九、进度条9.1.行缓冲区9.2.倒计时9.3.进度条十、版本控制器Git10.1.版本控制10.2.数据安全与协作开发10.3.Git的历史10.4.Git的操作十一、调试器gdb/cgdb11.1.软件发布方式11.2.cgdb命令11.3.调试技巧一、软件包管理器在不同平台上会有不同的软件下载安装渠道手机上的应用商店相当于Linux中的软件包管理器手机中的应用商店华为应用商店、小米应用商店、苹果应用商店Linux中的软件包管理器yumcentos、aptubuntu手机上的App相当于Linux中的软件包二、Linux安装软件的方式方式一下载程序源码并编译生成可执行程序操作繁琐需要自行解决依赖问题优化将常用软件预编译成软件包放在服务器方式二RPM软件包安装直接安装预编译的RPM软件包版本兼容性问题依赖库文件缺失方式三软件包管理器安装CentosyumYellow dog Updater,ModifiedUbuntuaptAdvanced Package Tool从网络仓库直接下载安装自动解决软件包的依赖问题需要root权限安装拷贝到系统安装后任何用户都能使用三、Linux软件生态生态问题是评估操作系统好坏的标准Linux的配套软件是由它的生态提供目的是让这款操作系统被更多的人接受四、镜像源4.1.镜像的概念镜像将国外服务器上的软件包同步拷贝到国内服务器操作系统内部内置的是国外的下载链接在国内需要切换镜像源更改下载链接4.2.切换镜像源示例ubuntu更新apt源备份现有的apt源下载选择的镜像源替换配置文件更新apt缓存五、软件包管理器的操作5.1.查看软件包示例查看lrzsz软件包的详细信息5.2.安装软件示例安装lrzsz软件包5.3.卸载软件示例卸载lrzsz软件包5.4.查看安装源示例查看ubuntu安装源路径标准源扩展源5.5.软件的分类Epel企业版Linux扩展软件源Base基础稳定软件源六、编辑器vim一款多模式编辑器6.1.vim的三种主模式命令模式Normal mode功能控制光标的移动字符、字或行的删除按i进入插入模式按:进入底行模式插入模式Insert mode功能只有在插入模式下才能输入文字按ESC进入命令模式底行模式Last line mode功能文件保存或退出、文本替换、找字符串、列出行号按ESC进入命令模式6.2.命令模式的操作切换插入i从光标当前位置开始输入文字a从目前光标所在位置的下一个位置开始输入文字o在光标下一行另起一行在行首输入文字移动光标nh左移任意一位nj下移任意一位nk上移任意一位nl右移任意一位nw后移任意单词nb前移任意单词gg移动到文本开始G移动到文本最后nG移动到任意行号$移动到当前行尾^移动到当前行首删除文字x删除或剪切光标所在位置的字符nx删除或剪切光标所在位置与后面位置的任意字符X删除或剪切光标所在位置前面的一个字符nX删除或剪切光标所在位置前面的任意字符dd删除或剪切光标所在行ndd从光标所在行开始删除或剪切复制粘贴yw复制光标所在位置到字尾nyw复制任意个字yy复制光标所在行nyy复制光标所在行与当前行往下的任意行np光标下一行粘贴任意次撤销操作u撤销操作ctrlr撤销u操作替换操作r替换光标所在处的字符R进入替换模式替换光标所到之处的字符按ESC键返回命令模式~切换大小写批量操作ctrlv进入视图模式选定区域I从视图模式跳转到插入模式d删除操作ESC回到命令模式查找操作#选中单词n逆向查找选中的单词6.3.底行模式的操作w保存q退出wq保存并退出w!强制保存q!强制退出wq!强制保存并退出ZZ退出set nu设置行号set nonu去掉行号!在不退出vim情况下执行命令%s/dst/src批量化替换vs new_src分屏操作ctrlww切换分屏使用技巧vim src n打开时光标跳转到指定行号!v跳转到上一次用v开头的命令6.4.vim配置在目录etc中有一个.vimrc文件是系统公共的vim配置文件所有用户有效在当前用户的家目录下用户可以自己建立私有的配置文件命名为.vimrc常用配置语法高亮syntax on显示行号set nu设置缩进set shiftwidth 4注释信息七、编译器gcc/g7.1.编译与链接预处理功能宏替换、头文件展开、条件编译、去注释-E预处理结束后停止编译-o生成目标文件.i经过预处理后的文件C/C语言编译功能把代码翻译生成汇编语言-S只进行编译但不进行汇编生成汇编代码后停止编译.s经过编译后的文件汇编语言汇编功能把代码翻译成二进制语言-c将汇编语言翻译为二进制语言后停止.o经过汇编后的文件二进制语言链接功能生成可执行文件或库文件7.2.ldd指令功能查看可执行程序依赖哪些库示例查看a1依赖的C标准库注a1中的C标准库函数比如cout需要从库中执行再返回动态链接7.3.条件编译-D动态添加宏定义条件编译的用途业务功能区分根据软件专业等级和收费模式裁剪代码系统内核优化内核源代码通过条件编译实现按需定制实现跨平台适配开发工具和应用软件通过条件编译实现多平台兼容7.4.预处理的本质修改编辑文本代码7.5.汇编的本质将程序转化为计算机可执行的二进制指令计算机编译的历程从最初的开关控制到打孔编程再到编译器技术编译器的作用是将汇编语言翻译为二进制机器码那么编译器又是用什么语言编写的呢?编译器的自举过程汇编语言的编译器最初使用二进制版本的汇编编译器来编译汇编语言程序随后就可以用汇编语言来编写更高级的编译器此后就可以用汇编语言版本的编译器编译汇编语言程序C语言的编译器最初使用汇编编译器来编译C语言程序随后就可以用C语言来编写更高级的编译器此后就可以用C语言版本的编译器来编译C语言程序7.6.链接的本质链接的本质将目标文件进行合并一些基础功能函数被打包成库将自己写的代码编译成目标文件与库进行链接形成可执行程序7.7.动静态库库一套方法或者数据集作用为开发提供最基本的接口与功能加速二次开发注Linux中的命令都依赖于C标准库动态库LinuxXXX.sowindowsXXX.dll静态库LinuxXXX.awindowsXXX.lib库的命名规则去掉lib前缀去掉后缀剩下的就是库的名字Linux下C语言的静态库libc.aLinux下C语言的动态库llbc.so动静态库的对比静态库只有在链接的时候有用一旦形成可执行程序静态库可以不需要动态库形成的可执行程序体积一定很小可执行程序对静态库的依赖度小动态库不能缺失7.8.静态链接将静态库中的方法实现直接拷贝到使用该方法的地方7.9.动态链接在动态库中查询方法的地址加载到内存后调用动态库中的方法动静态链接对比静态链接会在内存中出现大量重复代码动态链接节省内存和磁盘资源7.10.补充知识gcc/g默认使用的是动态链接gccg使用静态链接时如果缺失静态库就会无法链接此时需要添加静态库C语言的静态链接C语言的静态链接动态库的本质将语言中的公共代码未来在内存中只出现一份Linux系统中的指令都依赖于动态库如果把动态库删去那么指令就无法执行编辑sudo指令的白名单编写多文件项目需要先在当前目录下新建主函数源文件再在当前目录新建lib文件存放自定义库的源文件与头文件将它们的源文件编译成目标文件再将所有目标文件链接成可执行程序在提交程序时只需要将头文件和目标文件提供给别人不用给源文件库库文件 头文件库文件.so/.a多个目标文件.o的集合动静态库的本质被打包起来的目标文件集合注动静态库本身是库文件而非广义的库Linux系统的头文件注 仅从Linux系统的头文件路径下查找头文件 先从当前源码所在的项目本地目录中查找再从Linux系统的头文件中查找八、自动化构建工具8.1.,Makefile的基本概念Makefile自动化构建脚本文件Make解释并执行Makefile指令的命令行工具在大型项目中源文件数量庞大按照类型、功能、模块放在不同目录Makefile通过定义构建规则明确各个文件的编译顺序文件之间的依赖关系完成Makefile编写后仅需执行make命令整个工程自动编译提高开发效率8.2.依赖关系与依赖方法依赖关系文件myproc依赖myproc.c依赖方法通过gcc编译器将myproc.c编译成myproc8.3.项目清理与伪目标项目清理工程是需要被清理的伪目标目标总是需要被执行对应的依赖关系和依赖方法本质让make忽略文件和可执行目标文件的M时间对比注可执行程序没有修改一般不需要伪目标默认旧代码不需要重新编译8.3.Makefile的基本使用文件不总被执行文件总被执行8.4.文件时间详解Access Time查看文件内容或属性的时间Modify Time修改文件内容的时间Change Time修改文件属性的时间修改文件内容更新Change time和Modify time修改文件权限属性更新Change time查阅文件的内容更新Access time频繁更新访问时间会产生大量IO操作只有在连续访问多次后才会更新Access timetouch命令touch后加不存在的文件名是创建新的文件touch后加存在的文件是更新文件所有时间更新时间后就可以再对文件进行make操作因为源文件与可执行程序是无法同时产生的Make通过修改文件内容的时间判断文件新旧modify time只更新查看内容时间与内容有关change time只更新修改属性时间与内容无关access time只更新查看文件时间与内容无关8.5.make的工作原理make在当前目录下寻找makefile或Makefile文件找文件中的第一个目标文件作为最终的目标文件如果该目标文件的依赖文件不存在会找依赖文件对应的依赖关系再查找该依赖文件的依赖文件是否存在直到查找最后的依赖文件如果该依赖文件存在最终编译出第一个目标文件如果该依赖文件不存在或者中途出错直接退出8.6.Makefile的扩展语法定义变量不回显命令$()替换变量内容$代表目标文件名$^代表依赖文件列表$对展开的依赖.c文件一个一个交给gcc%.c展开当前目录下所有的.c%.o展开当前目录下所有的.o#注释多文件编译九、进度条9.1.行缓冲区回车\r回到当前行最开始换行\n换到下一行缓冲区一段内存块打印执行完成显示器没有立即显示休眠3s期间字符串存在行缓冲区中刷新行缓冲区换行或者程序退出fflush刷新缓冲区可以直接打印出来换行fflush刷新9.2.倒计时通过回车让光标回到最开始输出倒计时回车不支持数据刷新需手动刷新缓冲区最后换行刷新命令行防止被命令行覆盖优化显示器是字符设备只认识字符1234512345%d将内存中的数据转化为字符打印时第二位的0不会消失10 90 80 ... 00可以在d前面加2设置位宽可以在2前面加-让最后的0输出在左边9.3.进度条Makefileprocess.hprocess.cmain.c实验现象解耦设计十、版本控制器Git10.1.版本控制在企业级开发场景中团队协作是关键多个开发者参与一个项目时必须借助集中式管理工具整合各方代码来管理这些不同版本的文件场景举例同学A向老师提交实验报告每次修改的版本都比前面差多次修改后老师要最初的版本但学生A无法找回原件同学B吸取A的教训每次修改都将前一个版本进行备份同学B的做法就叫作版本控制同学B切换到先前版本叫回退同学B回退备份的过程用工具自动化完成这个工具叫版本控制器老师项目经理同学程序员同学B在自己的D盘中建了一个data目录将其他同学的文件添加进目录进行管理那么所有同学的文件夹集合就叫做仓库同学B的电脑只能自己访问其他同学无法访问所以他买了一个配置高的云服务器并且开发了一款客户端软件在客户端中查看当前用户任意版本的实验报告但同学们上传文件到云服务器需要网络如果没有网络就需要写一个应用程序让每个同学都能在本地自动管理实验报告列表每个同学的文件夹集合叫就做本地仓库10.2.数据安全与协作开发数据安全本地仓库推送远端云服务器每个用户要建立不同的仓库本地允许用户新建多个仓库支持多个仓库同时推送到自己的账户登录注册给每一个用户提供一个目录git gitee githubgit版本控制器软件图中的xxx.exe在客户端操作gitee/github基于git的网站或者平台在服务端操作可以云服务器端实现推送操作实现数据同步git既是一个客户端client也是一个服务器server去中心化分布式的版本控制原则协作开发10.3.Git的历史开源分布式版本控制器Linus需要一款多人管理Linux操作系统各种版本的软件支持代码提交后的版本发布与管理Bitkeeper免费给Linux社区使用它的版本控制器社区中有工程师尝试破解所以Bitkeeper停止与Linux社区合作于是Linus自己编写了一款版本控制器软件并且开源命名为Git10.4.Git的操作新建仓库复制项目链接git clone 项目链接将远端仓库拉取到本地仓库.git隐藏的本地仓库README软件说明书en英文版本git在提交的时候只会提交数据变化的部分将变化的信息存放在.git目录的objects文件中当前工作区.git所在的目录git add把文件添加到.git的暂存区git commit将暂存区的文件提交到本地git仓库提交日志信息git log查看git仓库信息git push远端仓库的提交同步本地与远端的仓库.gitignore文件避免特定类型的文件提交到仓库git版本管理只管理源文件和头文件被忽略的文件完全不受git版本控制即使修改也不会被记录Windows端操作克隆clone将gitee远端仓库代码拉到windows平台的本地仓库在windows端更改文件数据提交addcommit推送push当前直接在Linux端更改数据推送时会被拒绝需要pull将Linux本地的数据与远端的数据同步注如果没有pull就修改文件内容Linux端需要打开冲突文件手动删去冲突符号再在windows端修改文件推送时也会发生冲突需要pull将本地数据与远端数据同步注windows系统会自动删除冲突符号远端仓库相比较任何人都是最新的冲突是提醒本地用户要和远端仓库进行同步十一、调试器gdb/cgdb11.1.软件发布方式debug模式开发release模式测试、上线Linux编译好的代码无法进行调试gcc/g默认为release工作模式-g在最终的可执行程序添加调试信息因为多了debug内容所以文件变大Makefile11.2.cgdb命令cgbd 文件名开始调试list/l显示源代码从上次位置开始每次列出10行list/l 函数名列出指定函数的源码list/l 文件名:行号从第一行显示回车显示所有行run/r从程序开始连续执行到断点位置continue/c从当前位置连续执行程序break/b [文件名:]行号在指定行号设置断点b 函数名在函数开头设置断点info b查看当前所有断点信息delete/d删除所有断点d 断点编号删除序号为n的断点next/n逐过程执行程序step/s逐语句执行程序可以进入函数内部finish执行到当前函数返回然后停止bt查看当前执行栈的各级函数调用以及参数每调用一次函数会在main函数上面创建一个函数栈帧objdump查看反汇编函数体中会将返回值写入寄存器每次调用都会mov函数内部栈上的一个临时变量p 变量打印指定变量的值disable 断点编号禁用断点enable 断点编号使能断点until 行号执行到指定行号display 变量名查看上下文数据undisplay 编号关闭常显示quit退出调试调试的本质找到问题找到问题的命令断点的本质把代码进行块级别的划分以块为单位进行快速定位区域11.3.调试技巧watch执行监视一个表达式的值一些变量不应该修改怀疑是它的修改导致了问题通过watch观察如果该值发生变化会主动通知set var更改变量值设置条件断点b 行号 条件给不存在的断点设置条件condition 行号 条件给已经存在的断点设置条件ESC从gdb屏切换代码屏i从代码屏切换gdb屏

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑