miércoles, 19 de diciembre de 2012

Tutorial bash medium scripting 1

Como les prometi hace un tiempo cuando termine el curso básico de bash basico, iba a comenzar los de avanced scripting en el futuro y lo hare,pero de momento no,ya que necesito poner primero la dificultad siguiente,ya que es así:

basic scripting

medium scripting

avanced scripting

core scripting

Bueno quien sabe si va así o le invente de mas :P

Pero así lo veremos aquí en tiempo de tux :D

Así que podemos tachar basic scripting

La verdad yo a penas voy en avanced scripting y si me equivoco en algo o hago mala practica comenten,ya que es bueno aprender de los demás.

Bueno este tutorial y los que siguen (9 mas) van a ser basados en los de antes,osea que ya deben saber basic scripting.

Como dije yo no se bien,bien he leído libros de red hat y tutoriales (en ingles) sobre scripting,y como dije no vendría mal una ayuda (comentarios, correcciones,etc),bueno.

Primer ejemplo:

Crear un archivo con un bucle que se copie a otro,pero con verificadores por si existe alguno de los dos y romper el bucle cuando existan los dos :D

Primero creamos una función,que usaremos para que no sea tan rápido el proceso:

function dormir {

echo "Aguarde un segundo..."; "sleep 1;

}

Aquí lo que cabe ver es que usamos (;) para no usar mas lineas,ya que es lo que indican los (;)

Asignamos el nombre de los dos ficheros.

: ${fichero_uno="hello.txt"}
: ${fichero_dos="HolaMundo.txt"}

Creamos el bucle(while) y verificamos si no existe el primero,ya que sin el primero no podemos crear el segundo:


while [[ ! -e '${fichero_uno}' ]]

do
                          
# Comandos aquí

done


Verificamos con ! -e (visto en basic scripting)

Y llenamos el bucle:



echo "No existe:"; echo "${fichero_uno}"

dormir

Mostramos que no existe,para demostrar mas los ; los use ya que se podía hacer así también el comando echo:


echo -e "No existe:\n""${fichero_uno}"


Luego llamamos la función dormir que creamos para esperar un poco a que inicie lo interesante:

Creamos una estructura if que vea si existe el archivo 2 y si existe copia el archivo 2 a 1 y rompe el bucle,si no existe lo crea y se repite el bucle,cuando regrese ya existirá y hará lo de if:

if [ -e "${fichero_dos}" ]; then  

echo "${fichero_dos} existe"

dormir

cp ${fichero_dos} $fichero_uno}

break

else

echo "$fichero_dos} no existe"; dormir 

touch ${fichero_dos}

fi; 


Cuando rompa el bucle mostraremos:


echo "Test completo."; echo "$fichero_uno} y ${fichero_dos} existen"


Y así queda el script completo:


#!/bin/bash

function dormir {

echo "Aguarde un segundo..."; sleep 1;

}

: ${fichero_uno="hello.txt"}
: ${fichero_dos="HolaMundo.txt"}

while [[ ! -e "${fichero_uno}" ]]

do
                          
if [ -e "${fichero_dos}" ]; then  

echo "${fichero_dos} existe"

dormir

cp ${fichero_dos} ${fichero_uno}

break

else

echo "${fichero_dos} no existe"; dormir 

touch ${fichero_dos}

fi; 

done

echo "Test completo."; echo -e "${fichero_uno} y ${fichero_dos} existen\n""Haciendo ls a tus txt en $PWD"
dormir
ls *txt

Ejecuten y vean lo grandioso del script :P

Crea el archivo hello.txt y desde ese crea el holamundo.txt,pero verifica primero si no existe hello.txt :D

Ejemplo 2:

Un momento no es tan grandioso :(

Porque si ya existe hello.txt no crea holamundo.txt.

Como se soluciona esto?

Si solo lo ejecutan y hasta ahi no pasa nada,de hecho esperaría a que comentaran el error,pero el hecho no es que usen los ejemplos que aprendan,es que usen lo que aprendan con los ejemplos y si basan este algoritmo en otra cosa es cuando va a dar error :(

Lo solucionamos solamente haciendo una comparacion dual,en el bucle while usando una coma (,):

#!/bin/bash

function dormir {

echo "Aguarde un segundo..."; sleep 1;

}

: ${fichero_uno="hello.txt"}
: ${fichero_dos="HolaMundo.txt"}

while [[ ! -e "${fichero_uno}","${fichero_dos}" ]]

do
                          
if [ -e "${fichero_dos}" ]; then  

echo "${fichero_dos} existe"

dormir

cp ${fichero_dos} ${fichero_uno}

break

else

echo "${fichero_dos} no existe"; dormir 

touch ${fichero_dos}

fi; 

done

echo "Test completo."; echo -e "${fichero_uno} y ${fichero_dos} existen\n""Haciendo ls a tus txt en $PWD"
dormir
ls *txt


Y listo :D

Ejemplo 3:

Definir nuestros propios archivos:

#!/bin/bash

function dormir {

echo "Aguarde un segundo..."; sleep 1;

}

echo -n "Nombre fichero uno: "
read fichero_uno
echo -n "Nombre fichero dos: "
read fichero_dos

echo "Se creara el fichero dos del uno:"; dormir

while [[ ! -e "${fichero_uno}","${fichero_dos}" ]]

do
                          
if [ -e "${fichero_dos}" ]; then  

echo "${fichero_dos} existe"

dormir

cp ${fichero_dos} ${fichero_uno}

break

else

echo "${fichero_dos} no existe"; dormir 

touch ${fichero_dos}

fi; 

done

echo "Test completo."; echo -e "${fichero_uno} y ${fichero_dos} existen\n""Haciendo ls en $PWD"
dormir
ls *txt

Esto de que sirve?

Como el ejemplo es claro y sin objetivo, para nada,pero si usan este algoritmo sirve para muchas cosas,implementando mas comandos,funciones y bucles,por ejemplo para clonar un archivo/carpeta a otro y verificar que existan ambos,por si ya existen y no cometer un error.

Ejemplo 4:

No molestes :D

Como estos ejemplos son sucios podemos automatizar el borrado de toda la basura que estamos dejando con los archivos que estamos creando.

Primero creamos una carpeta,pero no lo haremos simple,usaremos el algoritmo de arriba(verificar y no dañar):


function carpeta {

echo -n "Crearemos una carpeta escriba el nombre que dese : "

read carpeta
mi_carpeta=`echo $carpeta`
}

carpeta

while [ 0 ]; do

if [ ! -d "${mi_carpeta}" ]; then

mkdir "${mi_carpeta}" && cd "${mi_carpeta}"

echo "Directorio actual $PWD"

break

else

echo "Ya existe la carpeta y puede contener algo importante,elije otro nombre"

carpeta

fi

done


Ahora agregamos el script anterior


#!/bin/bash

function dormir {

echo "Aguarde un segundo..."; sleep 1;

}

function carpeta {

echo -n "Crearemos una carpeta escriba el nombre que dese : "

read carpeta
mi_carpeta=`echo $carpeta`
}

carpeta

while [ 0 ]; do

if [ ! -d "${mi_carpeta}" ]; then

mkdir "${mi_carpeta}" && cd "${mi_carpeta}"

echo "Directorio actual $PWD"

break

else

echo "Ya existe la carpeta y puede contener algo importante,elije otro nombre"

carpeta

fi

done


echo -n "Nombre fichero uno: "
read fichero_uno
echo -n "Nombre fichero dos: "
read fichero_dos

echo "Se creara el fichero dos del uno:"; dormir

while [[ ! -e "${fichero_uno}","${fichero_dos}" ]]

do
                          
if [ -e "${fichero_dos}" ]; then  

echo "${fichero_dos} existe"

dormir

cp ${fichero_dos} ${fichero_uno}

break

else

echo "${fichero_dos} no existe"; dormir 

touch ${fichero_dos}

fi; 

done

echo "Test completo."; echo -e "${fichero_uno} y ${fichero_dos} existen\n""Haciendo ls en $PWD"
dormir
ls 

Y por ultimo agregamos un comprobado y un eliminador:


function adios {

echo -e "Directorio acual $PWD\n""Listando..."; ls $PWD 

echo -n "Borrar todo lo que se creo? n/s : "

read respuesta

case ${respuesta} in

s|S)

echo "Borrando archivos..."; dormir
rm "${fichero_dos}" && rm "${fichero_uno}"

echo "Borrando carpeta..."; dormir
cd ..; rmdir ${mi_carpeta}
exit 1;
;;
n|N)

echo "Buena eleccion ;P "; dormir; exit 1;
;;
*)

