运维开发宝典006-Linux系统文件编辑器:Vim文本编辑
运维开发宝典006-Linux系统文件编辑器:Vim文本编辑器
大家好,我是云计算磊哥,从业20年的IT老鸟。运维培训15年,总结了一套从入门到精通的全运维开发宝典手册。准备用300天时间写一套博文,手把手从安装软件讲起,从行业到产品,从过去到未来,从理论到操作,从视频到文档工具,一站式。从零基础入门到20k运维开发工程师岗位诸多就业问题。多方位全方面的给你讲清楚云计算这个行业该如何做。关注我。后续更精彩。
------------------------------------------------------------------------------------------------
上篇文章中已经介绍了文件目录与路径和目录与文件操作,下面将介绍Vim文本编辑器、文件时间和文件类型的内容。
一, Vim文本编辑器
Linux系统上的编辑器是对一些服务配置和文件编辑的工具,类似于Windows系统中的记事本。Vi编辑器是Linux上最基本的文本编辑器,工作在字符模式下,效率非常高。尽管在Linux上也有很多图形界面的编辑器可用,如gedit编辑器,但在系统和服务器管理中,Vi编辑器的功能是那些图形编辑器所无法比拟的。Vim是Vi的增强版,如果计算机上没有安装Vim,可以使用下面命令下载安装。
[root@localhost ~]# which vim
/usr/bin/vim
[root@localhost ~]# yum -y install vim-enhanced
Vim编辑器主要有三种模式:命令模式、编辑模式和末行模式(扩展命令模式)。
命令模式:控制光标,对文件进行复制、粘贴、删除、查询等操作。
编辑模式:进行文本录入与更改。
末行模式:文档保存与退出,设置编辑环境。
每个模式下都有不同的命令快捷键,和图形界面相比有些抽象,但当用户熟练这些操作之后,工作效率就会比图形界面高很多。
当打开Vim编辑器后,默认进入命令模式,进入其他模式的指令以命令模式发起的,例如,按i键进入编辑模式。此时如果进入末行模式,用户需要先按Esc键返回到命令模式,然后输入“:”即可,如图所示。

二, 命令模式下的常用命令
光标定位常用的命令如表所示。
| 命令**** | 说明**** |
|---|---|
| h、j、k、l | 光标上下左右移动,也可用键盘自带方向键 |
| 0和$ | 光标移动到行首、行尾 |
| gg和G | 光标移动到第三行,移动到第n行 |
| /字符串 | (n N可循环的),快速定位到某一行 |
| /^d | 定位首字母为d的行 |
| /txt$ | 定位结尾为txt的行 |
文本编辑常见的命令如表所示。
| 命令**** | 说明**** |
|---|---|
| yy | 复制当前行 |
| dd | 删除当前行 |
| p | 粘贴 |
| x | 删除光标所在的字符 |
| D | 从光标处删除到行尾 |
| u | undo撤销 |
| ^r | redo重做 |
| r | 可以用来修改一个字符 |
命令和命令也可以组合,作用也是叠加的,例如,3yy、ygg、yG、dgg、dG等等,读者需平时多加练习。
从命令模式进入其他模式常见的命令如表所示。
| 命令**** | 说明**** |
|---|---|
| o | 进入编辑模式,光标下面另起一行 |
| a | 进入编辑模式,光标后一位 |
| i | 进入编辑模式,光标当前位置 |
| : | 进入末行模式 |
| V | 进入可视行模式 |
| v | 进入可视模式 |
| ^v | 进入可视块模式 |
| R | 进入替换模式 |
末行模式常见的命令如表所示。
| 命令**** | 说明**** |
|---|---|
| :w | 保存 |
| :q | 退出 |
| :wq | 保存并退出 |
| :w! | 强制保存 |
| :q! | 不保存强制退出 |
| :wq! | 强制保存退出 |
| :set nu | 显示行号 |
| :set nonu | 不显示行号 |
| :整数 | 跳到该行 |
| 😒/abc/abd | 该行第一个abc替换成abd |
| 😒/abc/abd/g | 该行所有abc替换成abd |
| :%字符串 | 在文本中从下至上搜索字符串 |
| :/字符串 | 在文本中从上至下搜索字符串 |
三, 编辑简单的文档
用Vim编写文档首先要给文档命名,此处命名为localhost.txt。如果文档已经创建,则打开;如果文档不存在,此命令将创建一个文件,如图所示。
打开文档后,默认进入命令模式,不能编辑文本,需要切换到编辑模式,按i键进入编辑模式,如图所示。
进入编辑模式后,左下角出现“–插入–”,可随意输入文本内容,Vim编辑器不会把文本内容当作命令执行,如图所示。
在编写完之后,保存退出。首先按Esc键切换到命令模式,然后再输入“:”,进入末行模式,最后输入wq,完成保存退出,如图所示。
保存退出后,使用cat命令就可以查看刚才输入的文本,如图所示。

