ログの種類と書式について

ログの種類と書式について
トラブル発生時にログから情報を取得する手助けになるのは
ログファイルの種類
ログの書式変更
ログファイルから有用なログをみつけるポイント
これらを把握していることがより効率的な原因究明につながる
まず、ログファイルの種類
linux では、ログは
/var/log の下に出力される
Ubuntu なら
/var/log/
の下にたくさんあるので
ls /var/log/
で調べると、どんなファイルがあるのか確認できる
種類がたくさんあるので、その中の一部を紹介すると
syslog
システムの動作状態に関するログ
dmesg
カーネルのメッセージバッファのログ
OS起動時、動作時のカーネルメッセージが出力される
auth.log
認証関係のログ
boot.log
OS起動時のサービスメッセージのログ
dpkg.log
パッケージマネジャーの dpkg のログ
apt
パッケージ管理ツールのAPT のログが出力されるディレクトリ
wtmp
ユーザのログイン履歴ログ
who コマンドを使って開く
lastlog
ユーザが最後にログインした日時のログ
lastlogコマンドで確認
この中で、トラブル遭遇時に確認することが多いのが
syslog
ログを確認する時に注意することは
書き込み権限のあるユーザの場合なら
viewコマンド
http://www.linuxlic.com/command/view.html
とか
tail
less
などのコマンドを使い、読み込み専用で開くこと
これは、間違えてログの変更や削除をしてしまわないため
今回は
view コマンドで 認証関連ログファイル auth.log をみる
view /var/log/auth.log
で内容を確認
このときに出てくる書式が
ログ管理デーモンになるrsyslog の
RSYSLOG_TraditionalFileFormat
という書式
これは、
/etc/syslog.conf で
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
と定義されている
syslog 形式のログは
TIMESTAMP
HOSTNAME
といった、いくつかのプロパティから構成される
例えば view /var/log/auth.log
で見てみると
Jul 21 10:17:01 snowpool-Prime-Series CRON[5106]: pam_unix(cron:session): session closed for user root
というログがあり
Jul 21 10:17:01
の部分がTIMESTAMPで
ログが出力された日時
snowpool-Prime-Series

HOSTNAMEで、ホスト名
CRON[5106]:

syslogtag で、ログメッセージの出力元
プログラム名の表示
今回なら、
プロセスID 5106 の cronデーモンがログを出力している
pam_unix(cron:session): session closed for user root
はmsg で、ログの内容になる

ファイル拡張子の取得

ファイル拡張子の取得
#09 ファイルの拡張子を取得する
http://dotinstall.com/lessons/upload_image_php/4509
を元に、投稿されたファイルの情報を取得して
拡張子を設定する
今回は、保存するファイル名を決めておく
これは、アップロードされたファイルの名前をそのまま使うと被ることもあるので、面倒になるから
最初に、拡張子を決め、名前をつけていく
拡張子をつけるのは、ほぼ決まり文句で
$imagesize = agetimagesize($_FILES[‘image’][‘tmp_name’]);
これで、様々な情報が取得され
変数 $imagesize に格納される
中身を確認するには
var_dump() で
var_dump($imagesize);
で見ることができる
これにより、アップロードしたファイルの
縦横の幅
ファイルの種類などが解析される
これを使って、拡張子を決めていく
いろいろなファイルの拡張子があるので、
ここでは switch による分岐を行う
取得して比較する値は
[“mime”]=>
string(9) “image/png”
というように
mime というところ
今回、対応拡張子は
gif
jpg
png
のみにする
コードは
switch($imagesize[‘mime’]){
case ‘image/gif’:
$ext=’.gif’;
break;
case ‘image/jpg’:
$ext =’.jpg’;
break;
case ‘image/png’:
$ext =’.png’;
break;
default:
echo gif/jpg/png only !”;
exit;
}

投稿ファイルのエラーチェック

