Archivo

Entradas Etiquetadas ‘Tecnología’

Arquitectura en GNU/Linux

Viernes, 10 de agosto de 2012 Sin comentarios

CONFIGURACIÓN DE HARDWARE

Para entender la arquitectura del sistema GNU/Linux, deberemos primero familiarizarnos con los dispositivos y sus configuraciones. Si bien las configuraciones iniciales de Hardware se hacen en el BIOS, podremos desde el propio OS hacer asignaciones y modificaciones a placas de sonido, usb, adaptadores SCSI, puertos seriales, Discos Rígidos, etc.

¿Qué es el BIOS?

BIOS es un apócope que proviene de Basic Input/Output System. Es un firmware que prepara al Hardware para ser administrado por el OS. La preparación y verificación del Hardware la efectúa mediante el POST, (Power On Self Test), programa encargado de verificar el correcto funcionamiento de las piezas implicadas en el proceso de arranque. Una de las configuraciones más básicas de este sistema es el poder seleccionar de qué forma queremos que haga el inicio de la máquina.

En resumen, podemos decir que el BIOS, posee un software de bajo nivel, que permite efectuar configuraciones del hardware, antes que el Sistema Operativo inicie, brindando opciones de bootstrapping, día y hora, seguridad, etc. La forma que cada fabricante lo configura para el ingreso a su configuración puede variar, por cada fabricante y tipo de hardware, junto a las opciones que permite configurar.

Dispositivos de bootstrapping:

Dentro de estos dispositivos el BIOS buscara un gestor de arranque, un “OS Loader”, desde el cual pueda iniciar el Sistema, como pueden ser Linux Loader, (LILO), o GRUB, (Grand Unified Bootloader). Este dato se encuentra alojado en la MBR, (Master Boot Record), quien almacena las Tablas de Particiones junto con el bootloader o gestor de arranque. Dentro de las configuraciones, respetara el orden asignado, el cual suele ser CDROM, Hard Disk, USB, Network.

  • Unidad de CD/DVD
  • Disco Rígido
  • Red
  • Dispositivo de almacenamiento externo

Canales de Comunicación

Para que los dispositivos puedan comunicarse directamente con los recursos del sistema, el sistema almacena diversos canales de comunicación los cuales describiremos a continuación:

  • IRQ: Interrupt Request Lines, (Líneas de Solicitud de Interrupción), los cuales envían solicitudes de interrupción al CPU, generando que el mismo deje las tareas que está efectuando de lado para procesar la acción solicitada por el dispositivo. El número de IRQ va del 0 al 15.
  • I/O address: Dirección de Entrada/Salida, representa una dirección específica en la memoria, cada dispositivo tiene una dirección única asignada sobre la cual lee y escribe.
  • DMA: Direct Memory Access, (Acceso Directo a Memoria), Algunos dispositivos pueden ganar acceso directo a la memoria sin intervención del CPU mediante los canales DMA, lo cual permite liberar carga al procesador, proporcionando una mayor performance.

Cada uno de estos canales, posee su espacio dentro del directorio /proc dentro del filesystem. Este directorio contiene una jerarquía de archivos que muestran como esta funcionando el kernel en tiempo real, permitiendo ver como esta interactuando el Hardware con el Sistema. Veamos en detalle como interactuar mediante este directorio con los canales de comunicación mencionados anteriormente:

 

/proc/interrupts:

Dentro de este archivo, podremos notar las piezas de Hardware y que IRQ tienen asignado. Por ejemplo el 10 tiene asignada la interface de red eth1, el 11 usb, 14 y 15 asignados a los Hard Disk, etc. En la columna CPU0 vamos a ver la cantidad de interrupciones de cada pieza y esta columna será individual para cada núcleo, por lo tanto, podremos ver CPU0, CPU1, etc.

Los IRQ más comunes son:

/proc/dma:


Podremos ir viendo la información que este archivo tenga, ya que dependiendo de que pieza necesite tener el acceso directo a memoria.

/proc/cpuinfo:

Muestra información detallada sobre nuestro microprocesador.

/proc/devices:

