2012年7月26日木曜日

bash for loop ループ

bash for loop ループ

#!/bin/bash

#set -x

# NG LOOP_LIMIT=200

for i in {1..200}
do
echo "Welcome $i times"
done

exit 0



2012年7月12日木曜日

grepコマンド

psコマンドの結果からgrepコマンド自身を除外する。
;-) $ ps aux myprocess |grep [m]yprocess
"myprcess"文字列を検索する。
grepコマンド自身の"[m]yprocess"文字列は、"myprocess"には一致しない。。

:-( $ ps aux myprocess |grep -v grep

http://www.commandlinefu.com/commands/view/11660/grep-processes-list-avoiding-the-grep-itself?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+Command-line-fu+%28Command-Line-Fu%29


grepコマンドで検索該当行の前後も表示させる方法

該当行の前後n行も表示
$ grep -n keyword file.txt
$ grep -C n keyword file.txt



該当行の後n行も表示
$ grep -A n keyword file.txt


該当行の前n行も表示
$ grep -B n keyword file.txt



該当行の後m 前n行も表示
$ grep -A m -B n keyword file.txt



http://www.atmarkit.co.jp/flinux/rensai/linuxtips/137greplineplus.html



2012年7月6日金曜日

gdbの使い方

http://www.debian.org/doc/manuals/debian-reference/ch11.ja.html
(gdb) thread apply all bt マルチスレッドプログラムの全てのスレッドのバックトレースを取得
(gdb) bt full 関数コールのスタック上に来たパラメーターを取得
(gdb) thread apply all bt full 異常のオプションの組み合わせでバックトレースとパラメーターを取得
(gdb) thread apply all bt full 10 無関係の出力を切り最後の10のコールに関するバックトレースとパラメーターを取得
(gdb) set logging ongdb アウトプットをファイルに書き出す (デフォールトは "gdb.txt")
---------------------------------------------------------------------------------------------------------------------------

http://uguisu.skr.jp/Windows/gdb.html
info stack 関数の呼び出しスタックの一覧を表示
info thread 存在しているスレッドの一覧を表示

詳細を知りたいスレッドは、スレッド番号を選択し、where や up コマンドで確認します。
(gdb) thread(一覧表示)
(gdb) thread 3
(gdb) where / bt
(gdb) up 2

1つのコマンドを複数のスレッドに対して実行するコマンドは
「thread apply [threadno] [all] args」です。

全スレッドの callstack を表示するには次のように入力します。
(gdb) thread apply all info stack


gdb を起動した後に動的に coreファイルを生成。
(gdb) help generate-core-file



core dump を有効化する
$ limit coredumpsize (サイズ)


deadlock した場合の coreファイルの生成方法
core dump を有効化しておき、別 terminal から signal を送って core を吐かせます。
% ps -aux | grep (デバッグしたい実行ファイル)
(実行ファイル の プロセスID を調べる)

% kill -3 (プロセスID)<pid>
「-3」は「-ABRT」でも同じです。


core の利用方法
(gdb) gdb 実行ファイル coreファイル


core dump からの thread backtrace 取得
取得した core を利用し、segfault (or deadlock) 発生時の状況を gdb で解析できます。

% gdb 実行ファイル core.<pid>
...
(gdb) set logging file <ログファイル名>
(gdb) set logging on
(gdb) thread apply all bt → 全スレッド表示
(gdb) set logging off
(gdb) quit



実行中に deadlock してしまった場合
実行中に deadlock してしまった場合、gdb を attach し、backtrace を取る。

% ps auxww | grep 実行ファイル → 実行ファイルの pid を調べる
% gdb 実行ファイル
(gdb) attach <実行ファイル の pid>
...
(gdb) set logging file <ログファイル名>
(gdb) set logging on
(gdb) thread apply all bt
(gdb) set logging off
(gdb) quit




nm コマンドを使う

$ nm -D libuXXX.so
「.so」ファイルの場合には「-D」オプションを付けることでダイナミックシンボルが表示できます。

仮に「シンボルがありません」と表示される場合は、ビルドオプションに「-gが付いている」「strip されていない」などを確認してください

小文字はそのシンボルがローカルであることを意味し、 大文字はそのシンボルがグローバル (外部定義) であることを意味します。

T コードセクション内の定義
D 初期化されたデータセクション
B 初期化されないデータセクション
U 未定義。シンボルはライブラリによって使われているが、ライブラリ内では定義されていない
W weak. 他のライブラリも同じシンボルを定義している場合、その定義によりオーバーライドされる

lddコマンドによる依存ファイル一覧

$ ldd 実行ファイル
プログラムヘッダ構造

$ strace 実行ファイル
システムコールのトレース結果

$ readelf -l 実行ファイル





・コアファイルを出力できる様にするには
 確認&変更:
  >limit
  coredumpsize 0 kbytes
  >limit coredumpsize unlimited
  >limit
  coredumpsize unlimited
 
 デバッグ:
  >gdb myprog core.16171
  (gdb) where



乱数発生器 /dev/randam

#include <stdio.h>

int main()
{
int value;
FILE *fptr;
unsigned int w_i;

fptr = fopen("/dev/urandom", "r");
if(fptr==NULL) { return -1; }


for(w_i=0; w_i<20; w_i++) {
fread( &value, sizeof(value), 1, fptr);
printf("%2d value = 0x%08X %u\n", w_i, value, value);
}

fclose(fptr);

return 0;
}



2012年7月5日木曜日

プロセスの使用メモリ(VSZ,RSS)をモニタログするスクリプトbash

プロセスの使用メモリ(VSZ,RSS)をモニタログするスクリプトbash

#!/bin/bash

interval=3

rm $0.log

/bin/date "+%Y-%m-%d %H:%M:%S" >> $0.log
ps aux | head -1 >> $0.log
while true
do

ps aux | grep mydaemon | grep -v grep >> $0.log

sleep $interval

done



フォルダサイズ ファイルサイズを調べる

フォルダサイズ
$ du -k [directory] | sort -n | tail -20

1Mより大きいファイル
$ find ./ -size +1M



2012年7月3日火曜日

Windows7 タスクバー インジケーターにアイコンが表示されない

Windows7 タスクバー インジケーターにアイコンが表示されない

tetatermmenuが表示されず、リストの設定ができない!
1.Windows7のスタートアップの登録を止める
2.Windows7(再)起動
3.手動でteratermmenu起動
これで表示された。



ntp 確認

ntpの動作を確認する方法

# /usr/sbin/ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
doga.jp .STEP. 16 u - 64 0 0.000 0.000 0.000
7c2955ab.i-revo .STEP. 16 u - 64 0 0.000 0.000 0.000
103.6.16.254 .STEP. 16 u - 64 0 0.000 0.000 0.000
*192.168.50.1 LOCAL(0) 11 u 23 64 17 0.136 1.028 0.933
#