echo "Ok"; exit 1;
;;

esac

}

Y lo agregamos,pero primero incluimos también clear para un trabajo limpio

Y si queremos podemos añadir este, digamos "snipett" también:

function autodestruccion {

echo -n "Borrar este script tambien: "

read opcion

case ${opcion} in

s|S)

echo "Adios :("; rm $0
;;
n|N)

echo "Buena elección :)"; exit 1;
;;
*)
echo "Ok"; exit 1;
;;
esac

}

Y así queda el script


Enlace



Así es el medium scripting,bueno como dije no se si exista el medium scripting pero tenemos que ir poco a poco,porque esto que hicimos en el avanced scripting no es nada y menos en el core,ya que usamos:

sed,awk,perl,flujos estándares,cut, parámetros de desplazamiento,etc

Pero vamos bien :D

Eso es todo
Leer más...

martes, 18 de diciembre de 2012

Como instalar XFCE en FreeBSD

FreeBSD es uno de mis sistemas operativos favoritos,la verdad entrado un poco en lo personal,FreeBSD lo uso antes de comenzara a usar Linux,en Linux soy relativamente nuevo ya que la primera distribución que use fue Ubuntu 11.04,pero siempre he sido Unixero,el primer sistema propio que tuve fue OS X Lombard(casi por un milagro) y Windows lo he necesitado pocas veces aunque también lo manejo mucho ya que no hacerlo seria algo malo en un mundo que esta en un monopolio con este sistema, así que yo mas que nada me considero Unixero al usar OS X,iOS(Ambos Darwin BSD)FreeBSD,otros BSD's y algunas distribuciones de Linux (Debian,Fedora,Arch,Gentoo,openSUSE,Slackware,y descendientes de estas[Vector,Mint,Ubuntu,Sabayon,Pentoo,Solus]) y aun asi uso mucho FreeBSD un sistema muy,muy bueno,que no entro en términos de comparación con Darwin o Linux porque no saldría nada bueno,pero que aun así me gusta mucho y lo uso desde hace algún tiempo.

Todo esto porque muchas personas piensan(cometan) cuando quieren instalar un BSD en la comparación con GNU/Linux y no debería ser así,ya que ambos sistemas son Libres,ambos sistemas son muy potenetes y ambos sistemas son de familia Unix.


Y ambos tienen sus mascotas Tux y Beastie


Ya que que es Linux?

Un kernel,un núcleo que necesita de apps,Xorg,WM,etc GNU para funcionar como sistema de escritorio así que el nombre para referirse a Linux es GNU/Linux.

Y que es FreeBSD?

Es un sistema operativo libre completo,pero que también necesita de programas para funcionar y muchos son los mismos que usa GNU/Linux en versión BSD aunque tambien cuenta con compatibilidad binaria con los de GNU/Linux.

Y Mac?

En el caso de MacOS X usa Darwin,Darwin a la vez integra el micronúcleo Mach y servicios de sistema operativo de tipo *nix basados en BSD 4.4.

Así que MacOS X es single *nix,licenciado y FreeBSD no es Unix-Like,pero ademas de la licencia muchas cosas separan a MacOS X de FreeBSD,aunque también en algunas tienen que ver.

Y los otros *nix?

Existen muchos otros tipos de sistemas tipo o single *nix pero como dije no voy a entrar en mucha comparación ya que es mucho de lo que podría hablar y esta no es la temática del sitio, así que a lo que venimos.

Que es instalar XFCE4 en FreeBSD(en mi caso versión 9)

Tutorial