Muestra los diferentes tipos de dispositivos de carácter y de bloque que tengamos cargados en el sistema, la mayor diferencia entre los de carácter y de bloque es:

 

  • Los dispositivos de carácter no requieren buffering. Los dispositivos de bloque disponen de una memoria intermedia o buffer que les permite ordenar las peticiones antes de tratar con ellas. Esto es muy importante para los dispositivos diseñados para guardar información, porque la habilidad de ordenar la información antes de escribirla en el dispositivo permite que ésta se almacene de forma más eficiente.
  • Los dispositivos de carácteres envían datos sin un tamaño preconfigurado. Los dispositivos de bloque pueden enviar y recibir información en bloques de un tamaño particular, configurable por dispositivo.

/proc/ioports:

En resumen, el directorio /proc es un sistema de archivo virtual que provee una interface directa con el Kernel.

USB, (Universal Serial Bus):

Es una arquitectura de comunicación diseñada para conectar dispositivos a la PC. Pueden ser divididos en 5 grandes grupos:

  • HID, (Human Interface Device
  • Communication Device
  • Mass Storage Device
  • Audio Devices
  • Display devices

Los drivers de los controladores USB se separan en 3 categorías:

  • Host Controller Drivers: Los drivers controladores del USB Host incluyen usb-ohci y usb-uhci.
  • Class Drivers: Estos drivers incluyen hid.o, usb-storage, acm.o, printer.o y audio.o.
  • Other Device Drivers: Hay muchos dispositivos que no entran en ninguna categoría, ni funcionan con dichos drivers, por ejemplo pwc.o, que es un driver de Philips para webcam.

Los más importantes de recordar son:

Driver Modulo
OHCI (Compaq) usb-ohci.o
UHCI (Intel) usb-uhci.o
EHCI ( USB 2.0) ehci-hdc.o

Dentro de estos tres grupos, cabe destacar que OHCI y UHCI son USB 1.1, los cuales manejan velocidades de 12 Mbps. EHCI es USB 2.0 y puede manejar un máximo de 480 Mbps.

Para poder ver los módulos que tenemos en uso actualmente, podemos recurrir a /proc/modules o lsmod.

Manipulando Módulos

Un modulo es dinámicamente linkeado al Kernel en funcionamiento cuando es cargado. Mucho de esto se realiza automáticamente. Sin embargo puede que alguna vez se tenga que manipular los módulos manualmente. Por ejemplo si hay alguna incompatibilidad con algún driver en particular y se tiene que bajar el código fuente de uno nuevo, compilar e insertar el nuevo modulo al Kernel en funcionamiento.

Las funciones que vamos a utilizar para manipular los módulos son:

insmod Agrega un módulo
rmmod Remueve módulos
modinfo Muestra información del módulo
modprobe Carga y remueve módulos

Ejemplos:

#Intentar cargar los módulos de red hasta que uno lo consiga

modprobe –t  net

#Intentar cargar los módulos disponibles de red

modprobe –at net

#Con el siguiente comando más el módulo, podremos remover o resolver dependencias

modprobe –r

#Listar los módulos disponibles para su uso

modprobe –l

Controladora SCSI

Existen 2 tipos de interfaces SCSI:

  • Interface de 8 bit, la cual soporta 8 dispositivos incluyendo el controlador, por lo cual solo hay 7 espacios para dispositivos.
  • Interface de 16 bit o WIDE, que soporta 16 dispositivos incluyendo el controlador, por lo cual posee disponibles 15 lugares para dispositivos.

Estos dispositivos son identificados por  un ID que posee SCSI de 3 números:

  1. Canal SCSI: soporta un dispositivo por cada canal y comienza desde el 0 en adelante.
  2. Número de ID del dispositivo: El ID va del rango 0-7 0-15, dependiendo del tipo de interface.
  3. LUN, (Logical Unit Number): Indica las particiones dentro de un mismo dispositivo.

Para ver el ID podemos ejecutar un cat al archivo /proc/scsi/scsi, el cual arrojará los siguientes resultados:

Tarjetas de sonido

Actualmente existen 2 proyectos que gestionan los módulos y controladores para las placas de sonido:

  • OSS (Open Sound System): Fue introducido a partir del Kernel 2.0 y posee soporte para varias plataformas UNIX.
  • ALSA (Advanced Linux Sound Architecture): Introducida desde el Kernel 2.6.

Generalmente la placa de sonido es configurada durante la instalación del sistema, pero en caso de tener algún problema, podremos descargar de las respectivas páginas los módulos y compilarlos.

Puertos Seriales

El modem usa una interface serial para las comunicaciones, toda la información es enviada de forma secuencial sobre 2 cables que manejan la entrada y salida de información. La información que ingresa es trasladada en paralelo con la que sale de la PC. Esta translación es efectuada por el UART, (Universal Asynchronous Receiver/Transmitter).

En GNU/Linux, los dispositivos Serial son nombrados como ttyS, para saber si tenemos un dispositivo Serial en nuestro equipo, podemos ejecutar el siguiente comando:

$dmesg | grep ttyS

La correlación entre Microsoft Windows y GNU/Linux se detalla en la siguiente tabla:

DOS Linux
COM1 /dev/ttyS0
COM2 /dev/ttyS1
COM3 /dev/ttyS2

Para tener la configuración de UART por default, podemos ejecutar el comando setserial. La cadena debe ser de la siguiente manera:

$setserial <device> port <I/O> irq <nº de irq> autoconfig

Ejemplo:

$setserial /dev/ttyS0 port 0x3f8 irq 4 autoconfig

Para configurar la velocidad del Puerto serial, vamos a utilizar nuevamente el commando setserial:

$setserial /dev/ttyS0 spd_shi

Opción de Velocidad Descripción
spd_hi Usa 56kb
Spd_vhi Usa 115kb
Spd_shi Usa 230kb
Spd_warp Usa 460kb

Con esto, ya tenemos, mucho mas que una simple base, para saber como manejarnos con la arquitectura propuesta por el Sistema Operativo.

Espero les sea de utilidad, voy a estar actualizando el Blog nuevamente con informacion, tanto para certificaciones, como datos complementarios de GNU/Linux, Virtualizacion y Seguridad.

Saludos!

Open-Audit – Relevamiento de equipos

Martes, 4 de octubre de 2011 Sin comentarios

¿Qué es Open-Audit?

En diferentes oportunidades nos encontramos con la ardua tarea de realizar un relevamiento del inventario de la empresa, para lo cual buscamos siempre herramientas que faciliten nuestra labor. Para ello existe la herramienta de código abierto llamada Open-Audit. Permite la instalación de una base de datos en la cual almacena toda la información recolectada por una serie de scripts que ejecuta en las diferentes estaciones de trabajo y servidores.

Requisitos de Instalación:

  • Apache
  • Base de datos (MySQL o PostgreSQL)
  • PHP (debemos descomentar la linea extension=mysql.so)

Ya con todos estos puntos realizados, procederemos a efectuar la instalación del producto. El binario(Linux) o ejecutable(Windows), puede ser descargado desde la web oficial. Al día de la fecha la última versión es la OpenAuditReleaseCandidate.09.03.17.

Instalación:

La instalación puede ser descrita en 5 simples pasos:

  1. Descomprimir el archivo descargado. La descompresión genera una carpeta que contiene todos los archivos con los cuales vamos a trabajar. Esos mismos archivos deberemos colocarlos en la carpeta que contiene los datos web de Apache. En Linux suele ser /var/www y en Windows dependiendo del servicio que corra si es el IIS o si están utilizando XAMPP.
  2. Con los archivos sueltos en la carpeta mencionada anteriormente, podremos abrir el navegador y comenzar las configuraciones e instalación ingresando a o si quieren hacerlo desde otra pc con la IP.
  3. La primera opción nos pide que seleccionemos el Idioma de instalación del programa. Luego de instalado el producto, desde la consola web puede volver a cambiarse el idioma.
    =http://imageshack.us/photo/my-images/26/oa01.png[/url]Si no hay problema con los permisos de escritura en el siguiente paso marcará todo OK y podremos iniciar la configuración de la ODBC.=http://imageshack.us/photo/my-images/14/oa02.png[/url]
  4. Como la imagen que se muestra debajo deberemos seleccionar si tenemos privilegios de root en la Base de Datos o bien si es con otro usuario con quien configuramos este Software.
    =http://imageshack.us/photo/my-images/69/oa03.png[/url]
  5. Ya seleccionado el usuario, (nosotros en este caso usaremos root), deberemos llenar los campos que nos pide Open-Audit para crear las tablas y crear el usuario para acceder, por defecto openaudit.
    =http://imageshack.us/photo/my-images/195/oa04.png[/url]

Luego de presionar enviar ya tendremos el programa funcional y listo para comenzar a auditar las PC que se encuentren en la red. Para ello Open-Audit nos brinca la posibilidad de correr un Script en VBS para Windows o un script para Linux.
El Script se puede lanzar desde la propia consola en la opción Admin. También se puede descargar el Script en VBS para Windows y pedirle al usuario que lo ejecute para evitar problemas de conectividad entre la PC Server y las PC Desktop.

Espero el programa les sea de utilidad y les resuma tiempo de trabajo.

Saludos!

Primeros pasos en pfSense

Jueves, 15 de septiembre de 2011 Sin comentarios

Antes de empezar con cualquier tipo de explicación, vamos a ver un poco de que se trata pfSense.

pfSense es un sistema basado en FreeBSD de código abierto, el cual cumple las funciones de Firewall y Router. Este sistema, permite una gran variedad de paquetes los cuales complementan sus funcionalidades y permiten que sea sumamente versátil. Para ver un poco más de dicho sistema, pueden ingresar a la web oficial http://www.pfsense.org/. En la misma figuran diferentes en laces con documentación, el foro de soporte, etc.

¿Qué requisitos mínimos de Hardware se necesitan para pfSense?

  • CPU – 100 Mhz Pentium
  • RAM – 128 MB
  • Lectora de CD o puerto USB
  • 1 GB de espacio en Disco

Para efectuar la descarga del LiveCD podemos recurrir al siguiente link el cual además nos permite descargar una imagen ya armada de VMware con el pfSense instalado.

Nosotros vamos a centrarnos en la instalación y configuración inicial del LiveCD. Mejor que muchas palabras confusas es mejor un video, por lo que paso a dejarles el mismo a continuación.

Una de las utilidades que siempre buscamos a la hora de instalar este tipo de sistemas, es la de control, poder brindar un nivel más amplio de seguridad, ya sea en nuestras casas para impedir que los integrantes de la familia naveguen por lugares prohibidos o bien en las empresas efectuar la misma acción para con los empleados.
Para ello pfSense posee dentro de sus paquetes el squid y squidGuard, quienes actúan como proxy y filtrado de contenidos.

¿Como funciona esta herramienta? Vamos con otro video-tutorial.

Por el momento eso es todo, les recomiendo navegar un poco más por la web oficial y el foro de soporte para buscar más funcionalidades que se adapten a sus necesidades. Posee además un manual el cual se puede adquirir en Amazon como complemento.

Un saludo y espero sea de su agrado!

vSphere Creación de máquina virtual

Lunes, 5 de septiembre de 2011 Sin comentarios

Como crear una maquina virtual en vSphere

Introducción:

Para empezar debemos definir que es una maquina virtual. Una maquina virtual es un programa de computadora que, como un equipo físico, corre un sistema operativo y aplicaciones de forma independiente. Todos los procesos que se ejecutan se encuentran limitados por los recursos y abstracciones proporcionados por la misma, y tiene beneficios adicionales en cuanto a movilidad y a seguridad.

Tips a tener en cuenta antes de crear una VM:

Ahora que ya tenemos en claro que es una maquina virtual, vamos a ver algunos items que necesitamos conocer antes de crear una maquina virtual.

1) Saber en que datastore vamos a ubicar la VM
2) Las necesidades del cliente y que utilidad va a darle a dicha Máquina Virtual.
3) Tipo de Sistema Operativo y cantidad de recursos a asignar en base a las prestaciones brindadas por dicha VM.
4) Cantidad y tipo de NIC’s a configurar para compatibilizar con la red.

