メールサーバの移行

イメージ
 自前のメールサーバを停止 これまで、自ドメインのメールサーバはVPS上に構築していた。 ・Ubuntu Server ・Postfix ・Dovecot ・spamAssassinと、BlackListの利用 Spam対策を行ってきたし、サーバ上でメールをトリガーにして各種プログラムを動かしたりしてきた。 メールサーバのメンテナンスは結構面倒くさくて、  ・Disk容量のチェック  ・不正アクセスのチェック  ・各種セキュリティパッチの適用 など、手間がかかる。 そこで、外部のサーバを利用することに…。 結構安くて使い勝手の良さそうなのが、「さくらのメールボックス」 3年契約で、3070円とな…。  メールアドレスは自分のだけなので、20GBまで利用可能!  (Gmailより大きいねぇ) ということで、早速契約。 アカウント設定を行って、既存のDNSを書き換える。WHOISも書き換えて完了。 SMTPとIMAPが利用できればOK。 ちょうど、GoogleがSPF設定していないと受信しないし、DKIMおよびDMARCに対応していないメールを弾くようになったので、対応しているのを確認。 さくらサーバ自体は、これまでお客さんのサーバとして何件も利用しているので、利用方法も難しくはない。  Webメールにも対応しているので、いざという場合にもありがたい。 ということで、各メールソフトの設定を変更。  PC(常時使用する3台)とタブレット、スマートフォンと台数は多いがそれ程手間はかからない。 問題は、旧サーバで送受信したメールの履歴だけれど、これはThunderbrdを使ってローカルに保存することで回避。  本当は、サーバtoサーバでMailboxに残そうとも考えたんだけど、古いメールはそれ程必要ないし、ローカルにバックアップしてあれば凌げるので、良しとする。 移行時にDNSの反映で若干時間がかかったものの、問題なく送受信できるのを確認して、作業完了。  これでメンテナンスの手間が減るので、安いもんです。

findで条件に合わないものを探す

findってあんまり使わないけど…

今頃になって、知ったというか、調べたというか…。

一体何年使っているんだと言われそうなくらい初期の頃から使っているのに、こんな使い方したことなかったなぁと、自分でも驚いた。
忘れないとは思うけど、きっと同じような人がいるだろうと思うので、書いておく。

これまでの使い方

いままで、findを使う時って、
  • 特定の拡張子が含まれている
  • サイズが1MB以上
  • 何日前より古いファイル
  • 30分以内に編集したファイル
なんて使い方が多かった。

でもって、中身を検索するならgrepだし…。

もちろん、パイプも使うし、xargsも使ってきた。

今回、はて?と考えた事

今回相談があって、LibreOfficeで編集ができないファイルがある。とな…。
調べてみると、オーナーがnobodyになっている。
ちょいちょい不具合もあるので、根本原因は調査中だけど、編集できないのは困るというので、急ぎで修正する必要がある。

さて、user_aのホームフォルダ以下で、user_aがユーザではないファイルを探す…。
まず、思いついたのは findだよなぁと…。
# find /home/user_a -user user_a
これだと、user_aが所有者のファイルがリストアップされる。

あれ? 否定はどうするんだ???と
grep -v はよく使うけれど、findの条件否定って、よくよく考えると使ったことがないような気がする。(20年近くUNIX系触っているのに…)

まずは、Helpだよね。

$ find --help
使用法: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]

デフォルトのパスはカレントディレクトリです。デフォルトの評価式 (expression) は -print です。評価式は演算子、オプション、テストおよびアクションで構成されます。

演算子 (優先順位は降順です。特に指定がない場合は -and が暗黙的に使用されます):
      ( EXPR )   ! EXPR   -not EXPR   EXPR1 -a EXPR2   EXPR1 -and EXPR2
      EXPR1 -o EXPR2   EXPR1 -or EXPR2   EXPR1 , EXPR2

位置オプション (常に真): -daystart -follow -regextype

通常オプション (常に真。他の評価式の前に指定します):
      -depth --help -maxdepth LEVELS -mindepth LEVELS -mount -noleaf
      --version -xdev -ignore_readdir_race -noignore_readdir_race

テスト (N は +N、-N または Nで指定します): -amin N -anewer FILE -atime N -cmin N
      -cnewer FILE -ctime N -empty -false -fstype TYPE -gid N -group NAME
      -ilname PATTERN -iname PATTERN -inum N -iwholename PATTERN -iregex PATTERN
      -links N -lname PATTERN -mmin N -mtime N -name PATTERN -newer FILE
      -nouser -nogroup -path PATTERN -perm [+-]MODE -regex PATTERN
      -readable -writable -executable
      -wholename PATTERN -size N[bcwkMG] -true -type [bcdpflsD] -uid N
      -used N -user NAME -xtype [bcdpfls]

actions: -delete -print0 -printf FORMAT -fprintf FILE FORMAT -print 
      -fprint0 FILE -fprint FILE -ls -fls FILE -prune -quit
      -exec COMMAND ; -exec COMMAND {} + -ok COMMAND ;
      -execdir COMMAND ; -execdir COMMAND {} + -okdir COMMAND ;

バグを発見した場合は findutils バグ報告ページ http://savannah.gnu.org/ を
使用して報告 (および修正の進捗を追跡) してください。Web を利用できない場合
は <bug-findutils@gnu.org> に E-mail を送ってください。

演算子のところに書いてあるじゃないか…。
terminalの高さが25行だと、ちょうどスクロールアウトするんだよね。

「!」か 「-not」を使えと。
$ find /home/user_a ! -user user_a
 これだけだった。
でもって、存在を確認して、chown するだけ。

まあ、滅多に使わないんだろうな。
次回はいつ使うのやら…。

調べていたら、他にも便利なものがあった

久々に、find --help なんてやったので、良く読んでみると、actionの最初に「-delete」なんて書いてある。

???

ぐぐってみたら、最近のfindには用意されているらしい。
自分の常識では、-exec rm {} か xargs rm と覚えていたのに…。
$ find ~/ -name '.lock.*' | xargs rm
の代わりに、
$ find ~/ -name '.lock.*' -delete
でOKなんだってさ…。
(ちなみに、LibreOfficeが作成するlockファイルの残骸をまとめて消す処理ですが)

読んでみるもんだな。

コメント

このブログの人気の投稿

WPS Officeで日本語入力ができない

VirtualBoxでUSBから起動

Virtualboxとnvidiaドライバ