Linux 开发工具(1)
从开始讲Linux,我们的目标绝不止于写几个命令这么简单。我们的目的是在Linux系统上做开发。因此学习Linux的开发工具也是必不可少的。本章将重点讲解:包管理器apt(CentOS叫yum,这里用ubuntu举例),vim编辑器。
一.包管理器apt
1.安装软件的工具
在Linux中,安装软件主要有以下三种方式:
1.源码安装
2.软件包安装rpm
3.包管理器apt
前面两种方式现在我们已经基本不再使用,因为我们面临一个重要问题——软件依赖。
2.软件依赖
在用源码安装或者软件包安装时,我们常会发现一个问题:即使将这个软件“完整下载”下来,也照样无法使用,这是因为软件并非我们想的那么简单,除了软件本身,可能还附带许多依赖库。例如安装ls命令,还需要附带lib.c依赖库。
不仅一个软件需要多个依赖库,甚至可以说,世界上的软件都并非孤岛状态,他们的依赖库很有可能是相互依赖相互包含的。
我们下载安装的只是软件这一种东西,而依赖我们几乎可以说一个都没下载下来,需要自己手动下载。为了让用户更方便地即下即用,因此诞生了包管理器的方式进行软件的下载安装。
3.包管理器apt
软件的下载安装即网络下载+系统安装(拷贝)。安装即拷贝,而拷贝一般不会拷到某个用户的家目录下,因此软件的下载安装往往需要root权限。
wujiahao@VM-12-14-ubuntu:/$ sudo apt install sl
[sudo] password for wujiahao:
不过不必担心,即便安装的软件拥有者为root,但往往会对other提供r和x权限,也就是说对于系统中任意成员都可以使用这个命令。
现在有几个问题:
问题1:包管理器apt干了什么?
回答2:包管理器会自动解决依赖问题。简单来说:软件包可以看作app,而包管理器就是应用商店。
之前我们就讲过打包和解压这个命令。而打包的目的就是防止一些重要文件的缺失,apt这样的包管理器为我们提供的软件全是这样完整打包封装的,下载下来一般就能直接使用。
那么又引起了另一个问题:
问题2:Linux的软件由谁提供?
回答2:由社区提供。
操作系统背后的配套软件也是生态的一环,而对于操作系统来说,生态可以说是比提供的技术支持更重要的东西。一款操作系统要想被更广大用户使用,开发者们就会提供各种配套软件完善生态。
我们的操作系统和社区是如何联系的?
首先,我们可以直接访问社区(这里用Ubuntu举例):www.ubuntu.org
用户依赖社区的软件和生态,就自然有人愿意捐款维持项目开发和服务器维护。在社区中的软件,主要有base(稳定软件)和epel(扩展软件源)等组成,只有一个软件足够稳定,暴露的问题足够少才能被迁移为base版。
问题3:那么我们自己的机器,是如何知道软件的下载链接呢?
回答3:我们自己的操作系统都是从社区下载的,当然内部是有内置链接的。
root@VM-12-14-ubuntu:/etc/apt# cat /etc/apt/sources.list
# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
# newer versions of the distribution.
deb http://mirrors.tencentyun.com/ubuntu jammy main restricted
# deb-src http://mirrors.tencentyun.com/ubuntu jammy main restricted## Major bug fix updates produced after the final release of the
## distribution.
deb http://mirrors.tencentyun.com/ubuntu jammy-updates main restricted
# deb-src http://mirrors.tencentyun.com/ubuntu jammy-updates main restricted## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team. Also, please note that software in universe WILL NOT receive any
## review or updates from the Ubuntu security team.
deb http://mirrors.tencentyun.com/ubuntu jammy universe
# deb-src http://mirrors.tencentyun.com/ubuntu jammy universe
deb http://mirrors.tencentyun.com/ubuntu jammy-updates universe
# deb-src http://mirrors.tencentyun.com/ubuntu jammy-updates universe## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team, and may not be under a free licence. Please satisfy yourself as to
## your rights to use the software. Also, please note that software in
## multiverse WILL NOT receive any review or updates from the Ubuntu
## security team.
deb http://mirrors.tencentyun.com/ubuntu jammy multiverse
# deb-src http://mirrors.tencentyun.com/ubuntu jammy multiverse
deb http://mirrors.tencentyun.com/ubuntu jammy-updates multiverse
# deb-src http://mirrors.tencentyun.com/ubuntu jammy-updates multiverse## N.B. software from this repository may not have been tested as
## extensively as that contained in the main release, although it includes
## newer versions of some applications which may provide useful features.
## Also, please note that software in backports WILL NOT receive any review
## or updates from the Ubuntu security team.
#deb http://mirrors.tencentyun.com/ubuntu jammy-backports main restricted universe multiverse
# deb-src http://mirrors.tencentyun.com/ubuntu jammy-backports main restricted universe multiversedeb http://mirrors.tencentyun.com/ubuntu jammy-security main restricted
# deb-src http://mirrors.tencentyun.com/ubuntu jammy-security main restricted
deb http://mirrors.tencentyun.com/ubuntu jammy-security universe
# deb-src http://mirrors.tencentyun.com/ubuntu jammy-security universe
deb http://mirrors.tencentyun.com/ubuntu jammy-security multiverse
# deb-src http://mirrors.tencentyun.com/ubuntu jammy-security multiverse
其实从这个文件内容来看,我使用的是腾讯的镜像源。那么为什么需要镜像源呢?
这些OS也好,生态也好基本都是外国人开发的,所以我们要访问是需要一点手段的。而我们国人建立了一套国外的镜像文件,同时更改链接(切换镜像源),便于国人使用。
我们可以查看包含sl关键字的指令。显示的信息依次为软件名——版本号——提供者
root@VM-12-14-ubuntu:/# apt list|grep slWARNING: apt does not have a stable CLI interface. Use with caution in scripts.aisleriot/jammy 1:3.22.22-1 amd64
android-libboringssl-dev/jammy 10.0.0+r36-1 amd64
android-libboringssl/jammy 10.0.0+r36-1 amd64
apache2-ssl-dev/jammy-updates,jammy-security 2.4.52-1ubuntu4.16 amd64
apertium-eval-translator/jammy 1.2.1-2 all
apertium-hbs-slv/jammy 0.5.1-1 all
apertium-isl-eng/jammy 0.1.0~r66083-3 all
apertium-isl/jammy 0.1.0~r65494-2.1 all
asl-doc/jammy 0.1.7-4 all
asl-tools/jammy 0.1.7-4 amd64
aspell-sl/jammy 0.60-4 all
atomicparsley/jammy 20210715.151551.e7ad03a-1 amd64
bruteforce-salted-openssl/jammy 1.4.2-3build1
二.vim编辑器
1.历史发展与Vi的区别
起源与演进
Vi(1976年) :由Bill Joy开发,嵌入BSD Unix系统,是首个面向屏幕的文本编辑器,但功能有限(如无多级撤销)。
Vim(1991年) :Bram Moolenaar基于Amiga系统的Stevie编辑器重写,命名为"Vi IMproved"(Vim),1992年发布首个公开版本。
关键升级:
多级撤销(Vi仅支持单次撤销)
跨平台支持(Windows/Linux/macOS)
语法高亮、代码补全、插件扩展。
Vim的核心优势
效率设计:键盘为中心的操作减少鼠标依赖,降低重复操作疲劳。
可扩展性:支持Vimscript/Lua/Python等脚本语言。
生态丰富:2023年GitHub超3万插件(如NERDTree)
2.Vim的12种模式
Vim官方定义7种基础模式+5种派生模式,以下聚焦5种核心模式:
1. 命令模式(Command Mode)
进入方式:启动Vim时的默认模式,或从其他模式按Esc返回。
核心功能:导航、文本操作、模式切换。
命令示例:
1. 光标移动
命令 | 功能 | 示例 |
h/j/k/l | 左/下/上/右移动 | 6j :下移6行 |
gg | 跳至文件首行 | 快速返回文件开头 |
G | 跳至文件末行 | 查看日志结尾 |
$ | 跳至行尾 | 行尾添加分号 ; |
^ | 跳至行首 | 行首插入注释 # |
w | 下一单词开头 | 快速跳过参数 |
e | 下一单词结尾 | 修改函数名 |
b | 上一单词开头 | 回退修正拼写 |
nl | 移至该行第n个字符 | 对齐表格数据 |
Ctrl+f | 向下翻页 | 浏览长文件 |
Ctrl+b | 向上翻页 | 回看代码 |
2. 文本编辑
删除操作:
x # 删除光标处字符(如删错括号)
3x # 删除光标后3字符(删多余空格)
dd # 删除整行(清理空行)
5dd # 删除5行(移除废弃代码块)
复制粘贴:
yy # 复制当前行
3yy # 复制3行(复制函数)
p # 粘贴到光标后(复用代码)
替换与撤销:
r # 替换单个字符(修正拼写)
R # 进入替换模式(覆盖旧变量名)
u # 撤销(救回误删代码)
Ctrl+r # 重做(恢复撤销操作)
高效修改:
cw # 修改当前单词(重命名变量)
c3w # 修改3个单词(重构参数列表)
3. 行号与跳转
Ctrl+g # 显示当前行号(调试定位)
20G # 跳至第20行(快速定位错误)
2.插入模式(Insert Mode)
- 进入方式:命令模式下按
i
(光标前插入)、a
(光标后插入)、o
(下方新行插入)。 - 核心功能:自由输入文本,类似常规文本编辑器。
- 切换意义:脱离命令式操作,直接编辑内容。
快捷键 | 进入位置 | 场景示例 |
---|---|---|
i | 光标当前位置插入 | 在单词中间补充字符 |
a | 光标下一位置插入 | 在行尾逗号后追加内容 |
o | 下方新开一行插入 | 在当前代码块下新增空行 |
切换命令模式:ESC
3. 底行模式(Last Line Mode)
- 进入方式:命令模式下按
:
- 核心功能:文件操作、全局命令、配置设置。
命令 | 功能 | 示例 |
---|---|---|
:set nu | 显示行号 | 便于代码定位 |
:15 | 跳至第15行 | 快速修复指定行BUG |
:/include | 向下搜索"include" | 查找头文件引用 |
:?printf | 向上搜索"printf" | 回溯打印语句 |
:w | 保存文件 | 及时保存进度 |
:q! | 强制退出不保存 | 放弃临时修改 |
:wq | 保存并退出 | 完成编辑 |
4. 视图模式(Visual Mode)
- 进入方式:命令模式下按
v
(字符选择)、V
(行选择)、Ctrl+v
(块选择)。 - 核心功能:高亮选择文本区域进行批量操作。
y # 复制选中内容
d # 删除选中内容
> # 向右缩进选中块
5. 替换模式(Replace Mode)
- 进入方式:命令模式下按
R
。 - 核心功能:直接覆盖现有文本,无需逐字删除。
- 典型场景:修改代码变量名时保留原格式。
其他模式:
模式 | 进入快捷键 | 功能 |
---|---|---|
Ex模式 | Q | 批处理命令(如:g/pattern/d ) |
终端模式 | :term | 嵌入终端操作 |
选择模式 | gh | 图形界面文本选择 |
模式切换设计哲学:减少误操作,提升专注度。各模式各司其职。
3.Vim工作流
1.基础工作流:
#打开文件
vim test.c #进入编辑模式,编辑后ESC进入命令模式
i ->编辑模式->ESC#进入底行模式,保存并退出
:wq!
2.高效技巧:
跨文件操作::vs file2 分屏编辑。做法:在命令模式下Ctrl+w+w
会话管理::mksession 保存窗口布局。
宏录制:qa 开始录制 → 操作 → q 停止 → @a 重复。
3.减少模式切换:
插入模式只做输入,其他操作用命令模式完成
熟练使用 w/e/b 替代方向键移动光标
4.组合命令:
d$ = 删除至行尾(等效于 D)
yG = 复制到文件末尾
5.避免重复:
数字前缀:5dd 代替5次 dd
搜索替代手动查找::/error > 手动翻页