vim
Vim的全称是Vi IMproved,意思是"增强版的Vi"
就是 "改进版的 Vi 编辑器"。
美 /ɪm'prʊvd/
改良的;改进过的
完全兼容 Vi,但增加了许多新特性,例如:语法高亮、代码折叠、多级撤销、插件系统、图形界面等。
Vi: 是 Unix 系统上一个非常古老且经典的文本编辑器
Vi的全称是Visual Instrument
美 /ˈɪnstrəmənt/
器械;仪器;器具

在全屏交互中系统使用波浪线 ~表示空行

进入编辑模式使用 i 键
退出编辑模式使用 ESC 功能键,
退出编辑模式后,使用q!才能在不保存的情况下退出 vim,
如果在q后面不加!就会出现错误提示,要求在不保存退出时在q后面添加!。

vim 命令模式



大写命令通常将"单词"的定义从"字串"扩展到"字串+特殊符号"
在 Vim 中,"单词"有两种定义:
字串:由字母、数字、下划线组成(受 iskeyword 选项影响)。
字串+特殊符号:任何非空白字符序列都被视为一个"单词"。
cpp
hello_world foo-bar;baz
w (小写)
把 hello_world、foo、-、bar、;、baz 各看作一个"单词"
即,英文单词、标点符号都单独被看做一个'单词'
空格 本身不被当作一个单词,空格作用是分隔单词
注意:标点符号中有一个特例,下划线被当作单词的一部分,所以hello_world被当作一个单词而不是三个单词,
这源于编程语言的命名惯例:变量名、函数名等通常使用下划线来连接单词
Vim 中的"单词"(word) 定义:
即小写字母 w 的作用
一个"
单词"由字母、数字和下划线组成(即连在一起的字母、数字、下划线被看作一个整体,被当作一个单词)。也就是说,下划线通常被包含在"单词"的字符集中,因此下划线连接的字母被视为一个单词。例如,字符串 hello_world 在 Vim 中被视为一个单词。
而 foo-bar;baz 被视为5个单词,分别为
foo、-、bar、;、baz
W (大写)
foo-bar;baz 被当作一个整体,每个无空格的整串字符序列都当作一个"单词"
Vim 中的"WORD"(大写)定义:
即大写字母的作用
一个"WORD"由非空白字符组成,直到遇到空白字符(空格、制表符等)为止。也就是说,任何非空白字符序列都是一个"WORD"。
例如,字符串 foo-bar;baz 被视为一个WORD,因为它中间没有空白字符。
扩展源于编程语言的命名惯例:变量名、函数名等通常使用
下划线来连接单词(如 my_variable)所以,
下划线被看作单词的一部分
而减号则很少用于标识符中,
所以,
Vim 默认设置不减号其视为单词的组成部分
注意,在 vim 中下划线被看成是单词的一部分,所以,当单词中包含下划线的时候,比如 hello_world 会被当成一个单词,而不是三个单词 helo、_、world,
vim 是根据自己的设置来决定将下划线作为单词的一部分来看待的。
可以在 vim 界面中通过命令 :set iskeyword?来查看
扩展
在Vim中,
iskeyword用于定义哪些字符可以被视为是组成单词的一部分,即组成单词的基本单位,就像组成单词的字母一样,比如把下划线放入到iskeyword中,那么下划线和字母共同组成单词,它们会被看作一个整体,
iskeyword 看起来是一个字符串,字符串由若干部分组成,由逗号分隔,形如:
cpp
iskeyword=@,48-57,_,192-255
iskeyword 包含了4个部分分别是 @,48-57,_,192-255
注意,iskeyword 的第一个值 @ 它的意思可不是@,而是表示所有字母字符(包括大小写)
@:表示所有字母字符(包括大小写)。
48-57:表示ASCII码从48到57,即数字0-9。
_:表示下划线。
192-255:表示扩展的ASCII字符(比如带重音符号的字母)
查看 iskeyword 当前的设置:
在 Vim 中执行 :set iskeyword?
也可以通过 可以通过 set 命令来修改 iskeyword
例如:
cpp
将连字符-减号加入 iskeyword
:set iskeyword+=-
或者移除下划线
:set iskeyword-=_
在 vim 中 ,单词移动命令:w、e、b等命令会按照iskeyword 定义的字符来识别单词边界,
假设我们有一行文本:
hello_world foo-bar,且 iskeyword 包含下划线但不包含连字符。光标在行首时,按e:
第一次按e,光标移动到hello_world的末尾(因为下划线是关键字字符,所以整个hello_world是一个单词)。
第二次按e,光标移动到foo的末尾(因为连字符不是关键字字符,所以foo是一个单词,bar是另一个单词)。
连字符也被看作是一个单词
November2025the30thSunday
iskeyword 是 vim 的选项,
编辑 iskeyword 可以改变组成单词的基本单位,
在 vim 中使用命令 :set iskeyword?来查看当前 iskeyword 的具体配置,

