Mostrando las entradas con la etiqueta bash. Mostrar todas las entradas
Mostrando las entradas con la etiqueta bash. Mostrar todas las entradas

miércoles, 16 de octubre de 2013

Enviar a disco extraible en ubuntu [Script]

En Linux ubuntu hay algo que no encontré desde el principio y es que por ejemplo en Windows cuando tenemos conectada una memoria usb nos da la opción de mandar los archivos seleccionados a esa memoria,en todo el universo de Linux no se si haya algo similar a esto,pero en el sistema que uso yo que es Ubuntu con Nautilus 3.4.x no,asi que programe algo en bash con un poco de Perl embebido para manejar esto,es facil emularlo con bash aunque en mi caso lo he usado y no me ha dado problemas si les da algún tipo de problemas comenten para arreglarlo o manden un aviso en la zona de contacto del sitio.

El script es el siguiente:

Enlace

El nivel de programación que use es un poco mas avanzado(en sintaxis de lo que hemos visto en este sitio) sin embargo los algoritmos son algo vulnerables, ya que solicitan texto de un archivo externo,pero no es un gran problema a menos que tengamos un espía en nuestro sistema que pueda agregar archivos mas rápido de lo que se ejecuta un script.

Bien para usar solo hay que hacer lo siguiente:

Abren una terminal(Ctrl+Alt+T) y escriben esto:

gedit ~/.gnome2/nautilus-scripts/enviar\ a... && chmod +x ~/.gnome2/nautilus-scripts/enviar\ a...
Se les va abrir gedit,copian de la web el codigo en bash y lo pegan en Gedit:



luego cierran Gedit y listo :D.

Seleccionan sus archivos luego le dan clic derecho:


Y elegimos nuestro disco:


Pequeña actualización:



Luego esperamos basado en el peso de nuestro archivo.


Eso es todo :D.


Leer más...

sábado, 1 de junio de 2013

Script para buscar wifi desde terminal [Actualizado]

Le hice una actualizacion a este pequeño script,el cual logra que nos conectemos por wifi desde la consola,este script lo cree para instalar Gentoo hace un tiempo ya que me conectaba a wifi desde la shell o tty y era un poco complicado andar de un lado a otro conectandome desde la shell,esto se puede solucionar con un solo comando o un pequeño script pero como me conecto a varias redes wifi,de amigos,familia,abiertas,etc no era una opcion solo hacer algo como:

 #!/bin/bash  
 iwconfig wlan0 essid "red" key clave  
 dhcpcd wlan0  
 exit 0;  

Cree el script para ayudarme y para ayudar a los que tengan el mismo problema que yo,ya que para usar solo se descarga desde una pc con internet,lo pasamos a una usb y la conectamos a nuestra distro, en mi caso Gentoo y como es solo tty seria algo como:

fdisk -l | sed -n '$p' | awk '{print $1}' # Para ver el usb

mnt /dev/sdx /media # Para montar el usb en media

cd /media && cp scan.sh ~/ # Para copiar el script a nuestro home

Y finalmente

bash scan.sh

Para ejecutar,todo debe ser como root.



