我使用 Vim 作为我的编辑器。
我想在使用 .Crontab 编辑时进行语法着色crontab -e
。我跟着这回答。设置变量EDITOR=vim
并导出后,它crontab -e
现在显示我想要的语法颜色。我正在以我自己的用户身份编辑 Crontab,而不是使用 Sudo。
但是,这会在关闭 Crontab 时导致错误:
/tmp/crontab.019kNj" 4L, 278C written
E886: Can't rename viminfo file to /home/me/.viminfo!
Press ENTER or type command to continue
保存更改和关闭而不保存时都会发生这种情况。仅使用 Crontab 时才会出现错误,直接使用 Vim 编辑文件没有问题。使用变量VISUAL
而不是 时的行为类似EDITOR
。
该文件.viminfo
存在于我的主目录中并且具有合理的权限:
-rw-------. 1 me me 11K 15.10. 12:49 .viminfo
权限/home/me
也有意义:
drwx------. 33 me me 4,0K 15.10. 13:13 me
OS 版本是Red Hat Enterprise Linux Workstation release 7.9 (Maipo)
,Vim 版本是VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Jan 29 2020 08:09:16)
,shell 是GNU bash, version 4.2.46(2)-release (x86_64-redhat-linux-gnu)
。 Crontab 的版本是crontabs-1.11-6.20121102git.el7.noarch
.
是什么导致了此错误消息?在没有它的情况下编辑 Crontab 时如何启用语法着色?
编辑:
如果我重命名.viminfo
错误更改:
E138: Cannot write viminfo file /home/me/.viminfo!
答案1
事实证明,这是由 Selinux 策略阻止 Crontab 写入主目录引起的。类似案例已报道红帽错误追踪器:
使用 EDITOR=vim 运行“crontab -e”并对 cron 文件进行一些更改。当退出 vim 时,总是收到警告消息: E138: Can't write viminfo file /home/hpt/.viminfo!以及 /var/log/messages 中的一些 avc 消息:
6月15日13:51:24本地主机内核:类型= 1400审核(1245045084.399:17236):avc:拒绝{写入} for pid = 24910 comm =“vim”name =“hpt”dev = dm-6 ino = 2301953 scontext = unconfined_u:unconfined_r:admin_crontab_t:s0-s0:c0.c1023 tcontext = system_u:object_r:user_home_dir_t:s0 tclass = dir Jun 15 13:51:24 localhost内核:type = 1400审核(1245045084.400:17237):avc:拒绝{创建} 对于 pid=24910 comm="vim" name="v69994" scontext=unconfined_u:unconfined_r:admin_crontab_t:s0-s0:c0.c1023 tcontext=unconfined_u:object_r:tmp_t:s0 tclass=dir 六月 15 日 13:51:24 本地主机内核:类型= 1400审核(1245045084.400:17238):avc:拒绝{写入} for pid = 24910 comm = 24910 comm =“vim”name =“hpt”dev = dm-6 ino = 2301953 scontext = unconfined_u:unconfined_r:admin_crontab_t:s0- s0:c0.c1023 tcontext=system_u:object_r:user_home_dir_t:s0 tclass=dir 所选组件的版本-发布号(如果适用):
解决方案是改变政策以允许这种情况发生。我没有有关该更改的详细信息,因为我没有对这台计算机的 Sudo 访问权限,因此更改是由其他人完成的。