我有点困惑。我有一个下载目录,我想用 tmpreaper 删除 30 天前的所有文件。只有一个问题,有问题的目录是一个单独的分区,里面有一个 lost+found 目录,当然我需要保留它,所以我添加了 --protect 'lost+found'
,问题是 tmpreaper 输出:
error: chdir() to directory 'lost+found' (inode 11) failed: Permission denied
(PID 30604) Back from recursing down `lost+found'.
Entry matching `--protect' pattern skipped. `lost+found'
我尝试过其他模式,例如 lost* 等等...我以非 root 用户身份运行 tmpreaper,因为没有理由需要超级用户权限,因为我拥有所有文件(lost+found 除外)。
我是否被迫以 root 身份运行 tmpreaper?还是我的 shell 技能不如我想象的那么好?我猜问题是:
tmpreaper will chdir(2) into each of the directories you've
specified for cleanup, and check for files matching the
<shell_pattern> there. It then builds a list of them, and
uses that to protect them from removal.
有什么想法和/或建议吗?
我尝试运行的命令类似于
$ /usr/sbin/tmpreaper -t --protect 'lost+found' 30d /mydir 1> /dev/null
error: chdir() to directory `lost+found' (inode 11) failed: Permission denied
编辑:
Redmumba 注意到返回代码仍为零,文件已被删除。我之前肯定遇到过其他问题,因为当我写这篇文章时什么都没有被删除。无论如何,现在它正常工作了,谢谢。
答案1
该lost+found
目录是文件系统特定的,即使您更改权限,它们也会在root:root
重新安装时自动恢复(甚至可能更早)。但是,因为听起来您不想删除那里的东西,所以听起来您指定的目录可能有问题。
例如,假设您要删除/tmp
位于单独分区中的 内的文件。如果您运行tmpreaper --protect 'lost+found' /tmp/*
,它将chdir
进入/tmp/lost+found
然后应用 shell glob——但它会因您看到的权限问题而失败。当您为 指定目录时tmpreaper
,只需使用父目录——即tmpreaper --protect 'lost+found' /tmp
。
希望这是你的问题...如果不是,请更新更多信息(例如你正在使用的确切命令),我们会尝试让你回到正轨!
编辑:所以我在本地设置了它,我注意到它成功完成了。它似乎只打印出错误消息,但没有对其做出反应——即它返回 0,表示成功。我最初以为它失败了,但事实似乎并非如此。听起来提交错误可能是合理的,并详细说明,因为我不认为这是预期的行为。