|
![]() |
Uno aprende cometiendo errore... Por ello cuando comencé en linux, descubrí que el comando kill recibía como parámetro el pid (código de proceso). Pero se me planteó el siguiente problema.... ¿Como borraba el mc de la memoria sin encontrar el PID?????. Bueno, me volví loco por que desde el entorno gráfico eso era fácil, pero desde la consola NO!!, entonces me dije que si el kpm podía hacerlo, debía ser como los dispositivo, los procesos estaban en un directorio, y ahí fue que encontré los directorios con los PIDS y un archivo en cada uno que decía cmdline. Entonces me armé de paciencia y redacté este script para borrar todos los programas cargados con ese nombre....
Nos encontramos con una sección para buscar archivos usando el comando find y metiéndo los resultados en una variable, otra parte para detectar del nombre del directorio el PID, y otra para ejecutar KILL PID
#!/usr/bin/perl
print "Hello, You Want kill @ARGV";
$filetokill="@ARGV";
if ($filetokill eq ""){$filetokill="{";}
$lsout=`find /proc -xtype f -iname cmdline`;
$lsout="$lsout\n";
@lsout=split /\n/,$lsout;
foreach (@lsout){
if ($_=~/(.*):$/i){$nulo=$1;}
else {$file="$_";
if ($file=~/cmdline/i){
open(CMDLINE,"<$file");
$cmdline=<CMDLINE>;
close(CMDLINE);
if ($cmdline=~/$filetokill/){
print "found in $file\n";
if ($_=~/proc\/(.*)\/cmdline$/){
print "kill PID: $1\n";
system("kill $1");
}
}
}
}
}
#!/usr/bin/perl
print "Hello, You Want a mp3\n";
$pdir="@ARGV";
if ($pdir eq ""){$pdir="./";}
opendir PDIR,"$pdir" or die "Can't open the dir $pdir";
$cmdline="-L ";
while ($file= readdir PDIR){
if ($file=~/\.mp3/i){
$cmdline="$cmdline\"$pdir$file\" ";
}
}
print "freeamp $cmdline\n\n\n\n";
exec("freeamp $cmdline");
#!/usr/bin/perl
print "Hello, You Want a mp3\n";
$pdir="@ARGV";
if ($pdir eq ""){$pdir="./";}
print $pdir;
$lsout=`ls -R -f1 -A $pdir`;
$lsout="$lsout\n";
$cmdline="-L ";
@lsout=split /\n/,$lsout;
foreach (@lsout){
if ($_=~/(.*):$/i){$pdir=$1;}
else {$file="$pdir/$_";
if ($file=~/\.mp3/i){
$cmdline="$cmdline\"$file\" ";
}
}
}
print "freeamp $cmdline\n";
exec("freeamp $cmdline");
Cuando usamos el wget para bajar sitios web enteros, y usamos la opción -k, wget convierte los links con http:// a /, es decir que por más que lo corrija, se buscará el directorio / para el directorio raíz del sitio web, es incómodo por que muchos web designers lo usan..... Entonces este script, busca todo lo que tenga html y reemplaza llos directorios y subdirectorios por ./ y las referencias a / por ../../../../ como tantas sean necesarias. como parámetro, se le puede decir cual es el sitio web a reemplazar por ./
#!/usr/bin/perl
print "Hello, You Want to FIX HTML SLASHES\n";
$webhome="@ARGV";
$pdir="./";
$tdir="/tmp/";
@pattern=("*.htm*", "*.sht*","*.ph*","*.asp");
foreach (@pattern){
$cmdline=&addPattern($pdir,$_);
if ($cmdline ne ""){$lsout="$lsout$cmdline";}
}
@lsout=split /\n/,$lsout;$item=0;
foreach (@lsout){
$file="$_";
@slashes=split /\//,$file;
$subtree="./";
$counter=0;
foreach (@slashes){
if ($counter>1){$subtree="../$subtree";}
$counter++;}
$item++;
&doReplace($file,$subtree,$webhome);
$percent=int($item/$#lsout*100);
print("\r$percent\%\t:$file ");
}
print("\rTerminado:100% \n");
sub addPattern {
my ($pdir,$pattern)=@_;
my $cmdline=`find $pdir -xtype f -iname \"$pattern\"`;
return ($cmdline);
}
sub doReplace{
my ($file,$subtree,$webhome)=@_;
open(FILETOTEST,"<$file");open(FILETOWRITE,">$temp./gusReplace.txt");
while(<FILETOTEST>) {
$line=$_;
$line=~s/=\"\//=\"$subtree/gi;
$line=~s/=\//=$subtree/gi;
$line=~s/\/\"/\/index.html\"/gi;
$line=~s/<base\ .*href=.*>/\ /gi;
if ($webhome ne ""){
$line=~s/=\"$webhome/=\"$subtree/gi;
$line=~s/=$webhome/=$subtree/gi;
}
print FILETOWRITE $line;
}
close(FILETOTEST);close(FILETOWRITE);
system("mv \"$temp./gusReplace.txt\" \"$file\"");
}