Linux:基础开发工具

1. 软件包管理器

1.1 什么是软件包

软件包是将软件的程序代码、依赖库、配置文件、说明文档、安装脚本等资源打包整合在一起的标准化分发单元,是操作系统中软件安装、管理、卸载和更新的核心载体,广泛应用于类 Unix 系统(Linux、macOS)、Windows 等平台,目的是简化软件的分发与运维流程。(可以理解成Windows上的安装程序)

一个标准的软件包通常包含以下核心部分:

  1. 可执行程序:软件的核心运行文件(如 Linux 下的二进制文件、Windows 下的.exe 文件);
  2. 依赖文件:软件运行所需的库文件、插件、资源文件(避免重复打包,减小体积);
  3. 配置文件:软件的默认配置、参数设置文件;
  4. 元数据:软件的名称、版本、作者、依赖关系、安装路径、卸载脚本等信息(系统包管理器依赖此数据管理软件);
  5. 辅助文件:手册、图标、启动脚本、权限配置文件等

在Linux下安装软件,一个通常的办法是下载到程序的源代码,并进行编译,得到可执行程序。 但是这样太麻烦了,于是有些人把一些常用的软件提前编译好,做成软件包,放在一个服务器上,通过包管理器可以很方便的获取到这个编译好的软件包,直接进行安装。 软件包和软件包管理器,就好比"App"和"应用商店"这样的关系。

yum(Yellow dog Updater, Modified)是Linux下非常常用的一种包管理器。 主要应用在Fedora,RedHat,Centos等发行版上。

Ubuntu:主要使用apt(Advanced Package Tool)作为其包管理器。apt同样提供了自动解决依赖关系、下载和安装软件包的功能。

1.2 Linux 软件生态

首先要问大家一些问题。如何评价一个操作系统的好坏?操作系统被设计出来之后,最重要的事情是什么?

评价操作系统好坏,核心看生态完整性:是否有适配的软件 / 硬件生态、完善的社区 / 官方支持、稳定的更新维护,以及能否满足用户核心使用场景(桌面、服务器、嵌入式等),生态越成熟,系统实用性和兼容性越强。

设计完成后,核心是构建和完善生态:推动软件开发者适配系统、吸引硬件厂商兼容、建立完善的社区与更新机制,同时保障生态的安全性与稳定性,让系统适配更多场景、兼容更多软硬件,形成可持续的生态闭环。

这张图就揭示了,我们平时在CentOS中使用yum指令,实际上并不是真正的从我们的Linux系统当中获取软件,而是从外部的一个软件包服务器中获取下载内容,然后再将内容下载到我们连接的云服务器中。

由于前面所讲的生态问题:评价操作系统好坏,核心看生态完整性; 设计完成后,核心是**构建和完善生态。**这就意味着想要一款操作系统的使用效果更好,就要搭配更加完整的生态内容。因此就会有一大批的愿意免费编写代码并开源的开发者,将应对不同场景不同需求的软件编译发布,形成一个个不同的软件包,还提供一个免费的云服务器去供用户下载。

但是大家要知道,因为以前外国的科技发展的比较迅速,所以像CentOS、Ubuntu这样的操作系统,都是国外的程序员编写的,那他们肯定就会上传到国外的软件包服务器上。可是我们连接到云服务器绝大多数都是国内的云服务器,比如阿里云、腾讯云等等,那如果我要下载一些软件,就需要连接到国外软件包服务器,但是由于国际网络安全等等一系列原因,对于国外的地址我们是没有办法在国内访问的,于是就有国内的公司或者一些组织将国外软件包服务器镜像到国内。

所谓的镜像,大家理解成复制粘贴就行了。

当国外软件包服务器被镜像到国内之后,大家要下载软件或者其他一些操作,走的就是国内的软件包服务器。

接下来我们要谈论一下依赖关系的问题。

依赖这个词很好理解,所以依赖关系 指一个程序、软件或组件为了正常运行,必须依赖其他程序、库、工具或组件才能完成功能的关联关系。简单来说,就是 "甲能正常工作,必须依靠乙的支持"。比如上图中就是一个依赖关系列表。

