Perl入門ゼミ

テキスト処理、Linuxサーバー管理、Web開発ならPerl
  1. Perl
  2. 標準関数
  3. here

stat関数 - ファイルの詳細な情報を取得する

ファイルの詳細な情報を取得するにはstat関数を使用します。

my @infos = stat $file;

以下がstatで取得できる情報です。

0 ファイルシステムのデバイス番号
1 iノード番号
2 ファイルモード
3 このファイルへのハードリンク数
4 ファイルの所有者のユーザID( 数字 )
5 ファイルの所有者のグループID( 数字 )
6 デバイス識別子
7 ファイルのサイズ( バイト )
8 最終アクセスしてからの経過したエポックからの秒数
9 最終更新してからの経過したエポックからの秒数
10 iノードが変更されてから経過したエポック時からの秒数
11 ファイルの読み書きに適切だと考えられるブロックサイズ
12 割り当てられている実際のブロック数

サンプル

stat関数を使ってファイルの詳細な情報を取得するサンプルです。

use strict;
use warnings;

# ファイルの詳細な情報を取得する stat

my $file = 'a.txt';
my @stat_inf = stat $file;

# statの解説の作成
my @stat_exp = ( 
  '0  dev      ファイルシステムのデバイス番号',
  '1  ino      iノード番号',
  '2  mode     ファイルモード',
  '3  nlink    このファイルへのハードリンク数',
  '4  uid      ファイルの所有者のユーザID( 数字 )',
  '5  gid      ファイルの所有者のグループID( 数字 )',
  '6  rdev     デバイス識別子',
  '7  size     ファイルのサイズ( バイト )',
  '8  atime    最終アクセスしてからの経過したエポック時からの秒数',
  '9  mtime    最終更新してからの経過したエポック時からの秒数',
  '10 ctime    iノードが変更されてから経過したエポック時からの秒数',
  '11 blksize  ファイルの読み書きに適切だと考えられるブロックサイズ',
  '12 blocks   割り当てられている実際のブロック数',
);

if (@stat_inf) {
  for my $i (0 .. 12) {
    # statの情報と解説を結びつけて、出力。
    printf("%-15s%s\n", $stat_inf[$i], $stat_exp[$i]);
  }                                              
}
else { print "stat $file は失敗しました。\n" }

簡単な補則

  • デバイス番号:ファイルシステムは、デバイス(ハードディスク)に関連づけられて、構築されます。そのハードディスクを識別する番号です( たぶん )。 → ファイルシステム
  • iノード: Unix系OSにおいて、ファイルを管理するための識別子のようなものです。→ iノード
  • ファイルモード: Unixにおけるファイルタイプパーミッションを表す値です。→
  • ハードリンク: Unix系のOSでは、ファイルに別名をつけることができます。ハードリンク数とは、このファイルを指す別名の総数のことです。→ ハードリンク
  • Perlとはテキスト処理の記述性とパフォーマンスに優れ、正規表現が言語に組み込まれているプログラミング言語です。
  • Linuxサーバーでのフィルタリングプログラム、複数行の文字列を処理、ファイル内容の検索・置換などが得意
  • Perlはgitopensslなど広く普及したUnix/Linuxミドルウェアの補助ツールとして採用実績あり。後方互換性とポータビリティの高さがひとつの理由と推測。
  • 大量のテキストを扱うWeb開発も得意。ロングテールSEOを意識したWebサイト、アドテクやソーシャルゲームでの50ms以内のJSONの生成など。