1.Primero que nada instalamos Xorg

Como root

sudo pkg_add -rv xorg

2.Configuramos Xorg

sudo Xorg -configure


y copiamos el archivo de configuración
sudo cp /root/xorg.conf.new /etc/X11/xorg.conf
3.Instalamos XFCE4

sudo pkg_add -rv xfce4
4.Configuramos nuestro rc.conf

sudo ee /etc/rc.conf
Y añadimos:

hald_enable="YES"
dbus_enable="YES"



5.Configuramos el .xinitrc:

echo  "/usr/local/bin/startxfce4" > ~/.xinitrc
Y reinicamos

sudo reboot

Y al iniciar el sistema nos logeamos y

startx
Y listo :D






 Como ven es facil instalar un Entorno de Escritorio y tambien lo podemos dejar asi:



Eso es todo.
Leer más...

domingo, 16 de diciembre de 2012

Como instalar Perl en el iphone ios

Esta vez vamos a aprender a instalar Perl en nuestro iPhone/iPod/iPad,de momento yo lo he probado en ipod touch 3g/4g y iphone 4 iOS 5.1.1 con jailbreak.

Necesitan jailbreak y iOS 5,no lo he probado en iOS 4 o 3 pero creo que también funciona :D

Solo les tengo malas noticias,este lenguaje usado en iOS esta dedicado al scripting,ya que no esta(no he encontrado) UICaboodle para perl y crear interfaces graficas basadas en UIApliction :(.

Osea que solo lo podremos usar en scripts como es el caso de ruby,no como python que si incluye UICaboodle por ejemplo esta es la app de python que se instala con python(hello word) y lo que hace es importar los contactos y mostralos en GUI:


# Special thanks goes to Dave Arter (dave@minus-zero.org)
# for actually writing most of this sample application!!

# While I managed to get PyObjC working, I didn't actually
# know any Python to go with it ;P. - Jay Freeman (saurik)

import sys

import objc
from _uicaboodle import UIApplicationMain
from objc import YES, NO, NULL
from sqlite3 import dbapi2 as sqlite 

objc.loadBundle("UIKit", globals(), "/System/Library/Frameworks/UIKit.framework")

class PYApplication(UIApplication):
    def getName(self, contact):
        name = contact["first"]
        if contact["last"] is not None:
            name += " " + contact["last"]
        return name

    @objc.signature("i@:@")
    def numberOfSectionsInSectionList_(self, list):
        return len(self.sections_)

    @objc.signature("@@:@i")
    def sectionList_titleForSection_(self, list, section):
        return self.sections_[section]["title"]

    @objc.signature("i@:@i")
    def sectionList_rowForSection_(self, list, section):
        return self.sections_[section]["row"]

    @objc.signature("i@:@")
    def numberOfRowsInTable_(self, table):
        return len(self.contacts_)

    @objc.signature("@@:@i@@")
    def table_cellForRow_column_reusing_(self, table, row, col, reusing):
        contact = self.contacts_[row]
        if reusing is not None:
            cell = reusing
        else:
            cell = UIImageAndTextTableCell.alloc().init()
        cell.setTitle_(self.getName(contact))
        return cell

    @objc.signature("c@:@i")
    def table_canSelectRow_(self, table, row):
        return NO

    @objc.signature("v@:@")
    def applicationDidFinishLaunching_(self, unused):
        self.contacts_ = []
        self.sections_ = []

        db = sqlite.connect(self.userHomeDirectory() + "/Library/AddressBook/AddressBook.sqlitedb")
        cursor = db.cursor()
        cursor.execute("select first, last from ABPerson where first is not null order by first")
        for first, last in cursor.fetchall():
            self.contacts_.append({"first": first, "last": last})
        cursor.close()
        db.close()

        outer = UIHardware.fullScreenApplicationContentRect()
        self.window = UIWindow.alloc().initWithFrame_(outer)

        self.window.orderFront_(self)
        self.window.makeKey_(self)
        self.window.setHidden_(NO)

        inner = self.window.bounds()
        navsize = UINavigationBar.defaultSize()
        navrect = ((0, 0), (inner[1][0], navsize[1]))

        self.view = UIView.alloc().initWithFrame_(self.window.bounds())
        self.window.setContentView_(self.view)

        self.navbar = UINavigationBar.alloc().initWithFrame_(navrect);
        self.view.addSubview_(self.navbar)

        self.navbar.setBarStyle_(1)

        navitem = UINavigationItem.alloc().initWithTitle_("Contact List")
        self.navbar.pushNavigationItem_(navitem)

        i = 0
        letter = u""
        for contact in self.contacts_:
            name = self.getName(contact)
            now = unicode(name[0])
            if letter != now:
                letter = now
                self.sections_.append({"row": i, "title": now})
            i += 1

        lower = ((0, navsize[1]), (inner[1][0], inner[1][1] - navsize[1]));
        self.list = UISectionList.alloc().initWithFrame_(lower)
        self.view.addSubview_(self.list)

        col = UITableColumn.alloc().initWithTitle_identifier_width_("Name", "name", 320)

        table = self.list.table();
        table.setSeparatorStyle_(1)
        table.addTableColumn_(col)
        table.setReusesTableCells_(YES)

        self.list.setDataSource_(self)
        self.list.reloadData()

UIApplicationMain(sys.argv, PYApplication)



Y se ejecuta con un script en bash:


#!/bin/bash
exec "$(dirname "$0")"/Python "$(dirname "$0")"/HelloPython.py

Así se podría hacer en Perl,pero no hay nada de documentación y tampoco encuentro UICaboodle para perl,para por lo menos traducir las aplicaciones de Python a Perl y crear algunas apps sencillas para que sirvan de ejemplo.

Pero bueno,de todas formas en cydia nos dan muchos módulos muchos para usarlos en scripting desde terminal,que se encuentran en CPAN.




Tutorial



1.Necesitamos ya tener el jailbreak pero también necesitamos instalar de cydia:

openssh

APT 0.7 HTTPS Method

wget 

sbsettings y el toogle de ssh

Y por ultimo Terminal








Solo entran a cydia,los buscan y instalan


2.Ahora en nuestro sistema de escrtitorio necesitamos un cliente ssh,en mi caso Archlinux instale openssh

 sudo pacman -S openssh

 Y nos conectamos por ssh

Encendemos el ssh del iphone y en la Pc/Mac

ssh root@ip_del_iphone

La ip del iphone esta en mismo sbsettings




3.Descargamos el .pub

wget http://coredev.nl/cydia/coredev.pub

Lo añadimos
apt-key add coredev.pub
Usamos un pipe para mandarlo a sources

echo 'deb http://coredev.nl/cydia iphone main' > /etc/apt/sources.list.d/coredev.nl.list
Recargamos los repos

apt-get update

4.Y instalamos

No probé

apt-get install perl

Pero puede que funcione ya que así instale python

Pero para mas seguro:

Salimos del ssh

exit

Entramos a Cydia >> Manejar >> Fuentes y estará una repo con el camello :D


Entramos y buscamos Perl


Instalamos



Hacemos un respring.

5.Creamos Hola Mundo

Abrimos terminal y escribimos:

 echo '#!/usr/bin/local/perl' > hola.pl && echo 'print "Hola Mundo!!!\n"' >> hola.pl

Pueden por ssh,o por con un editor como el de iFile

Y listo


Eso es todo si quieren módulos busquen en la repo hay muchos :D

Referencias:






Leer más...

Expresiones regulares Perl Parte II/III

Seguimos con las expresiones regulares de Perl :D.

Como hemos visto perl es una potencia en el manejo de texto y con el uso de expresiones regulares es de donde viene parte de este poder lo que vamos a ver es mas complicado que la parte 1 pero es muy útil el uso de expresiones en nuestros scripts, así que si te gusta Perl necesitas aprenderlos.

Parte 1

En la entrada pasada vimos como cambiar texto y como verificar una cadena para ver si encuentra una coincidencia,esto lo hacíamos con una palabra en especifico,ahora lo aremos solo con una(s) letra(s) en especifico en ves de una palabra,

Por ejemplo verificar si una cadena contiene la letra t.

Por ejemplo:

Tenemos una variable de cadena que contiene Tiempo de Tux

my $variable = "Tiempo de Tux";

Y queremos verificar si contiene la letra t en la variable,para esto hacemos uso de caracteres:

/[caracteres]/
Estos caracteres lo que hacen es buscar en lo que indiquemos las letras que estén en:

/[aqui]/
Por ejemplo /[caracter]/ no busca la palabra carácter busca en la cadena las letras c,a,r,t,e

Así vean el ejemplo para buscar Tiempo de Tux



#!/usr/bin/env perl 

# Caracteres,expresiones regulares 1---{

use strict;
use warnings;

my $cadena = "Tiempo de Tux";

if ($cadena =~ /[T]/){
print "Se encontro T en $cadena \n";
}
else{ print "No se encontró T en $cadena \n"; }


Ese ejemplo esta muy fabricado ya que pueden ver que incluso no haria falta el else,pero de todas formas es un ejemplo,pero aun se puede pensar que es como el anterior,que solo busca la primera linea,y no es así(en este ejemplo) vean este ejemplo:


#!/usr/bin/env perl 

# Caracteres,expresiones regulares 2---{

use strict;
use warnings;

my $cadena = "Cadena de Tux";

if ($cadena =~ /[T]/){
print "Se encontro T en $cadena \n";
}
else{ print "No se encontró T en $cadena \n"; }

Como dije no busca en al principio,recorre toda la cadena,ahora si queremos buscar al principio solamente agregamos ^ a la sintaxis


#!/usr/bin/env perl 

# Caracteres,expresiones regulares 3---{

use strict;
use warnings;

my $cadena = "Cadena de Tux";

if ($cadena =~ /^[T]/){
print "Se encontro T en $cadena \n";
}
else{ print "No se encontró T en $cadena \n"; }


También hay que tener en cuenta que estamos buscando una T mayúscula ya que si la cadena fuera en minúsculas no la reconocería para no distingir en mayúsculas y minúsculas solo tenemos que indicarlo en la sintaxis con i :


if ($cadena =~ /^[c]/i){
Supogamos que ahora queremos verificar que la cadena contenga la letra c en el principio de la cadena y no importa si es mayúscula o minúscula:

#!/usr/bin/env perl 

# Caracteres,expresiones regulares 4---{

use strict;
use warnings;

my $cadena = "Cadena de Tux";

if ($cadena =~ /^[c]/i){
print "Se encontro T en $cadena \n";
}
else{ print "No se encontró T en $cadena \n"; }

Veamos un ejemplo mas funcional,buscar una palabra que sea tomada desde la entrada estándar y con verificadores de longitud;



#!/usr/bin/env perl 

# Caracteres,expresiones regulares 5---{

use strict;
use warnings;

system("clear");

my $cadena = "Tiempo de Tux";
my $respuesta;
print "Que palabras desea buscar: ";

my $palabras = <>;

chop($palabras);

if ($cadena =~ /[$palabras]/i){
    if ( length($palabras) == 1 ) { 
print"Se econtro la palabra $palabras en la cadena\n"; }else{ 
print "Se econtraron las palabras $palabras en cadena\n"; }
           system("sleep 1");
print "Desea ver la cadena? s/n: ";
$respuesta = <>;
chop($respuesta);
if ( $respuesta eq "s" ) { print "La cadena es : $cadena\n"; }
elsif( $respuesta eq "n" ) { print "Sera despues :D\n"; }else{
print "Ok\n";
}
}

elsif ( $cadena !~ /[$palabras]/i ) { 
if ( length($palabras) != 1 ) { 
print "No se encotraron $palabras en cadena\n"; }else{ 
print "No se encontro $palabras en cadena\n"; }
}

END






Ejecuten y analicen el código para una mayor comprensión, si no entiendes bien checa los otros tutoriales del sitio aqui.

Inicio y final de cadena

Como vimos el carácter ^ da inicio a la cadena,indica que verifique en el inicio de la cadena

Por ejemplo

my $texto = "FreeBSD";

if ($texto =~ /^Fr/ ) { print "Se encontró Fr al principio de $texto\n"; }

Esto también verificaría Francia,Freeware,Freelance,etc

Pero si lo queremos verificar el final?

Solo debemos usar esta sintaxis:

 /texto$/
Esto indica el final de la cadena o texto, así como ^ indica el inicio


my $texto = "FreeBSD";

if ($texto =~ /BSD$/ ) { 
print "Se encontró BSD al final de $texto\n"; }

Esto encontrara openBSD,ghostBSD, pero no BSDlicence

Aquí el ultimo ejemplo:



#!/usr/bin/env perl 

# Inicio y final de cadena,expresiones regulares 6---{

use strict;
use warnings;

system("clear");

my $cadena = "FreeBSD";
my $respuesta;
my $res;
print "Que palabras desea buscar al principio: ";

my $palabras = <>;

chop($palabras);

if ($cadena =~ /^$palabras/i){
    if ( length($palabras) == 1 ) { 
print"Se econtro la palabra $palabras eal principio de la cadena\n"; }else{ 
print "Se econtraron las palabras $palabras al principio de la cadena\n"; }
&respuesta();
}

elsif ( $cadena !~ /^$palabras/i ) { 
if ( length($palabras) != 1 ) { 
print "No se encotraron $palabras al principio de la cadena\n"; 
                &res();
}else{ 
print "No se encontro $palabras al principio de la cadena\n"; }
&res();
}

sub respuesta {

system("sleep 1");
print "Desea ver la cadena? s/n: ";
$respuesta = <>;
chop($respuesta);
if ( $respuesta eq "s" ) { print "La cadena es : $cadena\n"; exit; }
elsif( $respuesta eq "n" ) { print "Sera despues :D\n"; exit; }else{
print "Ok\n"; exit; }

}

sub res {
print "Desea buscar $palabras en el final de la cadena: s/n :";
$res = <>;
chop($res);
if ( $res eq "s" ) { 
if ( $cadena =~ /$palabras$/i) { 
print "Se encontro $palabras al final de la cadena\n"; &respuesta(); }
else { 
print "No se encotro $palabras al final de  la cadena\n"; exit; }
}
elsif ( $res eq "n" ) { print "Sera despues :D\n"; exit; } else {
print "Ok\n"; exit; }
}

END


Eso es todo,ejecuten y analicen,en la ultima parte veremos algo mas avanzado asi que sera en unas semanas para digerir bien esto.




Leer más...

sábado, 15 de diciembre de 2012

Como instalar y configurar sudo FreeBSD

Algo de lo que tenemos que hacer primero despues de instalar FreeBSD es instalar sudo,para poder tener privilegios de super usuario rápidamente,con nuestro usuario normal,en FreeBSD no nos instala sudo y tenemos que configurar y instalar.

Tutorial 

1.Nos logeamos como root y instalamos

pkg_add -rv sudo
Salimos

exit
Y entramos de nuevo

Ahora editamos
visudo
Buscamos  #%wheel ALL(ALL) ALL

Y lo descomentamos (quitamos el #)

Guardamos y salimos

Y listo :D

Solo falta un detalle, que nuestro usuario este en el grupo wheel

Checamos con:

pw showgroup wheel

Y si no aparece, lo añadimos con:

pw user mod usuario -G wheel
Y listo,salimos y entramos con nuestro usuario común

Y al usar sudo solo tenemos que aceptar las normas y listo


Eso es todo :D

Leer más...

Como usar alias en Linux

Bueno,seguimos hablando de Unix y sus tipos de sistemas,single,like,etc en este caso de Bash en Linux.

Ya que lo que vamos a hacer lo vamos a indicar en el rc de bash,como saben o abran oido en Linux existen los alias,que igual que en la vida real sirven para identificar algo/alguien mas fácilmente,si no saben explico un poco:

Algunas veces hacemos tareas en la terminal y siempre usamos comandos de shell que son los que nos comunican con el núcleo del sistema,estos comandos son desde

clear

hasta pipes,por ejemplo:

cat /etc/passwd | grep $LOGNAME | cut -d: -f5
Haci que si queremos ver lo que vemos con el pipe tendriamos que escribirlo siempre :(


Seria genial que se pudiera acortar no?

Pues eso es lo que hacen lo alias :D

Por ejemplo:

Ver puertos abiertos de nuestro localhost pero solo como números:

nmap localhost | grep open | wc -l
Podríamos usar un alias como "pa" (puertos abiertos)


Podemos hacerlo a lo Linuxero,abriendo nuestro basrc con nano,vim,vi,joe,etc

nano ~/.bashrc

y escribiendo

 alias pa='nmap localhost | grep open | wc -l'

Y recargamos

source  ~/.bashrc
O podemos hacerlo a lo unixero con una tuberia:

echo "alias pa='nmap localhost | grep open | wc -l'" >> ~/.bashrc && source  ~/.bashrc
Y si queremos mas?

Ja un unixero debe agregarlos de uno en uno XDDD

Pues no,solo entramos al PS2

cat << SALIR >> ~/.bashrc && source ~/.bashrc


Y listo :D

Escribimos pa:




Eso es todo,solo usen esta sintaxis

alias nombre_alias='comando'
Si ya no lo quieren usar un alias,solo lo comentan (#) o lo borran del bashrc(preferible comentar por si en el futuro lo quieren usar de nuevo)

Y no usen comandos del sistema.


Porque luego se nos olvidan los originales o nos confundimos(en mi caso claro), mas que nada usen alias para tuberias/pipes.



Leer más...

miércoles, 12 de diciembre de 2012

Como instalar ios6 en el ipod touch 1g

Hace poco whited00r lanzo su whited00r 6 el custom firmware que imita al iOS 6,como dije imita el iOS 6,no es el iOS 6 ya que el original de apple solo es para los dispositivos mas nuevos con mucho hardware,asi que comparándolo con el ipod tocuh 5 quedaría muy abajo nuestro ipod 1g :( en cuanto a hardware.

Mas info



Pero lo bueno es que Whited00r a incluido una nueva app llamada Time Machine,el cual cuenta con muchas apps que eran para nuestro ipod el cual corre :D


Ademas de esto,ofrece

1.Multitarea

2.Wallpapers de fondo

3.Folders

4.Iconos de iOS6 oficial

5.Jailbreak

6.IColud

7.Recordatorios

8.Youtube

9.Terminal

10.Y mas cosas

Vídeo de demostración(iphone 2g) 



El ipod touch 1g solo no mantiene las cualidades del iphone 2g(camara,grabador de voz)



Nota: Hacen este tutorial bajo su propio criterio no me hago responsable de problemas a causa del mismo

El tutorial esta probado por Whited00r y por mi pero puede que tengan problemas,si se deciden a realizarlo y tienen algun problema pueden comentar para ayudarles :D

Tutorial

Opcional: Primero hagan una copia de seguridad

En sección itunes en el enlace de abajo >>


Enlace

Así que hagamos lo

1. Descarga el firmware

Enlace
En mirrors

O si tienen un cliente torrent,en torrent

2.Abre el explorador de windows/Mac y extrae el ipws del .zip

3.Apaga y desconecta el ipod >> presiona el boton home >> sin soltarlo conectalo a la Pc/Mac

Abrimos itunes(Si no se abre solo) y nos saldra una imagen como la de arriba

4.Le damos aceptar >> presionamos el boton shift (Pc)


Mas el boton restore (de la pc)

En Mac OSX 


Elegimos el .ipsw de whited00r

Y lo comenzara a restaurar

En el ipod


En la Pc/Mac

Se va a tardar unos 10minutos

Cuando aparezca esto en el ipod touch


Desconectamos el ipod de la Pc.

Y lo volvemos a conectar para registrarlo en iTunes.

También restauramos la copia de seguridad(musica/fotos/apps) que teníamos.

Y listo


También trae un script en bash para administrar los demonios y cualidades de nuestro ipod touch :D


Cydia esta en el icono de appstore




Eso es todo
Leer más...