メール環境

最近はメールサーバも外注なので、そこについているウェブメールの機能でどうにかしちゃってるんですが、
一年位前まではfetchmail+postfix+procmail+dovecotという、ちょっと複雑な組み合わせで、メールを自動で分類して、自動で転送してました。
このやりかただと、どのメールクライアントを使っても未読・既読の管理やメールの分類などが一元化されます。
また、自分で好きなアドレスに好きなメールを自動転送できます。
気が向いたときにでも、その辺の環境について説明したいと思います。

GNU screen

自分は普段はGNU screenという仮想端末ソフトを使ってます。これは、GUIをもたない仮想端末ソフトです。

これを使うと、何が良いかというと、
いきなり通信が切れても、起動したホスト上でセッションは動いている
ということです。あと、ログイン環境を変えてもセッションを継続できるという事です。いろんな環境からリモートでログインしていて、PHSやイーモバのときはどうしても不安定でたまに切れる自分の環境では欠かせません。
色々カスタマイズも出来るので、自分は画像のように最後のコマンドやログインしてるサーバ名をそれぞれのタブに表示させたり、メールの未読件数を表示したりしてます。
.screenrcを晒しておきます。

escape ^t^t
utf8 on
defencoding utf8

backtick 0 10 0 /home/k-suke/bin/chk_unread_mail.rb INBOX system
hardstatus alwayslastline "[%y-%m-%d %02c] %0`"
caption always "%-w%{=b bw}%n %t%{-}%+w"
defmonitor on

ここで使ってるchk_unread_mail.rbは、お手製imap未読メール件数確認プログラムです。(プライベート用gmail版)

#!/usr/bin/env ruby
require "net/imap"

host="imap.gmail.com"
port=993
use_ssl=true
user="ksuke.s@gmail.com"
pass="himitsu"

imap = Net::IMAP.new(host,port,use_ssl)
imap.login(user,pass)
status_line = ""
ARGV.each do |arg|
title = arg.split(".").last
num = imap.status(arg,["Unseen"]).values.first
status_line << " #{title}(#{num})"
end
imap.disconnect
puts status_line

さらに、screen用のzshの設定です。(ターミナルの名前をつけるための設定です。)

# screen
preexec () {
[ ${STY} ] && echo -ne "\ek${1%% *}\e\\"
}

function ssh_screen(){
eval server=\${$#}
screen -t "[$server]" ssh "$@"
}
if [ x$TERM = xscreen ]; then
alias ssh=ssh_screen
fi

screenの使い方は

  • 起動するときは"screen -D -RR"
  • 新しくターミナルを立ち上げるときは"Ctrl-t c"
  • ターミナル間を移動するときは"Ctrl-t 数字"
  • 中断するときは"screen -d"

を覚えておけば、とりあえずどーにかなるんじゃないかと思いますw

zshの履歴設定

自分のPCでは普段はシェルをzshに変更しています。
理由は簡単で、履歴共有機能があるからです。
これは、複数の端末で操作しても、ひとつの履歴にまとめることが出来ます。これがないと、最後に閉じた端末の履歴しか残らないので、なかなか履歴を覚えません。
また、記憶する数も増やしておかないと、昔のコマンドを呼び出せません。(ちなみにこの設定で、自分は1年以上の履歴を保存できています。)
これらの機能を使うためには~/.zshrcに以下の設定を追加してください。

## history
setopt APPEND_HISTORY
## for sharing history between zsh processes
setopt INC_APPEND_HISTORY
setopt SHARE_HISTORY

HISTFILE=$HOME/.zsh-history # 履歴をファイルに保存する
HISTSIZE=100000 # メモリ内の履歴の数
SAVEHIST=100000 # 保存される履歴の数
setopt extended_history # 履歴ファイルに時刻を記録

履歴生活

仕事上でもっともよく使う機能で、シェルのコマンド履歴検索機能があります。
bashzshだと、"Ctrl+r"を押していくつかコマンドの文字列の一部をタイプすると、長いコマンドでも簡単に呼び出せます。
この機能を知ってからは、ずいぶん考え方が変わりました。
昔は長いコマンドはタイプミスの危険が多いので避けてましたが、今ではあえて色々つなげて長いコマンドにしたりします。
一度入力すれば、次回からはその履歴を使えばよいだけなので、タイプミスもありません。
また、コマンド履歴を大きめに保存して使いまわすように設定を変更しました。この辺りはまた別のエントリで書きたいと思います。
linux使いでも履歴検索は使ってない人が多いので、ぜひ「Ctrl+r」は試して見ることをお薦めします。

GUI vs CUI

自分は仕事ではCUI(Character User Interface)を良く使います。

コマンドをタイプしてコンピュータを操作する、非常に古いユーザインターフェースです。よくドラマや映画などで、コンピュータマニア(オタク)の役の人が使いまくってます。
通常のコンピュータはGUI(Graphical User Interface)で、自分も当然利用してるんだけど、現在のCUIはこれに比べて以下の長所があるので、仕事上で手放せません。

  • 補完や履歴機能があるので、細かい所はうろ覚えでもどうにかなる。
  • いくつもの操作を同時に行うことがしやすい。
  • 過去に行った操作を自動化しやすい。
  • リモートでコンピュータを操作しやすい。

そんな理由で、システム管理者がCUIを使わなくなる事はないでしょう。
いくつかのシステム管理機能はGUIに置き換えられていて、とても便利に使わせてもらってますが、それでも桁違いの柔軟性を持つコマンドベースの操作が無くなることは無いだろうと考えています。

そして、最も進んでるCUIをもち、かつ基本的に無料であるOSのLinuxを使っています。