スパムの問題が発生した後に停止しました。postfix
postfix stop
そして、手動検査によってmailq
何十万もの未送信のスパムメッセージが発見されました。
スパムはローカルのホスティングサイトの1つから送信され、私がメールの送信を中止した後にユーザーが電子メールを送信しようとしなかったことを知っています。
したがって、私のコンピュータ上のこのユーザーからのすべてのメッセージは/var/spool/postfix/maildrop
スパムと見なされ、後で調査するためにそのメッセージを削除するか、別のディレクトリに移動したいと思います。
私の考えでは特定の所有者のすべてのファイルを移動する(この場合、ユーザー "web2")~から
/var/spool/postfix/maildrop
到着
/var/spool/postfix/temp-spam
どうすればいいですか?
答え1
find
たとえば、次のようにして使用できますxargs
。
find /var/spool/postfix/maildrop -user web2 -print0 -type f | xargs -0 -I{} mv {} /var/spool/postfix/temp-spam
以下を挿入してテストできますecho
。
find /var/spool/postfix/maildrop -user web2 -print0 -type f | xargs -0 -I{} echo mv {} /var/spool/postfix/temp-spam
答え2
xargs
を使用して作成せずにfind
これを行うこともできます-exec
。
find /var/spool/postfix/maildrop -user THEUSER -type f -exec mv {} /var/spool/postfix/temp-spam \;
移動されたファイルを表示するには、-exec
コマンドに追加のコンテンツを追加できます。
find /var/spool/postfix/maildrop -user THEUSER -type f -exec ls -lah {} \; -exec mv {} /var/spool/postfix/temp-spam \;
答え3
標準コマンドfind
メタデータ(名前、権限など)に基づいてファイルを照合して操作できます。ディレクトリを再帰的に巡回します。デフォルトのfind
構文の後には、検索するディレクトリ、一致基準、およびオプションで実行するコマンドが続きます(指定されたコマンドがない場合は、一致するfind
名前が印刷されます)。
find /var/spool/postfix/maildrop -user web2 -exec mv -t /var/spool/postfix/temp-spam {} +
mv -t /var/spool/postfix/temp-spam …
これにより、一致するファイルのコマンドが実行されます。{}
一致するすべてのファイルのリストに置き換えられます(リストが長すぎると複数回find
実行されます)。mv
オプションはGNU(Linux / Cygwin)拡張-t
です。mv
そのファイルがないシステムでは、最初に移動したいファイル名を渡してから宛先を渡す必要があります。この-exec … +
操作では、コマンドラインの末尾にファイル名を渡すことしかできないため、別の方法を使用する必要があります。
find /var/spool/postfix/maildrop -user web2 -exec mv {} /var/spool/postfix/temp-spam \;
(mv
ファイルごとに別々に呼び出されます)
find /var/spool/postfix/maildrop -user web2 -exec sh -c 'mv "$@" "$0"' /var/spool/postfix/temp-spam {} +
(中間シェルを使用して目的の順序でパラメータを取得します。)
zshを使用している場合は、次のものを使用できます。グローバル予選と同じことを行いますfind
。ここではu
、ユーザーが所有するファイルを照合するために使用されるフラグです。
mv /var/spool/postfix/maildrop/*(u:web2:) /var/spool/postfix/temp-spam
(find
上記のコマンドとは異なり、サブディレクトリに再帰的には入りません。ここでは必要ありませんが、必要に応じてパスに**/
「0個以上のサブディレクトリ」を挿入します。/var/spool/postfix/maildrop/**/*(u:web2:)
)