18 de nov. 2009

Error vmware en Kernel 2.6.31, error: conflicting types for ‘poll_initwait’ , ‘poll_initwait’ , solucionado

Error vmware en Kernel 2.6.31, error: conflicting types for ‘poll_initwait’ , ‘poll_initwait’

Todos estos problemas causados por el nuevo kernel, no han tenido otra solucion para mi que reinstalar vmware, primero desintalando y siguiendo esta muy buena guía lo pude solucionar sin problemas.


http://dcala.wordpress.com/2009/11/05/como-instalar-el-servidor-vmware-2-0-x-en-ubuntu-9-10-karmica/

primero de todo desintalamos con "vmware-uninstall.pl"

y ahora seguimos esta guía.

VMware Server es un producto de virtualización gratuito para servidores Windows y Linux con soporte de clase empresarial y la gestión de VirtualCenter. VMware Server es un robusto y fácil de usar productos de virtualización de servidores y se basa en la tecnología de virtualización, que ha sido utilizado por miles de clientes durante muchos años.

En primer lugar es necesario descargar 2.0.x del servidor del sitio web de VMware VMware y obtener la clave de instalación del servidor de VMware

Actualmente tenemos un problema al compilar vmware server bajo la versión del kernel 2.6.31 por lo que este tutorial se explica cómo instalar 2.0.x del servidor VMware en Ubuntu 9.10


Ahora una vez que tengamos el VMware-server-2.0.2-203138.i386.tar.gz archivo para descomprimir este archivo:

tar -zvxf VMware-server-2.0.2-203138.i386.tar.gz

y vamos al directorio vmware-server-distrib:

cd vmware-server-distrib
Corremos el script vmware-install.pl utilizando el siguiente comando: ./vmware-install.pl
Ahora puede que recibas mensajes de error de compilación por lo que es necesario descargar archivos de la revisión necesaria en el directorio vmware-server-distrib del foro de vmware .Puedes utilizar el siguiente comando para descargar los parches: wget http://www.ubuntugeek.com/images/vmware-server.2.0.1_x64-modules-2.6.30.4-fix.tgz
Después de la descarga extrae el archivo: vmware-server.2.0.1_x64-modules-2.6.30.4-fix.tgz:
tar xvzf vmware-server.2.0.1_x64-modules-2.6.30.4-fix.tgz
Y ahora corre el script del parche usando el siguiente comando: (Nota: Este script funciona con las versiones de kernel 2.6.30 y 2.6.31)
sh vmware-server.2.0.1_x64-modules-2.6.30.4-fix.sh
Después de que se completen cada una de las instalaciones de la revisión deberías ver mensajes similares a los siguientes:
Después de completar la instalación de la revisión que usted necesita para eliminar / usr / lib / vmware / modules / binaria ya que el original de los directorios de módulos de VMware se encuentra todavía en la ruta, así que esto confunde VMware es por eso que vamos a eliminar este directorio:

rm -rf /usr/lib/vmware/modules/binary
Ahora ejecuta el script vmware-config.pl: vmware-config.pl (Esto debe completar la instalación del servidor de VMware.)
Ahora abre tu navegador https: / / PC-direccionip: 8333,

15 de nov. 2009

error: sys/eventfd.h: No such file or directory , compilar kernel debian 2.6.31

http://www.soundebian.com.ar/2009/10/error-al-compilar-kernel-2-6-31-5-lguest-eventfd/

Nos puede pasar al finalizar de compilar el kernel version 2.6.31.x nos salga el siguiente error:

cc -m32 -Wall -Wmissing-declarations -Wmissing-prototypes -O3 -I../../include -I../../arch/x86/include -U_FORTIFY_SOURCE lguest.c -o lguest
lguest.c:21:25: error: sys/eventfd.h: No such file or directory
lguest.c: In function ‘create_thread’:
lguest.c:1021: warning: implicit declaration of function ‘eventfd’
make: *** [lguest] Error 1

Solución:

Editamos el archivo Documentation/lguest/Makefile, y cambiamos el valor siguiente:

all: lguest

… borramos lguest, quedando la línea así:

all:

Al parecer es un problema de la versión de libc, por el momento, lo solucionamos de ésta manera.

