Buscar en este blog

31.12.09

Encontrar un Comando con Apropos

apropos
Linux tiene multitud de comandos, es por ello que en ocasiones podemos olvidarnos del nombre de alguna utilidad, especialmente si no la utilizamos con frecuencia. Cuando nos encontremos en esta situación y antes de darnos por vencidos, lanzaremos apropos (o su análogo man -k).
Continua Leyendo....

24.12.09

Iniciar Aplicaciones Graficas con SSH

Para poder seguir esta guía, es necesario que tengas instalado y configurado tu servidor Ssh.
Para ejecutar aplicaciones gráficas a través de conexiones ssh,  hay que habilitar X11 Forwarding. Esta opción hay que habilitarla tanto en el Servidor como en el Cliente.
Además en el Servidor tenemos que instalar xorg-xauth:
pacman -S xorg-xauth
Una vez instalado modificamos el archivo sshd_config
nano /etc/ssh/sshd_config
añadiendo las siguientes líneas:
AllowTcpForwarding yes
X11Forwarding yes
X11DisplayOffset 10
X11UseLocalhost yes
En el Cliente también tenemos que editar el archivo de configuración:
nano /etc/ssh/ssh_config
Y por último, para poder ejecutar aplicaciones x11 remotamente, debemos iniciar la sesión ssh con la siguiente orden:
ssh -X -p port user@server-address
Si recibes errores durante la ejecución de aplicaciones, prueba con esta otra orden:
ssh -Y -p port user@server-address
Ahora puedes ejecutar cualquier aplicación gráfica de forma remota gracias a SSH.

1.12.09

Comandos Basico de Pacman!

Los que ya probaron la distribución Arch Linux probablemente ya conocen a pacman, un excelente gestor de paquetes que hace parte de Arch Linux.
El gestor pacman trabaja con paquetes binarios y las fuentes y su nombre viene de la abreviación de Package Manager. Aunque tenga la opción de trabajar con los paquetes con el código fuente (sources), en esta primera parte me limitaré a mostrar a algunos de los parámetros más utilizados del comando pacman.
Veamos los principales comandos de pacman:
  • pacman -Sy --> Sincroniza la base de datos con los repositorios.
  • pacman -Su --> Actualiza el sistema completo.
  • pacman -S --> Instala un paquete.
  • pacman -R --> Desinstala un paquete.
  • pacman -Rs --> Desinstala un paquete junto a las dependencias no utilizadas por otros paquetes.
  • pacman -Ss --> Permite buscar a un paquete específico.
  • pacman -Sw --> Descarga el paquete pero no lo instala.
  • pacman -Si --> Muestra información sobre un paquete no instalado.
  • pacman -Qi --> Muestra información sobre un paquete ya instalado.
  • pacman -Se --> Instala solamente las dependencias del paquete.
  • pacman -Ql --> Muestra todos los archivos pertenecientes al paquete.
  • pacman -Qu --> Muestra los paquetes del sistema que pueden ser actualizados, pero no los instala.
  • pacman -Q --> Muestra una lista de todos los paquetes instalados en el sistema.
  • pacman -Qo --> Muestra a cual paquete pertenece un archivo en especial.
  • pacman -Sc --> Borra todos los paquetes antiguos guardados en la caché de pacman.
  • pacman -Scc --> Borra todos los paquetes guardados en la cache de pacman ubicado en /var/cache/pacman/pkg.
  • pacman -A --> Instala un paquete guardado en una carpeta local.
El comando pacman posse muchos más parámetros para ayudar en la gestión de los paquetes. Si quieres conocer todos los parámetros del comando pacman, ejecuta el comando man pacman.
Ver más en: http://www.archivogeek.com/linux/archlinux/conociendo-pacman-de-arch-linux/

21.11.09

Eliminar Paquetes Inecesarios en Arch

Para remover todos lo huérfanos: (Revisar y confirmar la sálida de pacman -Qdt primero)

pacman -Rsn $(pacman -Qdtq)

6.11.09

Configurar MSN en Evolution

Nos sentraremos en dos ventanas en específico, ENVIO y RECEPCION

En la Ventana de Recepcion Apliquen lo siguiente:

Recepción: pop3.live.com
Usuario: usuario@hotmail.com (aqui va el suyo)
Usar conexión segura: cifrado SSL
Tipo de autenticación: contraseña


En la ventana de Envio Apliquen lo siguiente:


Envío: smtp.live.com:587
Marcar “el servidor requiere autenticación”
Usar conexión segura: cifrado TSL
Autenticación: Inicio de sesión
Usuario: usuario@hotmail.com

3.11.09

Vaya odisea, Visual Studio Professional 2008 español es la aplicación que, con creces, me ha dado más problemas al instalar que cualquier otra instalación en mi vida. Errores por todos lados. Y eso, que la instalación la realizaba sobre un Windows Vista Ultimate, recien instalado y totalmente actualizado. Sólo había instalado Microsoft Office 2007. Se suponía que el sistema estaba niquelado.

Después de visitar las numerosas páginas que hablan del tema, incluido el foro de Microsoft para tal efecto, no conseguía que la instalación finalizara. Seguía todos los pasos de aquellos que también se habían encontrado en mi misma situación, pero nada, no había forma, no conseguía superar la instalación del componente de creación de web como muestra la imagen.



31.10.09

Cómo cortar archivos grandes en Linux… y después pegarlos

En algunas ocasiones me he visto en la necesidad de cortar archivos grandes para después pegarlos en otra ubicación ya sea para facilitar su transporte, o simplemente porque no he tenido como pasarlo en un solo archivo.