这张图的意思是,比如你现在需要下载使用一款软件,但是这个软件需要一个独立的特定文件才能正常运行,那么就说这款软件依赖于这个文件。所以上图中,如果我们要下载一款软件,就会有一个依赖关系列表,如果我们要自主下载的话,就需要将这些库或者文件下载下来。

而yum或者apt提供了自动解决依赖关系、下载和安装软件包的功能。所谓的自动解决依赖关系,就是yum或者apt会将你所需要的软件,以及软件所依赖的各种文件,一起帮你下载安装好。

2. vim 编辑器

在介绍Vim之前,我们首先要先介绍一下什么是IDE。

IDE 是集成开发环境(Integrated Development Environment),简单说就是把写代码、运行代码、调试代码、管理项目等所有开发必备工具打包在一起的软件,能大幅提升编程效率。

它通常包含代码编辑器、编译器 / 解释器、调试器、项目管理工具等核心组件,支持语法高亮、自动补全、错误提示、一键运行调试等功能,不用开发者单独打开多个工具配合使用。

比如写 Python 常用的 PyCharm、写 Java 常用的 IntelliJ IDEA、写 C/C++ 常用的Visual Studio,都是典型的 IDE。

而在Linux系统中,开发环境都是独立的。比如想要写代码,就需要编辑器Vim、Vi;想要编译代码,就用gcc/g++;想要调试代码,就用 gdb、cgdb;想要构建工具,就用makefile、make、cmake等等。

2.1 Linux编辑器--Vim的概念

Vim和Vi的区别,简单来说,它们都是多模式编辑器。VimVi 的增强升级版本,它不仅完整兼容 Vi 的所有操作指令,还新增了诸多实用特性,比如语法高亮、可视化编辑、更友好的界面交互,同时支持终端、桌面环境(Xwindow、macOS、Windows)等多种运行场景。本文包括后续的文章中,我们统一按照 Vim 进行讲解。

课堂上我们讲解 vim 的三种模式 (其实有好多模式,目前掌握这 3 种即可), 分别是命令模式 (command mode)、插入模式 (Insert mode)和底行模式(last line mode),各模式的功能区分如下:

  • 正常 / 普通 / 命令模式 (Normal mode)控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入 Insert mode 下,或者到 last line mode

  • 插入模式(Insert mode)只有在 Insert mode 下,才可以做文字输入,按「ESC」键可回到命令行模式。该模式是我们后面用的最频繁的编辑模式。

  • 底行模式 (last line mode)文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作。在命令模式下,shift+: 即可进入该模式。要查看你的所有模式:打开 vim,底行模式直接输入:help vim-modes

我这里一共有 12 种模式:六种 BASIC modes (基础模式)和 六种 ADDITIONAL modes(额外模式)。

2.2 vim的基本操作

由于vim有三种默认,所以以这个代码举例:

我们使用vim编辑一个文件的时候,按下回车进入编辑器,此时我们默认是在命令模式下的,如果我想要写入、删除字符内容,就可以按下键盘上的 i 键,此时就进入了插入模式。如果我在命令模式时,想要进入底行模式,就按下键盘上的 :键,底行模式用处最多的就是进行文件的保存和退出指令,按下 : 之后,会看到左下角有一个冒号,此时输入wq,就自动退出vim编辑器了。

底行模式有一个比较实用的指令:set nu,这个是用来设置行号的,如果不想要行号就输入:set nonu。后续查看代码的时候会更加方便一些。

这是三种模式互相交换的关系图,命令模式可以转换到任意其他两种模式,但插入模式和底行模式之间不能直接进行转换,需要先回到命令模式,再进入到目标模式 。

2.3 vim在命令模式下的命令集