Iniciando la Creación de la VM:

1. El primer paso de la instalación nos permite optar por una de estas opciones:
• Typical: La cual nos permite configurar el nombre del equipo, ubicación en el Storage, Seleccionar el Sistema Operativo, Configuración de Networking y Tipo de disco.
• Custom: La cual nos permite configurar además de las nombradas anteriormente la Versión de Máquina Virtual, cantidad de CPU’s, Cantidad de Memoria RAM y Tipo de controlador SCSI.
2. Marcamos Custom y para continuar la configuración pulsaremos Next.

Imagen

3. Luego tendremos que definir el Nombre que va a llevar la Máquina Virtual. Una vez ingresado el nombre pulsaremos Next.
4. Ahora tendremos que seleccionar el Storage como muestra la siguiente imagen:

Imagen

¿Qué es el Storage?
El Storage es el lugar en el cual se guardara toda la información de la VM. Es un espacio en el disco rígido el cual es utilizado por vSphere para guardar los contenedores de las máquinas creadas.
5. Ahora tendremos que elegir la versión que tendrá nuestra maquina virtual, en esta ocasión elegiremos la versión 8 ( es la nueva versión que aparece a partir de vSphere 5.0)

Imagen

6. En el paso siguiente nos permite seleccionar una variedad de Sistemas Operativos. En el caso de no encontrar el que vamos a utilizar nos permite seleccionar la opción “Otros”.0
7. Luego de presionado “Next”, nos permite configurar el CPU de la VM. Las limitaciones son directamente proporcionales al Procesador nativo de la PC