13 de nov. 2009

Convertir pdf a excell

The pharmaceutical industry uses a lot of data. Consequently, we see a lot of tabular data converted to PDF documents. It is common to see lab instrument data, database reports and enterprise systems data output as PDF.

So, there you are, alone in your office staring at a PDF document wishing you had access to the original data. What do you do?

Fortunately, Acrobat 9.1 offers a couple of different ways to export to Excel.

1. Select table and open in Excel
This allows you to select a portion of a page and open it in Excel.

2. Export as Tables in Excel
This method uses some artificial intelligence to convert multiple page PDF documents to multiple worksheets in an XML-based spreadsheet file. It works best on files which were converted directly from Excel to PDF.

To open the XML-based file output generated using method 2 above, you'll need either:

* Office 2007
* The free Microsoft Office Compatibility Pack for Word, Excel, and PowerPoint 2007 File Formats for earlier versions of Office.


Acrobat generally will usually do a pretty good job converting the text, but formatting and column widths will look different than the original. Acrobat only copies over the text. Formulas will not convert. Do not expect 100% fidelity.

In the full article, you'll receive my usual step-by-step instructions.
Converting to Excel from PDF: Copy Table as Spreadsheet

I've had better luck using this method for scanned documents and documents which were not originally spreadsheets.

How to use it:

1. Open a PDF and OCR if it was originally scanned
Document—> OCR Text Recognition
2. Select the Select Text tool (cursor)
Acrobat cursor tool
3. Hold down the ALT (CMD on the Mac) key to make a rectangular selection over a table in the document.
Your cursor will change shape to:
Acrobat area selection tool
4. With the text still selected, right-click and choose “Open Table in Spreadsheet”
Copy Tables as Spreadsheet
5. The table data will open in Excel

What are the other options?
Copy as Table will copy the data to the clipboard. From there, you can paste it into Excel or another document. Save as Table will allow you to name the data and save it as a Comma Separated Value (CSV) file.

Mac Users: Only Copy as Table and Save as Table are available.


Converting to Excel from PDF: Save As Tables in Excel Spreadsheet

This method allows you export a multiple page PDF to multiple Tables in an Excel file. It seems to work best on documents which were:

1. Converted directly to PDF from Excel
2. Converted using Acrobat (rather than a clone)

Save as Tables works better in Acrobat 9.1
Adobe greatly improved the capability to export to Excel using this method in Acrobat 9.1. Acrobat 9.0 sometimes exported XML tables that Excel could not open. Make sure you update.

How to use it:

1. Open the PDF you want to convert
2. OCR the document if it was originally scanned.
Choose Document—> OCR Text Recognition
3. Choose File—> Save As
4. From the Type list at the bottom of the window, choose Tables in Excel Spreadsheet
Adjust the file type pop-up
5. Click Save

How do I open the file in Excel?
Depending on your file associations, you may not be able to double-click the resulting XML file to open it in Excel. You’ll need to open Excel and choose File—> Open

Where are all the pages?
Each page in the PDF is converted to a different worksheet in the Excel file. Look at the tabs at the bottom of the screen.
Choose the tabs


Batch Converting PDF to Excel

Have a lot of PDFs you want to convert to Excel? No problem! This works in any version of Acrobat 9.

1. Choose File—> Export—> Export Multiple Files
2. Click the Add Files button at the top of the window and locate your source PDFs
Export Multiple Files Window
3. The Output Options window appears:
Output Options window
A) Click Browse to select a folder for the Excel output
B) If desired, add a prefix or suffix to the filename
C) Change Export to “Tables in Excel”
4. Click OK

Cómo convertir una puta imagen de disco .nrg de Nero a .iso para grabar en Debian/Ubuntu GNU/Linux con un grabador libre

http://putolinux.wordpress.com/2009/02/10/como-convertir-una-puta-imagen-de-disco-nrg-de-nero-a-iso-para-grabar-en-debianubuntu-gnulinux-con-un-grabador-libre/


Cómo convertir una puta imagen de disco .nrg de Nero a .iso para grabar en Debian/Ubuntu GNU/Linux con un grabador libre
By pragmart

