Welcome to HBH! If you had an account on hellboundhacker.org you will need to reset your password using the Lost Password system before you will be able to login.

Linux System Information Tool (lsit) - Perl Code Bank


Linux System Information Tool (lsit)
Get informations for a Linux system. Log all informations in a file: perl lsit -a --nocolor > info Have fun!
                #!/usr/bin/perl

# Coded by Trizen
# http://trizen.go.ro

$appname = 'lsit';
$app_ver = '0.1.2';
$z = "\e[0m";
for ($nr = 0; $nr <= $#ARGV; ++$nr) {
    push @argvs, $ARGV[$nr];
    if ($ARGV[$nr] eq '--lines') {
        $lines = 1;
    }
    if ($ARGV[$nr] =~ /-(H|ha)/) {
        $lshal = 1;
    }
    if ($ARGV[$nr] =~ /-d/) {
        $dmesg = 1;
    }
    if ($ARGV[$nr] =~ /-b/ and not $ARGV[$nr] =~ /^--bl/) {
        $bashset = 1;
    }
    if ($ARGV[$nr] =~ /-c/ and not $ARGV[$nr] =~ /^--cy/) {
        $lscpu = 1;
    }
    if ($ARGV[$nr] =~ /-p/ and not $ARGV[$nr] =~ /^--pu/) {
        $lspci = 1;
    }
    if ($ARGV[$nr] =~ /-u/) {
        $lsusb = 1;
    }
    if ($ARGV[$nr] =~ /-m/) {
        $lsmod = 1;
    }
    if ($ARGV[$nr] =~ /-o/) {
        $others = 1;
    }
    if ($ARGV[$nr] =~ /-a/) {
        $others = 1;
        $lsusb = 1;
        $dmesg = 1;
        $lspci = 1;
        $lsmod = 1;
        $lscpu = 1;
        $lshal = 1;
        $bashset = 1;
    }
}
@colors = "
\e[0;34m --blue
\e[0;31m --red
\e[0;32m --green
\e[0;33m --yellow
\e[0;30m --black
\e[0;35m --purple
\e[0;36m --cyan
\e[0;37m --white
";
foreach $color (@colors) {
    next if $c1;
    foreach $arg (@argvs) {
        next if $c1;
        if ($color =~ /(.+) $arg/) {
            $c1 = $1;
            $c2 = $c1;
            $c2 =~ s/\[0/[1/;
        }
    }
}
unless ($c1) {
    $c1 = "\e[0;31m";
    $c2 = $c1;
    $c2 =~ s/\[0/[1/;
}
$argvs = join('', @argvs);
if ($argvs) {
    if ($argvs =~ /[-]+nocolor/) {
        $c1 = '';
        $c2 = '';
        $z = '';
    }
}
if ($ARGV[0]) {
    if ($ARGV[0] =~ /^[-]+(h|help)$/) {
        &help;
    }
}
else {
    &help;
}
sub help {
    die "
${c2}Appname:$z $appname
${c2}Version:$z $app_ver
    
${c2}Usage:$z $0 [...]

${c2}Colors:$z
\t\e[1;34m--blue$z
\t\e[1;31m--red$z
\t\e[1;32m--green$z
\t\e[1;33m--yellow$z
\t\e[1;35m--purple$z
\t\e[1;36m--cyan$z
\t\e[1;37m--white$z
\t\e[1;30m--black$z
\t
${c2}Options:$z
\t$c2-a$z   :  all
\t$c2-b$z   :  bash settings
\t$c2-c$z   :  lscpu output
\t$c2-d$z   :  dmesg output
\t$c2-H$z   :  lshal output
\t$c2-m$z   :  lsmod output
\t$c2-p$z   :  lspci output
\t$c2-u$z   :  lsusb output
\t$c2-o$z   :  other informations

${c2}Other options:$z
\t$c2--lines$z        :  with '-' lines
\t$c2--nocolor$z      :  no color for text
\t$c2--screenshot$z   :  take a screenshot (with scrot)

";
}
(%wm) = ('awesome', 'Awesome', 'beryl', 'Beryl', 'blackbox', 'Blackbox', 
'compiz', 'Compiz', 'dwm', 'DWM', 'enlightenment', 'Enlightenment', 
'fluxbox', 'Fluxbox', 'fvwm', 'FVWM', 'i3', 'i3', 'weewm', 'WeeWM', 
'sawfish', 'Sawfish', 'qlwm', 'qLWM', 'echinus', 'Echinus', 'w9wm', 'w9wm', 
'hackedbox', 'Hackedbox', 'scrotwm', 'Scrotwm', 'twm', 'twm', 'vtwm', 'VtWM', 
'9wm', '9wm', 'swm', 'swm', 'flwm', 'FlWM', 'jwm', 'JWM', 'icewm', 'IceWM', 
'musca', 'Musca', 'openbox', 'Openbox', 'pekwm', 'PekWM', 
'ratpoison', 'ratpoison', 'scrotwm', 'ScrotWM', 'wmaker', 'WMaker', 
'wmfs', 'Wmfs', 'wmii', 'wmii', 'xmonad', 'xmonad');
if ($lines) {
    print '-' x 80 . "\n";
}
print "\t" x 2 . '*' x 40 . "\n";
print "\t" x 2 . "     ${c2}Linux System Information Tool$z\n";
print "\t" x 2 . '*' x 40 . "\n";
if ($lshal) {
    @lshal = `lshal`;
    if (@lshal) {
        push @strings, 'title = [HAL devices]';
    }
    foreach $line (@lshal) {
        $line =~ s/ = /: /;
        $line =~ s/^[\s]+//;
        next if $line =~ /0x[\w]+|freedesktop|false|true|''/;
        push @strings, "$line";
    }
}
if ($dmesg) {
    @dmesg = `dmesg`;
    $lastline = '';
    if (@dmesg) {
        push @strings, 'title = [Dmesg]';
    }
    foreach $line (@dmesg) {
        next if $line =~ /\.\.\.|0x[\w]+|\*[\d]+|fff/;
        $line =~ s/^[\s]+//;
        next unless $line;
        next if $line eq $lastline;
        push @strings, $line;
        $lastline = $line;
    }
}
if ($lspci) {
    @lspci = `lspci`;
    if (@lspci) {
        push @strings, 'title = [PCI buses and devices]';
    }
    foreach $line (@lspci) {
        chomp $line;
        $line =~ s/^([\d\.\:]*)(.?)([\d\.\:]*) //g;
        push @strings, $line;
    }
}
if ($lsusb) {
    @lsusb = `lsusb`;
    if (@lsusb) {
        push @strings, 'title = [USB Ports]';
    }
    foreach $line (@lsusb) {
        chomp $line;
        push @strings, $line;
    }
}
if ($lsmod) {
    @lsmod = `lsmod`;
    if (@lsmod) {
        push @strings, 'title = [Kernel Modules]';
    }
    foreach $line (@lsmod) {
        chomp $line;
        if ($line =~ /([^\s]+)[\s]*[\d]+[\s]*(.+)/) {
            $name = $1;
            $mods = $2;
            next if $mods eq '0 ';
            push @strings, "$name:$mods";
        }
    }
}
if ($lscpu) {
    @lscpu = `lscpu`;
    $lscpu = join('', @lscpu);
    unless ($lscpu) {
        $lscpu = '';
    }
    open FILE, '/proc/cpuinfo';
    while (defined($_ = <FILE>)) {
        if ($_ =~ /([^:]+):(.+)/) {
            $opt = $1;
            $value = $2;
            $opt =~ s/(.)(.+)/\U$1\E\L$2\E/;
            $opt =~ s/[\s]+$//;
            $opt =~ s/_/ /g;
            unless ($lscpu =~ /$opt/i) {
                push @lscpu, "${opt}: $value";
            }
        }
    }
    close FILE;
    if (@lscpu) {
        push @strings, 'title = [CPU]';
    }
    foreach $line (@lscpu) {
        chomp $line;
        push @strings, $line;
    }
}
if ($bashset) {
    $set = `/bin/bash -c set > /tmp/set.tmp`;
    open FILE, '/tmp/set.tmp';
    @sets = <FILE>;
    close FILE;
    if (@sets) {
        push @strings, 'title = [Bash settings]';
    }
    foreach $set (@sets) {
        chomp $set;
        $set =~ s/\(\)//g;
        next if $set =~ /\}|\]|\:|\$/;
        if ($set =~ /^([^=]+)=(.+)/) {
            $opt = $1;
            $value = $2;
            next if $opt =~ /^_$|COOKIE|^PS([\d]+)|^XDG|^XAUTH|BASH_EXE/;
            next if $value =~ /^[\d]{1}$/;
            $opt = "\L$opt\E";
            $opt =~ s/^(.)(.+)/\U$1\E\L$2\E/;
            push @strings, "${opt}: $value";
        }
    }
}
if ($others) {
    push @strings, 'title = [Other informations]';
    $arch = `uname -m`;
    if (-e '/etc/arch-release') {
        $distro = "Arch Linux $arch";
    }
    else {
        chomp($distro = `uname -o`);
        $distro .= " $arch";
    }
    if ($arch eq '' and $distro eq '') {
        $distro = "Unknown OS\n";
    }
    if ($distro) {
        push @strings, "OS: $distro";
    }
    $psx = `ps -A`;
    foreach $wm (keys %wm) {
        if ($psx =~ /([\W]+)$wm/) {
            $WM = $wm;
        }
    }
    unless ($WM) {
        $WM = '';
    }
    foreach $Wm (values %wm) {
        if ($WM =~ /$Wm/i) {
            $WM = $Wm;
        }
    }
    if ($WM) {
        push @strings, "WM: $WM";
    }
    elsif ($psx =~ /xfce4-session/) {
        push @strings, "DE: XFCE4\n";
    }
    elsif ($psx =~ /lxsession/) {
        push @strings, "DE: LXDE\n";
    }
    elsif ($psx =~ /gnome-session/) {
        push @strings, "DE: GNOME\n";
    }
    elsif ($psx =~ /ksmserver/) {
        push @strings, "DE: KDE\n";
    }
    push @strings, 'Kernel: ' . `uname -r`;
    push @strings, 'Hostname: ' . `uname -n`;
    open FILE, '/etc/inittab';
    @file = <FILE>;
    close FILE;
    foreach $line (@file) {
        if ($line =~ /^id:([\d]+):initdefault/) {
            push @strings, "Default init: $1";
        }
    }
    $logname = `whoami`;
    push @strings, "Logname: $logname";
    $ram = `free`;
    if ($ram =~ /cache:[\s]+([\d]+)/) {
        $usedram = $1;
        $usedram = $usedram / 1024;
        $usedram =~ s/([\d]+)([\.]*)(.*)$/$1/;
    }
    else {
        $usedram = '';
    }
    if ($ram =~ /Mem:[\s]+([\d]+)/) {
        $totalram = $1;
        $totalram = $totalram / 1024;
        $totalram =~ s/([\d]+)([\.]*)(.*)$/$1/;
    }
    if ($usedram eq '') {
        if ($ram =~ /Mem:([\s]+)([\d]+)([\s]*)([\d]+)/) {
            $usedram = $4;
            $usedram = $usedram / 1024;
            $usedram =~ s/([\d]+)([\.]*)(.*)$/$1/;
        }
    }
    push @strings, "RAM: $usedram MB / $totalram MB";
    @df = `df -TPh`;
    foreach $df (@df) {
        if ($df =~ m[([\w\/]+)[\s]+([\w]+)([\s]*)([\w\.]+)([\s]*)([\w\.]+)([\s]*)([\w\.]+)([\s]*)([\d]+)\% /(.*)] 
		and not $2 =~ /tmpfs/) {
            $dev = $1;
            $type = $2;
            $free = $8;
            $totalsize = $4;
            $used = $6;
            $usedprocent = " ($10%)";
            $mountpoint = "/$11";
        }
        if ($mountpoint) {
            $mountpoint =~ s[(.*)/(.+)$][$2];
            $mountpoint =~ s/(.+)/\u\L$1\E/g;
            if ($mountpoint eq '/') {
                $mountpoint = 'Root';
            }
            if ($usedprocent eq ' (100%)') {
                $usedprocent = '';
            }
            push @ps, " $c2 ${mountpoint}:$z $dev ($free / $used / $totalsize)$usedprocent ($type)";
        }
    }
    $lastpartition = '';
    foreach $partition (@ps) {
        next if $partition eq $lastpartition;
        push @partitions, $partition;
        $lastpartition = $partition;
    }
    open CPU, '/proc/cpuinfo';
    @cpu = <CPU>;
    close CPU;
    foreach $cpu (@cpu) {
        if ($cpu =~ /model name[\s]*: (.+)/) {
            $CPU = $1;
            if ($CPU =~ /([^\@]+)/) {
                $CPU = $1;
                $CPU =~ s/[s]+$//;
            }
        }
        if ($cpu =~ /cpu MHz[\s]*: ([\d\.]+)/) {
            $freq = $1;
        }
    }
    unless ($CPU) {
        chomp($CPU = `uname -p`);
    }
    if ($CPU) {
        push @strings, "CPU: $CPU";
    }
    if ($freq) {
        if ($freq eq '0.000') {
            $freq = '';
        }
    }
    if ($freq) {
        push @strings, "CPU Freq: $freq";
    }
    if (`uptime` =~ /up[\s]*(.+)\, /) {
        $uptime = $1;
        if (not $uptime =~ /day/) {
            $uptime =~ s/,(.+)//;
        }
        else {
            $uptime =~ s/^([^\,]+),([\ \t]+)([^\,]+)(.+)/$1 & $3/;
        }
    }
    push @strings, "Uptime: $uptime";
    open FILE, "$ENV{'HOME'}/.gtkrc-2.0";
    while (defined($_ = <FILE>)) {
        if ($_ =~ /gtk-theme-name=['"]([^"']+)/) {
            push @strings, "GTK Theme: $1";
        }
        if ($_ =~ /gtk-font-name=['"]([^"']+)/) {
            push @strings, "Font name: $1";
        }
        if ($_ =~ /gtk-icon-theme-name=['"]([^"']+)/) {
            push @strings, "Icon theme: $1";
        }
    }
    close FILE;
    if ($distro =~ /Arch Linux/ or -e '/etc/frugalware-release') {
        $pkgs = `pacman -Q | wc -l`;
    }
    elsif (-r '/var/log/packages/') {
        $pkgs = `ls /var/log/packages/ | wc -l`;
    }
    if ($pkgs) {
        push @strings, "Packages: $pkgs";
    }
    if (-e '/usr/bin/sensors') {
        @sensors = `sensors`;
        foreach $line (@sensors) {
            if ($line =~ /Temp:/) {
                push @strings, "$line\n";
            }
        }
    }
    $hddtemp = `which hddtemp`;
    if (not $hddtemp =~ /no hddtemp in/) {
        chomp $hddtemp;
    }
    else {
        $hddtemp = '';
    }
    if ($logname eq "root\n" and $hddtemp) {
        $df = `df`;
        if ($df =~ m[/dev/(.)da([\d]*)]) {
            $dev = "/dev/$1da$2";
            $temp = `$hddtemp $dev`;
            $temp =~ s/^[^:]+:[\s]*//;
            push @strings, $temp;
        }
    }
}
foreach $string (@strings) {
    chomp $string;
    if ($string =~ /title = \[(.+)\]/) {
        if ($lines) {
            print '-' x 80 . "\n";
        }
        print "\n" . 'x' x 80 . "\n";
        print "$c2 \t\t\t\t $1 $z\n";
        print 'x' x 80 . "\n\n";
        next;
    }
    if ($string =~ /^([^:]+):[\s]*(.+)/) {
        if ($lines) {
            print '-' x 80 . "\n";
        }
        print "$c2* $1:$z $2\n";
    }
}
if ($lines) {
    print '-' x 80 . "\n";
}
if ($others) {
    if (@partitions) {
        print "$c2* Partitions:$z\n";
    }
    $count = @partitions;
    for ($nr = 0; $nr <= $count; ++$nr) {
        if ($partitions[$nr]) {
            print ">$partitions[$nr]$z\n";
        }
    }
    if ($lines) {
        print '-' x 80 . "\n";
    }
}
print "\n";
foreach $argv (@argvs) {
    if ($argv eq '--screenshot') {
        exec 'scrot -cd 5';
    }
}
exit;

            
Comments
Sorry but there are no comments to display