Imagen

8. Una vez definida la configuración de los CPU’s, debemos adaptar los valores necesarios de Memoria RAM para el óptimo funcionamiento del equipo.

Imagen

9. Ahora nos aparece la ventana de configuración de networking. En ella debemos seleccionar cuantas NICs tendrá nuestra maquina y qué tipo de adaptador será.

Imagen

NOTA: Para tener una mejor idea de que adaptador seleccionar es recomendable visitar las guías que brinda vmware sobre las mejores prácticas, que se puede ubicar en http://www.vmware.com/support/vsphere4/ … notes.html
10. Una vez efectuada la configuración de la RED, vamos a hacer la configuración SCSI. Si tenemos dicha tecnología integrada en la PC servidor, la mejor opción es seleccionar Vmware Paravirtual y utilizar dichos drivers.

Imagen

11. Configuración del Disco Duro: Debemos especificar si queremos crear un disco nuevo, usar uno existente o no crear un disco. En este caso vamos a seleccionar crear un disco nuevo, luego tendremos que definir el tamaño de nuestro disco y su tipo de aprovisionamiento ( recomiendo Thin Provisioning)

Imagen

12. El último paso para terminar la configuración son las Opciones Avanzadas del disco. En dicha configuración podremos configurar el Nodo del disco y como se comportara al momento de hacer Snapshots. Una vez configurado presionamos Next.

