Neues in der Kategorie Linux

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

 

Memory::Usage von David O'Neill zeigt den aktuellen Speicherbedarf eines Programms aus der Sicht des Betriebssystems an. Da hierzu die Datei /proc/$pid/statm genutzt wird, funktioniert Memory::Usage derzeit nur auf Betriebssystemen, welche diese Datei zur Verfügung stellen, z.B. Linux.

Memory::Usage untergliedert die Speichernutzung wie folgt:

  • virtual memory size (vzs)
  • resident set size (rss)
  • shared memory size (shared)
  • text (aka code or exe) size (code)
  • data and stack size (data)

 

Beispiel

Im diesem Beispiel wird der Speicherverbrauch vor und nach dem Aufbau einer speicherhungrigen Datenstruktur mit record() gemessen. Anschließend wird ein Report auf den Standardfehlerkanal STDERR via dump() ausgegeben.

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

use Memory::Usage;

my $mu = Memory::Usage->new();

my %hash = ();

# Record amount of memory used by current process
$mu->record('starting work');

# Use some memory
for ( 1 .. 10_000_000 ) {
	$hash{ $_ } = 1;
}

# Record amount in use afterwards
$mu->record('finished work');

# Spit out a report
$mu->dump();

exit();

Das Programm liefert folgende Ausgabe:

time    vsz (  diff)    rss (  diff) shared (  diff)   code (  diff)   data (  diff)
    0   5304 (  5304)   2072 (  2072)   1652 (  1652)   1244 (  1244)    692 (   692) starting work
   37  834004 ( 828700) 830784 ( 828712)   1676 (    24)   1244 (     0)  829392 ( 828700) finished work

Die Laufzeit wird in Sekunden angeben, alle Speicherangaben in Kilobytes. Memory::Usage rechnet intern pages in Kilobyte um (4 kb je page).

 

Siehe auch:

Die neue Modern Perl Ubuntu 10.10 Desktop Live DVD ist fertig und liegt zum Download als ISO-Image bereit.

U10-10-2-klein.png

Features

  • Perl 5.10.1 und mehr als 2.600 CPAN Module vorinstalliert
  • Modern Perl Module wie Catalyst, DBIx::Class und Moose bereits installiert
  • Zahlreiche Editoren wie Padre, Eclipse mit EPIC-Plugin, Vim, Emacs, Geany, jEdit
  • Zahlreiche Bibliotheken und Header-Dateien bereits installiert - vereinfacht die Installation weiterer CPAN-Module erheblich
  • Softwareversionierung cvs, svn, hg, git und bzr inkl. graphischer Tools bereits installiert
  • In Perl geschriebene Bildbearbeitungssoftware: Shutter
  • Weitere Software kann mit den Standardwerkzeugen apt-get, Synaptic oder dem Software-Center einfach installiert werden.

Modern Perl und Ubuntu einfach ausprobieren

Das ISO-Image (1,8 GB) kann einfach mit VirtualBox oder VMware gestartet werden.

U10-10-1-klein.png

Alternativ lässt sich das ISO-Image auch auf eine DVD brennen. Anschließend den Rechner von der DVD booten und das Ganze einfach ausprobieren. Da es sich um eine Live-DVD handelt, wird nichts auf dem Rechner installiert.

Editoren und Versionskontrolle für Perl-Entwickler (m/w)

U10-10-3-klein.png

Padre

Padre wird in der Version 0.70 ausgeliefert, die leider den ein oder anderen Bug hat und sofort abstürzt. Hier hilft nur ein manuelles Update auf Version 0.72 oder neuer.

Kephra

Wer manuell updated, kann bei dieser Gelegenheit auch Kephra, den etwas anderen Editor, installieren, der es nicht auf die DVD geschafft hat, da noch keine Ubuntu/Debian Packages vorliegen.

Shutter - Shutter - Feature-rich Screenshot Tool

U10-10-4-klein.png

Shutter, eine in Perl geschriebene Software für Screenshots, bietet umfangreiche Bearbeitungsmöglichkeiten.

Siehe auch:

Über dieses Archiv

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

Kryptographie ist die vorherige Kategorie.

LWP ist die nächste Kategorie.

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

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.