一、问题描述

前些天在修改Redis配置文件redis.conf时遇到了警告提示代码:

1
2
E325: ATTENTION 
Found a swap file by the name "./.backu.sh.swp"

如图所示:

问题描述:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
E325: ATTENTION
Found a swap file by the name "/etc/redis/.redis.conf.swp"
owned by: root dated: Wed Feb 5 16:57:08 2020
file name: /etc/redis/redis.conf
modified: YES
user name: root host name: Floret
process ID: 1286
While opening file "/etc/redis/redis.conf"
dated: Mon Feb 10 16:01:06 2020
NEWER than swap file!

(1) Another program may be editing the same file. If this is the case,
be careful not to end up with two different instances of the same
file when making changes. Quit, or continue with caution.
(2) An edit session for this file crashed.
If this is the case, use ":recover" or "vim -r /etc/redis/redis.conf"
to recover the changes (see ":help recovery").
If you did this already, delete the swap file "/etc/redis/.redis.conf.swp"
to avoid this message.

Swap file "/etc/redis/.redis.conf.swp" already exists!
[O]pen Read-Only, (E)dit anyway, (R)ecover, (D)elete it, (Q)uit, (A)bort:

翻译如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
E325:注意
找到一个名为“/etc/redis/.redis.conf.swp”的交换文件
所有者:根日期:2020年2月5日星期三16:57:08
文件名:etc/redis/redis.conf
修改:是
用户名:根主机名:Floret
进程ID:1286
打开文件“/etc/redis/redis.conf”时
日期:2020年2月10日星期一16:01:06
比交换文件新!

(1) 另一个程序可能正在编辑同一个文件。如果是这样,
注意不要以同一个实例的两个不同实例结束
更改时归档。退出,或小心继续。

(2) 此文件的编辑会话崩溃。
如果是这种情况,请使用“:recover”或“vim-r/etc/redis/redis.conf”
要恢复更改(请参见“:帮助恢复”)。
如果已经这样做了,请删除交换文件“/etc/redis/.redis.conf.swp”
为了避免这个信息。

交换文件“/ETC/RIDIS/.Redi.CON.SWP”已经存在!
[O] 打开只读,(E)无论如何编辑,(R)恢复,(D)删除,(Q)退出,(A)中止:

遇到这种错误代码的时候你肯定会看到上面这张图。
这种情况多半发生在上次编辑脚本或者其他文件,中途因为某些原因强制杀死进程或者强制退出导致的。

二、解决问题

1.问题出现原因:

我们在编辑文件的时候,并不是对原有文件进行修改和覆盖的,而是新建一个副本,名字叫xxx.swp,我们对文件的编辑都放在了这个副本里面,这也是为什么我们能进行撤销的原因,我们并没有对原有的文件进行修改。
当我们正常退出时,这个文件就正常消失,而当我们异常退出时,这个文件就会作为隐藏文件,当我们下次启动vim时,它就会提示我们上次编辑时,有一个文件异常退出了,是否要进行恢复。也就是弹出E325错误。当我们异常退出时,这个隐藏文件会帮助我们还原到上次编辑的状态。也就相当于是一个自动保存的功能。

2.解决办法:

注意此时可根据系统的提示进行操作:

直接键盘输入相应的字母执行命令。

1
[O] 打开只读,(E)无论如何编辑,(R)恢复,(D)删除,(Q)退出,(A)中止:

例如:我们需要还原文件到上次编辑的状态:

1
直接键盘键入    R

可得如图示:系统提示Recovery completed,告诉你文件已经还原到了上次编辑的状态,此时你可以 ENTER 打开文件查看文件内容是否正常。

3.注意事项

(1)关于.redis.conf.swp交换文件,注意以 . 开头的文件就是隐藏文件。这个文件使用ls命令查看不能发现,使用ls -a命令查看
如图:

(2)每间隔1秒刷新一下ls命令的执行结果,另启窗口可以观察到交换文件的生成。

1
$ watch -n 1 ls -a

如图:
我们可以看到正在运行的文件。
(注意:此时下方窗口正在编辑修改test.txt文件,我们可以验证所做的修改不是在test.txt文件上,可以看到我们所做的修改都暂存在生成的.test.txt.swp文件中。)

(3)想要不再有上面的警告提示,把该文件删除即可:

1
2
$  rm .redis.conf.swp
rm: remove regular file `.redis.conf.swp'? y

(输入指令 rm 文件名,系统会需要你输入Y 以确认删除。)

(4)使用vi或vim编辑其他文件出现类似情况的处理方法一样可以。