我正在使用 Centos 8.0 和我的内核版本:4.18.0-147.5.1.x86_64
背景: 我的主机上的消息很长时间没有轮换,当我使用“logrotate -v -f”强制轮换消息时,它显示“重命名消息:不允许操作”。所以我尝试立即重命名消息。
-rw------- 1 root 15464299992 Jul 15 10:12 messages
-rw------- 1 root 11644353 Sep 7 2020 messages-20200907.gz
-rw------- 1 root 8834073 Sep 13 2020 messages-20200913.gz
renaming /var/log/messages to /var/log/messages-20210715
error: failed to rename /var/log/messages to /var/log/messages-20210715: Operation not permitted
这是我的操作和终端的输出:
[root@node-5 log]# mv messages messages-20210715
mv: cannot move ‘messages’ to ‘messages-20210715’: Operation not permitted
[root@node-5 ~]# whoami
root
我也曾经strace
关注过,结果如下:
stat("messages2", 0x7fff6c37aae0) = -1 ENOENT (No such file or directory)
lstat("messages", {st_mode=S_IFREG|0600, st_size=15464637645, ...}) = 0
lstat("messages2", 0x7fff6c37a790) = -1 ENOENT (No such file or directory)
renameat2(AT_FDCWD, "messages", AT_FDCWD, "messages2", 0) = -1 EPERM (Operation not permitted)
我以root身份登录,为什么还是遇到这样的问题?我该如何解决这个问题?
答案1
现在问题已经解决了,欣赏@cas的解决方案。以下是原因和方法:
1.使用lsattr /var/log
它显示消息具有文件属性“a”:
---------------- ./spooler-20200913.gz
---------------- ./maillog-20201004
-----a---------- ./messages
---------------- ./escl-upgrade.log
2.文件属性'a'表示“仅追加”,带有'a'的文件只能写入,不能重命名或移动。
3.chattr -a messages
使用禁用'a'属性,然后消息可以再次进行日志轮转。