Imagen

13. A continuación nos mostrará un resumen de al configuración de la VM. Si estamos seguros de cada configuración presionamos Finish para terminar.

Imagen

Con esto ya tenemos la VM lista para la instalación del Sistema Operativo y su puesta en producción. La misma podrá ser vista desde el inventario accediendo con el vSphere Client al Host.

Esta guía fue efectuada por un compañero de trabajo Gabriel Diaz y dejo el link al post relacionado. Ese foro está en proceso y será dado de alta a partir de hoy a las 22 hs Argentina. Espero que participen y les guste.

Saludo y nos vemos en el próximo post.

Shell Scripting

Martes, 2 de agosto de 2011 Sin comentarios

Shell Scripting

¿Qué es la Shell?

La Shell no es más ni menos que un intérprete de comandos, el cual le permite al usuario interactuar con el Sistema Operativo. Existen varios tipos de Shell:

Bourne Shell = sh

Bourne-Again Shell =  bash

Korn Shell = ksh

C SHell = csh

Para identificar las Shells que tenemos disponibles, debemos ver el contenido del archive /etc/shells.

# cat /etc/shells

¿Qué es un Script?

Es un archivo de texto ejecutable, que contiene una serie de comandos pre-definidos. Sirve para automatizar tareas, ya que se pueden configurar secuencias que ejecuten diversas tareas sin la intervención del usuario, más que para ejecutar el Script. El único requisito es que el archivo posea privilegios de ejecución. Microsoftianamente es como crear un .bat pero mucho más potente y versátil.