当前值如下:

可以看到 iskeyword 中包含下划线,所以当一串非空字符中有下划线的时候不会断开单词,比如, hello_world 被当成一个单词,
接下来使用命令 :set iskeyword-=_

将下划线从 iskeyword 中去掉,那么,再次查看 iskeyword 的配置,如下:

已经不包含下划线了,这时候,hello_world 就不是一个单词了,而是三个单词,分别是 hello、_、world
那么,我们再通过命令 :set iskeyword+=_
将下划线添加到 iskeyword 中,再次查看,结果如下:

下划线再次回到了 iskeyword 中
这样,hello_world又被 vim 看作是一个单词了。

注意,n+yy 是向下复制


注意:
以上的命令快捷键都是在 vim 命令模式下才能使用的
vim 编辑模式


切换到编辑模式后,用户就可以输入文本了,
vim file 来打开 file 文件,使用上面的进入编辑模式的快捷键 a,i,o,s等,
使用 ESC 键从编辑模式退出到命令模式,在命令模式下输入 :wq命令并回车确认可以将之前做的更改进行保存后退出 vim
December2025the02ndTuesday
末行模式



vim 进入时默认是在命令模式,
vim 练习:


进程

程序结束,进程消失,资源回收

cpu把资源按时间分段,
进程获取 cpu 给分配的时间片,
在进程的时间片内,
cpu 为其工作,
一旦进程的时间片耗尽即cpu给其分配的时间片用完了,
cpu 将停止为这个进程工作转而为其他的进程服务。
这里要明白一点,cpu 切换时间片的速度是非常快的,以人类自身机体的能力是无法感觉到的,
因为时间片通常是多少毫秒,而上下文即时间片之间的切换是以微秒级计时的,cpu 每次切换耗时极短,所以给人的感觉是可以"同时"运行多个程序。
时间片是分配给每个可运行线程的一小段CPU时间。这个长度不是固定的,但有一个典型范围:
通常范围:1毫秒到100毫秒。
在Windows、Linux等现代桌面/服务器操作系统中,通常约为 10-20毫秒。
扩展:
对
人类而言:1毫秒(0.001秒)是瞬间的。你点击鼠标,计算机在几个毫秒内就能响应,所以你感觉是"立即"的。对
CPU而言:3GHz的CPU在一毫秒内可以执行大约三百万条指令。所以,一个10毫秒的时间片,足够一个线程(实际是cpu在干活)执行海量的操作。
cpu 切换时间片是几乎不费力的,但是过于频繁的话也会浪费 cpu 的算力,CPU宝贵的时间都花在"调度"上,而不是"干活"上,
所以,需要设计权衡将时间片尽量设置的更合理些,
CPU切换服务对象(线程)的节奏大约是每秒几十到上百次(对应10-20ms的时间片)。即一个 10ms的时间片,cpu 在一秒内可以切换100次
上下文切换(cpu切换时间片的速度)的速度:通常为"微秒级"或"纳秒级"
它是指CPU从一个线程切换到另一个线程时,必须执行的"善后和准备工作"所花的时间
这个过程包括:
1.保存当前线程的"现场"(所有寄存器值、程序计数器等)。
2.更新操作系统内部数据结构(如将当前线程状态改为"就绪")。
3.选择下一个要运行的线程。
4.恢复下一个线程的"现场",并开始执行。
这个切换操作的速度非常快:
典型耗时:几百纳秒到几微秒。
注意:
一次上下文切换的时间虽然很短,但也够 cpu 执行几千到几万条CPU指令了。
而一个时间片内,cpu可以执行数千万条指令
"切换节奏"(时间片):在 毫秒级(例如10-20ms)。这决定了CPU在各个任务间轮换的频率,是操作系统调度策略的关键参数。
"切换动作"(上下文切换):在 微秒/纳秒级。这是CPU和操作系统为了完成一次任务切换所付出的微小开销。
正是因为这极快的切换速度(微秒级)和相对合理的切换节奏(毫秒级)
电脑才能让我们感觉音乐在后台播放、网页在加载、鼠标光标能同时流畅移动,仿佛所有事情都在"同时"发生
这背后其实是CPU在以人类无法感知的速度,在各个任务间进行着闪电般的切换。




运维中常用到的进程相关命令