再次进入文档,可以继续编辑文件。按键盘方向键上快速翻出这条命令,如图所示。
按o键进入编辑模式,另起一行并添加内容,如图所示。
如果此时不保存文件,直接退出,编辑器会拒绝此操作,如图所示。
在末行模式下输入“q!”强行退出,如图所示。
最后再次查看文本,发现并未保存第二次添加内容,只显示原来的内容,如图所示。
四,文件时间
回到熟悉的Windows系统,在windows下新建一个文件,保存文件的同时也会保存文件的创建时间、修改时间、访问时间等,如图所示。
在Linux系统下,一个文件也有三种时间:访问时间、修改时间、状态时间。stat命令可以查看文件的详细信息,具体如下所示:
[root@localhost ~]# touch leige.txt
[root@localhost ~]# stat leige.txt
File: ‘leige.txt’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd00h/64768d Inode: 33575010 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2025-11-28 10:58:54.115841121 +0800
Modify: 2025-11-28 10:58:54.115841121 +0800
Change: 2025-11-28 10:58:54.115841121 +0800
Birth: -
[root@localhost ~]#
从输出结果中可以看到系统保存了三个时间:Access time(访问时间)、Modify time(状态时间)、Change time(修改时间)。
在Linux系统中,文件是没有创建时间的,如果新创建一个文件,它的三个时间都是与创建的时间相同,具体如下所示:
[root@localhost ~]# stat leige.txt
File: ‘leige.txt’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd00h/64768d Inode: 33575010 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2025-11-28 10:58:54.115841121 +0800
Modify: 2025-11-28 10:58:54.115841121 +0800
Change: 2025-11-28 10:58:54.115841121 +0800
Birth: -
[root@localhost ~]#
修改时间:文件的内容被最后一次修改的时间,“ls -l”命令显示出来的文件时间就是这个时间,当使用Vim对文件进行编辑之后保存,它的ctime就会相应的改变。
访问时间:对文件进行一次读操作,它的访问时间就会改变。例如,cat、less等操作,但是state与ls命令对atime是不会有影响的。
状态时间:当文件的状态被改变时,状态时间就会改变,当使用chmod、chown等命令改变文件属性时,会改变文件的mtime。
以前的RHEL(Red Hat Enterprise Linux)版本,只要读取文件,就会刷新时间,这种时间的变化专业术语叫“磁盘的IO操作”,就是写磁盘,访问一次写一次。举例来说,千锋教育网站有上万个网页,如果有一万个人访问,访问一次时间就会刷新一次,最后会导致大量IO操作,这样的做的积极意义并不大,由此带来的消极意义却是明显的,大大增加了磁盘IO的工作量。
从RHEL6开始atime延迟修改,刷新时间必须满足下列两个条件之一:自上次atime修改后已过去86400秒;发生写操作。这个改变作用是很大的,例如,find命令查看根目录下5天以内被改过的文件(选取部分查询内容显示),具体如下所示:
[root@localhost ~]# find / -mtime -5
Ø 文件类型
前面提到过文件的颜色类别,但通过颜色判断文件的类型是不一定正确的。Linux系统中文件是没有扩展名,修改无实际意义的扩展名无法修改文件的本质,具体如下所示:
[root@localhost ~]# ls
anaconda-ks.cfg initial-setup-ks.cfg
a.txt b.txt
[root@localhost ~]# file a.txt
a.txt: ASCII text //是txt文件
[root@localhost ~]# file anaconda-ks.cfg
anaconda-ks.cfg: ASCII text //也是txt文件
[root@localhost ~]# mv a.txt a.jpg //更改文件的扩展名为jpg格式
[root@localhost ~]# ls
anaconda-ks.cfg initial-setup-ks.cfg
a.jpg b.txt
[root@localhost ~]# file a.jpg
a.jpg: ASCII text //依然是txt文件
使用“ls -l”命令查看文件名,看第一个字符,开头为“-”是普通文件(如文本文件、二进制文件、压缩文件、图片等),开头为“d”的是目录文件(蓝色),具体如下所示:
[root@localhost ~]# ls -l /etc/
total 1348
-rw-r--r--. 1 root root 5090 Nov 5 2016 DIR_COLORS
-rw-r--r--. 1 root root 5725 Nov 5 2016 DIR_COLORS.256color
-rw-r--r--. 1 root root 4669 Nov 5 2016 DIR_COLORS.lightbgcolor
-rw-r--r--. 1 root root 94 Apr 29 2015 GREP_COLORS
-rw-r--r--. 1 root root 842 Nov 6 2016 GeoIP.conf
-rw-r--r--. 1 root root 858 Nov 6 2016 GeoIP.conf.default
drwxr-xr-x. 8 root root 145 Mar 30 12:46 NetworkManager
drwxr-xr-x. 2 root root 92 Mar 30 12:52 PackageKit
drwxr-xr-x. 2 root root 25 Mar 30 12:46 UPower
drwxr-xr-x. 6 root root 103 Mar 30 12:45 X11
drwxr-xr-x. 3 root root 101 Mar 30 12:45 abrt
…………省略部分文件……………
开头为“b”表示设备文件(块设备),存储设备硬盘、U盘、/dev/sda、 /dev/sda1;“c”表示设备文件(字符设备),打印机、终端、/dev/tty1、/dev/zero;“s”表示套接字文件;“p”表示管道文件;“l”表示链接文件(淡蓝色)。
[root@localhost ~]# ll /dev/sda c
brw-rw----. 1 root disk 8, 0 Apr 2 09:29 /dev/sda
[root@localhost ~]# ll /dev/zero
crw-rw-rw-. 1 root root 1, 5 Apr 2 09:29 /dev/zero
[root@localhost ~]# ll /dev/log
srw-rw-rw-. 1 root root 0 Apr 2 09:29 /dev/log
[root@localhost ~]# ll /run/dmeventd-client
prw-------. 1 root root 0 Apr 2 09:29 /run/dmeventd-client
[root@localhost ~]# ll /etc/grub2.cfg
lrwxrwxrwx. 1 root root 22 Mar 30 12:52 /etc/grub2.cfg
-> ../boot/grub2/grub.cfg
使用file命令查看文件类型,如文本文件、二进制文件、管道文件、设备文件、链接文件等,具体如下所示:
[root@localhost ~]# file /etc/hostname
/etc/hostname: ASCII text
[root@localhost ~]# file /dev/sda
/dev/sda: block special
[root@localhost ~]# file /dev/zero
/dev/zero: character special
使用stat命令查看文件的详细属性,例如,文件的名称、大小、权限、atime、ctime、mtime等,具体如下所示:
[root@localhost ~]# stat /etc/hostname
File: '/etc/hostname' //文件名字
Size: 6 //大小 Blocks: 8 //占块数 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 16931194 Links: 1
Access: (0644/-rw-r--r--) //权限 Uid: ( 0/ root) //所有者 Gid: ( 0/ root)
Context: system_u:object_r:hostname_etc_t:s0
Access: 2025-04-02 09:29:54.065475006 +0800
Modify: 2025-03-30 14:17:48.875787110 +0800
Change: 2025-03-30 14:17:48.912788257 +0800
Birth: -
1
Access: (0644/-rw-r–r–) //权限 Uid: ( 0/ root) //所有者 Gid: ( 0/ root)
Context: system_u:object_r:hostname_etc_t:s0
Access: 2025-04-02 09:29:54.065475006 +0800
Modify: 2025-03-30 14:17:48.875787110 +0800
Change: 2025-03-30 14:17:48.912788257 +0800
Birth: -
文章的最后提醒大家,特别是Linux初学者。前一个月的操作练习要比理论知识更重要。否则中期很容易基础命令想不起来,高级技术听不懂跟不上。所以通过上机练习可以考察同学们对知识点的掌握情况,对代码的熟练程度。配套视频也可以看博主的主页课程。谢谢你的耐心观看。配套视频教程。(https://edu.csdn.net/course/detail/40861)
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)