La manera más cómoda para mi ha sido utilizar 2 comandos fabulosos. Imaginemos que tenemos un archivo de 800 MB que se llama pelicula.avi y queremos cortar este archivo en pedazos de 100MB cada uno, pues solamente tecleamos.
split -b100m pelicula.avi >


esto nos va a crear pedazos de 100MB con el nombre pelicula_pedazos y que después pegaríamos con este otro comando:

cat pelicula_pedazos.* > >

Con esto nos genera un archivo con la suma de todas las partes llamado pelicula_pegada.avi

NOTA:

El tamaño indíca los bytes con letras: b para 512, k para 1k, m para 1 Mega.
Fecha: 25/10/2009
Fuente: cesarius.net

26.10.09

Guarda el texto de una sesión ssh

Guarda el texto generado por una sesión ssh

ssh usuario@dominio | tee archivo_log

Con lo que podrás revisar la salida de los comando usados en la sesión remota

Instalación y uso de OpenSSH

El protocolo de red SSH permite intercambiar datos de modo seguro entre dos dispositivos de red. Su uso principal es el de poder acceder a un terminar con la seguridad de que la comunicación esta cifrada. Para el usuario usar SSH para ejecutar programas en la maquina remota es igual a como lo haría con un terminal en local.

Para disponer de un servidor de SSH en Ubuntu deberemos instalar el servidor OpenSSH con la siguiente orden:

sudo apt-get install openssh-server


tras lo cual nos pedirá la contraseña, empezara a descargar de Internet los paquetes necesarios y procederá a su instalación.

o mediante Synaptic, Editar → Marcar Paquetes por tarea
Marcamos OpenSSH server, Aceptar y Aplicar

Para probar que la instalación es correcta podemos usar la siguiente orden donde usuario será un usuario que exista en nuestra maquina

ssh usuario@127.0.0.1

como es la primera vez que conectamos a nuestro servidor SSH nos mostrará un mensaje similar a

The authenticity of host '127.0.0.1 (127.0.0.1)' can't be established.
RSA key fingerprint is 8d:34:9d:f9:a8:c8:c3:1f:17:24:3c:ad:89:8b:64:df.
Are you sure you want to continue connecting (yes/no)?

A lo que tendremos que responder “yes” para aceptar la clave de cifrado. A partir de este punto la conexión es segura con lo que nos pedirá la contraseña para poder acceder al usuario usuario. Después si la contraseña es correcta tendremos acceso a la linea de comando remota como si fuera un terminal local.

Para acceder a una máquina en Internet el comando sería similar a

ssh usuario@dominio.com

donde dominio.com seria el nombre de dominio de la máquina remota. Nos enviará la clave RSA. La aceptaremos. Nos pedirá la contraseña del usuario y si es correcta tendremos acceso.

Una utilidad que considero imprescindible para trabajar con el terminal es el Midnight Commander que es un clon mucho mas avanzado del mítico Comandante Norton.
Se instala con la siguiente orden

sudo apt-get install mc

y se ejecuta con

mc

Las claves RSA se guardan en un archivo llamado “know_hosts” en un directorio oculto de cada usuario llamado .ssh

También podemos ejecutar aplicaciones gráficas de modo remoto si usamos el modificador -X

ssh –X usuario@dominio.com

posteriormente ejecutamos por ejemplo

nautilus

con lo que se abrirá el navegador de archivos Nautilus y podemos explorar los archivos de usuario de la máquina remota tal como si fuera en la máquina local.

Haciendo uso del comando scp podremos copiar desde y hacia la máquina remota archivos. Para copiar un archivo hasta la máquina remota usaremos

scp archivolocal usuario@dominio.com:archivoremoto

y para traernos un archivo usaremos

scp usuario@dominio.com:archivoremoto archivolocal

Donde usuario es un usuario válido del que dispondremos de contraseña. dominio.com será el nombre de la máquina remota, y archivolocal y archivoremoto lo que pretendemos copiar

Todo lo que hemos visto funciona perfectamente en Ubuntu 8.10.

Fuente: UbunTux

22.10.09

Bash (IV) - Estructuras de control y bucles

En nuestra cuarta entrega sobre la introduccion a el interprete de comandos Bash, vamos a ver una pequeña introduccion a las estructuras de control y bucles en Bash. Estas construcciones nos ayudan a controlar la ejecucion de un script y a obtener diversos resultados dependiendo de las condiciones que se cumplan o no cuando ejecutamos el script.

En Bash existen estas construcciones para controlar el flujo de ejecucion de un script:

* if/else: Ejecuta una serie de comandos dependiendo si una cierta condicion se cumple o no.
* for: Ejecuta una serie de comandos un numero determinado de veces.
* while: Ejecuta una seria de comandos mientras que una determinada condicion sea cumpla.
* until: Ejecuta una serie de comandos hasta que una determinada condicion se cumpla.
* case: Ejecuta una o varias listas de comandos dependiendo del valor de una variable.
* select: Permite seleccionar al usuario una opcion de una lista de opciones en un menu.


Comparaciones de cadenas alfanumericas

Operador  Verdad (TRUE) si:
------------------------------------------
cadena1 = cadena2 cadena1 es igual a cadena2
cadena1 != cadena2 cadena1 no es igual a cadena2
cadena1 < cadena2 cadena1 es menor que cadena2
cadena1 > cadena 2 cadena1 es mayor que cadena 2
-n cadena1  cadena1 no es igual al valor nulo (longitud mayorque 0)
-z cadena1  cadena1 tiene un valor nulo (longitud 0)

Comparacion de valores numericos

Operador  Verdad (TRUE) si:
------------------------------------------
x -lt y   x menor que y
x -le y   x menor o igual que y
x -eq y   x igual que y
x -ge y   x mayor o igual que y
x -gt y   x mayor que y
x -ne y   x no igual que y

Comprobacion de atributos de fichero


