web-dev-qa-db-ja.com

tmpreaper、-protectおよびroot以外のユーザー

私は少し混乱しています。 tmpreaperを使用して30日より古いすべてのファイルを削除したいダウンロードディレクトリがあります。問題の1つは、問題のディレクトリが、失われたディレクトリと見つかったディレクトリを持つ別のパーティションです。もちろん、それを保持する必要があるため、--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 *などの他のパタ​​ーンで試しました...すべてのファイル(lost + foundを除く)を所有しているため、スーパーユーザー特権の理由がないため、非rootユーザーとしてtmpreaperを実行しています。

Rootとしてtmpreaperを実行する必要がありますか?それとも、私のシェルスキルは思ったほど良くありませんか?問題は次のとおりだと思います。

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は、戻りコードがまだゼロであり、ファイルが削除されていることに気づきました。この投稿を書いたときに何も削除されなかったので、以前に他の問題があったに違いありません。とにかく今は機能しています、ありがとう。

2
nsg

lost+foundディレクトリはファイルシステム固有であり、権限を変更した場合でも、再マウント時に(または場合によってはさらに早く)自動的にroot:rootに戻されます。ただし、そこにあるものを削除したくないように思われるため、指定しているディレクトリに問題がある可能性があります。

たとえば、別のパーティションにある/tmp内のファイルを削除するとします。 tmpreaper --protect 'lost+found' /tmp/*を実行すると、chdir/tmp/lost+foundになりますその後シェルグロブを適用します-しかし、見たパーミッションの問題で失敗します。 tmpreaperのディレクトリを指定するときは、親ディレクトリ、つまりtmpreaper --protect 'lost+found' /tmpを使用するだけです。

うまくいけば、それがあなたの問題です...そうでない場合は、より多くの情報(使用している正確なコマンドなど)で更新してください。私たちはあなたを軌道に戻すことができます!

編集:それで私はそれをローカルにセットアップしました、そして私はそれがうまく終了することに気づきました。エラーメッセージを出力するだけで、それに反応しないようです。つまり、成功を示す0を返します。私はもともと失敗していると思っていましたが、そうではないようです。これが意図された動作であるとは想像できないので、バグを提出することは詳細が正しいかもしれないように思えます。

0
Andrew M.