nrgaiso

Fácil.

1. Abro un Terminal de root en Aplicaciones>Accesorios>Terminal de root o escribiendo gksu gnome-terminal en el cuadro que aparece al utilizar la combinación Atl+F2

2. Instalo nrg2iso con el siguiente comando
Debian

apt-get update && apt-get install -y nrg2iso

Ubuntu

sudo apt-get update && sudo apt-get install -y nrg2iso

3. Para usarlo desde terminal con el siguiente comando (previamente situado en la carpeta que contiene la imagen con el comando cd)

nrg2iso imagendedisco.nrg imagendedisco.iso

Donde, obviamente, imagendedisco.nrg imagendedisco.iso son los nombres de origen y destino de la imagen que quiera cambiar de formato

Y pista.
Fuente: La casa de Tux

Comando fine , buscar en debian

http://www.carlosarranz.es/informatica/busqueda-de-archivos-en-linux-debian/

El comando find:

Este comando nos permite buscar archivos indicando un punto de inicio de la búsqueda (path) y una expresión a buscar. Es uno de los comandos más utilizados. Por ejemplo si queremos buscar cualquier archivo que empiece por “syslog” en todo el árbol de directorios lo procesaríamos de la siguiente manera:

find / -name syslog*

*nota: si no ejecutas este comando como root, recibirás un mensaje de error cada vez que find intente acceder a un directorio para el que no tengas permiso. En este caso es recomendable dirigir los errores al dispositivo null, es decir, purgarlos: find / -name syslog* 2>/dev/null

Algunos otros modificadores útiles de find son:

-size +/-n[bkMG] donde n es el número de unidades de espacio que serán especificadas por b,k,M o G, es decir, bytes, kilobytes, Megabytes o Gigabytes respectivamente (hay más opciones). Veamos un ejemplo:

find /var/log/ -size +1M -size -20M buscará todos los archivos dentro de /var/log/ que tengan entre 1 y 20 Megabytes.

Para buscar a partir del directorio actual usaremos por ejemplo:

find . -name nombrearchivo el punto después de find indica que queremos buscar a partir de la ruta en la que nos encontramos.Aquí podemos usar otras opciones, incluso utilizar variables del sistema, como por ejemplo $HOME que corresponde a la ruta del directorio del usuario actual.

find $HOME -name nombrearchivo

Find busca de forma recursiva por defecto. Si queremos limitar la búsqueda al nivel de direcorio actual podemos usar el modificador -maxdepth 1, si quisieramos descender un nivel más en la estructura de directorios -maxdepth 2 y así sucesivamente.

También podemos especificar determinados tipos y así ignorar otros que no nos interesan; imaginemos que sólo necestamos buscar directorios:

find / -name log* -type d

En type podemos especificar varias opciones. las más comunes: d (directorios) , f (archivos normales) o l (links simbólicos).

Con -perm podemos encontrar archivos que tengan unos permisos determinados, bastante útil para securizar nuestro linux. Si lo combinamos con -user podemos localizar archivos que puedan ser modificados por un usuario determinado:

find /var/log/ -perm /222 -user usuario1

Si el resultado es muy amplio lo podemos redireccionar a un archivo para su análisis y añadir el modificador -ls, que nos listará ademas información ampliada sobre cada archivo:

find /var/log/ -perm /222 -user usuario1 -ls >> datos.txt

Otro modificador muy útil es el modificador por tiempo de acceso o modificación:

-mtime n Encontrará los ficheros que hayan sido modificados hace n*24 horas. Ignora las fracciones así que su uso no es tan evidente como el de -mmin. Si indicamos -mtime +1 buscará archivos modificados hace al menos 48 horas. Incluyo algunos ejemplos de uso más abajo, sino queda muy claro, consultad el man find.

-mmin n Encontrará los ficheros que hayan sido modificados hace n minutos.

Para ver los accesos sólo tenemos que cambiar la primera m por una a , es decir:

-atime n y -amin n

Por ejemplo

find / -mmin 1 encontrará todos los archivos que han sido modificados en el último minuto. Muy útil cuando queremos saber donde hemos dejado ese archivo que estábamos modificando hace un rato y que ahora no encontramos o qué archivos ha modificado alguna herramienta que hemos utilizado.