Operador  Verdad (TRUE) si:
------------------------------------------
-d fichero  fichero existe y es un directorio
-e fichero  fichero existe
-f fichero  fichero existe y es un fichero regular (no un
   directorio, u otro tipo de fichero especial)

-r fichero  Tienes permiso de lectura en fichero
-s fichero  fichero existe y no esta vacio
-w fichero  Tienes permiso de escritura en fichero
-x fichero  Tienes permiso de ejecucion en fichero (o de busqueda
   si es un directorio)

-O fichero  Eres el dueño del fichero
-G fichero  El grupo del fichero es igual al tuyo.

fichero1 -nt fichero2 fichero1 es mas reciente que fichero2
fichero1 -ot fichero2 fichero1 es mas antiguo que fichero2

Podemos combinar varias condiciones con los simbolos '&&' (AND) y '||' (OR), y negar una condicion con '!'. Unos ejemplos mas adelante aclararan como utilizarlos.

if/else

La sintaxis de esta construccion es la siguiente:

if "condicion"
then
  "comandos"
[elif "condicion"
then
  "comandos"]
[else
  "comandos"]
fi

Como ya hemos dicho, podemos comprobar los valores de terminacion de un comando, y comparar cadenas alfanumericas/numericas y atributos de ficheros. Nada mejor que unos ejemplos para aclararnos las ideas.

#!/bin/bash
#
# Comprobando terminacion de un comando
#

DIRECTORIO="/tmp/test"

COMANDO="/bin/mkdir $DIRECTORIO"

if $COMANDO
    then
    echo "$DIRECTORIO ha sido creado"
else
    echo "$DIRECTORIO no pudo ser creado"
fi
#!/bin/bash
#
# Comparacion de cadenas alfanumericas
#

CADENA1="uno"
CADENA2="dos"
CADENA3=""

if [ $CADENA1 = $CADENA2 ]; then
    echo "\$CADENA1 es igual a \$CADENA2"

elif [ $CADENA1 != $CADENA2 ]; then
    echo "\$CADENA1 no es igual a \$CADENA2"

fi

if [ -z $CADENA3 ]; then
    echo "\$CADENA3 esta vacia"
fi

#!/bin/bash
#
# Comparacion de valores numericos
#

let NUM1=1
let NUM2=2
let NUM3=3

if [ $NUM1 -ne $NUM2 ] && [ $NUM1 -ne $NUM3 ]; then
    echo "\$NUM1 es diferente a \$NUM2 y \$NUM3"
fi

if [ $NUM1 -lt $NUM3 ]; then
    echo "\$NUM1 es menor que \$NUM3"
fi

for

La sintaxis de esta construccion es la siguiente:

for nombre [in lista]
do
   comandos que pueden utilizar $nombre
done

Un ejemplo nos aclarara las cosas. Vamos a listar informacion en el DNS de una lista de direcciones web:

#!/bin/bash

for HOST in www.google.com www.altavista.com www.yahoo.com

do
  echo "-----------------------"
  echo $HOST
  echo "-----------------------"
  
  /usr/bin/host $HOST
  echo "-----------------------"

done

while

La sintaxis de esta construccion es la siguiente:

while condicion
do
  comandos
done

Un ejemplo simple con while en donde escribimos el valor de una variable 10 veces, despues de incrementar su valor:

#!/bin/bash

NUM=0

while [ $NUM -le 10 ]; do
    echo "\$NUM: $NUM"
    let NUM=$NUM+1
done

until

La sintaxis de esta construccion es la siguiente:

until condicion; do
   comandos
done

Un ejemplo simple con until en donde escribimos el valor de una variable 10 veces, despues de incrementar su valor:

#!/bin/bash

NUM=0

until [ $NUM -gt 10 ]; do
    echo "\$NUM: $NUM"
    let NUM=$NUM+1
done

case

La sintaxis de esta construccion es la siguiente:

case expresion in
     caso_1 )
        comandos;;
     caso_2 ) 
 comandos;;
     ......
esac  

Un ejemplo simple con case para aclarar las cosas:

#!/bin/bash

for NUM in 0 1 2 3
do
  case $NUM in
      0)
   echo "\$NUM es igual a cero";;
      1)
   echo "\$NUM es igual a uno";;
      2)
   echo "\$NUM es igual a dos";;
      3)
   echo "\$NUM es igual a tres";;
  esac
done

select

La sintaxis de esta construccion es la siguiente:

select nombre [in lista]
do
  comandos que pueden utilizar $nombre
done

Un ejemplo simple para aclarar las cosas.

#!/bin/bash

select OPCION in opcion_1 opcion_2 opcion_3
  do
  if [ $OPCION ]; then
      echo "Opcion elegida: $OPCION"
      break
  else
      echo "Opcion no valida"
  fi
done


3.10.09

Wallpaper de la Tierra en Tiempo Real

Bueno pues solo ejecutando un script se puede tener en tu fondo de escritorio el wallpaper de la tierra y no consume mas de 400 kb quedaria algo asi:
(dar clic para ampliar)




los pasos son:
1.
descarga el script.


script


2.
Abre una terminal.

cd /ruta del archivo


3.
Ejecuta el script.

chmod +x changer.sh


4.
vamos a sistema--preferencias---aplicaciones al inicio y hacemos esto:
Campo Nombre: Earth Wallpaper (o papel tapiz de la tierra, malditos anglicismos)
Campo Orden: la ruta y el comando donde pusieron el archivo "charger.sh" (ejm. /home/usuario/earthwallpaper/charger.sh)




5.
Ahora tendrás que escoger como imagen de fondo de Escritorio la imagen llamada world_sunlight_Wallpaper.jpg que se encuentra en la carpeta "~/.gnome2" (/home/usuario/.gnome2).
Listo con esos sencillos pasos podrás ver a la tierra en una vista satelital, por así decirlo, y cambiando cada hora...

