Hatena::ブログ(Diary)

あきらめたらそこでテキオモですよ このページをアンテナに追加 RSSフィード

2011年05月18日

[]Zshでホスト名とユーザ名とカレントディレクトリをTerminal(&タブ)のタイトルに表示させてみた

Gnome Terminalはタブを利用できるので重宝しているのですが、普段の開発時には複数のタブを開きサーバログインしているので、今開いているタブがどのサーバなのか咄嗟に分からないことがあります。

なのでホスト名とユーザ名とカレントディレクトリをTerminal(&タブ)のタイトルに表示するようにしました。


まーありがちな処理なのですが、カレントディレクトリが深い場合に表示しきれなくなってしまうので、ちょっとだけ工夫して下記のように省略表示させました。

/path/to/directory
↓
/p/t/directory

~/.zshrc

function changetitle {
  # pwdを二回も実行しているのがなんかダサい...
  current_dir=`pwd | sed -e "s%\(/\([^.]\|\..\)\)[^/]*%\1%g"``pwd | sed -e "s%^.*/\([^.]\|\..\)\([^/]*\)$%\2%"`
  # タイトル用に整形
  title=[${USER}@${HOST%%.*}]${current_dir}
  case "${TERM}" in
    xterm*|kterm*|rxvt*)
      echo -ne "\033]0;${title}\007"
    ;;  
    screen*)
      echo -ne "\033P\033]0;${title}\007\033\\"
    ;;  
  esac
}

# zsh起動時にとりあえず実行
changetitle

# cd実行後に変更
function chpwd() {
  changetitle
}

# Screenの場合、window切り替え時に前のwindowのタイトルがTerminal(&タブ)のタイトルとして
# 残ってしまうのでせめてcdコマンド以外のコマンドでも実行前にタイトルを変更
preexec () {
  changetitle
}

2011年05月07日

[]Screenに現在のメモリ使用率を表示させてみた

過去に掲題のエントリーをどこかで見かけた記憶があるのですが、失念してしまいやむなく自作しました。


まずは下記のようなメモリの使用率を出力するshellを用意します。

#!/bin/sh
# echo `free | grep "buffers/cache" | awk '{print substr($3/($3+$4)*100,1,5)}'`'%'
# echo `free | grep "buffers/cache" | awk '{printf  "%3.1f", $3/($3+$4)*100}'`'%'
echo `free | awk '/buffers\/cache/{printf  "%3.1f", $3/($3+$4)*100}'`'%'

処理を簡単に説明します。

freeコマンドでメモリの状態を出力し、

$ free
             total       used       free     shared    buffers     cached
Mem:       2058796    1998692      60104          0      84788    1032096
-/+ buffers/cache:     881808    1176988
Swap:      1951740       3352    1948388

その結果から「buffers/cache:」のある行だけgrepして

# grep "buffers/cache"
-/+ buffers/cache:     881808    1176988

grep結果をawkして許されるのは小学生までだよねー

3つめ(881808:OSアプリケーションが使用しているメモリサイズ)と4つめ(1176988:空きメモリサイズ)からメモリの使用率を算出して、小数点二桁くらい一桁(printf便利!)に揃えて

# awk '{print substr($3/($3+$4)*100,1,5)}
# awk '{printf  "%3.1f", $3/($3+$4)*100}'
awk '/buffers\/cache/{printf  "%3.1f", $3/($3+$4)*100}'

最後に「%」をくっつけています

echo 上の処理の結果'%'

このshellを適当なところに置きます。

今回、homeディレクトリに.screenディレクトリを掘り、mem.shとして保存しました。

~/.screen/mem.sh

次に.screenrcファイルに下記のような一行を追加します。

backtick 0 2 2 ${HOME}/.screen/mem.sh

そして、hardstatusまたはcaptionに「%0`」を追加すると完了です。

hardstatus string "memory : %0`"