2.3.1 光标定位

  • vim 可以直接用键盘上的光标来上下左右移动,但正规的 vim 是用小写英文字母「h」、「j」、「k」、「l」,分别控制光标左、下、上、右移一格
  • 按「$」:移动到光标所在行的 "行尾"
  • 按「^」:移动到光标所在行的 "行首"
  • 按「w」:光标跳到下个单词的开头
  • 按「e」:光标跳到下个单词的结尾
  • 按「b」:光标回到上个单词的开头
  • 按「#l」:光标移到该行的第 #个位置,如:5l,56l
  • 按「gg」:进入到文本开始
  • 按「shift+g」:进入文本末端
  • 按 [指定数字(先按) shift+g ] :进入指定行数
  • 按「ctrl + b」:屏幕往 "后" 移动一页
  • 按「ctrl + f」:屏幕往 "前" 移动一页
  • 按「ctrl + u」:屏幕往 "后" 移动半页
  • 按「ctrl + d」:屏幕往 "前" 移动半页

2.3.2 复制与粘贴

  • 「yw」:将光标所在之处到字尾的字符复制到缓冲区中。
  • 「#yw」:复制 #个字到缓冲区
  • 「yy」:复制光标所在行到缓冲区。
  • 「#yy」:例如,「6yy」表示拷贝从光标所在的该行 "往下数" 6 行文字。
  • 「p」:将缓冲区内的字符贴到光标所在位置。注意:所有与 "y" 有关的复制命令都必须与 "p" 配合才能完成复制与粘贴功能。

2.3.3 撤销

  • 「u」:如果您误执行一个命令,可以马上按下「u」,回到上一个操作。按多次 "u" 可以执行多次撤销。
  • 「ctrl + r」:撤销的恢复

2.3.4 删除

  • 「x」:每按一次,删除光标所在位置的一个字符
  • 「#x」:例如,「6x」表示删除光标所在位置的 "后面(包含自己在内)"6 个字符
  • 「X」:大写的 X,每按一次,删除光标所在位置的 "前面" 一个字符
  • 「#X」:例如,「20X」表示删除光标所在位置的 "前面" 20 个字符
  • 「dd」:删除光标所在行
  • 「#dd」:从光标所在行开始删除 #行

2.3.5 替换

  • 「r」:替换光标所在处的字符。
  • 「R」:替换光标所到之处的字符,直到按下「ESC」键为止。

2.3.6 更改

  • 「cw」:更改光标所在处的字到字尾处
  • 「c#w」:例如,「c3w」表示更改 3 个字

2.3.7 跳至指定的行

  • 「ctrl + g」列出光标所在行的行号。
  • 「#G」:例如,「15G」,表示移动光标至文章的第 15 行行首。

2.3.8 批量注释

批量注释需要进入到视图模式当中,不过还是在命令模式下进入视图模式,具体步骤如下:

此时光标显示在第五行行首,我们先按下 Ctrl + v ,会进入视图模式。这时使用 H、J、K、L四个按键进行区域框选,接着按下 Shift + i 进入命令模式,输入双斜杠 // ,接着再直接按下 Esc ,此时,就会成功实现注释。

如果想要批量删除注释,也是先 Ctrl + v 进入视图模式,然后框选表示注释的双斜杠部分,直接按下一个单独的 d 就可以删除注释斜杠,完成批量删除注释的操作。

2.4 vim在底行模式下的命令集

2.4.1 跳到文件中的某一行

  • 「#」:「#」号表示一个数字,在冒号后输入一个数字,再按回车键就会跳到该行了,如输入数字 15,再回车,就会跳到文章的第 15 行。

2.4.2 查找字符

  • 「/ 关键字」:先按「/」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按「n」会往后寻找到您要的关键字为止。
  • 「? 关键字」:先按「?」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按「n」会往前寻找到您要的关键字为止。
  • 问题:/和?查找有和区别?操作实验一下

2.4.3 执行shell命令

在这里我们输入 : 进入底行模式,然后输入 !,再加上Shell指令,就可以在不退出vim编辑器的情况下去执行Shell指令:

然后再次点击Enter键,就可以返回vim编辑器。

2.4.4 批量替换

  • %s / 被替换内容 / 目标内容 / g

2.4.5 创建文件

通过vim的底行模式,我们还可以创建新的文件:

比如当前目录下只有一个 code.c 的文件,但此时我直接调用 vim 要打开一个不存在的 hello.txt 文件,进入之后,左下角就有这个提示:

然后我们通过底行模式去保存并退出,再查看 lesson 这个目录中的所有内容,就会发现 hello.txt 被创建了:

2.4.6 分屏操作

  • vs 文件名\] 通过调用 vs 指令,可以创建或者打开一个文件,并以分屏的形式呈现在显示器上。

通过这样的方式,就可以实现生命和定义分离。

2.4.7 初始化光标位置

  • vim 文件名 +n \] 这个n就代表一个数字,n是几,就表示打开文件的时候,光标所处的位置是第一行加几。

2.5 vim在插入模式下的命令集

2.5.1 退出

插入模式其实并没有什么好讲的,就是正常的写入、删除操作等等,唯一需要讲的是一个普通的知识点:

  • Ctrl + zz \] 保存并退出 vim ,相当于底行模式下的 wq 指令。

3.1 配置文件的位置

在每个用户的目录 /etc/ 下面,有个名为 vimrc 的文件,这是系统中公共的 vim 配置文件,对所有用户都有效。

而在每个用户的主目录下,都可以自己建立私有的配置文件,命名为:.vimrc。例如,/root 目录下,通常已经存在一个 .vimrc 文件,如果不存在,调用 touch 指令创建一下即可。

大家会发现,vim这个指令其实就是路径下的一个文件,和 ls 、touch 这样的指令没有任何区别

每当执行 vim 这条指令的时候,系统首先会去家目录下寻找 .vimrc 这个配置文件,当启动vim时,就会把配置文件中的内容作为初始项自动执行,比如我在 .vimrc 这个文件当中写入 set nu ,那么我再去用 vim 打开其他文件的时候,就会默认自动带上行号。

所以对 vim 做基本配置,本质就是将配置项写进 /home/xxx/.vimrc 配置文件当中。

那么你所需要什么初始配置文件,就往 .vimrc 中写什么即可,大家也可以去大模型上搜索相关的配置内容:

3.2 插件

要配置好看的vim,原生的配置可能功能不全,可以选择安装插件来完善配置,保证用户是你要配置的用户。大家可以在这个网页下:

VimForCpp: 快速将vim打造成c++ IDE

将这串指令复制粘贴到你的xshell上面,执行后就会自动安装。至此之后,如果要使用vim的话,就会有写C/C++代码的环境风格:

3.3 sudo权限配置

在之前我们提到过,对于一个普通用户要执行一定操作的时候,如果权限不够,可以使用 sudo 指令进行暂时性的权限升级。而使用sudo指令需要该普通用户的账号,被保存进入 sudo 指令的白名单里。那么该如何保存呢?

首先,一定需要在 root 账号下才能进行保存,我们输入 vim /etc/sudoers ,就会进入 /etc/sudoers 这个文件当中:

然后我们要找到这样一行语句,大家一开始在这段语句当中,只会看到一个 root ALL=(ALL),然后我们在命令模式下,使用 yy + p 进行复制粘贴一行,然后将 root 的名字改成自己普通账户的用户名,然后进入底行模式,一定要执行 :wq! 进行强制保存并退出。

至此我们就完成了 sudo 权限的配置。

本文到此结束,感谢各位读者的阅读,如果有讲解的不到位或者错误的地方,欢迎各位读者批评或指正。

相关推荐
·醉挽清风·1 天前
学习笔记—Linux—信号阻塞&信号捕捉
linux·笔记·学习
杨云龙UP1 天前
Linux生产环境下Oracle RMAN 备份、核查、清理与验证常用命令整理_20260330
linux·运维·服务器·数据库·oracle
网硕互联的小客服1 天前
CentOS系统如何卸载桌面并以shell 字符界面启动?
运维·服务器·网络·安全
A.A呐1 天前
【Linux第二十二章】https
linux·https
齐齐大魔王1 天前
linux-线程编程
java·linux·服务器
舒一笑1 天前
为什么 MinIO 生产部署“默认就是 4 台起步”?
运维
吕司1 天前
Linux动静态库
linux·运维·服务器
123过去1 天前
mfcuk使用教程
linux·测试工具·安全
橙露1 天前
Shell 脚本实战:自动化备份、监控、告警脚本模板
运维·自动化·github
风曦Kisaki1 天前
#Linux进阶Day05:防火墙+VMware网络+sshd远程管理
linux·运维