Linux record 04

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_worldfoo-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

相关推荐
RisunJan1 小时前
Linux命令-ftptop命令(实时监控 ProFTPD 服务器连接状态)
linux·运维·服务器
虾..1 小时前
Linux 文件描述符,重定向及缓冲区理解
linux·运维·服务器
真正的醒悟1 小时前
202503-经验之道
服务器·网络·php
元气满满-樱1 小时前
SSH远程服务管理
运维·ssh
fengyehongWorld2 小时前
Linux lftp命令
linux
赖small强2 小时前
【Linux C/C++开发】Linux C/C++ 堆栈溢出:原理、利用与防护深度指南
linux·c语言·c++·stack·堆栈溢出
db_cy_20622 小时前
Git对服务器配置文件进行版本控制
运维·服务器·git
TracyCoder1232 小时前
在Ubuntu上搭建大模型最基础的应用环境
linux·运维·ubuntu
云和数据.ChenGuang2 小时前
AI运维工程师技术教程之Linux环境下部署Deepseek
linux·运维·人工智能