find . -atime 0 encontrará archivos que han sido accedidos en las últimas 24 horas.

find . -mtime 1 encontrará archivos que han sido modificados entre las últimas 24 y 48 horas.

find . -mtime +1 encontrará archivos que han sido modificados hace más de 48 horas.

find . -mtime +2 -mtime -5 encontrará archivos que han sido modificados hace más de 48 horas y menos de 5 dias.

12 de nov. 2009

Recuperar pestaña cerrada

http://lineadecodigo.com/software/recuperar-una-pestana-cerrada-en-firefox/

Con FireFox existe una forma de poder recuperar la última pestaña cerrada y eso es mediante el atajo de teclas Ctrl-Shift-T (en Windows) o Cmd-Shift-T (en Mac).

Compilar el kernel de linux

http://www.mogaal.com/articulos/kernel-a-la-debian.html


debian way http://www.esdebian.org/articulos/23843/compilar-kernel-estilo-debian


Molt bo ---->http://www.espaciolinux.com/2008/08/como-compilar-un-kernel-para-principiantes/

10 de nov. 2009

Introducción a la creación de shell scripts con bash

http://enavas.blogspot.com/2008/01/introduccin-shell-scripts-con-bash.html

Una de las cosas con la que trabajamos mucho los administradores linux es la programación de shell scripts, dado que éstos nos dan la posibilidad de preparar tareas que simplifican nuestro trabajo diario.

Veamos a continuación un pequeño guión introductorio sobre programación de shell scripts.

Para escribir un shell script necesitamos un editor de texto plano, como por ejemplo: nano o gedit. En realidad nos vale cualquier editor de texto, siempre y cuando el archivo lo guardemos como text/plain.

1. Cómo se crea un script

Vamos a crear un fichero al que llamaremos script.sh. Para ello, abrimos nano, gedit o cualquier otro editor de texto y escribimos:

#!/bin/sh
echo Este es mi primer script en bash!

Podemos ejecutarlo haciendo una llamada al shell y pasando como parámetro el nombre del script:

$ sh script.sh

También podemos hacerlo ejecutable dándole permisos de ejecución:

$ chmod +x script.sh

Una vez añadido el permiso de ejecución, ya podemos ejecutarlo directamente:

$ ./script.sh

Pero si lo que queremos es poder llamarlo desde cualquier lugar, lo copiaremos a un directorio de ficheros ejecutables, como por ejemplo: /usr/bin o /usr/local/bin.

Si observamos el código fuente de nuestro pequeño script, veremos que consta de dos líneas:

*

En la primera se indica el shell que se va a usar como intérprete para este script: #!/bin/sh. Esta siempre debe ser la primera línea de un shell script.
*

La segunda línea contiene el comando echo, que muestra un mensaje por pantalla.


2. Variables

Una variable es un contenedor que almacena un valor. Utilizamos variables para guardar valores que necesitaremos en nuestro script. Un detalle que debemos indicar es que las variables en shell script no tienen tipos asociados.

Veamos a continuación cómo se asigna un valor a una variable:

Ejemplos:

# Asignamos el valor 1 a i
i=1

# Asignamos Bienvenidos a la programación de shell scripts! a la variable cadena
cadena="Bienvenidos a la programación de shell scripts!"

Una cuestión importante: No podemos dejar espacios entre la variable y el igual o el igual y el valor, porque el shell lo interpretará como un comando y nos dará error.

Veamos ahora como podemos obtener el valor de una variable.

Para acceder al contenido de una variable empleamos $ delante de su identificador:

Ejemplos:

$ i=4
# Mostramos el valor de la variable i por pantalla
echo $i

echo "El valor asignado a i es $i"


3. Uso de parámetros en scripts

Podemos usar parámetros en nuestros scripts. Dichos parámetros nos permitirán pasar valores externos que utilizaremos dentro:


$0 contiene el nombre nombre de nuestro script

$# contiene el número de parámetros con los que se ha invocado al shell

