从开始讲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向上翻页回看代码

我们可以对vim进行分屏操作:

  • :vsp config.yml (垂直分屏并打开 config.yml)

  • :sp src/main.c (水平分屏并打开 main.c)

并使用shift+ww移动分屏之间的光标,这会直接影响到我们当前在对哪个分屏做操作。

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保存并退出完成编辑
:!command在不退出vim编辑器的情况下进行编译等操作完成test.c的代码编写后直接输入指令编译
:%s/dst/src/在dst处用src替换多行注释或者输入输出内容批量替换

示例:

4. 视图模式(Visual Mode)

  • 进入方式:命令模式下按 v(字符选择)、V(行选择)、Ctrl+v(块选择)。
  • 核心功能:高亮选择文本区域进行批量操作。
y              # 复制选中内容
d              # 删除选中内容
>              # 向右缩进选中块

具体操作方式:可以通过hjkl进行批量的行,列选择;接着shift+i进入插入模式,直接输入想要进行注释的字符(这里用#示范),然后ESC进入命令模式即可。效果如下:

若要撤销操作直接按u即可。

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 > 手动翻页

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/97778.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/97778.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/97778.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

redis面试点记录

1、主从复制psync-> runid->runid是?则是全量->返回fullresync和runid和复制进度->bgsave命令准备RDB文件->之后的命令写入replication_buffer->发送RDB->发送replication_buffer的信息repl_backlog_buffer环型缓冲区,主节点只有一…

Elastic APM 与 Elasticsearch 集成:构建完整可观测性栈

引言 Elastic APM 深度依赖 Elasticsearch 作为数据后端,但正确集成可以解锁更强大的功能,如自定义查询、聚合分析和与其它 Elastic 工具的协同。本文探讨 APM 与 Elasticsearch 的集成细节,包括数据流、索引管理以及高级用例,帮助…

开源模型应用落地-基于DPO的Qwen3-4B意图理解精准对齐实践(二十)

一、前言 在大模型技术蓬勃发展的今天,如何让AI真正“理解”用户意图,而非仅仅生成流畅文本,已成为落地应用的核心瓶颈。尤其是在客服、搜索、智能助手等场景中,模型对用户query的深层语义解析能力,直接决定了交互体验的成败。然而,经过标准SFT(监督微调)训练的模型,往…

23种设计模式案例

一、创建型模式 1. 单例模式 (Singleton Pattern) 应用场景: 全局状态管理、全局配置、共享资源访问 // 全局状态管理器 class Store {constructor() {if (Store.instance) return Store.instance;this.state {};Store.instance this;}getState(key) { return this.state[key…

ctfshow_web13-----------文件上传.user.ini

打开题目发现是一个文件上传题扫描后发现存在upload.php.bak.bak是备份文件拿到源码正则过滤了php&#xff0c;文件大小<24,文件名小于9经尝试&#xff0c;改后缀php5,ptml均不行&#xff0c;使用.htaccess文件也不成功上传上传.user.ini&#xff0c;在文件中写上auto_prepe…

图像拼接案例,抠图案例

目录 一.图像拼接案例 1.图像拼接项目介绍 2.核心步骤 ①计算图片特征点及描述符 ②匹配特征点&#xff0c;使用暴力匹配器 ③筛选有效匹配 ④计算透视变换矩阵 ⑤应用变换和拼接 二.抠图案例 1.缩放旋转处理 2.转化为灰度图并二值化 3.找出所有轮廓&#xff0c;并在…

【左程云算法笔记016】双端队列-双链表和固定数组实现

目录 1&#xff09;双端队列的介绍 2&#xff09;双端队列用双链表的实现代码演示 3&#xff09;双端队列用固定数组的实现 代码演示 视频 【算法讲解016【入门】双端队列-双链表和固定数组实现】 Leecode leecode641 设计循环双端队列 1&#xff09;双端队列的介绍 可以…

ffplay视频输出和尺寸变换

视频输出模块 视频输出初始化的主要流程 我们开始分析视频&#xff08;图像&#xff09;的显示。 因为使⽤了SDL&#xff0c;⽽video的显示也依赖SDL的窗⼝显示系统&#xff0c;所以先从main函数的SDL初始化看起&#xff08;节选&#xff09;&#xff1a; int main(int argc, c…

协议_https协议

http http协议是将数据以明文的形式在网络上传输。若是传输的数据中包含一些敏感信息比如银行卡信息等可能会被有心人攻击造成信息泄露或被篡改。 总结&#xff1a;http协议进行数据传输难以保证数据的隐私性以及数据完整性&#xff0c;为了保证数据的准确定引入了https这一协…

阿里云 腾讯云 API 自动化查询指南

文章目录一、核心思路与架构建议二、经验与核心建议三、技术方案选型建议四、API使用详解4.1 阿里云4.2 腾讯云五、进阶&#xff1a;与内部系统联动免费个人运维知识库&#xff0c;欢迎您的订阅&#xff1a;literator_ray.flowus.cn 一、核心思路与架构建议 自动化流程可以概括…

【Unity 性能优化之路——概述(0)】

Unity性能优化概述性能优化不是某个环节的极致压榨&#xff0c;而是所有模块的协同共进。本文将为你建立完整的Unity性能优化知识体系。很多Unity开发者一提到性能优化&#xff0c;首先想到的就是Draw Call、Batches这些渲染指标。这没错&#xff0c;但它们只是性能优化中的一部…

灵码产品演示:软件工程架构分析

作者&#xff1a;了哥 演示目的演示灵码对于整个复杂软件工程项目的架构分析能力&#xff0c;输出项目的软件系统架构图。演示文档接口生成能力。演示准备 克隆工程地址到本地&#xff08;需提前安装好 git 工具&#xff0c; 建议本地配置 brew&#xff09;&#xff1a; git cl…

银河麒麟部署mysql8.0并连接应用

​客户需在国产化银河麒麟系统中部署软件应用&#xff0c;使用mysql8.0数据库。机器放置了两三年&#xff0c;里面命令工具和依赖都不太全。而且客户环境不联网&#xff0c;只能采用离线部署的方式。部署过程中踩了很多坑&#xff0c;也用到很多资源&#xff0c;记录一下。 过…

GitAgent-面壁智能联合清华大学发布的大模型智能体应用框架

本文转载自&#xff1a;https://www.hello123.com/gitagent ** 一、&#x1f50d; GitAgent 框架&#xff1a;大模型智能体的工具箱革命 GitAgent 是由面壁智能与清华大学自然语言处理实验室联合研发的创新型框架&#xff0c;旨在解决大模型智能体在复杂任务中的工具扩展瓶颈…

灵码产品演示:Maven 示例工程生成

作者&#xff1a;轻眉 演示主题&#xff1a;由 AI 自动生成 0 到 1 的电商订单 Java 项目 演示目的 面向 Java 零基础的用户&#xff0c;通过灵码的产品能力&#xff08;如提示词、编码智能体、项目 Rules 和 SQLite MCP 服务、单元测试&#xff09;自动生成 0 到 1 的电商订单…

AI编程从0-1开发一个小程序

小伙伴们&#xff0c;今天我们利用AI实现从0到1开发一个小程序&#xff01;需求交给AI&#xff1a; 我们只要说出自己的开发思路&#xff0c;具体需求交给AI完成&#xff01;输入提示词&#xff1a;个人开发的小程序 能开发哪些好备案&#xff0c;用户喜欢使用的 AI给出…

DDoS高防IP是什么? DDoS攻击会暴露IP吗?

DDoS高防IP是什么&#xff1f;高防IP是指一种网络安全服务&#xff0c;主要用于防御DDoS攻击。随着技术的发展&#xff0c;黑客进行网络攻击的强度也在加大&#xff0c;所以我们要做好网络防护&#xff0c;及时预防DDoS攻击。DDoS高防IP是什么&#xff1f;DDoS高防IP是指基于IP…

k8s事件驱动运维利器 shell operator

Shell-Operator 概述 Shell-Operator 是 Kubernetes 的一个工具&#xff0c;用于通过 shell 脚本扩展集群功能。它允许用户编写简单的脚本&#xff08;Bash、Python 等&#xff09;来响应 Kubernetes 事件&#xff08;如资源变更、定时任务&#xff09;&#xff0c;无需编译复…

(二)文件管理-文件权限-chmod命令的使用

文章目录1. 命令格式2. 基本用法2.1 符号模式2.2 八进制数字模式3. 高级用法3.1 递归操作3.2 参考权限3.3 特殊权限位(Setuid, Setgid, Sticky Bit)3.4 X 特殊执行权限4. 注意事项4.1权限与所有权4.2 Root 权限4.3 安全风险4.4 -R 的风险4.5 目录的执行权限1. 命令格式 chmod …

医院预约挂号脚本

医院预约挂号脚本 功能介绍 本脚本是一个用 Python 编写的医院预约挂号程序&#xff0c;支持以下功能&#xff1a; 自动预约&#xff1a;通过api交互选择医院、科室、医生和时间段。自动监控&#xff1a;持续检查指定医生的号源状态&#xff0c;发现可预约时段时自动尝试预约。…