字面意思
"Process Status"
意为"进程状态"。
December2025the02ndTuesday
提供的是在命令执行那一刻(一个时间点的快照)的进程状态信息,如进程ID(PID)、运行状态(运行中、睡眠中等)、占用资源(CPU、内存)和启动命令等
但是,
ps 实际功能比字面意思更广
虽然名字叫"状态",但现代 ps 命令的功能已经远远超出了简单的状态显示。它可以通过各种选项展示极其详细的进程信息,包括:
父子进程关系
内存的详细分布
占用的CPU时间
启动用户(UID)
终端关联(TTY)
等等
扩展:
ps 命令最早出现在贝尔实验室的 Unix V7 版本中,其简洁的命名风格(两个字母)是早期 Unix
工具的一个典型特征(例如:ls - list, cp - copy, mv - move)。尽管后来功能不断增强,但其名字一直保留下来。
在Linux中,ps命令用于显示当前进程的状态。
ps命令的参数非常多,
而且有两种风格:Unix风格和BSD(伯克利)风格。
此外,ps还支持GNU风格的长选项。
UNIX风格(使用连字符 -)
Unix风格参数(通常前面带一个连字符):-A 或 -e: 显示所有进程。
-a: 显示所有终端上的进程,除了会话引导进程和与终端无关的进程。
-d: 显示所有进程,但省略会话引导进程。
-N: 显示与指定条件不符的进程(反向选择)。
-r: 只显示正在运行的进程。
-T: 显示当前终端上的所有进程。
-f: 全格式显示,通常显示更多列(如UID, PID, PPID等)。
-l: 长格式显示,显示更多信息(如优先级、Nice值等)。
-j: 作业格式,显示进程组ID和会话ID。
-o: 用户自定义格式,可以指定要显示的列。
-p: 指定进程ID(PID)列表。
-u: 指定用户,显示该用户的进程。
BSD风格(不使用连字符)
BSD风格参数(通常不带连字符):
a: 显示所有终端上的进程,包括其他用户的进程。
u: 以用户为主的格式显示,显示用户名和启动时间等。
x: 显示没有控制终端的进程。w: 宽输出,显示更长的命令行。
aux: 组合使用,显示所有进程的详细信息的常见用法。
GNU长选项(使用双连字符 --
GNU风格长选项(前面带两个连字符):--help: 显示帮助信息。
--version: 显示版本信息。
--sort: 指定排序的列,例如--sort=-pid按PID降序。
--format: 类似-o,指定输出格式。
ps 命令的参数可以混合使用,但不同风格的参数可能会产生冲突
通常,使用一种风格,或者注意使用--来分隔不同风格的参数
ps命令的参数非常多
在实际使用中,可以根据需要组合不同的参数。如果遇到不熟悉的参数,可以通过 man ps 查看手册页,获取完整的信息

命令执行后,回显中会按照表格方式给出信息
其中每列的字段含义如下

其中,
STAT 进程状态
进程状态的代码含义如下:

常用参数组合回顾:
aux:最常用组合,
a=所有用户,u=用户信息,x=无终端进程
-ef:另一种常用组合,e=所有进程,f=完整格式
注意:不同Linux发行版可能会有些许差异
扩展:
-e 选项表示显示所有进程(all processes),而
-f 选项表示完整格式(full format)
在UNIX风格的参数中,-e并不是一个缩写,而是代表"every"或者"all"的意思,即所有进程
"-e 表示 every,即显示所有进程"。虽然这不是官方定义的缩写,但这是最合理且被广泛接受的理解
还有一个 -A 选项,和 -e 是等价的,A 代表"all"
A = All processes(更正式更清晰的说法)
-e 显示所有进程(包括其他用户的进程)
-f 显示完整格式(包括UID, PID, PPID, C, STIME, TTY, TIME, CMD等列)
扩展:
实际上,ps 命令最早出现在 Unix 第7版(1979年)时只有少数参数:
最初没有 -e 参数
后来添加时,-e 可能是 every 的缩写
-A 是后来为了更清晰而添加的(A = All)
使用 -aux 参数查询所有



扩展:
命令 cal 可以查看本月日历

top


December2025the05thFriday

Windows任务管理器相仿

cpp
top -b
top- 08:58:26 up 1:38, 0 users, load average: 1.00, 1.00, 0.94
Tasks:20 total, 1 running, 19 sleeping, 0 stopped, 0 zombie
%Cpu(s):12.8 us, 46.2 sy, 0.0 ni, 41.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem :182.0 total, 171.3 free, 4.9 used, 5.8 buff/cache
MiB Swap:0.0 total, 0.0 free, 0.0 used. 172.2 avail Mem

注意,在使用 top 命令时若加上参数(比如 top -b),则上图中的交互快捷键将不能正常工作,也就是说只有使用不带参数的 top 命令时,交互快捷键才能正常使用。
除了 q 键以外,其他的交互键不停的按下可以循环切换状态的。

pstree


示例:

pgrep


kill





December2025the07thSunday