Reinstalar el GRUB

Iniciando un Live CD Introducid un Live CD de vuestra distro en la unidad CD-ROM e iniciad/reiniciad el equipo. Tenéis que seguraros de en la secuencia de arranque de la BIOS esté primero dicha unidad CD-ROM que el disco duro.
Si no estáis seguros o no sabéis dónde mirarlo, antes de que inicie el sistema operativo u os dé el mensaje de que no lo encuentra, pulsad la tecla para acceder a la BIOS. Normalmente es la tecla “Supr” o “F2″. Una vez dentro buscad la opción, normalmente se llama “Boot Sequence”.
Una vez configurada la secuencia de arranque, guardad los cambios y os arrancará el Live CD.
¿Cual es el disco duro donde tengo que instalar grub? Estando ya en el Live CD y antes de deciros cómo reinstalar grub debéis saber qué disco duro -si tenéis más de uno-. Normalmente es el primero, es decir “hda“, aunque puede ser otro. Si no estáis seguros podéis comprobarlo abriendo una terminal y tecleando este comando:
$ sudo fdisk -l

Los usuarios que no estén usando el Ubuntu Live CD tendrán que ejecutar el comando como superadministrador.
Lo que hace este comando es decirnos los discos duros que tenemos y las particiones que tienen. Buscad el disco donde esté la partición de vuestro Windows (que será la primera del disco en cuestión). La partición estará identificada de una forma similar a: hda1, sda1, hdb1, etc. Una vez identificada lo que nos interesa es el hda, sda, hdb… que es el disco donde tenemos que instalar grub.
En la salida del comando tenéis que identificar también cual es la partición de vuestro sistema GNU/Linux. Podréis identificarla por el sistema de ficheros (ext3 o ext2) junto con el tamaño de dicha partición. Quedaros con el número, además del disco, es decir hda2, sda3, hdb5 o la que sea.
Otra alternativa para hacer todo esto es abrir gparted y verlo de forma gráfica.
Ahora podemos reinstalarlo.
Reinstalar grub Conocido el disco duro en cuestión (seguiré el tutorial con hda como ejemplo, vosotros lo tendréis que cambiar por el vuestro si es distinto) pasamos a reinstalar grub.
Os voy a explicar brevemente lo que vamos a hacer: Vamos a crear una carpeta donde montaremos la partición donde tenemos nuestro GNU/Linux. Usaremos ese sistema de ficheros como el actual e instalamos grub. El paso por paso sería tal que así (los usuarios que no estén usando el Ubuntu Live CD, deberán ejecutar el comando como administrador, en aquellas órdenes donde aparezca el sudo):
Creamos la carpeta “pepino” en la cuenta creada en el LiveCD llamada “ubuntu”, por lo tanto:


$ mkdir /home/ubuntu/pepino


Montamos la partición del GNU/Linux instalado en dicha carpeta (cambiar por ext2 o el sistema de fichero que usas si no es ext3). Siguiendo como ejemplo mi sistema, pongamos que es hda2:


$ sudo mount -t ext3 /dev/hda2 /home/ubuntu/pepino


Convertimos esa partición en el directorio raíz del sistema. Cuidado a partir de ahora si hacéis algo de más, porque se reflejará en vuestro sistema real, no el del Live CD.


$ sudo chroot /home/ubuntu/pepino


E instalamos grub (dijimos que el disco duro sería hda, como ejemplo):


$ sudo grub-install /dev/hda


Listo. Cerramos la consola, reiniciamos el sistema, arrancamos desde el disco duro en lugar del CD (volved a cambiar el orden si queréis) y ya debería apareceros vuestro grub con vuestros sistemas disponibles.

--reinstalar el grub--


otra altenativa

28.9.09

Cambiar formato a 12Hrs (am/pm)

Te habrás dado cuenta que si cambias el formato del reloj a 12 horas este no tiene ningún efecto, esto se debe a que las librerías de la configuración de algunos países no está correctamente configurado para este cambio, para corregir esto debes hacer lo siguiente:
1. Ir a Aplicaciones/Accesorios/Terminal
2. Una vez abierto “Terminal”, debes abrir el archivo de lenguaje perteneciente a tu configuración, en mi caso es Republica dominicana
osea (DO)
Argentina (AR)
y asi por el estilo, pero si no estas seguro ve al directorio

Cita :/usr/share/i18n/locales



En la termianl escribe:

Cita :sudo gedit /usr/share/i18n/locales/es_DO




abrirá el archivo en “gedit” el cual procederás a editar de la siguiente forma:
3. Para cambiar primer día en el calendario, busca la línea donde dice:



Cita :“first_weekday 2“, y cambia el valor 2 por el valor 1




4. Para activar el formato 12 horas, busca la línea donde dice:


Cita :am_pm "";""



y la reemplazas por:


Cita :am_pm "";""




lo mismo con la línea donde dice:

Cita :t_fmt_ampm ""



y la reemplazas por:


Cita :t_fmt_ampm "/"




5. Para guardar los cambios dar clic en “Guardar” y luego cerrar el archivo
6. Una vez de nuevo en la Terminal, escribe:


Cita :sudo locale-gen




Espera que termine y cierra la secion o reinicia, y al volver cambia el formato por 12 horas

Averiguar programas instalados, con bash.

Aprobechando la caracteristica de autocompletado de bash podemos hecer un simple

$m

y pulsar la tecla Tab, a lo que bash nos informa que hay 187 concordancias

Display all 187 possibilities? (y or n) (pulsamos "y", claro, y nos las presenta)
m-a mgrtopbm mlocate mtp-emptyfolders