$n contiene los parámetros, con n de 1 a 9 (a $#)

{$n} cuando n > 9, tenemos qu especificar los parámetros entre llaves

$$ contiene el PID de nuestro proceso

$* todos los parámetros menos $0


4. La salida de los programas

Cuando se ejecuta un programa, un comando UNIX es un programa, podemos, a parte de redirigir su entrada y su salida, recoger el resultado de su ejecución y su salida.

El resultado es un valor numérico, por lo general cero si todo ha ido bien, y distinto de cero si ha habido alguna clase de error.
- Para obtener el resultado de la ejecución del último comando, utilizamos $?

Ejemplo:

mkdir /home/alumnos/$idalumno > /dev/null ; echo $?

if [ $?=0 ]; then
echo "El directorio $idalumno se ha creado sin problemas"
fi

- Para obtener la salida de un comando, utilizamos $(comando) o comillas invertidas: `comando`

Ejemplo:

$ directorioactual=`pwd`
$ echo $directorioactual

- Para devolver el resultado de ejecución de un script, utilizamos exit valor, donde valor debe ser un numéro entero.

Ejemplo:

exit 0 # Termina el programa y devuelve cero como valor de salida


5. Operadores aritméticos
Si queremos que el shell evalúe una operación aritmética y no la tome como argumentos de un comando, escribiremos la expresión observando la siguiente sintaxis: $((expresion))

Al escribir la expresión de este modo, el shell la evalúa y la reemplaza por su valor.

Ejemplo:

$ echo $((1+1))

Algunos de los operadores aritméticos soportados son:

+ la suma
* la mutiplicación
- la resta
/ la división entera
% el resto de la división entera
( ) los paréntesis nos sirven para agrupar operaciones


6. Operadores de comparación
Podemos hacer comprobaciones sobre ficheros utilizando el comando test.

El comando test evalúa una expresión y retorna un valor que será cero si la expresión es verdadera o distinto de cero si la expresión es falsa.

Este comando tiene la siguiente sintaxis:

test expresion
[ expresion ]


donde EXPRESION puede ser una evaluación: de cadenas de caracteres, números enteros, archivos (evaluamos permisos y existencia del archivo) u operadores lógicos que permiten realizar una combinación de varias evaluaciones.

- Utilización abreviada del comando test.

En vez de escribir test EXPRESION, podemos escribir la EXPRESION entre corchetes( [ ] ) y el resultado será exactamente el mismo.

Ejemplo:

$ str="abc"
$ [ "$str" = "abc" ]
$ echo $?


Habitualmente el comando test se utiliza en conjunto con la sentencia if para evaluar distintos tipos de expresiones que veremos a continuación.

6.1. Operadores sobre ficheros

-d fichero cierto si fichero existe y es un directorio
-e fichero cierto si fichero existe, independientemente del tipo que sea
-f fichero cierto si fichero existe y es un fichero normal
-r fichero cierto si fichero existe y se puede leer
-s fichero cierto si fichero existe y tiene tamaño mayor que cero
-w fichero cierto si fichero existe y es se puede escribir sobre él
-x fichero cierto si fichero existe y es ejecutable


6.2. Operadores lógicos

! expresion cierto si expresion es falsa (negación)
expresion1 -a expresion2 cierto si expresion1 y expresion2 son ciertas
expresion1 -o expresion2 cierto si expresion1 o expresion2 son ciertas



6.3. Operadores de comparación de números enteros

n1 -eq n2 cierto si los enteros n1 y n2 son iguales
n1 -ne n2 cierto si los enteros n1 y n2 no son iguales
n1 -gt n2 cierto si el enteros n1 es mayor que n2
n1 -ge n2 cierto si los enteros n1 y n2 son iguales o n1 es mayor que n2
n1 -lt n2 cierto si el enteros n1 es menor que n2
n1 -le n2 cierto si los enteros n1 y n2 son iguales o n1 es menor que n2



6.4. Operadores de comparación de cadenas

s1 = s2 cierto si las cadenas de texto s1 y s2 son idénticas
s1 != s2 cierto si las cadenas de texto s1 y s2 no son idénticas
s1 <> s2 cierto si la cadena de texto s1 es mayor que s2
-n cadena cierto si la longitud de la cadena de texto es distinta de cero



6.5. Operadores lógicos && y ||

Además de los anteriores, existen los operadores lógicos && (AND, multiplicación lógica) y || (OR, suma lógica), que se puede aplicar al valor de salida de los programas:

$ true && true ; echo $?
$ true && false ; echo $?
$ false && true ; echo $?
$ false && false ; echo $?

$ true || true ; echo $?
$ true || false ; echo $?
$ false || true ; echo $?
$ false || false ; echo $?

7. Sentencias de comparación
7.1. Sentencia if

Esta sentencia nos permitirá ejecutar un bloque de código, o u otro, dependiendo de como se evalue una condición.

La forma más simple tiene la siguiente sintaxis:

if CONDICION; then
bloque de comandos
fi

En este primer caso el bloque de comandos se ejecutará solo si la condición es evaluada a cierto.

Una segunda posibilidad es utilizar else:

if CONDICION; then
bloque de comandos b1
else
bloque de comandos b2
fi

En este segundo caso el bloque de comandos b1 se ejecutará si la condición es cierta. Si la condición fuera falsa, se ejecutará el bloque de comandos b2.

La condición puede ser, por ejemplo, una llamada al comando test o una operación lógica entre los valores de salida de diferentes comandos.

Ejemplo:

read numero
# comparamos cadenas de texto, así que usamos comillas
if [ $numero -eq 5 ]; then
echo Acerté tu número. Es el 5.
fi

7.2. Sentencia case

Se utiliza cuando el valor de una variable ha de ser contrastado con varios valores. Su sintaxis es la siguiente:

case variable in
patron1) comando1
comando2;;
patron2) comando3
comando4;;
....
....
esac