Lo que le añadí a este script es que busca el BSSID y checa si la conexión es abierta,si es abierta al elegirla automaticamente hace un dhcpcd para asignarnos una ip,si tiene clave wep nos la pide,si tiene wpa o wpa2,da error ya que eso se hace con wpa suplicant :( y no le he añadido soporte.

Otras cuestiones a tomar es que la interfaz de red debe estar activa,(tener instalado los drivers(modulos) en el sistema tener dhcpcd o un programa que nos asigne una ip, y no estar corriendo un daemon como wicd o networkmanager porque da error de comunicacion(además de que no debería porque esta pensado para usuarios que no tienen interfaz,a menos que uses wicd en modo curses),bien eso es todo,les dejo el script


Enlace
Nota: Crea un archivo que se llama redes.temp,si tienes uno que se llama igual en la carpeta del script lo va a borrar. 

Esta hecho a base de tuberias de comunicacion Unix para el filtrado de datos.

Puede que piensen que algo como wicd-curses es una mejor opcion y de hecho si,yo tambien lo pense y no tenia internet para descargarlo y cuando me di cuenta ya habia programado este script que tambien puede usar dhclient,dhcpcd,pump,udhcpc,udhcpd solo que hay que configurar en el script:D

Luego le hago una Interfaz grafica :P

Saludos :D
Leer más...

domingo, 7 de abril de 2013

Abrir programas un cierto numero de veces en Linux con terminal (looping)

Cuando usamos la Shell de Linux muchas veces no usamos todo su potencial,en la terminal de Linux usando Bash en este caso,podemos usar bucles,variables,comentarios,etc como si fuera un script,en este caso veremos como ejecutar un programa un cierto numero de veces usando for,el bucle for:

for loop
Desde usar una simple aplicación hasta usarla para administrar el sistema:

Por ejemplo abrir tres terminales con comando en una sola linea:

lxterminal; lxterminal; lxterminal;

Con looping

for i in 1 2 3; do lxterminal; done

Abrir 100 terminales con un solo comando:

for i in {1..100}; do lxterminal; done

Eso parecería un troyano pero es un ejemplo del poder de los bucles,otro ejemplo es algo que me paso y apuesto a que a muchos también:

Para checar la conexión de Internet sea cableada o por lan se usa ping,pero aveces no tenemos conexión por que algo no esta bien configurado,sea el dhcp o nuestro router o cualquier cosa y en lo que le movemos al router o al a configuración, necesitamos ver si reacciona y por ejemplo esto lo checa:


for i in {1..100}; do ping www.google.com; sleep 1 ; done


A mi en lo personal me gusta mas usar el $PS2:

Podemos usar bucles en cualquier momento para resolver muchos tipos de problemas,solo es cuestión de usarlos bien.

Pero sirve para muchas cosas, eso es todo :D
Leer más...

sábado, 16 de marzo de 2013

Script bash para conectarse a wifi por terminal

Como hace poco reinstale gentoo me recordó lo mucho que he batallado para conectarme a wifi en un sistema operativo sin interfaz gráfica o no solo la interfaz si no que sin ningún daemon que haga esto simple como wicd,networkmaganager,etc,esto me recuerda mi epoca de Debianita y de Archero porque tenia algunos problemas con mi tarjeta de wireless y después no sabia que era lo que hacia mal,porque no me conectaba :(

Ya que, verán,para conectarse a una red wifi por consola se usa este comando:

iwconfig interfaz_de_red essid nombre_de_red

En Linux,en BSD es :


ifconfig wlan0 inet "tu-inet" netmask 255.255.255.0 ssid "Tu-SSID" channel "Canal" # Creo que este también funciona para Linux
Pero primero necesitamos escanear los puntos de acceso,para eso usamos el comando:

iwlist scan

Pero nos tira muchos datos,podemos verlo paso a paso con:

iwlist scan | more

Pero eso ya es para buscar otro tipo de información,normalmente obtenemos el esssid de las redes cercanas con:

iwlist scan | grep ESSID
 Y luego ya usamos el comando mencionado arriba,pero en este punto yo siento que aveces me equivoco y no tecleo bien el nombre de la red,bueno si es mi red con mi nombre no hay problema,pero si quiero crackear conectarme a una red abierta de un parque,etc :O.

Bueno,ya con el essid asociado solo nos asignamos una ip,por dhclient,dhcpcd,ifconfig,etc,pero bueno mejor programe un script que hace casi,todo el trabajo,digo casi,porque necesitamos tener funcionando correctamente nuestra interfaz de red lan (wlanX,ethX,etc) y si no es asi no funcionara, también necesitamos tener dhcpcd instalado o dhclient,o cualquier programa que haga este trabajo de asignación (necesitan modificar el script).

Bueno el script:

Busca las redes mas cercanas ha base de pipes unix,las añade a un array y las muestra a selección,pregunta si usamos clave(solo wep) y nos asocia a la red y nos asigna una ip:

Enlace
Nota: Si tienen un daemon que haga esto les puede dar errores,graves.

Solo deben ejecutar como root

sudo bash script.sh

Y listo :D

Lo modifican a sus necesidades, no tengo pantallasos porque ya tengo networkmanager en mis sistemas y cuando lo programe no tenia como sacar screenshots (a menos con el iPhone pero es peligroso) lo programe en tty.

Eso es todo
Leer más...

miércoles, 2 de enero de 2013

Tutorial el uso de $PS2 Unix

He titulado así esta entrada ya que si hablo de Linux,lo relaciona google mucho con la consola de videojuegos,pero abosolutamente nada que ver, así que lo hablaremos como si solamente de Unix se tratara no solo GNU/Linux :)

Para los usuarios medios/avanzados del mundo de Linux conocen el $PS1 que es la interfaz de nuestra shell de trabajo,por así decirlo,pueden ver un tutorial que realice de customizacion de este:

Enlace

En el caso del $PS2 se accede a,digamos multilinea,ya que no limita el uso de una sola,este $PS al igual que el 1 se puede customizar,por ejemplo lo pueden ver haciendo:

echo $PS2

Que lo mas probable esta sea la salida

>

En mi caso es esta

-{

Por un pipe que use gracias a +Daniela Ibañez


echo 'PS2="-{ "' >> ~/.bashrc && source ~/.bashrc
En ese mismo post hable sobre los flujos estándares de Unix,los cuales hacen mención al $PS2

Enlace
Bien,como entrar el $PS2 ?

En Tiempo de Tux solo hemos visto la re dirección :

cat << EOF >> archivo.txt


Bien,de esta manera enviamos lo que escribamos en la multilinea a un archivo de texto, y dejamos de escribir usando la palabra que este en

<< aquí >>

Comúnmente EOF,como en Perl

Pero puede ser SALIR,etc por ejemplo ese de arriba es Arch y este de abajo es Sabayon:


 Pero esa no es la única forma de entrar/usar al $PS2,ya que en el scripting shell existe la multilinea la cual podemos llamar con hacer uso de este símbolo

\

Por ejemplo:


zenity --entry  \
  --title="Ventana Gtk" \
  --text="Una prueba de $PS2"

Y como he dicho,todo lo que se puede usar en scripting shell se puede usar directamente en la consola:

Es recomendable,identar lo que vamos a escribir,ya que son los espacios que vamos a usar,(dejar espacios ya usando el $PS2 como se ve arriba)

Para usar este tipo de llamada de $PS2 solo usamos \ para señalar nuevas lineas y cuando terminemos no lo usamos y damos enter

Tampoco es la única otra forma de llamar el $PS2

Podemos hacer el uso de bucles

Por ejemplo escriban esto,linea por linea:

while :; do

echo "una linea"
echo "otra linea"

done

ctrl +c para salir

En el caso de los bucles,no necesitamos usan \,el ciclo de $PS2 se cierra hasta que cerremos el bucle,en este caso con done

Tampoco es la única otra forma de llamar el $PS2,o mejor dicho hay mas formas de entrar al $PS2

Con ()

Para hacer esto solo escribe

(

en la terminal y meten todos los comandos que quieran,por ejemplo actualizar el sistema y instalar vlc con $PS2 en dos lineas:



tux@rivera$ (
-{ sudo pacman -Sy
-{ sudo pacman -S vlc
-{ )

Esto es tonto,porque puedo hacer sudo pacman -Sy vlc


Pero se ve el poder de $PS2


O solamente :

Eso también es tonto,porque puedo hacer:

echo -e "Una linea\nOtra Linea"
Pero vemos a $PS2 en acción

De igual forma con {}

Eso es todo, si conocen mas formas de entrar al $PS2 comenten :D

Si se preguntan cual es el lado opuesto de hacer esto(todo en una sola linea) la respuesta es ;

Como en Perl,que indica nueva linea ;

sudo pacman -Syu; sudo pacman -S vlc

Similar a &&,investiguen las diferencias :D


Leer más...

jueves, 20 de diciembre de 2012

Desplazamiento de parámetros en bash

Justamente estaba comentando en los comentarios  sobre el desplazamiento de parámetros que también podríamos llamar desplazamiento de argumentos, ya que son los argumentos que tomamos de la linea de comandos o rutinas(explico mas adelante), el hecho es que esta entrada no es un numero de nuestros tutoriales de medium scripting,solo es un tutorial que después implementaremos y como es sencillo lo haré rápidamente :D

Vamos a comenzar, como mencione en el tutorial de acá podemos hacer uso de parámetros/argumentos tomados desde la linea de comandos, por ejemplo:

Este color es mi shell($PS1):

(rivera@super-tux)-( bash mi_script.sh argumento1 argumento2

 Como vemos es sencillo y ya mencione como hacerlo

Tutorial
Ahora el hecho es deplazar los argumentos.

En la shell de bash existe un comando llamado shift que lo que hace es desplazar los parámetros de linea de comandos de derecha a izquierda:

parametro2 ocupa el lugar de parametro1 y 3,4,5 tambien se retroceden

Como?

Vamos a poner un ejemplo sencillo en un script:

Han visto los programas tipo consola que usan parametros (-a,-b,-h,-etc) este es un ejemplo de como se hacen esos programas:


#!/bin/bash

parametros="-t -h -p --help"

function ayuda {

echo " -t [Texto]  <Muestra texto>"
echo " -h          <Muestra Hostname>"
echo " -p [Sitio]  <Hace ping>"
echo " --help      <Muestra ayuda>"

}

function uso {

echo "Uso $0 $parametros";

}

if [ $# == 0 ]; then
    uso; exit 1;
fi

case $1 in
--help)
ayuda; 
;;
-t)
shift; echo $1;
;;
-h)
hostname;
;;
-p)
shift; ping $1 
;;
exit)
exit 1;
;;
clear)
clear;
;;
*)
uso;
;;
esac




Bien, el case/esac y el if/fi están explicados en el basic scripting, aquí lo que hay que mencionar es:


case $1 in
--help)
ayuda; 
;;
-t)
shift; echo $1;
;;.......