Esto lo podemos hacer con todas las letras del abecedario.
Se puede acotar la busqueda introduciendo mas letras, por ejemplo "ma".


Si no conocemos para que sirven algunos de los programas listados podemos utilizar el comando "apropos palabra clave de busqueda (o programa)".Por ejemplo

$apropos free

Dentro del resultado encontraremos una pequeña descripción de él.
Si la salida fuera muy extensa podriamos paginarla añadiendo una tuberia hacia less.

$apropos free | less

Cuando se producen varias salidas de manual, free (1), free (3), etc podemos verlas forzando a "man" a mostrar todas las paginas disponibles en todas las secciones

$man -a free
--Man-- próxima: free(1) [ ver (return) | siguiente (Ctrl-D) | salir (Ctrl-C) ]
(Aquí ya vimos la pagina disponible en la sección (1)... y pulsammos Ctrl-D para ver la correspondiente a la (3))
--Man-- próxima: free(3) [ ver (return) | siguiente (Ctrl-D) | salir (Ctrl-C) ]

Podeis comparar la salida, por ejemplo, de "a"-Tab con los programas listados en Synaptic >Instalados, para ver una sutil diferencia.

Bash (III) - Variables y funciones

En nuestra tercera entrega sobre el interprete de comandos Bash vamos a empezar a ver como podemos usar de forma practica la informacion que hemos visto en los articulos anteriores. Para empezar y antes de entrar en materia, nada mejor que un ejemplo del clasico "Hola Mundo" en Bash.

#!/bin/bash
#
# Esto es un ejemplo en Bash del clasico "Hola Mundo"
#

echo "Hola Mundo"

Como podeis ver, nada dificil para empezar. Empecemos a explicar un poco que significa cada linea:

#!/bin/bash: Esta linea indica donde se encuentra el interprete de comandos en nuestro sistema. Por defecto todos los sistemas que tengan Bash instalado, lo tendran en el directorio /bin. Al utilizar esta linea, podremos ejecutar el script como un programa normal, ya que el sistema sabra que es un script en Bash y que tiene que hacer con el.

Si el script de ejemplo lo hubiesemos grabado como ejemplo.sh, lo podriamos ejecutar de la siguiente manera:

[ralfm@desktop]# chmod ugo+x ejemplo.sh
[ralfm@desktop]# ./ejemplo.sh
Hola Mundo

# Esto es un ejemplo en Bash del clasico "Hola Mundo": Esto es un comentario. Todas las lineas que empiecen con el simbolo '#' seran tratadas como comentarios y no se ejecutaran.

echo "Hola Mundo": Esto es el comando que imprime la cadena de texto en pantalla.
Variables

En todo script tendreis que trabajar con variables, mas tarde o mas temprano. Vamos a ver como se definen y usan. Una buena costumbre cuando definamos variables en Bash es utilizar letras mayusculas, esto no es necesario, pero nos ayudara a tener un script mas facil de entender.
Definiendo una variable

#!/bin/bash
#
# Esto es un ejemplo en Bash del clasico "Hola Mundo"
#

MENSAJE="Hola Mundo"
echo $MENSAJE

Hemos definido una variable llamada MENSAJE con el valor "Hola Mundo", y la hemos usado con el comando echo para escribir el valor de la misma. Las variables en Bash se definen como NOMBRE=valor (sin espacios antes o despues del simbolo '=') y su valor se usa, poniendo el simbolo '$' delante del nombre de la variable, $NOMBRE.

Si al utilizar el valor de una variable, el nombre de variable esta seguido de un caracter que sea otra letra, numero o el simbolo '_', tendremos que utilizar los simbolos '{}' alrededor del nombre de la variable.

#!/bin/bash

FICHERO="registro"
echo ${FICHERO}_2006.txt

Usando variables de entorno

#!/bin/bash

echo "El usuario '$USERNAME' ha ejecutado el script $0, en el ordenador '$HOSTNAME'. "

Tambien se pueden usar en nuestro scripts, variables que no hemos definido nosotros. Estas variables son las llamadas 'variables de entorno' del sistema. Teneis una lista con las mas importantes por defecto, en el segundo articulo de esta serie, Bash (II) - Comandos, variables de entorno y combinaciones de teclas. En nuestro ejemplo hemos utilizado $USERNAME y $HOSTNAME para obtener el nombre de usuario y del ordenador. La variable $0 contiene el nombre del script, mas adelante explicaremos esto.
Asignado resultados de comandos a variables

#!/bin/bash

ATRIBUTOS_SCRIPT=`/bin/ls -l $0`

echo "El usuario '$USERNAME' ha ejecutado el script $0, en el ordenador '$HOSTNAME'. "
echo "Los atributos del script son: "
echo $ATRIBUTOS_SCRIPT

Tambien podemos asignar la salida que producen los comandos del sistema a una variable. En nuestro ejemplo hemos asignado la salida del comando 'ls -l a una variable llamada ATRIBUTOS_SCRIPT. Esto nos sera muy util en nuestros scripts para obtener informacion del sistema que podremos utilizar en nuestros scripts.
Usando caracteres especiales en variables

Existen una serie de caracteres que tienen un significado especial en Bash, por ejemplo $ y ". Si queremos usar literalmente estos caracteres en el valor de una variable tendremos que usar el simbolo '\' delante de ellos.

#!/bin/bash

MENSAJE="\"Hola Mundo ...\""
echo "El valor de la variable \$MENSAJE es $MENSAJE"

Variables numericas

Si queremos definir variables numericas para su utilizacion en scripts Bash podemos utilizar el comando let. Nada mejor que un ejemplo para ver como se trabaja con variables numericas.

#!/bin/bash

let A=100
let B=200
let C=$A+$B

