Neues in der Kategorie Windows

Vorschaubild für medium_132244826.jpg

Der freie Speicherplatz auf Festplatten bzw. Dateisystemen kann sowohl mit Filesys::Df als auch mit Filesys::DfPortable von Ian Guthrie einfach ermittelt werden.

Filesys::DfPortable funktioniert unter Linux und Windows, während Filesys::Df nur mit unixoiden Betriebssystemen funktioniert, dafür aber ein bereits geöffnetes Datei Handle als Argument verarbeiten kann.

 

Filesys::Df

Die automatisch importierte Funktion df liefert eine Referenz auf einen Hash mit Informationen über die freien und belegten Blöcke des Dateisystems zurück.

Da nicht alle Dateisysteme Inodes unterstützen, ist es erforderlich, explizit zu fragen, ob Informationen zu Indodes vorliegen.

#!/usr/bin/perl
use strict;
use warnings;

use Filesys::Df;

my $df = df("/tmp");    # Default output is 1K blocks

if ( defined($df) ) {
    print "Total 1k blocks:             $df->{blocks}\n";
    print "Total 1k blocks free:        $df->{bfree}\n";
    print "Total 1k blocks avail to me: $df->{bavail}\n";
    print "Total 1k blocks used:        $df->{used}\n";
    print "Percent full:                $df->{per}\n";

    # Only filesystems that support inodes
    if ( exists( $df->{files} ) ) {
        print "Total inodes:                $df->{files}\n";
        print "Total inodes free:           $df->{ffree}\n";
        print "Inode percent full:          $df->{fper}\n";
    }
}
else {
    warn "Woops - something went wrong.\n";
}

Das Programm erzeugt z.B. folgende Ausgabe:

Total 1k blocks:             423301588
Total 1k blocks free:        230537836
Total 1k blocks avail to me: 209035272
Total 1k blocks used:        192763752
Percent full:                48
Total inodes:                26886144
Total inodes free:           26093840
Inode percent full:          3

Die Blöckgröße lässt sich über den zweiten Parameter der Funktion df() angeben. Wer lieber in Bytes rechnet, verwendet einfach die Blockgröße 1.

#!/usr/bin/perl
use strict;
use warnings;

use Filesys::Df;

my $df = df("/tmp", 1);    # output is bytes

if ( defined($df) ) {
    print "Total bytes:              $df->{blocks}\n";
    print "Total bytes free:         $df->{bfree}\n";
    print "Total bytes avail to me:  $df->{bavail}\n";
    print "Total bytes used:         $df->{used}\n";
    print "Percent full:             $df->{per}%\n";

    # Only for filesystems that support inodes
    if ( exists( $df->{files} ) ) {
        print "Total inodes:             $df->{files}\n";
        print "Total inodes free:        $df->{ffree}\n";
        print "Inode percent full:       $df->{fper}\n";
    }
}
else {
    warn "Woops - something went wrong.\n";
}

Das Programm erzeugt z.B. folgende Ausgabe:

Total bytes:              433460826112
Total bytes free:         236072210432
Total bytes avail to me:  214053584896
Total bytes used:         197388615680
Percent full:             48%
Total inodes:             26886144
Total inodes free:        26093880
Inode percent full:

Filesys::Df kann auch Informationen über ein Dateisystem an Hand eines bereits geöffneten Dateihandles ermitteln. Das ist recht praktisch, wenn man wissen möchte, wie viel Platz für das gerade laufende Perl Programm ($0) noch zur Verfügung steht.

#!/usr/bin/perl
use strict;
use warnings;

use Filesys::Df;

open( ME, "<", $0 ) or die "Can't open myself $!";

my $df = df( \*ME, 1 );    # Get information for filesystem at file

if ( defined($df) ) {

    print "Total bytes:              $df->{blocks}\n";
    print "Total bytes free:         $df->{bfree}\n";
    print "Total bytes avail to me:  $df->{bavail}\n";
    print "Total bytes used:         $df->{used}\n";
    print "Percent full:             $df->{per}%\n";

    # Only for filesystems that support inodes
    if ( exists( $df->{files} ) ) {
        print "Total inodes:             $df->{files}\n";
        print "Total inodes free:        $df->{ffree}\n";
        print "Inode percent full:       $df->{fper}\n";
    }
}
else {
    warn "Woops - something went wrong.\n";
}

Ausgabe wie oben.

 

Filesys::DfPortable

Filesys::DfPortable funktioniert, wie bereits gesagt, unter Linux und Windows und ist Filesys::Df ziemlich ähnlich.