投稿ファイルのエラーチェック
#08 エラーチェックを行う
http://dotinstall.com/lessons/upload_image_php/4508
を参考に、投稿されたファイルにエラーがないかチェックする
編集するファイルは、upload.php
ファイルの中にある error というフィールドがあり
この中にいろいろな値が入っているので
これを使ってエラーチェックする
条件式は if でつくる
if($_FILES[‘image’][‘error’] != UPLOAD_ERR_OK){
echo “エラーが発生しました”;
exit;
}
とする
UPLOAD_ERR_OK
については
http://jp.php.net/manual/ja/features.file-upload.errors.php
に乗っているように
値は0で、エラーがなく、アップロード成功という意味
なので、 if の中で != となっているので error の値が0でない、つまりアップロード失敗したら、
echo でエラーメッセージを表示している
次に、ファイルサイズのチェック
ファイルサイズを調べるには
添付ファイルのサイズを調べる
$size =filesize($_FILES[‘image’][‘tmp_name’]);
で、一時ファイルの大きさを調べて格納
これを if で判定する
これで、ファイルサイズが0 !size
もしくは
ファイルサイズが MAX_FILE_SIZE を
超える場合にはエラーを echo で表示する
if’!isze || $size > MAX_FILE_SIZE){
echo “ファイルサイズが大きすぎます”;
exit;
}
とする
これで、大きいサイズのファイルをアップロードするとエラーが発生する

cron + async で定期差分バックアップ

cron + async で定期差分バックアップ
バックアップを毎日取得し
過去1週間分を保存する
対象とするのは設定ファイルとかコンテンツ
これらを毎日バックアップして
過去1週間分保存する
まずはわかりやすくコマンドで実行
rsync はフルパスにしてみた
実行環境は ubuntu12.10 64bit
sudo /usr/bin/rsync -a /var/www/ /backup/www-`/bin/date +%Y%m%d`
これを実行すると
/var/www/以下の内容が
/backup/www-バックアップした時の日付
という形式でバックアップされる
今回なら
www-20130720
となっている
このディレクトリの中には、
/var/www/ 以下のディレクトリがすべてコピーされている
`/bin/date +%Y%m%d`
は、バッククォートでかこっているため
実行結果を端末で入力したコマンドに渡すことができる
バッククォートの入力は
shift + @
これを cron で設定しておけば、バックアップが自動で行われる
大抵の例文だと深夜などにおこなうけど
ずっとパソコンをつけておけないという場合
食事やお風呂などの時間帯にしておくという方法もある
例えば、。
10 4 * * *
としてあると
毎日朝の4時10分にバックアップするけど
10 19 * * *
として夕方の7時ぐらいにバックアップという方法もある
また
バックアップを毎日取っていると、どんどんHDDやSSDの容量を使っていくので
必要に応じて削除することも必要
例えば、
sudo /usr/bin/find /backup/ -name www-* -mtime +6 -print0 | /usr/bin/xargs -0 /bin/rm -rf
とすると、古いファイルが消えるらしいけど
なぜか先ほどバックアップしたファイルも削除されていた
find コマンドのオプションに関しては
http://www.nxmnpg.com/ja/1/find
findコマンドを利用した便利なUNIXテクニック例
として
http://uguisu.skr.jp/Windows/find_xargs.html
があるので、このあたりをもう少し調べてみようと思います

ArrayListは、じぇねりくす

ArrayListは、じぇねりくす
これは色々な要素を格納できる
ArrayListにといように
<>で囲んでクラスを指定することで
Stringクラスだけが入るように限定できる
このジェネリクスを使うことで
想定外のデータが入ることを避けることができる
また、<>でクラス指定していないと
値を取り出すときに
キャストという型変換が必要になるので
面倒になる

から送られてきた高速メモ帳

cron を使った差分バックアップ

