Linux 不仅仅是一个“可以运行程序的系统”,更重要的是,它提供了一套完整的开发工具链。从软件安装、文件编辑,到程序编译、调试,每一个环节都有对应的工具。
这一天主要学习了两个内容:Linux 软件包管理器 yum/apt 和 Vim 编辑器。
以前在 Windows 上安装软件,通常就是下载一个 .exe 安装包,然后双击安装。
Linux 中也有类似的机制,只不过 Linux 更强调软件包管理。
简单来说,可以把:
Linux 中常见的软件包管理器主要有:
它们可以帮助我们自动寻找软件、下载软件以及处理软件之间的依赖关系。资料中也强调了软件包依赖是 Linux 软件生态中的重要问题。
例如在 CentOS 中,可以使用:
|
1 |
yum list | grep lrzsz |
Ubuntu 则可以使用:
|
1 |
apt search lrzsz |
这样做的好处是 Linux 中软件包数量很多,我们不需要把所有软件都看一遍,只搜索自己关心的软件即可。
CentOS:
|
1 |
sudo yum install -y lrzsz |
Ubuntu:
|
1 |
sudo apt install -y lrzsz |
安装软件时通常需要管理员权限,因为软件需要写入系统目录。
Linux 下很多操作都和权限有关,这和 Windows 的使用体验还是有比较明显区别的。
CentOS:
|
1 |
sudo yum remove -y lrzsz |
Ubuntu:
|
1 |
sudo apt remove -y lrzsz |
资料还特别提醒,yum/apt 的使用需要保证网络畅通,因为软件通常需要从软件源下载。可以使用:
|
1 |
ping www.baidu.com |
简单检查网络连接。
软件包管理器并不是凭空产生软件,它需要从“软件源”获取软件。
例如 CentOS 中可以看到:
|
1 |
/etc/yum.repos.d/ |
Ubuntu 中常见的是:
|
1 2 |
/etc/apt/sources.list /etc/apt/sources.list.d/ |
可以把软件源理解成一个巨大的软件仓库。
如果软件源访问速度比较慢,就可以考虑使用国内镜像源,例如阿里云、清华大学、中科大等镜像站。资料中也介绍了这些镜像源。
到这里,我对 Linux 的软件安装机制有了一个更加完整的认识:
软件包管理器 + 软件源 + 软件包依赖
这几个概念实际上是联系在一起的。
解决了软件安装问题之后,下一个问题就是:
在没有图形化 IDE 的情况下,怎么写代码?
答案就是 Vim。
Vim 是 Linux 中非常经典的文本编辑器,它是 vi 的升级版本,支持多种模式,并提供了大量快捷操作。资料中将课堂重点放在三种模式上:
进入 Vim 后默认就是普通模式。
这个模式主要用于:
例如:
|
1 2 3 4 |
h 左 j 下 k 上 l 右 |
刚开始使用的时候确实不太习惯,因为我们平时习惯鼠标或者方向键,但是掌握之后会发现这种方式非常高效。
在普通模式下输入:
|
1 2 3 |
i a o |
都可以进入插入模式。
其中:
回到普通模式只需要:
|
1 |
ESC |
这一点非常重要。
如果刚接触 Vim,很容易出现“为什么键盘打不出字”的情况。
原因通常就是:
你还处在普通模式,而不是插入模式。
在普通模式下按:
|
1 |
: |
就进入底行模式。
这里最常用的几个命令是:
|
1 2 3 |
:w 保存 :wq 保存并退出 :q! 不保存强制退出 |
资料中也把这些命令作为 Vim 最基础的使用方法。
随着练习,我发现 Vim 真正强大的地方在于快捷操作。
例如:
|
1 2 3 4 5 6 7 |
dd 删除一整行 yy 复制一整行 p 粘贴 u 撤销 Ctrl+r 恢复撤销 G 跳到文件末尾 gg 跳到文件开头 |
查找也很方便:
|
1 |
/关键字 |
向后查找;
|
1 |
?关键字 |
向前查找。
如果需要跳转到某一行,可以使用:
|
1 |
:15 |
直接跳到第 15 行。
原始的 Vim 功能已经很多了,但是通过 .vimrc 可以进一步进行配置。
例如:
|
1 2 3 |
syntax on set nu set shiftwidth=4 |
分别可以实现:
用户自己的配置文件一般可以放在:
|
1 |
~/.vimrc |
资料中还介绍了 TagList、WinManager 等插件,通过插件可以进一步增强 Vim 的开发体验。
今天的学习让我完整认识到 Linux 开发环境中的两个基础部分:
第一,软件怎么安装。
依靠 yum/apt 和软件源,我们可以快速完成软件的搜索、安装和卸载。
第二,代码怎么编写。
依靠 Vim,我们甚至可以完全脱离图形化 IDE,在终端中完成代码编辑。
接下来,我要继续学习 Linux 最核心的开发工具之一——gcc/g++ 编译器,真正弄明白我们写出的 .c、.cpp 文件,到底是怎样一步一步变成可执行程序的。