Comprueba si variable coincide con algunos de los patrones (patron1, patron2,...) y ejecuta los comandos asociados con la primera coincidencia que tiene lugar.

Sólo se ejecuta un único grupo de comandos.

El ";;" es el delimitador de los comandos que se ejecutaran para un determinado patrón y "esac" es el fin de la sentencia case.

Un ejemplo clásico de uso de la sentencia case es la creación de un menú:

!/bin/bash
##############################
# Genera un menú de opciones #
##############################
echo "[1] Listar archivos"
echo "[2] Ver directorio de trabajo"
echo "[3] Crear directorio"
echo "[4] Crear usuario"
read -p "Ingrese una opción: " OPCION
case $OPCION in
1) ls;;
2) pwd;;
3) read -p "Ingrese nombre del directorio a crear: " DIRECTORIO
mkdir $DIRECTORIO;;
4) if id | grep uid=0
then
read -p "Ingrese el nombre del usuario a crear: " NOMBREUSUARIO
useradd $NOMBREUSUARIO
else
echo "Se necesitan permisos de root"
fi;;
*) echo "Opción ingresada no valida, intentelo de nuevo"
exit 1;;
esac

8. Bucles

El shell nos aporta mecanismos para realizar tareas repetitivas mediante el empleo de estructuras que permiten repetir un bloque de comandos.
8.1. El bucle for

Esta estructura permite repetir un bloque de comandos asignando valores de una serie a una variable en cada iteración.

for VARIABLE in SERIE; do
bloque de comandos
done

En cada iteración la variable VARIABLE toma un valor de SERIE, que en caso de no contener elementos hará que no se ejecute nada y se devuelva un valor 0.

En caso de que se ejecuten comandos, el resultado devuelto tras el bucle es el del último comando ejecutado.

Podemos especificar los valores de la serie de dos formas:

* Nombrando todos los elementos de la serie:for i in 1 2 3 4 5; do
* Utilizando la sentencia seq:for i in seq 1 5; do

Ejemplos:

for i in 1 2 3 4 5; do
echo $i
done

for i in seq 1 5; do
echo $i
done

# con cadenas de texto
for palabra in uno dos tres cuatro cinco; do
echo $palabra
done

8.2. El bucle while

Es otra estructura de bucle que permite ejecutar un bloque de comandos mientras se evalúe una condición a cierto:

while CONDICION; do
bloque de comandos
done

Cada iteración se evalua la condición y en el momento que no sea cierta, el bucle termina.

Ejemplos de bucles:

# equivalente a seq 1 5
i=1
while [ $i -le 10 ]; do
echo $i
i=$(($i+1))
done

# leemos de stdin hasta que se introduzca la palabra 'salir'
read linea

while [ $linea != "salir" ]; do
read linea
done

8.3. Rompiendo la ejecución del bucle: break

Podemos interrumpir un bucle en cualquier momento mediante el uso de la sentencia break, de forma que tras ser ejecutado ese comando el control pasa al siguiente comando después del done.

Ejemplo de uso de break:

for elemento in *; do
echo Primer elemento $elemento

break

echo Esto nunca se llega a ejecutar
done

echo Seguimos con el programa

9. Funciones

Una función o subrutina es una agrupación de comandos bajo un mismo nombre. Lo que nos permitirá dividir el programa en bloques y programar cada bloque por separado, o agrupar una serie de comandos que se ejecutan a menudo bajo un mismo nombre.
Veamos cuál es la sintaxis de una función:

nombre_funcion()
{
comando1
comando2
...
...
}

Luego, para ejecutar la función debemos llamarla por su nombre, igual que un comando:

...
nombre_funcion
...


Eso sí, debemos tener en cuenta que es necesario definir cada función antes de utilizarla. Veamos un ejemplo:

mostrar_menu ()
{
echo -e "\n"
echo "[1] Crear usuario"
echo -e "[2] Salir\n"
read -p "Elija una opción: " OPCION
}

crear_usuario ()
{
if [ id | grep uid=0 ]; then
read -p "Nombre del usuario a crear: " NOMBREUSUARIO
useradd $NOMBREUSUARIO
else
echo '*****************************'
echo "Se necesitan permisos de root"
echo '*****************************'
fi
}
############# Programa principal #################
while true; do
mostrar_menu
case $OPCION in
1) crear_usuario ;;
2) echo "Abandonando el programa..."
break;;
*) echo '********************************************'
echo "Opción ingresada no valida, intente de nuevo"
echo '********************************************';;
esac
done

9 de nov. 2009

configurando ipcop

http://www.monografias.com/trabajos15/firewall-linux/firewall-linux.shtml

8 de nov. 2009

Linux, añadir unidad de red windows

http://rubensa.wordpress.com/2006/05/08/linux-samba/


La red que hay montada en mi lugar de trabajo es una red Windows. Actualmente estoy intentando utilizar lo más posible la distributción Ubuntu que tengo instalada para realizar mi trabajo diario. Una de las necesidades que me surgen es el acceso a unidades compartidas de red de otros equipos Windows.

Aunque el administrador de archivos Nautilus que tiene el Gnome me permite navegar por unidades compartidad de Windows, muchas de las aplicaciones existentes no “entienden” el protocolo “smb” y por tanto no pueden acceder a los archivos que se encuentran en dichas unidades.

Para solucionar este inconveniente, lo mejor es “montar” las unidades compartidas en nuestro arbol de directorio para que todas las aplicaciones vean las unidades como si de un directorio más se tratasen.

Antes de nada, lo primero que necesitamos es añadir el soporte para samba (así se conoce el sistema de compartición de carpetas de Windows) a nuestro GNU/Linux. En Ubuntu, basta con instalar los paquetes “smbfs”, “samba”, “samba-common” y “smbclient”.

A continuación crearemos la carpeta en la que “montaremos” la unidad compartida:

$ sudo mkdir /mnt/compartida

Una vez que nuestro sistema tiene instalado todo lo necesario, ya “entenderá” el protocolo de Samba y podemos “montar” la unidad compartida con el comando:

$ sudo mount -t smbfs -o username='usuario',password='clave',workgroup=grupowin //equipowin/compartida /mnt/compartida

Con lo que conseguimos que la carpeta compartida “compartida” del equipo “equipo.red” esté accesible en el directorio “/mnt/compartida” de nuestro equipo, como si de un directorio local se tratase.

Si lo deseamos, también podemos editar el fichero “/etc/fstab” para añadir una línea que defina cómo se montará esta unidad de red. Antes de ello hacemos una copia de seguridad por si acaso mediante la orden:

$ sudo cp /etc/fstab /etc/fstab_backup