cron を使った差分バックアップ
cron と rsync を使って定期的に差分バックアップをとっていく
今回はテストなので
sudo mkdir /backup/
sudo mkdir /backup/snowpool
でバックアップディレクトリを作成して
/etc/cron.d/
の下に
vim /etc/cron.d/backup
でバックアップファイルを作成
10 2 * * * root /usr/bin/rsync -a /home/snowpool/ /backup/snowpool/
とすることで、
午前2時10分に自動的バックアップが取れるようになります
sudo chmod +x /etc/cron.d/backup
で実行権限もつけておきました

外付けHDDへバックアップ

外付けHDDへバックアップ
バックアップの考え方
コマンドでのバックアップ方法
継続的バックアップの設定
バックアップ対象となるのは
再作成が困難なデータ
/home以下のユーザーデータ
保存している写真や動画
OS やアプリの設定データなど
設定ファイルは再度設定でもどうにかなるけど面倒なためバックアップしたほうが無難 
バックアップの一般的な条件は
容量が十分あり、容量あたりの単価が安いこと 
バックアップに必要な時間が短くてすむもの
となる
たいていの場合、HDDになるけど
別のHDD
もしくは、外付けHDDになる
同じHDDへ保存してしまうと
メディア障害時にデータの復元ができないので
別のメディアへバックアップするのがベター
バックアップを取得する頻度、時間として
一般的なのは
ユーザーがシステムを利用しない夜間に
1日1回程度取得する
本来ならニーズにより、適切な方法でバックアップするけど
特にニーズがないなら
最新データのバックアップを毎回取得するようにする
コマンドからバックアップするので
今回は、rsync を使う
rsyncは、Linuxでよく使われるバックアップツール
rsyncは
前回のバックアップからの差分のみ複製したり
リモートホストへ複製することができる
外付けHDDは、以前Linux 用に
Linux での外付けHDD
http://heberekemaruhunihun.blog77.fc2.com/blog-entry-433.html
で用意してあるのでこれを使うことに
本来、日経Linux の記事を参考に行う予定だったけど
外付けHDDが /dev/sdb ではなく
/media/outhdd
となっているので
ubuntu:rsyncとcronを使って自動バックアップさせてみる。
http://tukaikta.blog135.fc2.com/blog-entry-33.html
を参考に
rsync で外付けHDDにバックアップ
全部ではファイルが多いし、バックアップの実験だけでよいので
今回は、ダウンロードしたファイルのみバックアップ
実験環境は Ubuntu 11.10 32bit
実行する時にsudo つけないとパーミッションエラーになるので注意
mkdir /media/outhdd/snowpool
sudo rsync -av /home/snowpool/ダウンロード/ /media/outhdd/snowpool
でバックアップ
これで、
/media/outhdd/snowpool
の中に
ダウンロードというディレクトリができて
中身がバックアップされている
そして、今度は新たに
touch rsynctest というファイルを
/home/snowpool/ダウンロード
で作成して
sudo rsync -av /home/snowpool/ダウンロード/ /media/outhdd/snowpool
を実行すると
あたらしく作った rsynctest というファイルだけが
バックアップされている
この rsync をつかうことで簡単に差分バックアップができる

画像掲示板のアップロード処理