Die automatisch importierte Funktion dfportable liefert eine Referenz auf einen Hash mit Informationen über die freien und belegten Blöcke des Dateisystems zurück.

Die Blöckgröße lässt sich über den zweiten Parameter der Funktion dfportable() angeben. Default Blockgröße ist dieses Mal 1, also Ausgabe in Bytes.

#!/usr/bin/perl
use strict;
use warnings;

use Filesys::DfPortable;

my $dfp = dfportable("C:", 1024); # Display output in 1K blocks

if ( defined($dfp) ) {
   print"Total 1k blocks:             $dfp->{blocks}\n";
   print"Total 1k blocks free:        $dfp->{bfree}\n";
   print"Total 1k blocks avail to me: $dfp->{bavail}\n";
   print"Total 1k blocks used:        $dfp->{bused}\n";
   print"Percent full:                $dfp->{per}\n";

   # Only filesystems that support inodes
   if ( exists( $dfp->{files} ) ) {
        print "Total inodes:                $dfp->{files}\n";
        print "Total inodes free:           $dfp->{ffree}\n";
        print "Inode percent full:          $dfp->{fper}\n";
   }

} else {
    warn "Woops - something went wrong.\n";
}

Das Programm erzeugt z.B. folgende Ausgabe:

Total 1k blocks:             26109948
Total 1k blocks free:        4299136
Total 1k blocks avail to me: 4299136
Total 1k blocks used:        21810812
Percent full:                84

Statt des Laufwerksbuchstabens können auch UNC Pfade wie '\\\\Server\\Freigabe' verwendet werden.

Filesys::DfPortable unterstützt, wie Filesys::Df, Inodes - das ist meiner Ansicht nach unter Portabilitätsaspekten etwas sinnfrei, da Windows Inodes erst gar unterstützt.

Wer unter Windows einfach nur wissen möchte, wieviel Speicherplatz noch verfügbar ist, und daher nicht alle Bells and whistles von Win32::DriveInfo benötigt, gewinnt mit Filesys::DfPortable ein wenig Portabilität.

 

Siehe auch

 

Bildnachweis

photo credit: Uwe Hermann via photopin cc

 

make, ein Tool, das zum Zusammenbauen von Software aus verschiedenen Dateien genutzt wird, steht unter Windows standardmäßig nicht zur Verfügung. Stattdessen gibt es von Microsoft das kostenlose Tool nmake, das im Wesentlichen wie make funktioniert.

Achtung: nmake ist nur ein make-Programm für Windows und kein C-Compiler. Daher können mit nmake keine XS-Module übersetzt werden. Dazu benötigt man einen C-Compiler.

nmake installieren

Schritt 1: Download

ftp://ftp.microsoft.com/softlib/mslfiles/nmake15.exe

Schritt 2: nmake15.exe auspacken

nmake15.exe ist ein selbstextrahierendes Archiv, welches drei Dateien enthält:

  • nmake.exe
  • nmake.err
  • readme.txt

Schritt 3: nmake Dateien in ein geeignetes Verzeichnis verschieben

Die drei Dateien in das Perl-Bin Verzeichnis verschieben, meist C:\perl\bin\.

Fertig.

CPAN Module installieren

Die übliche Vier-Befehle-Sequenz

perl Makefile.PL
make
make test
make install

wird nun zu

perl Makefile.PL
nmake
nmake test
nmake install

Beispiel

Das gewünschte CPAN Modul downloaden, hier CGI.pm Version 3.42, und mit 7-Zip entpacken, dann in der Windows Eingabe-Aufforderung (cmd.exe) in das Verzeichnis wechseln, in welches das Modul ausgepackt wurde.

C:\Dokumente und Einstellungen\tf\Eigene Dateien\CGI.pm-3.42>perl Makefile.PL
Set up gcc environment - 3.4.4 (cygming special, gdc 0.12, using dmd 0.125)
Checking if your kit is complete...
Looks good
Writing Makefile for CGI

C:\Dokumente und Einstellungen\tf\Eigene Dateien\CGI.pm-3.42>nmake

Microsoft (R) Program Maintenance Utility   Version 1.50
Copyright (c) Microsoft Corp 1988-94. All rights reserved.

cp CGI/Carp.pm blib\lib\CGI\Carp.pm
cp CGI/Push.pm blib\lib\CGI\Push.pm
cp CGI/Switch.pm blib\lib\CGI\Switch.pm
cp CGI/Fast.pm blib\lib\CGI\Fast.pm
cp CGI/Util.pm blib\lib\CGI\Util.pm
cp CGI/Apache.pm blib\lib\CGI\Apache.pm
cp CGI.pm blib\lib\CGI.pm
cp CGI/Pretty.pm blib\lib\CGI\Pretty.pm
cp CGI/Cookie.pm blib\lib\CGI\Cookie.pm