echo "A: $A | B: $B | C: $C"

Funciones

En Bash se pueden definir funciones. Una funcion en Bash (denominada subrutina o procedimiento en otros lenguajes de programacion) se podria definir como un script dentro de un script. Sirve para organizar un script en unidades logicas de manera que sea mas facil mantenerlo y programarlo. En Bash las funciones se pueden definir de la siguiente manera:

function nombre_de_funcion(){
comandos_del_shell
}

Un ejemplo de funcion en un script:

#!/bin/bash

let A=100
let B=200

#
# Funcion suma()
# Suma los variables A y B
#
function suma(){
let C=$A+$B
echo "Suma: $C"
}

#
# Funcion resta()
# Resta los variables A y B
#
function resta(){
let C=$A-$B
echo "Resta: $C"
}

suma
resta

En fin, esto es todo por hoy. En la proxima entrega hablaremos de las estructuras condicionales: if/else, for, case, select y while/until.

26.9.09

Bash (II) - Comandos, variables de entorno y combinaciones de teclas

En este segundo articulo sobre el interprete de comandos bash, vamos a ver tres cosas importantes cuando trabajamos con bash:

* Los comandos y palabras reservadas
* Las variables de entorno
* Combinaciones especiales de teclas


Estas tres cosas nos van a ayudar a trabajar y a escribir scripts y ficheros de configuracion en bash, a conseguir informacion sobre el interprete de comandos y a hacernos nuestro dias como administradores mucho mas faciles y llevaderos (siempre que usemos Bash como nuestro interprete de comandos).
Comandos y palabras reservadas

Aqui tenemos los comandos y palabras reservadas mas importantes que se pueden utilizar con bash, tanto desde scripts como desde la linea de comandos. Mas adelante en esta serie de articulos explicaremos y daremos ejemplos de como usarlos.


Comando Explicacion
-----------------------------------------------------------------------------
! Palabra reservada. Valor logico NOT del codigo de retorno de
un comando
: No hace nada (expande cualquier argumento)
. Lee un fichero y ejecuta su contenido en el interprete de
comando actual

alias Configura un 'alias' para un comando o linea de comandos
bg Pone un trabajo en 'background'
bind Asigna una secuencia de teclas a una funcion 'readline' o macro
break Sale de un bucle for, select, while o until
builtin Ejecuta el interprete de comandos especificado
case Palabra reservada. Construccion condicional
cd Cambia el directorio de trabajo actual.
command Ejecuta un comando sin pasar por la funcion de busqueda del
interprete de comandos.
continue Salta a la siguiente interacion en un bucle for, select, while
o until
declare Define variables y les da atributos
dirs Muestra la lista actual de directorios recordados
disown Remueve un trabajo/proceso de la tabla de trabajod/procesos
do Palabra reservada. Parte de un bucle for, select, while
o until
done Palabra reservada. Parte de un bucle for, select, while
o until
echo Expande e imprime cualquier argumento
elif Palabra reservada. Parte de una construccion if
else Palabra reservada. Parte de una construccion if
enable Enable and disable built-in shell commands
esac Palabra reservada. Parte de una construccion case.
eval Ejecuta los argumentos dados a traves de la linea de comandos
exec Reemplaza el interprete de comandos con el programa definido
exit Sale de el interprete de comandos
export Crea variables de entorno
fc Edita el fichero con la historia de comandos usados
fg Pone un trabajo/proceso en background a foreground
fi Palabra reservada. Parte de un construccion if.
for Palabra reservada. Bucle de tipo for.
function Define una funcion.
getopts Procesa opciones de la linea de comandos.
hash Rutas de acceso completas son determinadas y recordadas
help Muestra informacion sobre comandos embedidos.
history Muestra la historia de comandos usados
if Palabra reservada. Construccion condicional de tipo if
in Palabra reservada. Parte de una construccion condicional de
tipo case
jobs Muestra una lista con trabajos/procesos ejecutandose en background
kill Manda una signal a un proceso
let Asigna una variable aritmetica
local crea una variable local
logout Sale de un interprete de comando de tipo login
popd Remueve un directorio del 'stack' de directorios
pushd Añade un directorio al 'stack' de directorios
pwd Muestra el directorio de trabajo actual.
read Lee una linea en el 'standard input'
readonly Hace las variable del tipo solo lectura
return Retorna de una funcion o script
select Palabra reservada. Construccion del tipo generacion de menus.
set Define opciones
shift Cambia argumentos de la linea de comandos.
suspend Suspende la ejecucion de un interprete de comandos.
test Evalua una expresion condicional.
then Palabra reservada. Parte de una construccion if.
time Palabra reservada. Ejecuta un comando y muestra los tiempos de
ejecucion. El formato de salida puede ser controlado con
TIMEFORMAT
times Muestra los tiempos de usuario y sistema acumulados para
procesos ejecutados desde el interprete de comandos
trap Define una rutina para atrapar una 'signal'
type Identifica la fuente de un comando
typeset Define variables y les da atributos. Igual que 'declare'
ulimit Define/muestra los limites de recursos para los procesos
umask Define/muestra la mascara de los permisos de ficheros
unalias Remueve definiciones de alias
unset Remueve definiciones de variables o funciones
until Palabra reservada. Bucle de tipo until
wait Espera a que trabajos/procesos en background terminen de ejecutarse
while Palabra reservada. Bucle de tipo while


Variables de entorno

A continuacion tenemos la lista de variables reservadas por el interprete de comandos mas comunes. Todas ellas tienen un significado especial para el mismo, algunas de ellas solo se pueden leer, a otras se le asignan ciertos valores automaticamente y algunas pierden su significado si le cambiamos los valores que tienen por defecto.

Variable Explicacion
---------------------------------------------------------------------------

