2008/07/30(Wed)screenでデタッチできん

2008/07/30 16:02 Software::Linux
今日は雷のせいで、よくサーバーへのアクセスが切れる。
というのも、サーバー側のFTTHモデムが瞬停に耐えられず再起動し、IPアドレスが変わってしまうからだ。まぁこれはしょうがない。

上位DNSまでのDNS浸透は速いものの、やっぱり末端に広がるには時間がかかるようなので、とりあえずhostsファイルに書いてやったり*1で対応するのはいいとして、GNUのscreenがattached状態になったままで再アタッチできない事がたまにある。
いつも、気がついたらdetachedになってるんだが。

ちなみに、autodetachはonである。
[kero@spinel](2)$ screen -ls
There is a screen on:
        26323.pts-0.spinel      (Multi, attached)
1 Socket in /var/run/screen/S-kero.
となったので、しょうがない、リモートデタッチするかと。
[kero@spinel](3)$ screen -d
[26323.pts-0.spinel detached.]
が。
[kero@spinel](4)$ screen -ls
There is a screen on:
        26323.pts-0.spinel      (Multi, attached)
1 Socket in /var/run/screen/S-kero.
何度やってもscreen -dはdetachedと出るばかりで直らん。
[kero@spinel](9)$ screen -r
There is a screen on:
        26323.pts-0.spinel      (Multi, attached)
There is no screen to be resumed.
resumeもできん。
[kero@spinel](10)$ screen -D

[kero@spinel](11)$ screen -D
  • Dにしたら今度は反応が返ってこない。Ctrl+Cが効くだけマシかもしれんが……。

と、この記事を書いている間に
[kero@spinel](12)$ screen -ls
There is a screen on:
        26323.pts-0.spinel      (Multi, detached)
1 Socket in /var/run/screen/S-kero.
となっていた。

あれか、焦って再アタッチせずに、ゆっくりしてきてね!!!ってことですね、きっと。
解決編をご覧ください。

*1 : C:\Windows\System32\Drivers\etc\hosts

追記: 最後に打ったコマンドをウィンドウタイトルに 2008/07/30

検索してたらこちらで見つけた。
.screenrcに
shelltitle "$ |bash"
と付け足して、.bashrcを
OLD_PS1=...(元の設定)...
SCREEN_TITLE='\[\033k\033\\\]';
PS1="${SCREEN_TITLE}${OLD_PS1}"
てな具合。OLD_PS1の部分は無論、埋め込みでも構わない。
zsh使いの場合は、↑サイトを参考に。

2008/07/11(Fri)便利コマンド on Linux

2008/07/11 18:19 Software::Linux
Linuxのシェルは拡張性がヤバいですね。
Linuxを使い始めたときからbash一筋な私ですが、.bashrcに色々と拡張関数を作って便利に使っているので、少し紹介してみます。

コンパイラ系 省略コマンド

コンパイルしたら自動的にそのプログラム名で出力して欲しい!ってことで、N先生に作り方を教わったコマンド。
a.outのままだと、後からみてどのプログラムのコンパイル結果なのか分からないし、既存のと被る可能性があるからなぁ。
  • Usage: $ gcc prog.c
    # gcc
    alias gcc='mygcc'
    function mygcc(){
        pn=`echo $1 | sed -e 's/\.cp\?p\?//'`
        command gcc -Wall -lm -o $pn $*
    }
    # g++
    alias g++='mygpp'
    function mygpp(){
        pn=`echo $1 | sed -e 's/\.cpp//'`
        command g++ -Wall -lm -o $pn $*
    }
    # cc
    alias g++='mycc'
    function mycc(){
        pn=`echo $1 | sed -e 's/\.c//'`
        command cc -Wall -lm -o $pn $*
    }
    

プログラムコンパイルから出力をファイルに書くまで一発なコマンド

まぁごくたまに使いますかねぇ。大量のinputをプログラムに流し込んだ結果をとりたいときとか。
  • Usage: $ start prog.c input.dat
    function start(){
        pn=`echo $1 | sed -e 's/\.c//'`
        command cc -Wall -lm -o $pn $1; ./$pn $2 &> $pn.result; cat $pn.result
    }
    