Como vemos toma como valor el $1 que es el primer parametro,luego lo compara como normalmente,pero cuando llega al comparador -t es cuando inicia la magia de shift:

Desplaza el parámetro $2 a $1 y el comando que sigue,que en este caso es echo toma el parámetro $1 que es el $2:

Ejecuten este script mal hecho(sin shift)


#!/bin/bash

parametros="-t -h -p --help"

function ayuda {

echo " -t [Texto]  <Muestra texto>"
echo " -h          <Muestra Hostname>"
echo " -p [Sitio]  <Hace ping>"
echo " --help      <Muestra ayuda>"

}

function uso {

echo "Uso $0 $parametros";

}

if [ $# == 0 ]; then
    uso; exit 1;
fi

case $1 in
--help)
ayuda; 
;;
-t)
echo $1;
;;
-h)
hostname;
;;
-p)
shift; ping $1 
;;
exit)
exit 1;
;;
clear)
clear;
;;
*)
uso;
;;
esac

El ejemplo es claro:

La orden que esta en case,ejecuta el mismo parámetro que usa case como valor(no lo cambia)



Pensando un poco,podemos darnos cuenta que en este ejemplo podemos tener el mismo resultado así:


#!/bin/bash

parametros="-t -h -p --help"

function ayuda {

echo " -t [Texto]  <Muestra texto>"
echo " -h          <Muestra Hostname>"
echo " -p [Sitio]  <Hace ping>"
echo " --help      <Muestra ayuda>"

}

