ファイルコピーシェルスクリプト

ファイルをコピーする際に作成したときのメモ。
ベースとなる[standard.txt]を[copy.lst]に記載されているファイル名分だけコピーし、
ファイル内に記載されている[standard]文字を各リストの名称へ変更する。

ベースファイル[standard.txt]

aiueo
standard
kakikukeko

コピー先ファイル名一覧[copy.lst]

minutes
hours
daily

シェルスクリプト[filecopy.sh]
*ファイルの上書き確認などを行っていないので注意*

#!/bin/sh
LIST=./copy.lst
STANDARD="standard.txt"

while read line
do
# ファイルをコピー
cp $STANDARD $line.txt
# ファイル内の[standard]文字列を[copy.lst]記載の文字列に置き換え
echo -e "%s/standard/$line/g\\nw" | ed - $line.txt
done < ${LIST}

[standard.txt][copy.lst][filecopy.sh]を同じ階層に配置して、シェルスクリプトを実行。
[minutes.txt][hours.txt][daily.txt]が作成される。

ちなみに[minutes.txt]は

aiueo
minutes
kakikukeko

となる。

phpでexception_handler設定

phpにてexception_handlerを使用した時のメモ

exception_handlerは*catchされなかった例外*に対して処理を指定できる。
try {} catch () {}された場合はcatch内の処理が実行。
マニュアル->http://php.net/manual/ja/function.set-exception-handler.php

*php-version:5.1.6*
[exception.php]

<?php
    /**
     *  ExceptionHandler処理
    **/
    function exception_handler(Exception $e) {
        $class_name = get_class($e);
        switch ($class_name) {
        case 'Exception':
            print "Exception_error\n";
            break;
        default:
            print "error\n";
            break;
        }
    }

    // exception_handlerをセット
    set_exception_handler('exception_handler');

    // 例外をthrow(try{}catch{}を動かす場合はコメントアウト)
    // exception_handerが実行される
    throw new exception();

    // 例外をthrow(catch含む)
    try {
        // catch内処理が実行される
        throw new exception();
    } catch (Exception $e) {
        print "catch_Exception_error";
    }
?>

uncatchExceptionの発生時にコールされる。

phpでerror_handler設定

phpにてerror_handlerを使用した時のメモ

error_handlerは実行時にエラーが発生した時の処理を指定できる。
trigger_errorで投げたエラーに対する処理とか。

マニュアル->http://php.net/manual/ja/function.set-error-handler.php

定義済みエラー番号(マニュアル)->http://www.php.net/manual/ja/errorfunc.constants.php

*php-version:5.1.6*
[errorhandler.php]

<?php
    // error_handler設定処理
    // error発生時の処理を指定
    function error_handler($error_no, $error_msg, $error_file, $error_line) {
        print $error_no;
        switch ($error_no) {
        case E_WARNING :
            print "[$error_no]E_WARNING $error_msg\n";
            break;
        case E_NOTICE:
            print "[$error_no]E_NOTICE $error_msg\n";
            break;
        case E_USER_ERROR:
            print "[$error_no]E_USER_ERROR $error_msg\n";
            break;
        default:
           print "[$error_no]DEFAULT $error_msg\n";
        }
    }

    // error_handler設定
    set_error_handler('error_handler');
    // E_WARNING発生
    $i=5/0;
    // E_USER_ERROR発生
    trigger_error("error E_USER_ERROR", E_USER_ERROR);
?>

マニュアルにもあるが[E_ERROR][E_PARSE]などハンドリングできないエラーがあるので確認して使う。

ファイル検索

ファイルの置き場所を忘れてしまったときに便利なコマンド

locate 検索文字列

例)ファイル[sub.html]を検索する。

[hoge@localhost ~]$ locate sub.html
/usr/local/apache2.2/htdocs/sub.html

findコマンドとは異なり、DBをもとにファイル検索を行うため、かなりの速度で検索結果が表示。
※検索文字列を含むファイルを検索するため、ファイル名の一部分で検索が可能。
※逆に絞り込みがあまいとたくさんのファイルが引っかかってしまう。

DBベースのためviなどで作成したばかりのファイルはlocateコマンドでは検索できない。
その場合はlocate用のDBを更新。

■DB更新コマンド
※処理時間がかかるので実行タイミングには注意が必要。

[hoge@localhost ~]# updatedb