ファイルの中をぐるぐる検索してくれるコマンド

でも、最近は$ grep -r HOGE ./ で事足りるじゃん…と思って使ってない。
  • Usage: $ exgrep HOGE
    # File grep
    function exgrep(){
        command find ./ -type f -exec grep -l "$1" {} \;
    }
    

ディレクトリ内のtarballを一気に解凍するコマンド

さっき必要だったので作ってみた。
$ tar zxvf *.tar.gzでディレクトリ内の全ての.tar.gzを解凍してほしかったんだけど(apacheログの日ごとにtarballしていたものを解凍したかった)、いちいちforとか打つの面倒だなと思って。
  • Usage: $ extar *.tar.gz
    # Expand decompress .tar.gz
    function extar(){
        for TGZ in $@
        do
            tar zxvf ${TGZ}
        done
    }
    

どーでもいいけど、シェルスクリプトってifの対がfiだったり、caseの対がesacなのに、doの対はodじゃないんだね^^;

追記: bashの関数名に+とか書くと怒られる 2012/04/30

今まで何ともなかったfunction g++() ...という書き方だが、Fedora 16を新規インストールした辺りのbashからどうもsyntax errorになる。仕方がないんで、aliasを噛ませて修正。

Before)
$ function g++(){ echo "hogehoge"; }
-bash: syntax error near unexpected token `echo'
After)
$ alias g++='mygpp'
$ function mygpp(){ echo "hogehoge"; }

2008/07/03(Thu)zshでセグメンテーション違反

2008/07/03 23:29 Software::Linux
長い間bashをカスタムして使っている私ですが、補完がウワサのzshに乗り換えようかと思ってるものの、なかなか設定ファイルがうまく書けないので乗り換えられません。

今日こそは、と.zshrcをいろいろ弄ってみたのですが、なんとシェルで日本語を入れるとセグメ違反になってしまうことが発覚…^^;

zsh_prob_jpn.png

---(bash)---
$ ls -l
$ cat 日本語.txt
$ zsh
---(zsh)---
$ ls -l
~ここではちゃんと日本語が見えている~
$ cat 日本語
↑「にほんご」の変換を確定した時点で"セグメンテーション違反です"

えーと、どうすればいいんでしょうか…。
LANG=ja.JP_UTF-8、zshは4.2.6な環境です。

2008/06/22(Sun)screen暴走?

2008/06/22 3:23 Software::Linux
ずっと動きっぱなしでこれからの夏の温度上昇が心配なうちのサーバーですが(このmo.kerosoft.comの運営も担ってます)、3週間ほど前からswap領域が肥大してるのが気になっていました。(実メモリ領域は普段通り適度にcached状態)

実メモリ512MBってのは自分の使い方だと厳しいのかなぁ…と思ってましたが、rootさんになって色々探ってみると、どうやらscreenが500MB以上swappingしているようだ。
screenの便利さに慣れてから、一ヶ月以上も立ちあげっぱなしで、使うたびにdetach/attachしまくっているのは、作った人間としては想定している使い方のはずだけどなぁ…。

# swapoff -aで実メモリが確保できないほどに膨らむってのはいかがなものか…。

vimの中断状態や、ほかのサーバーにログインしていたウィンドウを次々閉じて、screenを起動しなおしてみると、一気に解放された模様……。なんだったんだ??

screen_memswap.png



この後、一応# swapoff -a# swapon -aをして、swapを空に片づけておきました。
やれやれ。

余談

どのプロセスがスワップしまくっているかを調べるのは、psコマンドにcをつけると便利です。
$ ps axuc | lvとでもして、VSZ列を眺めてみてください。(単位KB)

2008/06/22(Sun)MP3のIDタグの文字コード

2008/06/22 3:02 Software::Linux
私は、多くの(韓国原産が多い)MMORPGの音楽を作っているSoundTeMPというグループが好きなので、よくMMORPGのクライアントから引っ張り出しては聞いています。
メジャーなタイトルでは、Ragnarok OnlineTalesweaverがありますかね…。
日本語バージョンも稼働しているので、あー、あの音楽ね!とお思いの方も多いのではないでしょうか。


が、昔の方にリリースされたmp3には、タグがUTF-8ではなくEUC-KRで書き込まれており、Windows Media PlayerやWinampどれで再生しても、化けてしまいます。

hangeul_in_wmp_before.png


EasyTAG

前々から、MP3のIDタグの文字コードを変換できんもんかなぁ…と思っていたのですが、Linuxで動くいいソフトがありました。EasyTAGってやつです。

操作は非常に簡単で、文字コードの強制読み込み&変換指定をしてやるだけです。
ちなみにインストールも簡単です。yumで一発。
yum install easytag
あと、韓国語を扱うので、
yum install fonts-korean
が必要です。

設定

まず、起動したら、ホームディレクトリ以下をガリガリ読み始めてウザいので、設定でサブディレクトリを読まないように変更します。
ま、本質とは関係ありませんのでお好みで。
easytag_option1.png


あと、フォルダを移るたびに、変更を保存するかと聞かれますが、この時点ではすべてNOと答えておきましょう。

次に、読み込む文字コードを適切に設定し、出力をUTF-8にしてやります。
こうすることで、日本語環境のWindowsやLinux、Macでも(おそらく)文字化けすることなく読めると思います。
easytag_option2.png


フォルダを変更したい場所に合わせて読み込むだけで、タグの文字化けが直って表示されていると思います。
後は、ファイルメニューから、"ファイルの強制保存"を選びましょう。
easytag.png


できあがり。

文字化け解消後

完全ですね……。フフフ。
EUC-KRのハングルだけでなく、化けていた漢字もUTF-8にて復活しました。
※余談ですが、Windows Media Playerはプレイビューの幅を広げると、アーティスト列が現れます。この間たまたま気がついたけど、ずっとXP使ってたのにそれまで全然知らなかった…。
hangeul_in_wmp_after.png


注)Windows Media Playerのタグ情報を更新するにはプレイリストを作り直すだけではだめで、[ライブラリ]-[すべての音楽]の中身をすべて削除してから読み込みなおすと良い。無論、削除方法は、"ライブラリからのみ削除"で。

余談:Windows Live Messengerにて

Windowsで広く使われているメッセンジャソフトにWindows Live Messengerというものがあるのですが*1、これに再生中の曲名をブロードキャストする機能があります。(メンバリストに対してですが)

当然の如くWindows Media PlayerとWindows Live Messengerは相性がよく、韓国語もきちんと表示されます。
hangeul_msgr_with_wm.png



が、Winampは化けます……。
メインウィンドウでは、UTF-8で正しく解釈してハングルで表示できてるのにね。たぶんメッセンジャへのメッセージ送信部に問題アリ。
hangeul_msgr_with_winamp.png



うーん、そう考えるとやっぱりWindows標準のプレーヤー"Windows Media Player"はよく出来てるな…。
プレイリスト機能を用いないときは、さらに軽量でキーボードショートカットがいっぱいついたMedia Player Classicを使ってますが、こっちはプレイリストが見づらいので、アルバムで管理したいときにWMPが重宝してます。
ちなみに、Winampはネトラジ専用ですね。プレイリストがメインとウィンドウ分割してると面倒なので。

そういや、iTunesなんてプレーヤーもありましたね。
自分にとっては、
  • MacのiTunesにインポート時に、普通の日本語でもタグが化けまくった思い出がある
  • エンコーダーがボロくてLameなんかより、ずっと劣っているというレビューを見た
  • セットで使われるiPodは音がひずみまくり&ノイズのる
  • プレイリストを独自形式で持つうえ、テキスト編集できなくてうざい
  • キーボードショートカットがすべてに割り振られていない、使いにくい
とダメなところだらけなので、そもそもインストールする気が起きません。
ほんと、Mac使ってる人はよくあんなプレーヤーで耐えられると思うわ…。

*1 : 以前はMSN Messengerだった。XP標準では廉価版のWindows Messengerが搭載されていた。Windows Live Messengerとは、3者どれも違う物なので注意。

謝辞

最後になりましたが、itiri:20080227:1204113626を参考にさせていただきました。
ありがとうございました。