function uso {

echo "Uso $0 $parametros";

}

if [ $# == 0 ]; then
    uso; exit 1;
fi

case $1 in
--help)
ayuda; 
;;
-t)
echo $2;
;;
-h)
hostname;
;;
-p)
shift; ping $1 
;;
exit)
exit 1;
;;
clear)
clear;
;;
*)
uso;
;;
esac

Como vemos en este ejemplo no es muy necesario shift pero implementandolo en otra cosa si, aquí un script que muestra el funcionamiento de shift para entenderlo mejor:

Copia y ejecuta:


#!/bin/bash

function dormir {

echo "Aguarde..."; sleep 5;

}

if [ $# == 0 ]; then 
echo -e "No hay parametros :( \nUso: $0 parametro1 parametro 2 etc"
exit 1;
fi

clear

echo -e "Misparametros: $# \nParametro 1: $1\nParametro 2: $2\nParametro 3: $3"

echo "Haciendo shift"; shift;dormir;

echo -e "Misparametros: $# \nParametro 1: $1\nParametro 2: $2\nParametro 3: $3"

No vean el script,vean lo que hace el script

Eso es todo :D


A no, me falta hablar sobre las rutinas:

En una no podemos usar estos parametros ya que toma propios

¿?

Que?

A lo que me refiero es que a una rutina, no podemos pasarle parametros desde linea de comandos,debemos pasarle desde el script

Por ejemplo

#!/bin/bash

#Definimos una rutina:

mi_rutina () {

echo $1
echo $2

}
# La llamamos
mi_rutina

Y ejecutamos así

bash mi_script.sh parametro1 parametro2

Como ven ejecuta echo,pero no imprime nada:



Si queremos pasarle un parámetro es desde el mismo script con esta sintaxis:


#!/bin/bash

#Definimos una rutina:

mi_rutina () {

echo $1
echo $2

}
# La llamamos

mi_rutina parametro1 parametro2



Pero si queremos usar argumentos globales podemos hacer mala practica esto:



#!/bin/bash

#Definimos una rutina:

mi_rutina () {

echo $1
echo $2

}
# La llamamos

parametro1=$1
parametro2=$2

mi_rutina $parametro1 $parametro2

Eso es todo





Leer más...

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...

sábado, 15 de diciembre de 2012

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...

lunes, 10 de diciembre de 2012

tbashconverter 1.2.2

Hace un tiempo vengo creando este script escrito en bash con una unión de ffmpeg y zenity como funciones,mas que nada esto es para transformar videos fácilmente.

Lo vengo actualizando y añadiendo cosas,ase un tiempo encontre otro error:

El cual arregle:

Enlace

Ase un tiempo se veía así:



Y lo he mejorado,pero como dije tiene errores y solo los arreglo cuando me doy cuenta (esta entrada es para comentar otro error).

Este error es que no permite archivos con espacios,sea salida o entrada :(

Y me di cuenta al convertir un vídeo con estos espacios, ya que normalmente siempre uso:

Esta sintaxis:

ffmpeg -i nombre-nombre.mp4 nombre.mp3

Pero me di cuenta al hacer

ffmpeg -i nombre nombre nombre nombre.flv no nombre.mp3
No encontraba el archivo y daba error

Así que ya lo arregle,pueden convertir vídeos con salida y entrada con espacios .

Aquí lo pueden descargar:

Enlace

Y lo ejecutan Igual que siempre:

Copian el código de pastebin

En terminal

 cd ~/


 touch tbashconverter.sh


 gedit tbashconverter.sh

Pegan el código guardan y cierran

Y después


 chmod +x tbashconverter-1.2.sh

Y ejecutan con

 ./tbashconverter-1.2.sh

o

 bash tbashconverter-1.2.sh

o

con nautilus clic derecho >> ejecutar >> en un terminal

O si prefieren como ya tiene ruta donde salvar el vídeo pueden moverlo a /usr/bin para poder usarlo donde sea con solo escribir tbashconverter en terminal

 sudo mv ./tbashconverter.sh /usr/bin/tbashconverter


Si encuentran otro error comenten para arreglarlo y mejorar este script :D


Leer más...

Agregar argumentos en linea de comandos a script bash

No se si me explique bien ya que ni yo me entiendo :P

Lo que pasa es esto:

Existen script's que usan esta sintaxis para ejecutar(los normales)

bash script.sh

o

chmod +x scritp.sh

./script.sh

Y lo que vamos a aprender es a hacer esto:

./script argumento

Esto mas que nada se los he mostrado en perl con el uso de $ARGV :


#!/usr/bin/env perl

use strict;
use warnings;
use feature ':5.14';
use Gtk3 -init;
use Glib qw/TRUE FALSE/;

if($ARGV[0]) {

my $foto = $ARGV[0];
my $ventana = Gtk3::Window->new('toplevel');
        $ventana->set_title("$foto");
        $ventana->set_position("mouse");
        $ventana->set_default_size(400, 100);
        $ventana->set_border_width(5);
        $ventana->signal_connect (delete_event => sub { Gtk3->main_quit });

my $imagen = Gtk3::Image->new_from_file ("$foto");

my $hbox = Gtk3::Box->new("vertical", 0);
        $hbox->pack_start($imagen, FALSE, FALSE, 0);

$ventana->add($hbox);

$ventana->show_all;

Gtk3->main;
} else {
        print "\n[+] Sintax : $0 <imagen>\n";
}


También muy bueno para "fabricar" exploits o para Hola Mundo:

Y como hacemos esto en bash, shell scripting ?

Fácil,solo usamos la variable especial de numero :

$1,$2,$etc
Aquí un ejemplo claro(creo)




Esto no es muy usado en scripts bash,por lo menos no tanto como en Perl,pero les puede servir de mucho ya que si nos ponemos a pensar lo podemos usar de muchas maneras para crear grandes scripts desde linea de comandos.

Si tienen dudas pueden comentar :D

Leer más...

sábado, 8 de diciembre de 2012

Como monitorear una aplicación abierta con Perl/bash

El titulo de esta entrada era mas largo, era:

Como monitorear una app abierta y realizar acciones a partir de ella :D

Este tutorial lo iba a hacer solo con bash,pero me quedo corto :(

No,no es cierto bash es muy potente solo que tuve que usar perl esta vez ya que aveces bash no hace lo que necesitamos,ambos lenguajes diseñados para la administración de sistemas tipo Unix.

Vamos a darle un repaso a esto.

Como ya había comentado anteriormente podemos ver el proceso de una aplicacion/programa con ps,en este caso ps -ef,desde aquí podemos tomar acciones con una estructura selectiva:

Por ejemplo

ps -ef | grep gedit | grep -v grep >> /dev/null
Esto lo que hace es checar si esta en proceso gedit,filtra grep para que no tome en cuenta el PID que pide el PID y lo manda al device null,para no ver el proceso.

Y esto para que sirve, así para nada,pero si usamos la variable especial

$?
Nos dice la salida del comando,si no me explico ejecuten esto en terminal

Primero:

Abre un programa(de preferencia uno sencillo de identificar firefox/gedit/etc)

Ejecuta esto en terminal:

ps -ef | grep gedit | grep -v grep >> /dev/null
Luego esto


echo $?
Y la salida sera 0

Ahora cierra el programa y ejecuta de nuevo:


ps -ef | grep gedit | grep -v grep >> /dev/null
echo $?
Y el resultado sera otro (1)


Así que miren como funciona esto en un script

#!/bin/bash


ps -ef | grep gedit | grep -v grep >> /dev/null

if [ $? -eq 0 ]; then

echo "El programa esta abierto"

else 

echo "El programa esta cerrado"

fi




Si queremos una comprobación mayor,podemos usar un bucle,pero eso es otro asunto.

Otra forma es usar otro tipo de estructura selectiva, que es case/esac


#!/bin/bash

ps -ef | grep gedit | grep -v grep >> /dev/null

case $? in

0)
echo "El programa esta abierto.";;

         1)
echo "El programa esta cerrado.";;
   
esac

Ahora en Perl


Para rápidamente vamos a usar comillas invertidas,para poder usar todo lo que dije de bash


my $funcion = `ps aux | grep gedit | grep -v grep`;

Y ahora vamos a usar expresiones regulares como lo explicaba en la entrada pasada:

if ( $funcion !~ m/gedit/) { }

Esto esta un poco extraño,pero sirve para muchas cosas:

Un ejemplo es mi caso, fui a casa de @Daniela a platicar algunas cuestiones,etc llevo mi netbook/laptop o algo portátil ya que su isp es de 100mb y la mía a lo mucho llega a 5mb y me deja descargar cosas muy pesadas ISO's/etc ,pero pues como nos gusta la informática y estoy en su red debo ir preparado, ya que hay un ataque que se llama Man in the middle que en este caso es Girl in the middle XDDD, así que debo ir preparado para esto, y como este ataque se basa en arp,hay herramientas como watch arp que monitorea todo eso,el adress de donde viene la señal,la MAC adress de router y otras cosas mas, así que si nos cambian la MAC adress del router por una de una pc personal para efectuar el MitM se vería en watch arp como suplantan la Adress de router por la de una pc que esta haciendo ARP Spoofing con forwarding.

Y esto no depende del sistema que use, sea Linux(Arch/Gentoo)/BSD(FreeBSD/openBSD)/Windows(}:D)/OS X(Lion/etc) esto es de nuestra conexión y de los paquetes que entran y salen de nuestra pc.

