ちょっとした設定
grep の小技
共有ディレクトリ(drwxrwxrwx)で他人のファイルを消せないようにする
date を使って ls のタイムスタンプ表示を変更
特定のデバイスを使っているプロセスを探す
pdf file を grep したい
ソートしたファイルの重複行を消す
mail コマンドでメールを送る
firefox のキーバインドを emacs風にする
sylpheed のキーバインドを変更する
sylpheed でフィルターをカスタマイズ
valgrind を使ったメモリ周りのデバッグ
Scientifc Linux(or CentOS ...)用の kterm
fortran に関する覚え書き


grep
共有ディレクトリ(drwxrwxrwx)で他人のファイルを消せないようにする

パーミッションを 777 に設定したディレクトリでは所有者に関係無くファイルを消すことができる。 sticky bit を立てておけば人のファイルは消せなくなる。
$ chmod 1777 Directory
/tmp はデフォルトで sticky bit が立っている。パーミッションは ls -ld で確認。パーミッションを 777 から 1777 に変更すると drwxrwxrwx から drwxrwxrwt になる。

date を使って ls のタイムスタンプ表示を変更

$ ls --full-time tmp.dat | awk '{printf("%s\n",$6)}' |date +%Y%m
もっと簡単な方法があるかもしれんが。
(ls (fileutiles)のバージョンに依存。Vine 3.x の様な古いディストリビューションでは この方法は使えない。--time-style オプションがあれば OK。月に Jun とか Jul とか 使われるとスクリプト書くのに不便だからとっとと ISO 8601 に統一してほしい)

特定のデバイスを使っているプロセスを探す

誰かがデバイスを使用中だと cdrom や HDD を umount できない。 次のコマンドでプロセスを探して殺す。
$ fuser -muv /mnt/cdrom

pdf file を grep したい

スクリプト作者のページ(ありがたや)。シェルスクリプトpdfgrepを使う。
$ pdfgrep [grep options] <pattern> [file ...]

ソートしたファイルの重複行を消す

man uniq.
$ sort tmp.txt | uniq
不正アクセスの IP address リスト等を作るのに便利。

mail コマンドでメールを送る

tmp.txt を xxx@xxx.xx.xx に送る。シェルスクリプトでメールを送るときに便利。
$ mail -s title xxx@xxx.xx.xx < tmp.txt

firefox のキーバインドを emacs風にする

~/.gtkrc-2.0 に gtk-key-theme-name = "Emacs" を追加
(.gtkrc-2.0 が無ければ作る)

追記:最近の gnome だと gconf エディタで desktop/gnome/interface/gtk_key_theme の値を Emacs にする必要があるらしい。(gnome はカスタマイズがややこしくなって きているみたい。fluxbox が軽くて簡単にカスタマイズできるのでお薦め。)

sylpheed のキーバインドを変更

スパムメールの多さにうんざりして sylpheed を 1.0.3 から bsfilter が 使える 2.4.0 に変更。 sylpheed 2.x から GTK2 になったせいでメールの編集中にも余計なキーバインドが 適用されるようになった。例えば ATOK だと Ctrl+I でカタカナに変換だが、 ATOK の IM よりも GTK のキーバインドが優先されるためファイルの挿入と なってしまう。以下のキーバインドを無効化した。 .sylpheed-2.0/menurc を編集、次の項目を追加した。
(gtk_accel_path "<Compose>/File/Insert file" "")
(gtk_accel_path "<Compose>/File/Send" "")
(gtk_accel_path "<Edit>/Select all" "")
(gtk_accel_path "<Compose>/Edit/Select all" "")
(ショートカットを割り当てたいメニューは一度英語環境で起動すれば分かる)
ただし自分の環境では sylpheed 終了後に menurc がデフォルトに戻ってしまう のでとりあえず chmod 444 として対処した。


sylpheed でフィルターをカスタマイズ

bsfilter は優秀なのでほとんどのスパムを正しく判別してくれる。 しかしわざわざ迷惑メールフィルターにかけなくてもスパムと判定できるメールも多い。 その様なメールはごみ箱行きの判断は必要なく、受信後にすぐに削除したい。 sylpheed の振り分け機能を使えば大抵の事はできるが、メール本文が無く、 HTML のみのスパムは振り分けできない。 From の偽装アドレスが振り分けで使用しているアドレスと同じ場合、特定の正規の フォルダーへ移されてしまうので特に迷惑。
そこで、sylpheed の振り分け機能"コマンドの実行結果"を利用して 本文が無く HTML のみのメイルを判定するスクリプトと、 HTML 中に NG ワードが含まれていないか判定するスクリプトを ruby で書いた。

1) HTML のみのメールを判定 (ヘッダーの後がいきなり HTML で始まるメール)

####### chk_no_text.rb ########
input=ARGV[0]
nline=0  
header=1 # 1: header 0: text
open(input,"r") do |f|
  while line=f.gets
    n=line.length
    if(n==1) then
      header=0
    end
    if(header==0) then
      nline+=1
      if(nline==2) then
        if(line.index("<!DOCTYPE ") || line.index("<!html")) then
          exit(0)
        end
      end
    end
  end
end
exit(1)


2) HTML に含まれる NG ワードの判定

####### myfilter.rb ########
input=ARGV[0]
ngwords=["ngword1","ngword2"] 
nw=ngwords.length
nline=0  
header=1 # 1: header 0: text
str=""
open(input,"r") do |f|
  while line=f.gets
    n=line.length
    if(n==1) then
      header=0
    end
    if(header==0) then
      str+=line.chop
    end
  end
end
for i in 0..nw-1
  if(str.index(ngwords[i])) then
    exit(0)
  end
end
exit(1)

ngwords には適当な単語、フレーズを入れる。 sylpheed の"コマンドの実行結果"ではメールはコマンドの引数として渡され、 コマンドの返り値が 0 のとき条件に一致したとみなす。 ファイルを適当な場所に保存したら sylpheed の振り分けの 設定で "コマンドの実行結果" を選択して
ruby /home/hoge/scripts/spam_filter/chk_no_text.rb
の様に設定すれば良い。 スクリプトの動作チェックは Mail/inbox 以下の適当なファイル(メイル) で行う。 上のスクリプトは日本語未対応。


valgrind を使ったメモリ周りのデバッグ

Linux でのメモリ周りのデバッグはvalgrind が便利。

例: $ valgrind -v --leak-check=yes --show-reachable=yes --tool=memcheck [実行ファイル]


Scientifc Linux(or CentOS ...)用の kterm

kterm-6.2.0-22.src.rpm を拾ってきて Scientific Linux 4.x で コンパイルを試みたが conflicting types for 'malloc' というエラーで失敗。 kterm-6.2.0-22.src.rpm を作り直した。

インストールするためには、まず
# rpmbuild --rebuild kterm-6.2.0-22.src.rpm
で kterm-6.2.0-22.i386.rpm を作って rpm -ivh でインストールする。
変更点: extern char *malloc() を extern void *malloc() に変更し パッチファイル(*/SOURCES/kterm-6.2.0-malloc.patch.bz2)を作成後、 spec ファイルを編集した。


Fortran に関する覚え書き

[戻る]