-2

削除するファイルのリストを作成するために mailq でシェル スクリプトを実行していますが、パーミッションが原因でシェル スクリプトを使用してそれらを削除することはできません (root パーミッションを使用すると、スクリプトは機能しますが、常に root パーミッションの root パスワードをユーザー)。ファイルの出力リストを perl に送信してファイルを削除したいのですが、その Perl プログラムにはルート権限があります。

シェルスクリプトは次のとおりです。

    #!/usr/bin/ksh
    WORKFILE="/tmp/check.mq"
    MAILLIST="yagyavalkbhatt@yahoo.com"

    mailq|grep -B1 -i temporarily |grep -iv deferred |egrep -i                 'jan|feb|mar|apr|may|june|jul|aug|sept|oct|nov|dec' |awk -F" " '{print $1}' |awk '{print substr($0,10,14)}'|tee $WORKFILE |awk '{print "*" $1}'|tee mail.mq

    mailq|grep -B1 -i unknown |egrep -i 'jan|feb|mar|apr|may|june|jul|aug|sept|oct|nov|dec' |awk -F" " '{print $1}' |awk '{print substr($0,10,14)}'|tee $WORKFILE  |awk '{print "*" $1}'|tee mail.mq

    mailq|grep -B1 -i lookup |grep -iv deferred |egrep -i 'jan|feb|mar|apr|may|june|jul|aug|sept|oct|nov|dec' |awk -F" " '{print $1}' |awk '{print substr($0,10,14)}'|tee $WORKFILE |awk '{print "*" $1}'|tee mail.mq 

    cat mail.mq | while read file; do rm /var/spool/mqueue/$file;done
    find . -type f -name "mail.mq" |rm -rf mail.mq

次のような出力が作成されます。

    *##### where ##### is a unique 5 numbers to identify files in the mailq.

どのユーザーからもルート権限でこれらのファイルを削除する方法を知りたいです。

4

2 に答える 2

1

これを処理する 1 つの良い方法は、ユーザーがこのようなリストを作成し、出力を特定のディレクトリにあるファイルに保存できるようにすることです。次に、cronジョブを定期的に(頻繁にまたはまれに)ユーザーによって送信されたリストを調べ、コンテンツをチェックして正当であることを確認します(特定のディレクトリ内の特定のファイルのみを削除のためにリストすることを許可したい)、ファイルを削除します、リストを削除します。

ユーザーに root 権限を与えるのは得策ではありません。通常、仕事を成し遂げるためのより良い方法があります。

于 2012-04-16T14:45:43.917 に答える
-1

STDERRをSTDOUTにリダイレクトし、一緒に読み取ります。

例:

@ls_output = `ls -l 2>&1`;
于 2012-04-16T14:48:17.473 に答える