C:\Dokumente und Einstellungen\tf\Eigene Dateien\CGI.pm-3.42>nmake test

Microsoft (R) Program Maintenance Utility   Version 1.50
Copyright (c) Microsoft Corp 1988-94. All rights reserved.

C:\Perl\bin\perl.exe "-MExtUtils::Command::MM" "-e" "test_harness(0, 'blib\lib', blib\arch')" t/*.t
t/apache................ok
t/can...................ok
t/carp..................ok
t/cookie................ok
t/fast..................ok
        7/7 skipped: various reasons
t/form..................ok
t/function..............ok
        2/32 skipped: various reasons
t/html..................ok
t/no_tabindex...........ok
t/pretty................ok
t/push..................ok
        1/12 skipped: various reasons
t/request...............ok
        3/34 skipped: various reasons
t/start_end_asterisk....ok
t/start_end_end.........ok
t/start_end_start.......ok
t/switch................ok
t/upload................ok
t/uploadInfo............ok
t/util-58...............ok
t/util..................ok
All tests successful, 13 subtests skipped.
Files=20, Tests=521,  5 wallclock secs ( 0.00 cusr +  0.00 csys =  0.00 CPU)

C:\Dokumente und Einstellungen\tf\Eigene Dateien\CGI.pm-3.42>nmake install

Microsoft (R) Program Maintenance Utility   Version 1.50
Copyright (c) Microsoft Corp 1988-94. All rights reserved.

Installing C:\Perl\html\lib\CGI.html
Installing C:\Perl\html\lib\CGI\Carp.html
Installing C:\Perl\html\lib\CGI\Cookie.html
Installing C:\Perl\html\lib\CGI\Fast.html
Installing C:\Perl\html\lib\CGI\Pretty.html
Installing C:\Perl\html\lib\CGI\Push.html
Installing C:\Perl\html\lib\CGI\Util.html
Installing C:\Perl\lib\CGI.pm
Installing C:\Perl\lib\CGI\Apache.pm
Installing C:\Perl\lib\CGI\Carp.pm
Installing C:\Perl\lib\CGI\Cookie.pm
Installing C:\Perl\lib\CGI\Fast.pm
Installing C:\Perl\lib\CGI\Pretty.pm
Installing C:\Perl\lib\CGI\Push.pm
Installing C:\Perl\lib\CGI\Switch.pm
Installing C:\Perl\lib\CGI\Util.pm
Appending installation info to C:\Perl\lib/perllocal.pod

C:\Dokumente und Einstellungen\tf\Eigene Dateien\CGI.pm-3.42>
perl -MCGI -e "print $CGI::VERSION"
3.42

That's it.

Siehe auch

ExelPerl von Martin Fabiani (strat) kann via Win32::OLE Excel-Dateien direkt editieren (lesen und schreiben).

Das Tool ist somit zwar auf Windows-Betriebssysteme mit installiertem Excel beschränkt, allerdings steht der volle Funktionsumfang von Excel zur Verfügung.

Beispiele

Wie bei perl -ane, wird eine while-Schleife um das Kommando gelegt. Das Kommando wird für jede Zeile ausgeführt, wobei die einzelnen Werte der Zeile im Array @F zur Verfügung gestellt werden. Da es sich dabei um ein tied Array handelt, werden Änderungen an einem Element von @F auch direkt in der Excel-Datei geändert, z.B. die Spalte A in Großbuchstaben ändern:

excelPerl -ane "$F[0] = uc $F[0]" -f datei.xls

Zusätzlich steht das Array @C zur Verfügung, das die Win32::OLE-Objekte der einzelnen Zellen enthält und worüber der Zugriff auf die gesamte Funktionalität von Excel möglich ist, z.B. die Spalte B auf die Schriftart "Courier New" setzen:

excelPerl -ane "$C[1]->{Font}->{Name} = 'Courier New'" -f datei.xls

Siehe auch

Über dieses Archiv

Diese Seite enthält aktuelle Einträge der Kategorie Windows.

Talks ist die vorherige Kategorie.

Aktuelle Einträge finden Sie auf der Startseite, alle Einträge in den Archiven.

Fachzeitschriften

Blog Roll

Powered by

Powered by Movable Type 5.2.10

Creative Commons-Lizenz

Creative Commons License
Dieses Weblog steht unter einer Creative Commons-Lizenz.