Y después lo editamos mediante:

$ sudo gedit /etc/fstab

Añade lo siguiente al final del fichero:

//equipowin/compartida /mnt/compartida smbfs username=usuario,password=clave,workgroup=grupowin,user,owner,noauto 0 0

Tendrás que personalizar esta línea para cambiar:

* equipowin por el nombre de la máquina Windows a la que te estás conectando
* compartida por el nombre de la carpeta compartida
* /mnt/compartida por el nombre del directorio donde lo quieras montar
* la ip de la máquina Windows a la que te conectas
* username, poner el del usuario en Windows
* password, poner la clave del usuario en Windows
* grupowin por el nombre del grupo de trabajo o dominio en Windows

Sólo hace falta ejecutar:

$ sudo chmod +s /usr/bin/smbmnt

para hacer que un usuario “normal” pueda montar la unidad.

Ahora abre tu equipo mediante Lugares -> Equipo y verás un nuevo icono representando a la carpeta compartida. Mediante un doble clic en ella, se montará la unidad. También puedes montarla con la orden:

$ mount /mnt/compartida

Para desmontarla, hay que ser root, por lo que no puedes desmontarla más que ejecutando:

$ sudo umount /mnt/compartida

Opcones más comunes de mount
La cuarta columna del fichero fstab lista todas las opciones de montaje para el dispositivo o partición. Hay muchas opciones disponibles, pero estas son las más comunes:

* credentials: Permite tener el usuario y contraseña en un fichero en vez de proporcionarlo como parámetro en el comando. El contenido del fichero será similar a esto:

username=usuariowindows
password=passwordwindows

Y generalmente se le asignará permiso de escritura y lectura solamente para el propietario (chmod 600)
* auto y noauto: Con auto (opción por defecto) el dispositivo se montará automaticamente.
* user y nouser: La opción user permite que usuarios normales monten el dispositivo mientras que nouser (valor por defecto) solamente lo permite para root.
* exec y noexec: exec (valor por defecto) permite ejecutar binarios de la partición, mientras que noexec no lo permite.
* ro y rw: ro monta el sistema de archivos en modo solo lectura mientras que rw (valor por defecto) lo monta en modo lectura/escritura.
* sync y async: Indica cómo se realizará la entrada y salida del sistema de archivos. sync significa que se hará de forma síncrona (al ejecutar un comando, se escribe físicamente en el dispositivo el resultado) mientras que con async (valor por defecto) se realiza asíncronamente (el sistema de archivos se sincroniza antes de desmontar la unidad).
* defaults: Utiliza las opciones por defecto que son rw, suid, dev, exec, auto, nouser, y async.

Opciones de smbmount

* username=: nombre de usuario SMB
* password=: contraseña SMB
* netbiosname=: nombre NetBIOS origen
* uid=: usuario que será propietario de la unidad montada
* gid=: grupo que será propietario de la unidad montada
* port=: número puerto remoto SMB
* fmask=: máscara de permisos asignados a los ficheros de la unidad montada
* dmask=: máscara de permisos asignados a los directorios de la unidad montada
* debug=: nivel de depuraciñon
* ip=: nombre host o dir. IP destino
* workgroup=: dominio/grupo NetBios destino
* sockopt=: opciones socket TCP
* scope=: NetBIOS scope
* guest: invitado, sin contraseña
* ro: montar solo-lectura
* rw: montar lectura-escritura

Solución de problemas

Problema:Al montar una unida con:

$ sudo mount -t smbfs -o username=user,password=pass //IP/recurso /mnt/tmp

Nos monta la unidad pero nos dice esto:

20389: session request to IP failed (Called name not present)
20389: session request to 192 failed (Called name not present)

esto se soluciona buscando el nombre NetBios de la máquina a la que se le requiere el servicio:

nmblookup -A IP

por ejemplo:

nmblookup -A 192.168.78.1

y una vez obtenido (si lo sabemos de memorio no hace falta, claro), procedemos al montaje de la unidad mediante:

$ sudo mount -t smbfs -o username=user,password=pass //NOMBRE_NETBIOS/recurso /mnt/tmp

Hecho esto no nos debe a aparecer ninguna alerta al respecto.