#!/usr/bin/perl use strict; use warnings; use Data::Dumper; $Data::Dumper::Sortkeys = 1; # Definition Sub Routinen ##################################################################### sub get_cpu_info { my ($refSi) = @_; my $infile = '/proc/cpuinfo'; open my $fh, '<', $infile or die "open(r, $infile) failed: $!\n"; my @relevant_lines = grep( /(^processor|^cpu MHz)/, <$fh> ); close $fh; my $current_cpu; foreach my $info (@relevant_lines) { if ($info =~ /processor\s*:\s*(\d+)/) { $current_cpu = $1; } elsif ($info =~ /cpu MHz\s*:\s+(\S+)/) { $refSi->{'Central Processing Units'}->{$current_cpu} = $1; } } } sub get_mem_info { my ($refSi) = @_; my $infile = '/proc/meminfo'; open my $fh, '<', $infile or die "open(r, $infile) failed: $!\n"; my @relevant_lines = grep( /(^MemTotal|^MemFree|^Buffers|^Cached)/, <$fh> ); close $fh; foreach my $info (@relevant_lines) { if ( $info =~ /^(\w+):\s+(\d+)\s+(\w+)$/) { my $name = $1; my $amount = $2; my $unit = $3; $refSi->{'Memory Information'}->{$name} = "$amount $unit"; } } } sub get_part_info { my ($refSi) = @_; my $infile = '/proc/partitions'; open my $fh, '<', $infile or die "open(r, $infile) failed: $!\n"; my $regex = qr/(\d+)\s+(\d+)\s+(\d+)\s+(\w+)/; while ( my $line = <$fh> ) { if ( my ($major, $minor, $block, $name ) = $line =~ $regex ) { $refSi->{'Partition Info'}->{$name} = $block; } } close $fh; } # Hauptprogramm ##################################################################### my %SysInfo; my $output_file = './sysinfo.txt'; get_cpu_info(\%SysInfo); get_mem_info(\%SysInfo); get_part_info(\%SysInfo); # Debug print Dumper(\%SysInfo); open my $out_fh, '>', $output_file or die "open(w, $output_file) failed: $!\n"; foreach my $section (sort keys %SysInfo) { printf $out_fh "=== %s ===\n", $section; foreach my $name ( sort keys %{ $SysInfo{$section} } ) { printf $out_fh "%s\t==>\t%s\n", $name, $SysInfo{$section}->{$name}; } } close $out_fh; exit 0;