Imagen de bujarra.com



Ese es un ejemplo y muy propio, a menos de que les pase algo similar con personas que conozcan que puedan efectuar estos ataques, también sirve para crear buenos script's solo que en este caso yo necesite este.

Así que lo que hice fueron varias cosas,pero aquí solo de lo que se trata el tema,monitorear un programa abierto:


my $funcion = `ps aux | grep arp | grep -v grep | grep -v perl`;

Eso checa que este abierto watch arp

Pero de lo que se trata es que no tengo mucha memoria,asi que lo que hice fue poner un recordatorio a la hora de abrir la terminal.

Lo que hace es: Abro la terminal,se da cuenta si tengo corriendo watch arp,si lo tengo corriendo no pasa nada,pero si no,me pregunta si lo quiero abrir y si le digo que si,lo abre,luego abro otra terminal y como sin nada :D.

Esto va así:

#!/usr/bin/env perl

use strict;
use warnings;
use utf8;

my $funcion = `ps aux | grep arp | grep -v grep | grep -v perl`;


if ( $funcion !~ m/arp/) {

print "Usar arp s/n: ";
my $respuesta = <STDIN>;

if ($respuesta =~ m/s/) { system("watch arp"); }
elsif ($respuesta =~ m/n/) { system("clear") }
else{ exit;}
}

else { system("clear"); } 

En donde dije que no me funciono bash fue en que no me abrió watch arp :(

Explico el codigo



#!/usr/bin/env perl

use strict;
use warnings;
use utf8;

my $funcion = `ps aux | grep arp | grep -v grep | grep -v perl`;


if ( $funcion !~ m/arp/) { # Checamos si encuentra arp en el proceso

# Si no es asi...

print "Usar arp s/n: "; # Pregunta
my $respuesta = <STDIN>; # Recibe la respuesta

if ($respuesta =~ m/s/) { system("watch arp"); } # Checa la respuesta si dice que si
elsif ($respuesta =~ m/n/) { system("clear") } # Si dice que no
else{ exit;} # Si dice otra cosa
}

else { system("clear"); } # Si lo encuetra


Y si lo queremos ejecutar al abrir la terminal solo hacemos:

echo 'perl scritp.pl' >> ~/.bashrc



Bueno eso es todo,sobre el monitoreo de arp spoofing hablaremos luego.


Leer más...