2014年3月28日金曜日

第28回「権限とcksumを同時に表示させる」

さて、第28回のお題は「権限とcksumを同時に表示させる」です。

「ls -l」と「cksum」の結果を同時に表示して、ファイルの一意性を確認します。

for file in `find . ! -type d -print`
do
printf "%s %s %s %s %s %s\n" `cksum $file | awk '{print $1" "$2}'` `stat -c "%A %G %U %n" $file`
done

第27回「プログラムのシステムコールをトレースする」

さて、第27回のお題は「プログラムのシステムコールをトレースする」です。

プログラムがまともに動いているか確認するときに使ったりします。

strace -p PID

特定のシステムコールのみトレースするときは、
strace -p PID -e open
strace -p PID -e trace=open,read

gdbでデバッグする前に、open,read,writeするところから、
問題の箇所のあたりをつけることに役立ちます。

2014年3月27日木曜日

第26回「Port、PID、プロセス名、ファイル名から紐づく情報を表示する」

さて、第26回のお題は「Port、PID、プロセス名、ファイル名から紐づく情報を表示する」です。

あるPort番号で開いているPIDをkillしたい
プロセスが使用しているPort番号を知りたい
ファイルをしているプロセス名を知りたい
Port、PID、プロセス名、ファイル名のいづれか1つがわかれば、それに紐づく情報を表示できるのが、lsofコマンドです。
lsofコマンドは、fuser、netstatコマンドを含んだようなコマンドです。

lsof ファイル名
lsof -i:ポート番号1,ポート番号2
lsof -c プロセス名
lsof -p PID

2014年3月21日金曜日

第25回「ps x | grep で自コマンドを表示させない」

さて、第25回のお題は「ps x | grep で自コマンドを表示させない」です。

「ps x | grep processname」でプロセスを絞りこむと、自コマンドまで表示されてしまいます。
ps x | grep processname | grep -v grepでもいいのですが、
ps x | grep [p]rocessname
とすると、自コマンドは表示されません。
評価されるときは「ps x | grep processname」になっていますが、
実行コマンドは「ps x | grep [p]rocessname」なので、grepにヒットしないという仕組みです。

第24回「複数の条件をgrepする」

さて、第24回のお題は「複数の条件をgrepする」です。

grepする条件が複数あるときは、egrepとパイプを使います。

egrep "条件1|条件2|条件3" ファイル名

第23回「条件に一致しない行を正規表現で削除する」

さて、第23回のお題は「条件に一致しない行を正規表現で削除する」です。

ログファイルには、ものによってログレベルがあり、INFO、WARN、ERRORなどあります。
[ERROR]という行だけがほしいとき、[ERROR]以外の行を正規表現で選択し、削除します。

^(?!.*[ERROR]).+$

テキストエディタ(サクラエディタなど)で正規表現も取り扱えるので、重宝します。

2014年3月7日金曜日

第22回「拡張子が異なるファイルに同じ処理をする」

さて、第22回のお題は「拡張子が異なるファイルに同じ処理をする」です。

拡張子が異なるファイルに同じ処理をするには、for 変数 in 値リスト;do;コマンド;doneを利用します。
$ more hoge*
::::::::::::::
hoge1
::::::::::::::
hoge1
::::::::::::::
hoge1.bk
::::::::::::::
hoge1.bk
::::::::::::::
hoge2
::::::::::::::
hoge2
::::::::::::::
hoge2.bk
::::::::::::::
hoge2.bk
::::::::::::::
hoge3
::::::::::::::
hoge3
::::::::::::::
hoge3.bk
::::::::::::::
hoge3.bk
$ for file in hoge?
> do
> echo "### $file ###"
> diff $file ${file}.bk
> done
### hoge1 ###
1c1
< hoge1
---
> hoge1.bk
### hoge2 ###
1c1
< hoge2
---
> hoge2.bk
### hoge3 ###
1c1
< hoge3
---
> hoge3.bk

第21回「拡張子を削除する」

さて、第21回のお題は「拡張子を削除する」です。

拡張子削除はrenameコマンドを利用します。

rename .txt "" *.txt
*.txtに該当するファイル名から.txtを""(削除)する意味になります。