Todos los comandos escritos en el archivo serán ejecutados en el mismo orden en el cual fueron plasmados.

Recuerden que en Linux la ejecución de comandos no depende de la extensión sino de los permisos, por lo que no es necesario agregar la misma, pero por un tema organizativo, se le suele agregar la extensión “.sh”.

 

Lo primero que vamos a ver antes de comenzar a trabajar con la Shell son una serie de comandos los cuales utilizaremos para hablarle al Sistema Operativo.

 

#: Todo lenguaje de programación ofrece la posibilidad de colocar comentarios para que las personas que abran el código entiendan de forma más rápida lo que el programador quiso plasmar.

echo: Es un comando que sirve para imprimir en pantalla. Esto implica que si queremos que se muestre el mensaje “Hola Mundo” deberemos escribir: echo “Hola Mundo”.

chmod: Comando que sirve para cambiar la máscara de permisos de un archivo, osea, quienes queremos que puedan ejecutarlo, leerlo o escribirlo.

who: Sirve para ver quien está conectado en ese momento quien está en el sistema.

date: Muestra el día.

Hay muchos comandos más y todos pueden ser utilizados por un Script.

¿Qué otras cosas podemos integrar al Script?

Comprendiendo lo que son las VARIABLES. La información puede ser almacenada en la RAM. La memoria RAM está dividida en pequeños sectores y cada sector tiene un número único llamado Dirección de Memoria que es utilizado para guardar nuestra información. El lenguaje de programación, permite asignarle un nombre, (alfanumérico), a esa dirección en memoria llamada “VARIABLE”.

Para hacer esto debemos definirla de la siguiente manera:

VARIABLE=variable

Y para que el Shell llame a dicha variable, debemos colocar el símbolo $ delante del nombre de la variable creada, en este caso sería “$VARIABLE”.

EJ:

edad=23
#!/bin/sh
echo “Que edad tengo?”
echo $edad (Esto mostrará en pantalla el número 23)

En Linux existen dos tipos de variables:

 

Locales: Pueden ser accedidas solo por la Shell que ejecutó el Script.

Exportada: Puede ser accedida por ambas Shell y cualquier proceso hijo que sea iniciado por esa Shell.

Los comandos set, (lista todas las variables) y env, (muestra solo las variables exportadas) sirven para listar las variables definidas.

Si queremos hacer que una VARIABLE creada por nosotros sea global, debemos ejecutar el comando export. Por ejemplo si tenemos la variable $nombre, podemos ejecutar “export nombre”. Podemos verificar que se haya integrado correctamente ejecutando “env | grep nombre”.

 

Varibables pre-definidas Significado
DISPLAY Utilizado por X para identificar donde correr una aplicación cliente
HISTFILE Ruta al historial de bash de los Usuarios
HOME Ruta al directorio personal del Usuario
LOGNAME El nombre utilizado para iniciar sesión
PATH Lista los directorios donde se encuentran los ejecutables utilizados por la Shell
PWD Directorio de trabajo en el cual se encuentra parado el Usuario
SHELL La Shell utilizada
TERM

BASH

BASH_VERSION

La emulación de Terminal actual

Nombre del Shel l utilizado

Versión del Shell utilizado

 

También podemos encontrar Variables Especiales:


Variables Especiales Significado
$! Contiene el Número de Proceso(PID) del último Proceso
$$ Contiene el Número de Proceso (PID) de la Shell
$? Contiene el valor que regresó la última orden ejecutada. (0=Exitosa, 1=Falló)

 

Pasaje de Argumentos:

Los Scripts pueden recibir parámetros en la línea de comandos. Los parámetros recibidos se guardan en una serie de variables que el Script puede consultar. Estas Variables tienen los siguientes nombres:

 

Variable Significado
$0 Contiene el nombre con el que se ha invocado el Script
$1 – $20 Contiene los valores de los parámetros/argumentos recibidos con la invocación
$* Contiene todos los parámetros juntos en una única cadena
$# Contiene e número de parámetro que ha recibido el Script
$? Devuelve 0 si la ejecución fue correcta

 

