git関連のメモ

  • ログを見やすくする
git log --graph --all --format="%x09%an%x09%h %d %s"
  • コミット間のファイル一覧取得
git diff --stat --name-only [コミットID] [コミットID]

name-onlyをつけるとファイル名のみ取得できる

  • マージする方法
git merge [ブランチ名]

特定のファイルをマージするとき
git checkout ${branch} ${file}
  • 差分確認
git diff HEAD^ --color-words

color-words →単語に色を付ける

  • 変更を戻す場合
git checkout  data/batch/mail/BAT_01_01/mail_ok_zero.txt
  • ブランチ削除する場合
git branch --delete foo

PHPにてjson_decodeの罠にはまった

最近、phpを書きはじめました。
本当に初歩的なことなので、忘れないように書き留めておく。

json_encodeの返却値が第2引数をつけないと配列としてアクセスできない。
配列として扱うには第2引数をつけるのを忘れない。
↓↓↓ php5.6の場合

$array = array(
    'a'=>1,
    'b'=>2,
    'c'=>3,
);
//jsonエンコードする
echo(json_encode($array)."\n");
//出力結果->{"a":1,"b":2,"c":3}

//オブジェクトで返却される
$json_decode_obj = json_decode($json);
//出力結果
// object(stdClass)#1 (3) {
//   ["a"]=>
//   int(1)
//   ["b"]=>
//   int(2)
//   ["c"]=>
//   int(3)
// }

//配列で返却される
$json_decode_array  = json_decode($json,true);
//出力結果
// array(3) {
//   ["a"]=>
//   int(1)
//   ["b"]=>
//   int(2)
//   ["c"]=>
//   int(3)
// }

AWS plenvでperlのインストール

AWSにてplenvからperlをインストールしたときにエラーになった。

OSの情報

Amazon Linux

[ec2-user@ip-10-3-10-53 ~]$ uname -a
Linux ip-10-3-10-53 4.9.62-21.56.amzn1.x86_64 #1 SMP Thu Nov 16 05:37:08 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

エラーの内容