夜中に更新されていたのでcronを確認したところdailyに登録されていた。

■DB
locateコマンドで使用しているDB情報はlocate.dbファイルにある
内容が気になったらlocateコマンドで検索してみること。

[hoge@localhost ~]# locate locate.db

サーバーのリソース使用状況表示

サーバリソース(memory,swap,cpu等)の使用状況を一秒置きに表示する。

vmstat -n 1

上記コマンドにより標準出力にて下記が表示。

[root@XXX ~]# vmstat -n 1
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0    116 211692 252808 3047644    0    0     2    14    3    4  0  0 100  0  0
 0  0    116 211692 252808 3047644    0    0     0     0 1025  299  0  0 100  0  0
 0  0    116 211692 252808 3047644    0    0     0     0 1005  278  0  0 100  0  0
 0  0    116 211692 252808 3047644    0    0     0     0 1022  313  0  0 100  0  0
※一秒置きに表示

表示間隔を変更したい場合は

vmstat -n ○<-ここに希望の数字を入力。

5秒置きの場合は

vmstat -n 5

コマンドを実行しておくことで都度状況が確認できる。
テキストファイルに出力する事で、ログファイル的なものも作成可能。
その場合、実行時間が付いていると便利なので追加。

vmstat -n 1 | (awk '{now=strftime("%Y-%m-%d %T "); print now $0}' > vmstat.txt )

※コマンドの実行結果がファイル(vmstat.txt)へ書き出されるまで15秒程度の時間がかかります。

[root@XXX hogeuser]# date(コマンド実行時刻)
2011年 11月 18日 金曜日 18:54:09 JST
[root@XXX hogeuser]# vmstat -n 1 | (awk '{now=strftime("%Y-%m-%d %T "); print now $0}' > vmstat.txt )
※実行終了
[root@XXX hogeuser]# date(コマンド終了時刻)
2011年 11月 18日 金曜日 18:56:21 JST
[root@XXX hogeuser]# cat vmstat.txt
2011-11-18 18:54:11 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
2011-11-18 18:54:11  r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
2011-11-18 18:54:11  1  0    116 210664 252888 3048384    0    0     2    14    4    4  0  0 100  0  0
2011-11-18 18:54:12  0  0    116 210664 252888 3048384    0    0     0     0 1024  313  0  0 100  0  0
2011-11-18 18:54:13  0  0    116 210664 252888 3048384    0    0     0     0 1003  311  0  0 100  0  0
(省略)
2011-11-18 18:56:07  1  0    116 210540 252888 3048392    0    0     0     0 1003  279  0  0 100  0  0
2011-11-18 18:56:08  0  0    116 2[EOF]

※18:56:07〜18:56:21までの情報が書き出されていない。

コマンド実行を終了した場合、終了時刻の-15秒程度までの結果しかファイルに書きだされていない。
確認に必要な時刻+30秒程度は動作させたのち、コマンドを終了するのが安全。

実行時間を付けたコマンドを標準出力に出力して、ターミナルでログを取れば問題ないです。

ディレクトリ数を表示

配置されているディレクトリの数を知りたい場合のコマンド。

find [ディレクトリ名] -type d | wc -l

上記コマンドにより、指定されたディレクトリの配下に存在するディレクトリ数が表示。

[root@XXX hogeuser]# find work -type d | wc -l
3355

「find」コマンドの「-type」オプションを使用し「d[ディレクトリ]」を指定して検索。

[root@XXX hogeuser]# find work -type d
work
work/111024
work/111024/hoge
work/111024/hogehoge
(省略)

ディレクトリが1行ごとに表示される。
その結果(行数)を「wc」コマンドの「-l」オプションに渡す事でディレクトリ数を表示。

サッと使えると便利なこと多いです。

mysqlの型と数値

mysqlで指定する事ができる、型指定の後ろにつく(8)等の数値について。
int(8)等の数値はゼロ埋め指定をした時に機能するものであり、挿入できる桁数などには影響しない。

よって、挿入可能な値は

int(1)  INT = 4byte = -2147483648 〜 2147483647
int(10) INT = 4byte = -2147483648 〜 2147483647

となる。

一方、varchar(2)などは挿入可能文字数を指定する事になり、

varchar(10)は10文字
varchar(255)は255文字

となる。

数値の場合と文字の場合を混同しない。