Además de todas estas utilidades, tenemos la posibilidad de insertar en la ejecución de un Script, lo que un usuario tipea en la línea de comandos. Dicha opción se llama READ. Lo que hace es leer una línea de entrada del usuario y la asigna a una o más variables de la Shell. Detiene el Script y hasta que por línea de comandos no sea ingresado ningún valor por el usuario, el programa estará detenido.

 

Ejemplo:

#!/bin/sh
echo “Cuál es su nombre?”
read nombre
clear
echo “Su nombre es $nombre”

También puede aceptar más de una a la vez.

Ejemplo:

#!/bin/sh
echo “Cuál es tu nombre y edad?”
read nombre edad
echo “Tu nombre es $nombre y tienes $edad años!”

Input (Entrada), Output (Salida), Redirection (Redireccionar):

Los sistemas basados en UNIX generalmente abren tres archivos descriptivos básicos, para permitirle a un proceso la entrada (stdin) y salida (stdout).

stdout redirection: La información va de izquierda a derecha. Osea, toma el resultado que sale del comando ejecutado en primera instancia y lo plasma en un archivo. EJ: “# fdisk –l > particiones.txt”

El operador “>>” añade al final del archivo el contenido de la salida del comando.

stdin redirection: En este caso la información va de derecha a izquierda. El operador “<” solo puede ser utilizado en stdin. EJ: “fdisk /dva/hda < instructions”. Si instructions posee alguna de las letras p, m, y q, fdisk mostrará la tabla de particiones de /dev/hda.

stderr redirection: stdin, stout y stderr están representados por 0, 1 y 2 respectivamente. EJ: “comando 2> /dev/null”

Pipes: Son un mecanismo por el cual la salida de un programa se puede enviar como la entrada de otro. Cada programa individual, puede ser encadenado para convertirse en herramientas más potentes. Las pipes están representadas por el símbolo “|”.

EJ:

# comando1 | comando2

# cat /etc/passwd | less (Cat muestra el contenido del archivo, y al sr enviado a less, nos permite navegar por todo el contenido).

Pero… ¿Para qué conformarnos solo con esto? Como todo buen lenguaje de programación la Shell posee estructuras de control (if, then, else, case, etc) y ciclos (for, while , etc)

Comando IF:

If en la Shell solo puede evaluar comandos por lo que no podríamos evaluar los valores de las variables, sin el comando test, el cual también pertenece a la Shell. El mismo devuelve 0 de ser verdadero o 1 si es falso.

Ejemplifiquemos:

#!/bin/sh
echo “Ingresa un número”
read numero
if test $numero = 1 (Siempre la expresión debe estar separada por espacios sino da error)
then
echo “El número ingresado es correcto”  (Se ejecuta solo si test devuelve como resultado 0)
else
echo “El número ingresado es incorrecto” (Se ejecuta solo si test da como resultado 1)
fi (Se utiliza para terminar if)

Otra forma de escribir test es colocando entre corchetes la condición a evaluar y si quisiéramos poner en la misma línea el then, deberemos colocar luego de la expresión test punto y coma “;”.

Ejemplo:

#!/bin/sh
echo “Ingresa un número”
read numero
if [ $numero = 1 ]; then
echo “El número ingresado es correcto”
else
echo “El número ingresado es incorrecto”
fi

Efectuando comprobaciones:

Comprobaciones de cadena:

 

Parámetro Significado
-z cadena Verdadero si la longitud de la cadena es 0
-n cadena Verdadero si la longitud de la cadena no es 0. Es decir, si existe cadena
cadena1 = cadena2 Verdadero si cadena1 y cadena2 son idénticas
cadena1 ¡= cadena2 Verdadero si cadena1 y cadena2 no son idénticos
cadena1 Verdadero si cadena1 no es una cadena nula

 

Comprobaciones de enteros:

 

Parámetro Significado
n1 –eq n2 Verdadero si n1 y n2 son iguales
n1 –ne n2 Verdadero si n1 y n2 no son iguales
n1 –gt n2 Verdadero si n1 es mayor a n2
n1 –ge n2 Verdadero si n1 es mayor o igual que n2
n1 –lt n2 Verdadero si n1 es menor a n2
n1 –le n2 Verdadero si n1 es menor o igual que n2

 