[ec2-user@ip-10-3-10-53 ~]$ plenv install 5.26.1
Installing 5.26.1 as 5.26.1
/usr/bin/perl -- /home/ec2-user/.plenv/plugins/perl-build/bin/perl-build --symlink-devel-executables --build-dir /home/ec2-user/.plenv/build/1512626314.23666/ --tarball-dir /home/ec2-user/.plenv/cache/ -Dusedevel 5.26.1 /home/ec2-user/.plenv/versions/5.26.1
WARN: [cpan_perl_releases] not found the tarball for perl-5.26.1
WARN: [perl_releases_page] This page is 3 or more days old. ignore
Fetching 5.26.1 as /home/ec2-user/.plenv/cache/perl-5.26.1.tar.gz (http://www.cpan.org/authors/id/S/SH/SHAY/perl-5.26.1.tar.gz)
Downloaded http://www.cpan.org/authors/id/S/SH/SHAY/perl-5.26.1.tar.gz to /home/ec2-user/.plenv/cache/perl-5.26.1.tar.gz.
Configuring perl '5.26.1'
rm -f config.sh Policy.sh
Auto-guessed '5.26.1'
patching Configure
No patch utility found
ABORT

いろいろ調べたら 原因は、patch、gccが入ってなかったらしいです。

yumでをインストール

[ec2-user@ip-10-3-10-53 ~]$ sudo yum install patch
[ec2-user@ip-10-3-10-53 ~]$ sudo yum install gcc

無事インストールできた。

perlのsplitで空の末尾を残す場合

#CSVデータ
my $csv_data = "aaaa,bbbb,cccc,";
my @value_array  = split(/,/,$csv_data);
#↑↑場合は
#@value_array = ('aaaa','bbbb','cccc');

#splitの第3引数に-1を指定
my @value_array  = split(/,/,$csv_data,-1);
#↑↑場合は
#@value_array = ('aaaa','bbbb','cccc','');
#末尾の空白部分が配列の最後に格納される

my.cnfのパラメータの内容

MySQL5.5

パラメータ 内容
basedir MySQLバイナリのインストールディレクト
datadir データ格納先
tmpdir テンポラリディレクトリ指定
lc-messages-dir エラーメッセージが配置されているディレクト
key_buffer_size MyISAMのインデックスをキャッシュするメモリ上の領域
innodb_buffer_pool_size InnoDBのデータとインデックスをキャッシュするバッファのサイズ
innodb_log_file_size InnoDBの更新ログを記録するディスク上のファイル
innodb_log_buffer_size ログファイルのためのバッファのサイズ
innodb_file_per_table データファイルをテーブル単位で管理できる
innodb_flush_log_at_trx_commit メモリ上にあるInnoDBバッファプールがディスク上のInnoDBデータファイルにフラッシュされる
innodb_flush_method Linux固有のフラグで、OSのバッファキャッシュの効果を最小化する効果がある
innodb_additional_mem_pool_size InnoDBの内部データなどを保持するための領域
innodb_autoextend_increment InnoDB システムテーブルが容量いっぱいになったら、拡張するが、拡張する大きさを決める
innodb_lock_wait_timeout InnoDB transactionが row lock がかかった時に、待つ時間
slow-query-log スロークエリ出力
slow-query-log-file スロークエリ出力場所
long_query_time 指定した秒数以上かかったクエリを記録
max_connections 同時接続数
table_open_cache 頻繁なアクセスに対して使うデータキャッシュ
table_definition_cache 定義キャッシュに保存できるテーブル定義数
read_rnd_buffer_size キーを使用したソートで読み込まれた行がキャッシュされるバッファのサイズ
sort_buffer_size ソート 処理に利用される
read_buffer_size index無しの全体スキャン時に利用される
max_allowed_packet MySQL でクライアントからサーバに送ることができるパケットの値を設定 最大16M
query_cache_size クエリキャッシュを使用する

サブネットマスク計算 Net::Netmaskモジュール使ってみた

use utf8;
use strict;
use warnings;
use NetAddr::IP;
use Net::Netmask;

my $block = new Net::Netmask ('192.168.56.1/27');
print "block:$block"."\n"; 
#ネットワークアドレス
print "base:".$block->base()."\n"; 
#サブネットマスク
print "mask:".$block->mask()."\n";
#ホストマスク
print "hostmask:".$block->hostmask()."\n";
#ビットの数
print "bits:".$block->bits()."\n";
#サイズ取得
print "size:".$block->size()."\n";
print "maxblock:".$block->maxblock()."\n";
#ブロードキャストアドレス
print "broadcast:".$block->broadcast()."\n";
print "next:".$block->next()."\n";
print "first:".$block->first()."\n";

#IPアドレスの範囲を取得 ネットワークアドレス、ブロードキャストアドレス含む
for my $ip ($block->enumerate) {
    print "$ip\n";
}

実行結果

block:192.168.56.0/27
base:192.168.56.0
mask:255.255.255.224
hostmask:0.0.0.31
bits:27
size:32
maxblock:21
broadcast:192.168.56.31
next:192.168.56.32
first:192.168.56.0
192.168.56.0
192.168.56.1
192.168.56.2
192.168.56.3
192.168.56.4
192.168.56.5
192.168.56.6
192.168.56.7
192.168.56.8
192.168.56.9
192.168.56.10
192.168.56.11
192.168.56.12
192.168.56.13
192.168.56.14
192.168.56.15
192.168.56.16
192.168.56.17
192.168.56.18
192.168.56.19
192.168.56.20
192.168.56.21
192.168.56.22
192.168.56.23
192.168.56.24
192.168.56.25
192.168.56.26
192.168.56.27
192.168.56.28
192.168.56.29
192.168.56.30
192.168.56.31

参考URL https://metacpan.org/pod/Net::Netmask

【Linux】ファイルを削除しても全然容量が減らないときの対処法

バージョン centos 6.3

df -Th
Filesystem    Type    Size  Used Avail Use% マウント位置
/dev/mapper/yyyyy-lv_root
              ext4     50G   47G  271M 100% /
tmpfs        tmpfs    939M     0  939M   0% /dev/shm
/dev/sda1     ext4    485M   37M  423M   8% /boot
/dev/mapper/xxx_home
              ext4     45G  180M   43G   1% /home
容量の大きいファイルを探す
du / | sort -nr | head -30

1639048002  /hoge/fuga/application.log
163904803   /hoge/fuga/abc.txt
16390432    /hoge/fuga/xyz.txt

psgiで起動したときのlogがどうやら重かったみたい。

ファイル削除
rm /hoge/fuga/application.log

あれ容量の大きいファイルを削除したのに容量減らない

df -Th
Filesystem    Type    Size  Used Avail Use% マウント位置
/dev/mapper/yyyyy-lv_root
              ext4     50G   47G  271M 100% /
tmpfs        tmpfs    939M     0  939M   0% /dev/shm
/dev/sda1     ext4    485M   37M  423M   8% /boot
/dev/mapper/xxx_home
              ext4     45G  180M   43G   1% /home

lsofで使用中のプロセスの調査

lsof | grep .log
rsyslogd   1229      root  cwd   unknown                                        /proc/1229/cwd (readlink: Permission denied)
rsyslogd   1229      root  rtd   unknown                                        /proc/1229/root (readlink: Permissiondenied)
rsyslogd   1229      root  txt   unknown                                        /proc/1229/exe (readlink: Permission denied)
rsyslogd   1229      root NOFD                                                  /proc/1229/fd (opendir: Permission denied)
/www  12341  test    2w      REG              253,0 28740161536 2755540   /hoge/fuga/application.log (deleted)
/www  12341  test    5w      REG              253,0    31453184 2771021      /hoge/fuga/application.log (deleted)
/www  12341  test    6w      REG              253,0  5201436672 2771023 /hoge/fuga/application.log (deleted)
/www  12341  test    7w      REG              253,0  5201436672 2771023 /hoge/fuga/application.log (deleted)
/www  12341  test   10w      REG              253,0  5201436672 2771023 /hoge/fuga/application.log (deleted)
/www  12341  test   13w      REG              253,0  5201436672 2771023 /hoge/fuga/application.log (deleted)
/www  12341  test   14w      REG              253,0  5201436672 2771023 /hoge/fuga/application.log (deleted)
/www  12341  test   15w      REG              253,0  5201436672 2771023 /hoge/fuga/application.log (deleted)
/www  12341  test   16w      REG              253,0  5201436672 2771023 /hoge/fuga/application.log (deleted)

どうやら12341で使用中だったみたい

対象のプロセス削除
kill -9 12341

開放されたみたいで空き容量が増えた

df -Th
Filesystem    Type    Size  Used Avail Use% マウント位置
/dev/mapper/yyyyy-lv_root
              ext4     50G   14G  34G 29% /
tmpfs        tmpfs    939M     0  939M   0% /dev/shm
/dev/sda1     ext4    485M   37M  423M   8% /boot
/dev/mapper/xxx_home
              ext4     45G  180M   43G   1% /home

良かった