Perl/getDiskUsage

  • Search
  • Home
  • All
  • Files
  • History
  • Latest Changes

Perl

  • Amazon
  • EPSファイル作成
  • ApacheErrorLogFormatter
  • AutoHashedFuncs
  • CGI.pm
  • compareXML
  • CPAN
  • createUniqKeyList
  • DBIx-Custom
  • DBIx-NamedParams
  • decodeQuotedPrintable
  • EscapeSlash
  • GD
  • getDiskUsage
  • getHostName
  • GMTtoLocalTime
  • GoogleMapAPI
  • HostToIP
  • HttpHeader
  • HTTPアクセス
  • initConsole
  • IPアドレス範囲をマスク表現に変換
  • ListDownloader
  • MailForm
  • makeCodeHighlightKeyword
  • MatchList
  • MSSQL_ImpExp
  • MySQL-BIT
  • NetWatcher
  • nicoget
  • Object-Simple
  • packBit
  • Perl-Tidy
  • readXSV
  • SHA1
  • SortUnicode
  • updateEarth
  • W03_FOMA
  • WhoisGW
  • Windows_DLL_Call
  • XML-Simple
  • XML-XPath
  • YAML
  • オブジェクト指向プログラミング
  • キーワード置換
  • ディレクトリの再帰処理
  • ファイルの一括処理
  • ファイル名正規化
  • 全角から半角へ変換
  • 参照
  • 多次元配列
  • 文字コード
  • 日経ITpro
  • 曜日の計算(Zellerの公式)
  • 未定義コード置換
  • 特殊文字のエスケープ
  • 環境変数
  • 自動フラッシュ(バッファリング)の制御
  • 行末改行の削除

Table of Contents
  • 概要
  • Filesys::Df 版
    • ソース
  • 自前版
    • ソース
  • リンク

概要

  • 指定したパスを含むパーティションの使用容量(%)を調べる。

Filesys::Df 版

  • 使用パーセントは「per」で得られる。

ソース

  • getDiskUsage.zip
    #!/usr/bin/perl
    # 指定したパスを含むパーティションの使用状況を調べる。
    
    use strict;
    use warnings;
    use utf8;
    use Filesys::Df;
    use Number::Format qw(:subs);
    
    my $path = shift or die("usage: getDiskUsage <path>\n");
    my $refDf = df($path, 1) or die("$!\n");
    foreach my $key (sort(keys(%{$refDf}))){
    	print $key . ":\t" . format_bytes($refDf->{$key}) . "\n";
    }
    
    # EOF

自前版

  • OSコマンド・インジェクション対策はしてないので、安全なパスのみ渡すようにすること。
  • エラー時には「-1」が戻る。

ソース

sub getDiskUsage
{
	my $path = shift || '/';
	my $result = `df -h $path`;
	$result =~ /(\d+)%\s+\//;
	return $1 || -1;
}

リンク

  • CPAN:Filesys-Df
  • CPAN:Filesys-DfPortable
  • CPAN:Number-Format

  • IPA セキュア・プログラミング講座:Webアプリケーション編

    • 第6章 入力対策:コマンド注入攻撃対策
  • 安全なウェブサイトの作り方:IPA

  • Linuxコマンド集 - 【 df 】 ディスク・ドライブの使用量を表示する:ITpro

  • Linuxコマンド集 - 【 du 】 ディレクトリ内のファイル容量を表示する:ITpro

Home

Last edited by TakeAsh, 2018-09-01 01:15:27