Perlを使ったちょっとしたファイルチェックスクリプト
Linuxで環境構築をする際に、権限やパーミッションのチェックをする事が多く、
地味に面倒だったので、簡単なチェックツールを作ってみました。
構成管理ツールが使えない場面などで役に立つかも?
スクリプト
Perlを使って書いてみました。
#!/usr/bin/perl -w use strict; use warnings; use Fcntl; use Fcntl qw ( :mode ); use Test::More qw ( no_plan ); my $filelist = "/home/myuser/filelist.txt"; sysopen ( my $fh, $filelist, O_RDONLY ) or die "Couldn't open $filelist : $!"; while ( my $line = readline $fh ){ chomp ( $line ); my @columns = split ( /,/, $line ); my $check_name = $columns[0]; my $check_is_file = $columns[1]; my $check_is_dir = $columns[2]; my $check_perm = $columns[3]; my $check_uid = $columns[4]; my $check_gid = $columns[5]; my $mode = ( stat ( $check_name ) )[2]; my $perm = sprintf "%03o", S_IMODE ( $mode ); my $uid = ( stat ( $check_name ) )[4]; my $gid = ( stat ( $check_name ) )[5]; is( S_ISREG ( $mode ), $check_is_file, "$check_name : file check" ); is( S_ISDIR ( $mode ), $check_is_dir, "$check_name : directory check" ); is( $perm, $check_perm, "$check_name : permission check" ); is( $uid, $check_uid, "$check_name : uid check" ); is( $gid, $check_gid, "$check_name : gid check" ); } close ( $fh );
設定ファイル
チェック用の設定ファイル例です。
左から順に、ファイルパス、ファイルチェック、ディレクトリチェック、パーミッション、uid、gidを指定します。
ファイルの場合
/home/myuser/test.txt,1,,644,1003,1003
ディレクトリの場合
/home/myuser,,1,700,1003,1003
チェック結果
以下のチェックを実行します。
ちなみに1,2はどちらかにフラグ(値:1)を設定します。
成功した場合はこんな感じです。
# perl check.pl ok 1 - /home/myuser/test.txt : file check ok 2 - /home/myuser/test.txt : directory check ok 3 - /home/myuser/test.txt : permission check ok 4 - /home/myuser/test.txt : uid check ok 5 - /home/myuser/test.txt : gid check ok 6 - /home/myuser : file check ok 7 - /home/myuser : directory check ok 8 - /home/myuser : permission check ok 9 - /home/myuser : uid check ok 10 - /home/myuser : gid check 1..10
失敗した場合はこんな感じです。
# perl check.pl ok 1 - /home/myuser/test.txt : file check ok 2 - /home/myuser/test.txt : directory check ok 3 - /home/myuser/test.txt : permission check not ok 4 - /home/myuser/test.txt : uid check # Failed test '/home/myuser/test.txt : uid check' # at check.pl line 37. # got: '0' # expected: '1003' not ok 5 - /home/myuser/test.txt : gid check # Failed test '/home/myuser/test.txt : gid check' # at check.pl line 38. # got: '0' # expected: '1003' ok 6 - /home/myuser : file check ok 7 - /home/myuser : directory check ok 8 - /home/myuser : permission check ok 9 - /home/myuser : uid check ok 10 - /home/myuser : gid check 1..10 # Looks like you failed 2 tests of 10.
本来所有者と所有グループのIDが1003の所、root(ID 0)の為、エラーになっています。
使えそうなら使ってみていただけると嬉しいです。
今日はこんなところで。