Welcome to HBH! If you have tried to register and didn't get a verification email, please using the following link to resend the verification email.
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