Linux基础开发工具一软件包管理器与 vim 编辑器下方为本篇内容的思维导图以便大家思维框架的构建注意Linux基础开发工具一中只涵盖了其中的软件包管理器与 vim 编辑器部分哦~文章目录Linux基础开发工具一软件包管理器与 vim 编辑器1. 软件包管理器1.1 软件包1.2 软件包管理器1.3 包管理器解决了什么问题1.4 OS生态与软件包管理器1.5 apt 指令完整演示1.6 软件包服务器BASE soft / 拓展1.7 修改软件包服务器配置2. 编辑器Vim2.1 IDE与编辑器2.2 hello world演示2.3 多模式关系与切换2.4 命令模式2.4.1 光标定位2.4.1.1 上下光标定位2.4.1.2 左右光标定位2.4.1.3 上下左右光标移动2.4.2 文本编辑操作2.4.2.1 复制、粘贴与删除2.4.2.2 字符级编辑2.4.2.3 撤销与重做2.4.2.4 在 vim 中快速退出2.4.2.5 批量化注释与去注释2.4.2.6 批量化替换与插入2.5 底行模式2.5.1 常用底行命令2.5.2 在 vim 中执行 shell 命令与多文件编辑2.6 插入模式2.7 替换模式2.8 视图模式2.9 其他细节2.9.1 vim 文本进出的光标位置2.9.2 vim 临时文件2.9.3 配置vim1. 软件包管理器1.1 软件包定义在 Linux 中软件包就是将软件程序及其配置文件、依赖信息等打包成一个可被包管理器安装和管理的文件。Linux下常见的软件安装方式1.源代码安装先下载软件的源代码再经过“配置 → 编译 → 安装”三个步骤把源代码转换成可以运行的软件操作复杂不推荐2.rpm/deb包安装手动安装单个软件包但不会帮你自动解决依赖关系问题安装多个时不方便且需要自己解决依赖麻烦3.包管理器安装使用包管理器(yum、apt等)直接下载并安装对应软件包包管理器会自动解决依赖关系1.2 软件包管理器运行原理当你在云服务器 Linux 命令行中发送指令sudo apt install tree -y后包管理器apt会根据你云服务器上所配置的软件包服务器ip去到对应的软件包服务器查找是否有tree这个软件包如果有则会下载下图为软件包管理器运行原理图请结合该图理解实例演示使用的指令即为上文所提及的sudo apt install tree -y , 演示机器为ubuntu将图片中机器对应的软件包服务器复制到浏览器打开并查找刚刚所下载的 tree 软件包注意若在你的机器上无法在浏览器中打开所配置的软件包服务器ip也是正常的因为一些厂商的云服务器是仅供内网使用的即云服务器可以正常通过其对应的包管理器获取但你是无法在本地电脑上通过浏览器打开的 由于centOS 停更了所以也有可能会存在一些软件包服务器的维护问题这个时候去修改centOS中的软件包服务器配置文件即可但要尤为小心哦~当然也可直接在机器上通过sudo apt list指令查找由此可见软件包管理器的实际运行效果大家有空也可以自己试试哦~[深度理解]Q1为什么云服务器中会配置软件包服务器的ip呢A1因为全球有很多 Linux 发行版每个发行版的不同版本(如 Ubuntu 20.04、22.04)都有各自对应的软件包。而包管理器本身并不知道去哪里下载所以需要在云服务器上配置软件包服务器的地址告诉它去这里找。 CentOS 等也是如此 Q2 这些软件包服务器在国内是谁提供的A2: Linux 的各大发行版最初由国外社区和团队开发官方软件源也部署在国外而国内访问国外服务器速度慢有时还会不稳定。所以国内的云厂商和高校等机构会把官方软件源镜像(同步一份副本)到国内的服务器上供国内用户使用。( 这一部分本节后文还会具体提及哦~ )Q3: 为什么不同云服务器上配置的地址不一样?A3: 因为镜像是各厂商各自搭建的阿里云、腾讯云、华为云等各有各的镜像站对应的地址也不同。使用哪家的云服务器一般就配置哪家的软件源速度更快也更稳定。以下为常见的软件包管理器发行版包管理器包格式常用命令CentOS / RHELyum / dnfrpmyum install 包名Ubuntu / Debianaptdebapt install 包名注意不同发行版包管理器命令不同但核心思路一致——告诉包管理器“我要装什么”它自动下载并解决依赖。1.3 包管理器解决了什么问题相比源代码安装和 rpm 手动安装包管理器带来三个关键优势依赖自动解决安装 A 时若需要 B、C包管理器会自动一并安装无需手动逐个处理。统一安装与卸载一条命令即可完成安装、升级、卸载并记录已安装的软件清单。软件源集中管理从官方或可信软件源下载降低来源不明带来的安全风险。用户执行安装命令包管理器查询软件源自动解析依赖关系下载并安装软件包完成安装[拓展]可以通过ldd命令直接查看依赖关系1.4 OS生态与软件包管理器如何评估一款操作系统的好坏操作系统被设计出来之后最重要的事情是什么一款操作系统也好一种编程语言也好其被设计出来之后最重要的任务就是必须让更多的人去使用它。而 Linux 要达成被更多的人使用的目的那么让这个操作系统变得更好形成使用圈子就是最重要的手段在这个圈子中会有主创团队或主要负责人去主动进行维护提供相关资料、文档建立论坛等从而无论是学生还是公司都会将使用中遇到的问题发到论坛中然后就会有人去解答接着慢慢就会发展成社区当形成Linux 社区后既然都有人愿意做免费的操作系统自然就会有人愿意针对特定的群体如学生、公司等去定制软件或操作系统并开源从而形成一个个不同的 Linux 发行版发行版越丰富也会吸引更多的人使用 Linux 。因此形成使用圈子——OS生态与让更多的人使用是相辅相成互相促进的正反馈关系。Q为什么会有⼈免费为特定社区提供软件还发布还提供云服务器让你下载A 对于公司来说参与开源软件的生态维护可以在较低成本的前提下获利。而一旦这个生态或社区运转不好或者不再有人维护公司自己也就无法继续获利。因此,会有很多公司、组织和个人自发地去支持这个维护团队比如捐款、募捐等。不同 Linux 发行版的软件包服务器也是如此会有公司和机构自发地免费提供服务器和带宽给社区使用。举几个实际的例子:国内清华大学 TUNA 协会、中国科学技术大学等高校社团以及阿里云、腾讯云、华为云、网易等公司都提供了公开的开源镜像站,免费供大家使用。对云厂商来说这样做也能让用户用自家云服务器时下载软件更快体验更好。国外Debian 的软件源分发由 Fastly 等公司赞助 CDNAWS 等云厂商也通过捐赠资源的方式支持开源项目。通过捐款、免费提供服务器等方式这些公司和机构共同维护了整个开源生态。下图中开发者将软件等设计好后自然也是希望更多的人去使用因此会打包成不同Linux发行版的软件包并给到对应的软件包服务器上线发布1.5 apt 指令完整演示a.搜索apt search cowsay搜索cowsay指令此处为Ubuntu机器b.下载sudo apt install cowsay -y 如果嫌先search一下比较麻烦也可以直接尝试下载能直接成功下载对应软件包自然就是存在的c.尝试运行cowsay 哈哈哈哈~ 更多有趣的程序可以点击此处哦~ d.删除sudo apt remove cowsay -y注意不管是查找、下载还是删除都需要带上apt哦~ e.验证已删除1.6 软件包服务器BASE soft / 拓展在包管理器中会有各种各样的软件包而那些经过时间沉淀下来的稳定的软件包一般都会被放到BASE soft包服务器中而那些新开发出来的软件包则一般都放在拓展软件包服务器中若是原先稳定的软件包更新后也有可能会从BASE soft包服务器调整到拓展包服务器而新的软件包沉淀稳定后也会向BASE soft包服务器调整这两者是会互相调整的apt等包管理器去查找下载的时候一般这两个软件包服务器都会去查找下载的。1.7 修改软件包服务器配置a.查看ubuntu 中对应的 apt 软件包配置在/etc/apt/sources.list目录下b.备份sudo cp /etc/apt/sources.list /etc/apt/sources.list.myback注意此处自己备份如何命名都可以我查看OS自带备份sources.bak 后发现其是为空的所以大家此处最好还是自己去备份一份c.修改sudo vim /etc/apt/sources.list此处使用了 vim 去修改如果 vim 打开文件后不知道如何操作可以去看看下文中关于 vim 的详细讲解哦~ 输入: 进入命令行模式后此处我分别输入了以下两条指令一键替换此处新包服务器为清华的:%s#http://us.archive.ubuntu.com/ubuntu/#https://mirrors.tuna.tsinghua.edu.cn/ubuntu/#g:%s#http://security.ubuntu.com/ubuntu#https://mirrors.tuna.tsinghua.edu.cn/ubuntu#g ( 讲解见本小节末 )d.更新 apt 软件包索引从配置的软件包服务器获取最新的软件包列表和版本信息使系统能够获取最新的软件包信息为后续安装或升级软件做准备。e.测试此处apt install cowsay 测试下载其它软件包也一样但注意换源后一定要先更新apt[指令拆解] 此处对应本小节中所使用的一键替换命令:%s#http://us.archive.ubuntu.com/ubuntu/#https://mirrors.tuna.tsinghua.edu.cn/ubuntu/#g:号表示处于命令行输入模式%号表示全局作用域有效s为substitute替换#号为分隔符g为global一行里出现多次也全部替换2. 编辑器Vim2.1 IDE与编辑器与我们现在常使用的 VScode 、PyCharm 等集成IDE有所不同Linux下开发工具都是独立的 以下各工具下文都会有所讲解皆为Linux下基础开发工具 编辑器vim、vi、nano编写代码的工具其中vim为vi的升级版存在多模式功能强大nano没有模式的概念,打开文件后直接输入就能编辑新手易上手非本文重点编译器gcc、g分别对应编写c语言、c代码调试器 gdb、cgdb 可通过打断点等方式debug构建工具makefile、make、cmake 快速编译代码版本控制器git通过which vim指令搜索可见vim 本质就是一个命令一个文件2.2 hello world演示以下为通过 vim 编辑器编写hello world代码步骤a.创建并进入 .c 文件b.进入插入模式c.编写代码此时由于 vim 还没进行配置故没有括号换行、自动对齐等功能下文会配置哦~d.保存并退出e. gcc 编译并运行2.3 多模式关系与切换在vim 中是存在多模式的经过刚刚用其编写hello world的代码可以发现其中涉及到vim 模式间的切换下图为vim 的多模式间关系图 用画板画出来不知道为什么总感觉有点糊糊的QAQ~ 说明:图中的命令模式和底行模式是国内教程中常见的分法。vim 官方的叫法是:普通模式(Normal Mode):即图中的命令模式,打开 vim 后的默认模式命令行模式(Command-line Mode):即图中的底行模式,按:进入,用于保存、退出、查找替换等可视模式(Visual Mode):即图中的视图模式本文沿用国内常见叫法。[深度理解]像 windows 中有很多快捷键如 ctrlc、ctrlv 等这些快捷操作本质也是命令使用这些命令的目的都是为了提高效率那么同理vim 中的命令也都是为了提高编辑效率而命令的背后就是自动化、批量化因此命令越多往往就意味着效率越高。2.4 命令模式由上文各模式间切换关系图可见命令模式是最核心的模式各个模式间的切换基本都离不开命令模式从命令模式进入各模式后都可以按 Esc 返回到命令模式。注意以下命令都需要在命令模式下使用 2.4.1 光标定位2.4.1.1 上下光标定位gg定位至文本起始处G(Shift g)定位至文本末尾处n G定位到第 n 行如10 G则直接跳转至第10行2.4.1.2 左右光标定位$(Shift 4)定位到当前行结尾^(Shift 6)定位到当前行开头w以‘单词’为单位向右移动b以‘单词’为单位向左移动 w 和 b 都可以在前面加上数字表示跳过多少个‘单词’如果为\n等特殊字符则会将一个特殊字符当作一个‘单词’来计算跳过2.4.1.3 上下左右光标移动直接通过上下左右方向键移动hjkl 分别对应左、下、上、右j 理解成jump 跳下悬崖k 理解成king 高高在上[扩展]Q1 为什么会有hjkl 去对应上下左右呢A1 因为最开始的键盘是没有上下左右方向键的且hjkl 又十分靠近右手十分方便因此将其设计为上下左右。Q2 为什么现在的键盘有上下左右了还要保留hjkl 控制方向呢A2前后设计都是兼容性的且hjkl 确实很方便右手操作。2.4.2 文本编辑操作进一步体现了 vim 中的命令背后为自动化、批量化2.4.2.1 复制、粘贴与删除yy复制当前行nyy复制从当前行开始的 n 行如3yy复制 3 行p粘贴到当前行的下一行np粘贴 n 次如3p连续粘贴 3 份dd删除当前行ndd删除从当前行开始的 n 行如5dd删除 5 行注意dd删除的内容会被存入寄存器相当于 “剪切” 之后按p可以粘贴出来。2.4.2.2 字符级编辑~Shift光标所在字符大小写快速转换r替换光标所在位置的一个字符如按r再按a就把当前字符换成anr将光标开始的 n 个字符都替换为同一个字符RShiftr进入替换模式之后输入的内容会逐个覆盖光标后的字符适合批量内容替换按Esc退出x删除光标所在的字符连续按x则向右依次删除nx向右删除 n 个字符XShiftx向左删除字符连续按X则向左依次删除2.4.2.3 撤销与重做u撤销上一次编辑操作Ctrlr对u的撤销再进行撤销重做注意u撤销的对象是“一次编辑操作”可以连续按u逐步回退回退过头了就用Ctrl r往前恢复。 左右反复横跳~ 只要没有关闭 vim 所打开的文档那么都可以 u 和 ctrl r 但一旦关闭 vim 所打开的文档那么重新进入 vim 后无法通过 u 撤销上一次的操作。2.4.2.4 在 vim 中快速退出除了下文底行模式中会提及的wq等退出 vim 的方法外也可以在命令模式中直接按Shift zz即ZZ快速保存并退出。2.4.2.5 批量化注释与去注释1.批量化注释a. 按Ctrlv进入视图模式 此处的 ctrl v 为视图模式中的列块模式b. 用hjkl选择区域一般是用j向下选中多行c. 按IShifti进入插入模式d. 输入注释符//e. 按Esc退出后所有选中行同时被注释2.批量化去注释a. 按Ctrlv进入视图模式b. 用hjkl选择区域选中每行开头的//c. 按d删除选中的注释符2.4.2.6 批量化替换与插入除了批量注释vim 还支持对多行文本进行批量替换与批量插入这两类操作同样借助视图模式列块模式完成能极大提升编辑效率。1. 批量化替换a. 按Ctrlv进入视图模式列块模式b. 用hjkl选中需要替换的文本区域例如多行中相同位置的字符c. 按r再输入新字符即可将选中区域的所有字符一次性替换为同一个字符 此处将 hello 都替换成0 2. 批量化插入相当于是批量化注释中将输入// 换成输入其它字符不再图片演示a. 按Ctrlv进入视图模式列块模式b. 用hjkl选中需要插入文本的多行区域c. 按IShifti进入插入模式d. 输入要插入的内容如//、#、缩进空格等e. 按Esc退出后所有选中行都会在相同位置同时插入该内容提示批量化插入常用于给多行代码统一添加注释符、统一增加缩进或为多行日志统一添加前缀标记适合处理重复性文本操作。[深度理解]无论是批量化注释、批量化替换还是批量化插入其本质都是先选中一个“列块”再对列块内的所有行执行同一条命令这正是 vim 中“命令背后是自动化、批量化”思想的集中体现——一次操作多行生效避免逐行重复劳动。2.5 底行模式底行模式主要用于执行保存、退出、查找替换等操作。在命令模式下按:即可进入底行模式输入命令后按回车执行。2.5.1 常用底行命令:w保存文件:q退出 vim:wq保存并退出:q!强制退出不保存修改:wq! 强制退出并保存:set nu显示行号:/key: 匹配搜索:/keyn: 在当前文本内搜索多个 key注意此处在底行输入:/key后按回车则会直接搜索 key此时再按n则会跳到下一个 key 处此处的 key 可以替换成任何需要搜索的内容如 main、printf 等:s/旧内容/新内容替换当前行内容:%s/旧内容/新内容/g全局替换全文内容 此处上一小节已有所演示[深度理解]Q1w 不是写的意思吗为什么会是保存A1 w 就是写的意思而写跟保存是一个意思只有输入 w 并回车后在内存级的文件才会真正写到磁盘中保存这跟在 window 中编写 word 文档一样如果编写的时候电脑突然断电是没有将文件实际 写入/保存 到磁盘中的。 关于内存、磁盘级文件会在后续文章中提及哦~Q2 为什么会有强制保存并退出 wq! A2 当所打开文件的所有者为你且文件没有写权限但你想强行写入时就需要用到wq! 而如果是 root 用户前提则为无论文件所有者是谁且文件没有写权限但想强行写入。2.5.2 在 vim 中执行 shell 命令与多文件编辑在 vim 中执行 shell 命令在底行模式下!后面跟任意 shell 命令即可在不退出 vim 的情况下直接执行执行完后按回车回到 vim。:!ls -al列出当前目录下所有文件的详细信息用于确认文件是否存在:!gcc code.c直接在 vim 中编译当前代码若有报错会直接显示在屏幕上:!./a.out运行编译生成的可执行程序小提示编写代码时不需要来回退出、进入 vim“编写 → 编译 → 运行”可以在 vim 中一气呵成。运行程序需要写成./a.out因为当前目录通常不在系统的可执行文件搜索路径中。 ./a.out 在后续文章的环境变量部分会详细讲解哦~ 多文件窗口分屏编辑:vs code.h左右分屏并打开code.h。若该文件不存在vim 会新建它保存后才会真正生成文件main.c同理Ctrlww命令模式中在已打开的多个窗口之间快速切换光标:wa一键保存所有通过:vs分屏打开的文件省去逐个保存的麻烦:!gcc code.c main.c编译多个源文件。注意需先保存:w分屏中新建的文件才会真正生成对应的code.h、main.c文件之后才能编译:!./a.out运行编译生成的可执行程序[拓展]快速再次编译编写代码时常常需要反复“修改 → 编译”。退出 vim 回到终端后可以利用!快速调用历史命令省去重复输入完整命令的麻烦!g!后面跟字符shell 会自动从历史记录中找到最近一条以该字符开头的命令并执行例如!g可以快速再次执行最近一次的gcc编译命令在 vim 中也可以使用:!!重复执行上一次的:!命令注意如果最近用过其他以g开头的命令如git、gdb!g会误执行它们建议多写几个字符如!gcc更加准确。2.6 插入模式插入模式用于编辑文本内容。在命令模式下按i即可进入插入模式此时可以直接输入文字。常用进入方式i在当前光标位置前插入a在当前光标位置后插入o在下一行新建一行并进入插入模式I跳到当前行行首并进入插入模式A跳到当前行行尾并进入插入模式提示在插入模式下按Esc即可返回命令模式。2.7 替换模式替换模式用于覆盖已有文本。在命令模式下按R即可进入替换模式此时输入的文字会逐个覆盖光标后的原有字符直到按Esc返回命令模式。提示如果只想替换单个字符可以在命令模式下将光标移到目标字符上直接按r再输入新字符即可。2.8 视图模式视图模式用于选中文本块便于批量操作。在命令模式下按v进入字符视图模式按V进入行视图模式按Ctrl v进入块视图模式。选中文本后可以配合以下操作y复制选中内容d删除选中内容向右缩进选中内容向左缩进选中内容2.9 其他细节2.9.1 vim 文本进出的光标位置当 vim 退出时光标在什么位置再次进入时依旧在什么位置该功能依赖家目录下的~/.viminfo文件记录光标位置Ubuntu 的默认配置中已开启当 gcc/g 编译提示第 n 行存在错误时可通过vim code.c n的方式直接跳转至第 n 行打开例如编译提示code.c第 15 行有错误则执行vim code.c 15打开后光标直接定位在第 15 行。2.9.2 vim 临时文件vim 打开文件后会在当前路径下生成默认临时文件.swp为隐藏文件。编辑期间它一直存在正常退出时 vim 会自动将其删除如果终端突然退出vim 来不及清理该文件就会残留下来。临时文件是 vim 自己周期性写入的位置就在原文件所在目录命名格式为.文件名.swp如.code.c.swp写入时机停止操作约 4 秒后或累计输入约 200 个字符后vim 会把未保存的修改写入临时文件正常退出:wq、:q、:q!、ZZ等都会自动删除.swp并不是“保存了才删”而是“正常退出就删”异常退出终端被直接关闭、SSH 断开、断电、进程被kill等才会残留.swp其中保存着崩溃前未保存的内容这就是可以恢复的原因此处与上文深度理解中提及的“在 Windows 中编写 Word 文档突然电脑关机当再次打开时会发现存在关于该 Word 文档的临时文件”是同一个道理缘由无论是 vim 还是 Word打开文件编写时都是在内存中进行的此时没有保存的话操作系统不会实际将文件写入磁盘空间中而处于内存运行中的文件在机器突然断电时就会丢失因此编辑器会周期性地把未保存的内容记录到临时文件中用于恢复当重启终端并再次vim 进入code.c 时会出现下图页面此时若需要恢复未保存的内容直接输入R即可也可以使用vim -r 文件名命令来恢复内容例如vim -r code.c。每次打开都会跳出上图界面该如何解决a. 使用ll命令查看当前目录下的隐藏临时文件确认.swp文件的存在b. 确认内容恢复无误并保存后手动删除.swp文件如rm .code.c.swpc. 如果不删除之后每次打开该文件vim 都会提示存在临时文件的警告注意如果同时在两个终端中打开同一个文件第二个终端也会看到.swp警告这是因为第一个 vim 正在使用它并非异常退出残留。此时不要急着删除先确认另一个窗口是否还开着。2.9.3 配置vimvim 既可通过手动在 user家目录下生成 .vimrc 文件并根据自己所需的 vim 配置项一项项手动配置也可以直接在 github 或 gitee 等搜索并使用指令一键配置一键配置同样也是生成 .vimrc 文件 此处根据自己需求直接向 ai 要 vim 一键配置指令也可以此处不再赘述 本文是 Linux 基础开发工具系列的第一篇文章后续内容还会持续更新。写作这篇文章花费了不少时间你的点赞对我来说是莫大的鼓励也是我继续更新的最大动力。如果这篇文章对你有帮助希望你能点个赞支持一下非常感谢
阅读完成 · 觉得有帮助?