画像掲示板のアップロード処理
#06 アップロード処理の流れを確認する
http://dotinstall.com/lessons/upload_image_php/4506
を元に、アップロード処理をする upload.php をつくり
実装していく
この動画では、実際のコードをかくよりも流れの解説
まず、require_once(‘confg.php’);
で設定ファイルの読み込み
そこから先の流れとしては
エラーチェック
保存するファイル名を作成
元画像を保存し、画像が大きいなら、縮小画像をつくり保存
そして、index.php へ飛ばすという流れ
アップロードされたファイルのあつかい方については
#07 $_FILESの中身を確認する
http://dotinstall.com/lessons/upload_image_php/4507
を参照
いままでのように、通常のフォームから
画像や入力内容を扱うなら
$_POST[‘image’]
というようにしていたけど
ファイルの場合では異なり
$_FILES[‘ 変数名’];
となる
この変数名は、form で送信したときの name の名前になる
例えば、
<input type=”file” name=”image”>
なら、
$_FILES[‘image’]
となる
アップロードされたファイルには
色々な情報が格納されていて
確認したいのなら、
var_dump() で中身を見てみるとわかりやすい
ソースにすると
var_dump($_FILES[‘image’]);
exit;
として
index.php でファイルをアップロードしてみると
渡されたデータがみれる
そのままだと見にくいので
ブラウザでソースを表示するとわかりやすくなる
やりかたは、ブラウザで
右クリック > ページのソースを表示
name には元画像の名前
type には何のファイルか
tmp_name は
システムが一時的に保存したファイルの名前
これは後で保存先フォルダへ入れることになる
error は
エラーチェックに必要な情報が入ってくる
ちなみに、0だったら正常ということ
size は、ファイルのサイズ
エラーコードに関しては
http://jp.php.net/manual/ja/features.file-upload.errors.php
を参考にする

Linuxコマンドの定期自動実行

Linuxコマンドの定期自動実行
Linuxの管理ツールの多くは
自動実行機能の
cron
を使っている
cronを、使うときのポイントは
設定ファイルとディレクトリの構成
定期実行するコマンドのcronへの登録
cron によるコマンドや
スクリプトの定期自動実行の設定は
/etc
の下にある
cron,hourly
は毎時
cron.daily
は毎日
cron.weekly
は毎週
cron.montly
は毎月
というように指定したディレクトリごとにより自動実行される
管理ツールがインストール時に
スケジュール実行するスクリプトを配置するのも
これらのディレクトリになる
毎時実行するスクリプトは
/etc/crontab
の設定で起動される
/etc/cron.d は
/etc/crontab
と同じ書式の設定ファイルを配置するディレクトリ
コマンドやスクリプトの実行条件の詳細設定をするには
/etc/cron.d/
の下に設定ファイルを作成することになる
cronの書式は
分 時 日 月 曜日 実行ユーザ名 コマンド
という書式になる
分 時 日 月 曜日
については
分 0-59
時 0-23
日 1-31
月 1-12
曜日 0-7で7が日曜日
となる
数値ではなく * にするとすべてという意味になる
例えば
分のところを * にすれば、毎分という設定になる
あと、気をつけるべきなのがコマンドの設定
cron の環境変数はユーザシェルとは違うので
コマンドはフルパスで書くようにする
もし、NTPサーバーに10分おきに同期するなら
10 * * * * root /usr/sbin/ntpdate NTPサーバー
となる

画像投稿フォームの作成

画像投稿フォームの作成
#05 画像投稿フォームを作ろう
http://dotinstall.com/lessons/upload_image_php/4505
を元に index.php を作って
画像アップロードするためのフォームを作成する
vim index.php でファイルを作成し編集していく
require_once(‘config.php’);
で設定ファイルを読み込み
HTMLソース部分でフォームを作成していく
フォームについては
画像をアップロードするには決まりがあり
<form action=”” method=”POST” enctype=”multipart/form-data”>
というように
enctype=”multipart/form-data”
をつけるのを忘れずに
また、隠し要素として
input type=”hidden” にして
<input type=”hidden” name=”MAX_FILE_SIZE” value=”<?php echo MAX_FILE_SIZE;
?>”>
として、最大投稿サイズを決めておく
このMAX_FILE_SIZE は
config.php で設定した値
これができたら、後は
画像選択ボタンと
アップロードのための送信ボタンを作成
画像選択ボタンが
<input type=”file” name=”image”>
送信ボタンが
<input type=”submit” name=”アップロード”>
となる
ここまでできたら、一度保存して
index.php を開いてみる
画面が作成できているのを確認できたら、
現在 action=”” で index.php が対象になっているのを
action=”upload.php” へ変更して
このファイルで処理するようにする
~