Ejemplo:

#!/bin/bash
clear
numero1=4
echo ­n ”Ingrese un número : ”
read numero2
if [ $numero2 ­ge $numero1 ]; then
echo “El numero $numero2 es mayor o igual a $numero1”
else
echo “El numero $numero1  es mayor o igual a $numero2”
fi

Ejemplo 2 (operaciones):

#!/bin/bash
echo ­n ” Ingrese el primer número : ”
read numero1
echo ­n ” Ingrese el segundo número : ”
read numero2
numero3=$[ $numero1 * $numero2 ]
echo ”Resultado :$numero3″

Comprobaciones de archivos:

 

Parámetro Significado
-a Verdadero si existe el archivo
-r Verdadero si existe el archivo y puede leerse
-w Verdadero si existe el archivo y puede escribirse
-x Verdadero si existe el archivo y es ejecutable
-f Verdadero si existe el archivo y es un archivo regular
-d Verdadero si existe el archivo y es un directorio
-h Verdadero si existe el archivo y es un enlace simbólico
-c Verdadero si existe el archivo y es un archivo de caracteres especiales

 

Ejempllo:

 

#!/bin/bash
echo –n “Escriba el archivo que desea verificar : “
read archivo
if [ ­a $archivo ]; then
echo “Existe el archivo.”
if [ ­r $archivo ]; then
echo “el archivo puede leerse”
fi
if [ ­w $archivo ]; then
echo “El archivo se puede escribir”
fi
if [ ­x $archivo ]; then
echo “El archivo se puede ejecutar”
fi
if [ ­d $archivo ]; then
echo “El archivo es un directorio”
fi
else
echo “Archivo inexistente : $archivo”
fi

La sentencia case:

Se utiliza cuando tenemos que hacer varios if para hacer una misma comprobación. Siempre se inicia con case y se termina con el comando esac.

Ejemplo:

#!/bin/bash
echo ” Ingrese alguna opcion ”
echo ” 1 Borrar Pantalla”
echo ” 2 donde estoy ”
echo ” 3 Salir ”
echo ­n ” opcion: ”
read opcion
case $opcion in
1) clear;;
2) pwd;;
3) exit;;
*) echo “ Opcion Incorrecta “
esacecho ” toque una tecla para continuar”

read

 

La sentencia for:

Toma una lista de cadenas y las asigna a una variable.

La sintaxis del comando es:

For [nombre de la variable] in [lista de opciones]; do

done

Ejemplo1:

#!/bin/bash
for i in `ls *.sh`; do           # “`” son las comillas simples de ejecución.
if [ ­x $i ]; then
echo “el fichero $i es ejecutable.”
fi
done

Ejemplo2:

if [ $# -eq 0 ]
then
echo "Error - Number missing form command line argument"
echo "Syntax : $0 number"
echo "Use to print multiplication table for given number"
exit 1
fi
n=$1
for i in 1 2 3 4 5 6 7 8 9 10
do
echo "$n * $i = `expr $i \* $n`"
done

La sentencia while:

El bucle while se ejecutará siempre que la condición que evaluamos sea verdadera. Se puede usar la palabra clave break para abandonar el bucle en cualquier punto de la ejecución. Con la palabra clave continue el bucle continúa con la siguiente interacción y se salta el resto del cuerpo del bucle.

while [ condicion ]

do

comandos

done

Ejemplo con script variable.sh:

#!/bin/sh
clear
i=0
var1=4
echo -n “Ingrese una variable : ”
read var2
while [ $var2 -ge $var1 ]; do
echo $var2
i=`expr $i + 1`
if [ $i -eq 4 ]; then
break
fi
done

Bueno con esto ya tenemos todo lo necesario para armar los scripts más potentes y automatizar tareas tediosas. Espero que la guía sea de su agrado.

Web: http://www.nicolasventre.com/

Twitter: http://twitter.com/#!/nicolasventre

Facebook: http://www.facebook.com/profile.php?id=1159047781

Linkedin: http://ar.linkedin.com/in/nicolasventre

Si quieren descargar el contenido en formato PDF que se ve más lindo les dejo el link:

Un saludo!