この0は backtick のひとつめの引数(id)に該当し、例えば「backtick 1 2 2 ${HOME}/.screen/mem.sh」とした場合は「%1`」とします。


以上で完成です。


参考にさせて頂いたエントリー

screenのcaptionに東京電力の電力使用状況を表示するようにしてみた - ケーズメモ

2011年05月01日

[][]Ubuntu11.04環境でgm-notifyが起動しないときの対処法

4/28にUbuntu11.04が正式リリースされました。さっそく新しいUnityインタフェースに慣れず、Ubuntuクラシックに逃げました...


さて、GMail Notifier(gm-notify)というpython製のGmailのメールチェッカーがあります。Ubuntu10.10の頃から利用していたのですが、素のUbutu11.04環境では動作しませんでした。

下記のように Twisted と python2.7-dev のインストールが必要となります。


まずは gm-notify をインストールします。

$ wget http://launchpad.net/gm-notify/0.x/0.10.3/+download/gm-notify-0.10.3.tar.gz
$ tar xvf gm-notify-0.10.3.tar.gz
$ cd gm-notify-0.10.3
$ sudo python setup.py install

インストールは完了しますが、メニューから「GMail Notifier Configuration」を選択しても起動しません。

ログを覗いてみるとこのようになっていました。

$ less ~/.xsession-errors
Traceback (most recent call last):
  File "/usr/local/bin/gm-notify-config", line 36, in <module>
    from twisted.words.protocols.jabber import jid
ImportError: No module named words.protocols.jabber

words.protocols.jabber がなさそうなのでまずは Twistedインストールします

$ wget http://twistedmatrix.com/Releases/Twisted/11.0/Twisted-11.0.0.tar.bz2
$ tar xvf Twisted-11.0.0.tar.bz2
$ cd Twisted-11.0.0
$ sudo python setup.py install
fatal error: Python.h: No such file or directory

今度は Python.h がないと言われますので、さらにaptitudeで python2.7-dev をインストールします

$ sudo aptitude install python2.7-dev

再度、Twistedインストールすると正常に完了しました

$ sudo python setup.py install

以上を行なうことでgm-notifyを起動することができました。

2011年02月23日

[][]UbuntuVPN接続が頻繁に切断されるときの対処法

Ubuntu9.04+でのVPN接続は、vpncとnetwork-manager-vpncをインストールすることによってGUIからでも行なえます。

ただCiscoVPN環境下において、頻繁にその接続が切断されていました(一日3,4回

それが最近(今のところ)解消されたのでその対処法です。


結論から言えば、デッドピア検出をオフにすることで解消されました。

下記のようにconfファイルに「DPD idle timeout (our side) 0」を追加しCLIからvpncを実行します。

$ sudo vpnc ~/.vpn/defalult.conf
[sudo] password for tekiomo: 
Enter password for tekiomo@VPN_SERVER: 
VPNC started in background (pid: 1234)...
# confファイルの中身
$ cat ~/.vpn/default.conf
## generated by pcf2vpnc
IPSec ID VPN_GROUP_ID
IPSec gateway VPN_SERVER
IPSec secret GROUP_PASSWORD
DPD idle timeout (our side) 0

Xauth username tekiomo
IKE Authmode psk

# 切断の仕方
$ sudo vpnc-disconnect

またconfファイルに追加せずに直接コマンドから「--dpd-idle 0」と指定することも可能です

$ sudo vpnc --dpd-idle 0 ~/.vpn/default.conf

(本当はGUIでDPDをオフに設定したかった(接続状況が可視できるので)のですが、GUIでの設定方法が分かりませんでした。)


上記のconfファイルはpcfファイルからpcf2vpncを使ってコンバートしました。pcf2vpncのインストール方法については下記を参考にしてださい。

How to setup Cisco VPN using VPNC Ubuntu Jaunty (9.04) | Ubuntu Geek

なおページ中でwgetしているcisco-decrypt.cはデッドリンクです。

このあたりからダウンロード可能です。

2011年02月22日

[]バックアップ用のコマンド

バックアップ用のファイルを作成するときに

$ cp hoge.pl hoge.pl.20110222

のように.bakYYYYMMDDのフォーマットでcpしていましたが、ちょっと面倒なのでコマンドを作りました。


function bak {
    for target in ${*}
    do
      opt="-i"
      if test -d ${target}
      then
        opt="${opt}a"
        target=`echo ${target} | sed -e "s|/$||"`
      fi
      backup="${target}.bak`date '+%Y%m%d'`"
      cp ${opt} ${target} ${backup}
      echo "make backup : ${backup}"
    done
}

これを.zshrcに書いておくと下記のような感じで使えます。

$ ls
Hoge/  Fuga/  hoge.pl  fuga.pl
$ bak *
make back up file : Hoge.bak20110222
make back up file : Fuga.bak20110222
make back up file : hoge.pl.bak20110222
make back up file : fuga.pl.bak20110222
$ ls
Hoge.bak20110222/  Fuga.bak20110222/  hoge.pl.bak20110222  fuga.pl.bak20110222  Hoge/  Fuga/  hoge.pl  fuga.pl

もちろん、ファイル単体でもOKです。

$ ls
hoge.pl
$ bak hoge.pl 
make back up file : hoge.pl.bak20110222
$ ls
hoge.pl.bak20110222  hoge.pl

バックアップを作りすぎて管理できなくなってしまっては本末転倒なので、バックアップはほどほどに...