Is it a fake website?

22 noviembre 2006

Script de chequeo de quotas

Este perl script es útil para servidores linux donde tenemos cientos o quizás miles de unidades personales de usuario. El como tenemos montado el servidor esta fuera de este post, pero en mi caso es un servidor linux conectado a una SAN con un terabyte de espacio, y samba para los homes de usuario.

Tendremos que hacer una adaptación mínima a este script para adaptarlo a la ruta correspondiente y el tamaño que queremos chequear, y ya estará listo.

---------------------------------------------------------------------
#!/usr/bin/perl

#use strict;

########################################################
# Check homedirectorys/dir specified size in Megabytes
#
# Show by screen the size / homedirectory / owner
# of directorys reaching the SIZEMAX value specified.
#
# Autor: logadmin
# Last modified: 16/11/06
# Feel free to use or modify to suit your needs.
#
#########################################################

system("date");

#Size max in Megabytes
$SIZEMAX=1000;

#Directorys to check
@direc=qw(
/home
);

foreach $dir (@direc)
{
print "---- \U$dir-----\n";
opendir my $dh, $dir or die "Cannot open '$dir' $!";
@USERS = map !/\A\.\.?\z/ && -d "$dir/$_" ? "$dir/$_\n" : (),
readdir $dh;
$num_users=@USERS;

for ($i=0; $i < $num_users; $i++){
check_size(@USERS[$i]);
}
}
#Function to check homedir size
sub check_size{
my ($homedir, $category) = @_ ;
$tempsize = `du -sh $homedir`;
chomp($tempsize);
@size = split (/\//,$tempsize); #size array with each field of homedirectory

if ( $size[0] =~ (/^(\d+)+[M.G][^.0K].*/) )
{
if ($size[0] > $SIZEMAX || $size[0] =~ (/[G]/))
{
$owner = show_owner($homedir);
write;
}
}
}

sub show_owner{
my ($homedir) = @_;
chomp($homedir);
$infols = `ls -l $homedir | head -2`;
@grupo = split (/ +/,$infols);
$devolv = $grupo[3];
return($devolv);
}

#size is an array like "4.0K /home/mike
#so you have to calcule the array position you want.
#in the example the values will be size[0] for 4.0K and size[2] for user

format STDOUT =
@<<<<<<<< @<<<<<<<<<<< @<<<<<<<<<<
$size[0], $size[2] $owner
.

format STDOUT_TOP =
Page @<<
$%

SIZE USER OWNER
==== ========== ========
.
---------------------------------------------------------------------

Yo lo he llamado "check-sizes.pl" un salida de este script sería:

#[root@machine etc]# perl check-sizes.pl

---------------------------------------------------------------------
Wed Nov 20 09:30:20 CET 2006
---- /HOME-----
Page 1

SIZE USER OWNER
==== ========== ========
1.4G mike root
511M david david
262M alfred alfred
594M robert robert
406M alice alice
...
...
---------------------------------------------------------------------

Vemos 3 columnas, el tamaño que ocupa el directorio, el usuario, y el propietario de dicho directorio. En el primer caso el propietario es root porque ha sobrepasado la cuota establecida a 1Giga (esto aún no lo hace el programa, sólo lo muestra), en los
demas podemos ver la información relativa a cada usuario.

1 comentario:

Anónimo dijo...

By the way, I have been looking up on the Internet and I have found some tools which are really cools to monitor the positioning of the competition, as well as seeing their tips and tricks. If you are interested, I advised to you have a look. It seems they are free: http://www.lineared.com/es/recuperar/datos-posiciones-google-msn-yahoo.htm