CDPATH Una lista de directorios separados por el signo ':' usada como
ruta de acceso por el comando cd
HOME El directorio principal de usuario
IFS Una lista de caracteres para separar campos; usado cuando el
interprete de comandos separa palabras como parte de una expansion.
MAIL Si este parametro tiene un fichero definido y la variable
MAILPATH no esta definida, bash informa al usuario de la
llegada de correo al fichero especificado.
MAILPATH Una lista de ficheros separada por comas, en los cuales el
interprete de comandos comprueba periodicamente de la llegada
de correo.
OPTARG El valor del ultimo argumento procesado por getopts.
OPTIND El indice del ultimo argumento procesado por getopts
PATH Una lista de directorios, separados por comas, en los cuales
el interprete de comandos busca por comandos
PS1 Prompt principal. El valor por defecto es “'\s-\v\$ '
PS2 El prompt secundario. El valor por defecto es '> '

auto_resume Esta variable controla como el interprete de comandos
interaciona con el control de usuario y trabajos/procesos
BASH La ruta de acceso completa usada para ejecutar la instancia
actual de bash
BASH_ENV Si esta variable esta definida cuando bash es llamado para
ejecutar un script, su valor es expandido y usado como el
nombre del fichero leido antes de ejecutar el script.
BASH_VERSION El numero de version de bash usada
BASH_VERSINFO Una matriz de solo lectura con informacion sobre la version de
bash usada.
COLUMNS Usada por 'select' para determinar el ancho de la terminal
cuando imprime listas de menus.
COMP_CWORD Un indice en ${COMP_WORDS} de la palabra conteniendo la
posicion del puntero actual
COMP_LINE La linea de comando actual
COMP_POINT El indice de la posicion relativa del puntero actual con
respecto al comienzo del comando actual
COMP_WORDS Una matriz con las palabras individuales en la linea de
comando actual
COMPREPLY Una matriz de donde bash lee las palabras posibles generadas
por una funcion del interprete de comandos usada por la
utilidad de generacion de terminos posibles.
DIRSTACK Una matriz que contiene los contenidos actuales del stack de directorios
EUID El identificador numerico de usuario del usuario actual
FCEDIT El editor usado por defecto por la opcion -e del comando 'fc'
FIGNORE Una lista separada por comas de sufijos a ignorar cuando se
efectua la generacion de posibles nombres de ficheros.
FUNCNAME El nombre de la funcion que se esta ejecutando actual
GLOBIGNORE Una lista separada por comas de los patrones que definen el
conjunto de nombres de ficheros a ignorar cuando se efectua la
generacion de posibles nombres
GROUPS Una matriz que contiene la lista de los grupos a que pertenece
el usuario actual
HISTCMD El indice del comando actual en la historia de comandos
HISTCONTROL Define si un comando es ańadido a la historia de comandos
HISTFILE El nombre del fichero en el cual se graba la historia de comandos
de comandos. El valor por defecto es ~/.bash_history
HISTFILESIZE El numero maximo de lineas contenidas en la historia de comandos,
por defecto 500
HISTIGNORE Una lista separada por comas de los patrones usados para
definir que comandos deben de grabarse en la historia de comandos
HISTSIZE El maximo numero de comandos a recordar en la historia de
comandos, por defecto 500
HOSTFILE Contiene el nombre de un fichero en el mismo formato que
/etc/hosts que deberia de usarse cuando el interprete de
comandos necesita completar un nombre de maquina (hostname)
HOSTNAME El nombre de maquina actual
HOSTTYPE Cadena describiendo la maquina que esta ejecutando Bash
IGNOREEOF Controla la accion a tomar cuando el interprete de comandos
recibe un caracter EOF
INPUTRC Nombre del fichero de inicializacion de 'Readline',
sobreescribiendo el valor por defecto /etc/inputrc.
LINES Usada para determinar la anchura de la columna usada para
imprimir listas
MACHTYPE Cadena describiendo el tipo de sistema que esta ejecutando Bash
MAILCHECK Frecuencia de comprobacion (en segundos) del correo
electronico en el fichero definido en las variables MAILPATH o MAIL
OLDPWD Directorio previo definido por el comando 'cd'
OSTYPE Cadena describiendo el sistema operativo que esta ejecutando Bash
PPID El numero de proceso del proceso padre del interprete de comandos
PS3 El valor de esta variable se usa como 'prompt'
PWD Directorio actual definido por el comando 'cd'
RANDOM Cuando se llama esta variable un numero entero entre 0 32767
es generado
SECONDS Numero de segundos desde que Bash fue arrancado
SHELLOPTS Lista con opciones de Bash activadas
UID El valor numerico real del usuario actual


Combinaciones especiales de teclas

Cuando usamos bash existen una serie de combinaciones de teclas que se pueden utilizar para editar y realizar operaciones usuales.

Existen dos modos de edicion, mode emacs y modo vi. El modo por defecto es emacs, pero para los que estan acostumbrados a utilizar el editor 'vi', no es dificil cambiar entre los modos.

Para cambiar de modos podeis ejecutar estos comandos:

$ set -o emacs
$ set -o vi


Nosotros nos vamos a centrar en el modo de edicion emacs, al ser el modo por defecto y el mas usado. A continuacion teneis las combinaciones mas usuales (aunque no son las unicas):

Para moverse por la linea de comandos:

Ctrl + A Ir al principio de linea
Ctrl + E Ir al final de linea
ESC + B Ir una palabra hacia atras
ESC + F Ir una palabra hacia adelante
Ctrl + B Ir una letra hacia atras
Ctrl + F Ir una letra hacia adelante


Para moverse por el historial de comandos ejecutados:

Ctrl + N Proxima linea en el historial
Ctrl + P Previa linea en el historial
Ctrl + R Busqueda atras en el historial
Ctrl + S Busqueda adelante en el historial


Para borrar parte de la linea de comandos:

Ctrl + U Borra de la posicion actual al principio de la linea
Ctrl + K Borra de la posicion actual al final de la linea
Ctrl + W Borra de la posicion actual al principio de la palabra
ESC + D Borra de la posicion actual al final de la palabra
Ctrl + D Borra el caracter actual hacia adelante
Ctrl + Y Deshace el ultimo borrado


Transformaciones:

Ctrl + T Intercambiar dos letras
ESC + C Cambiar a mayuscula la primera letra de la primera palabra
despues de la posicion actual
ESC + L Cambiar a minusculas la primera palabra despues de la posicion
actual
ESC + T Intercambiar dos palabras
ESC + U Cambiar a mayusculas la primera palabra despues de la posicion
actual

TAB + TAB Autocompleta palabras (comandos, ficheros, directorios, variables etc)
con posibles valores

En nuestra proxima entrega empezaremos a ver como usar la informacion de este articulo para trabajar con bash y empezar a escribir nuestros primeros scripts.

Bash (I) - Introducción y ficheros de configuración

En esta serie de articulos sobre el interprete de comandos Bash, intentaremos explicar de una manera sencilla como configurar, utilizar y programar en Bash. Existen otros interpretes de comandos totalmente validos y potentes, pero nosotros nos vamos a centrar en Bash por ser el mas usado.

Todo administrador de sistemas UNIX en general y Linux en particular, deberia de aprender un minimo de programacion en Bash para automatizar y administrar tareas y trabajos en el sistema. Las posibilidades som muchas y una vez que se le coge el gusto a este lenguaje de programacion, no te puedes imaginar un dia como administrador sin hacer uso del mismo.

Programar en Bash es facil (aunque a algunos no se lo parezca al principio) y las posibilidades de uso casi infinitas.
Introduccion

Un interprete de comandos es un programa que funciona como interfaz de usuario con el sistema operativo. Es el encargado de traducir los comandos de los usuarios a instrucciones que el sistema operativo pueda entender y viceversa, traducir el resultado devuelto por el sistema operativo a un lenguaje que los usuarios podamos entender.

Bash ha sido escrito por el Proyecto GNU y pertenece a la categoria de interfaz de usuarios en modo caracter o texto.


Este articulo supone que ya teneis Bash instalado en vuestro sistema (por defecto la mayoria de distribuciones instalan y configuran Bash como interprete de comandos del sistema) Para utilizar Bash teneis que usar el sistema en modo texto o abrir una consola de texto en modo grafico.
Como podemos configurar nuestro interprete de comandos

Por defecto, la distribucion que utilicemos configura Bash para que podamos empezar a utilizarlo inmediatamente. Pero si queremos cambiar o añadir otros parametros de configuracion, es bueno saber donde tenemos que hacerlo.

Existen tres ficheros en el directorio de un usuario que tienen un significado especial para el shell Bash. Estos ficheros permiten al usuario configurar el entorno de su cuenta automaticamente cuando entra en el sistema, cuando arranca un subshell o ejecutar comandos cuando sale del sistema.

Los nombres de estos ficheros son .bash_profile, .bashrc y .bash_logout. Si ninguno de estos ficheros existe en el directorio del usuario, /etc/profile es utilizado por el sistema como fichero de configuracion de bash.

.bash_profile es el el mas importante de los tres. Es leido y los comandos incluidos en el, ejecutados, cada vez que el usuario entra en el sistema. Cualquier cambio hecho en este fichero no tendra efecto hasta que salgamos y entremos en el sistema de nuevo. Una alternativa para no tener que salir del sistema es ejecutar el comando source .bash_source.

Bash permite dos sinonimos para este fichero, .bash_login (derivado del C shell) y .profile (derivado del Bourne y Korn shell). Si .bash_profile no existe, el sistema buscara primero .bash_login y luego .profile. Solamente uno de estos ficheros es leido, en el caso que existan simultaneamente.

# Ejemplo de .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi

# User specific environment and startup programs

BASH_ENV=$HOME/.bashrc
USERNAME=""
PATH=$PATH:/usr/local/pgsql/bin
MANPATH=$MANPATH:/usr/local/pgsql/man
PGLIB=/usr/local/pgsql/lib
PGDATA=/usr/local/pgsql/data

export USERNAME BASH_ENV PATH MANPATH PGLIB PGDATA



.bashrc es leido cuando el usuario arranca un subshell, escribiendo por ejemplo bash en la linea de comandos. Esto nos permite ejecutar diferentes comandos para la entrada al sistema o para la ejecucion de un subshell. Si el usuario necesita los mismos comandos tanto a la entrada como en subshells, podemos incluir la siguiente linea en .bash_profile:

source .bashrc

# Ejemplo de .bashrc

# User specific aliases and functions

alias ll="ls -l --color"
alias lal="ls -la --color"
alias faq="cd /home/rafael/EL_RINCON/FAQ/"
alias php="cd /home/rafael/EL_RINCON/PHP/"

# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi


.bash_logout es el fichero leido por Bash, cuando salimos del sistema. Podemos definir, por ejemplo que se borren los ficheros temporales creados en nuestra ultima sesion o registrar el tiempo que hemos estado utilizando el sistema. Si .bash_logout no existe, ningun comando sera ejcutado a nuestra salida.

# ejemplo de .bash_logout

clear


En la proxima entrega veremos una serie de parametros que podemos utilizar en nuestros ficheros e configuracion y como podemos utilizar una serie de combinaciones especiales de teclas para realizar tareas que nos haran nuestro dias como administradores mucho mas faciles y llevaderos.