Script muetra sub directorios.

Recibir un nombre de directorio, validar existencia y condición de directorio y mostrar nombres de todos los directorios y subdirectorios bajo él, en formato de página largo 23.

Publicado en Unix - Linux | Deja un comentario

Diferencias entre “find -exec comando ;”, “find -exec comando +” y “find | xargs comando”

Vamos directamente a un caso practico, moviendo/ 500.000 ficheros/ con find -exec ; tardamos /88 minutos/:

# find /target/tmp/ -type f | wc -l
524275

real 88m23.913s
user 5m12.872s
sys 81m43.738s

Si usamos /-exec comando +/ bajamos a/ 4m30s/:

# ls -1 /target/tmp/ | wc -l
524276

real 4m30.750s
user 0m9.777s
sys 1m35.633s

Y como bonus final, con/ find | xargs/, se tardan/ menos de 3 minutos/:

# ls -1 /target/tmp/ | wc -l
524276

real 2m42.905s
user 3m38.539s
sys 14m5.651s

La explicacion, es que en el primer comando, al usarse/ “-exec comando ;” /, lo que ocurre es que se ejecuta un comando mv por cada fichero. Cuando se usa/ “-exec comando +”/, cada comando es agregado al comando y se ejecuta a continuacion, por lo que, tal y como explica la pagina man de find, esto hace que el total de invocaciones es mucho menor y de ahi esa mejora enorme en el rendimiento. Este compartiendo es el mismo que cuando usamos xargs, la diferencia de rendimiento en este caso radica en usar la opcion /“-P”/ que crea tantos procesos como les indiquemos, o infinitos si usamos /“-P 0”/.

Publicado en Unix - Linux | Deja un comentario

Quitar los ^M de fin de linea

Con demasiada frecuencia ocurre que importamos un texto de MS-DOS a UNIX, y al editarlo con el vi (por ejemplo), sale lleno de “^M” al final de todas las líneas. Lo primero, decir que no hay problema en el vim, porque si pones la opción “autotext” (:set autotext), el vim automáticamente detecta el tipo de fichero que es (DOS o UNIX), y si es DOS, quita los ^M de la pantalla. Esto de los ^M ocurre porque el delimitador de línea de los ficheros de texto en DOS es CR-LF (carriage return-linefeed, o sea, retorno de carro y salto de línea), y en UNIX son simplemente LF. Así, muchas herramientas de UNIX (al menos por defecto), buscan como delimitador de línea el LF, así que al final de cada línea hay un caracter extraño (el CR).
Esto, en vi, se puede arreglar fácilmente con la orden

Te comento por encima qué significa este chorizo: El “%” sirve para que se sustituya en todas las líneas, y no sólo en la actual, la “s” para que se realice una sustitución, el Ctrl-V Ctrl-M es necesario para que el vi no se crea que estamos pulsando un ENTER (Ctrl-V sirve para insertar literales), y, por supuesto, se sustituye por nada, así que entre la segunda y la tercera barras no ponemos nada.
Por si no te gusta el vi, puedes cambiar el formato de los ficheros de texto desde la línea de órdenes, escribiendo:

Actualización : el ^M copiado de texto a consola se muestra como dos caracteres , pero realmente es uno. En la consola se puede generar con control+v + m con lo que un sed -i ‘d/^M/’ fichero deberia funcionar siempre y cuando ^M sea un solo caracter y no dos.

Publicado en Unix - Linux | Deja un comentario

UNIX – Script acceso remoto automatizado por telnet.-

Aunque el método común de logarse en una máquina de manera remota (y en modo texto) es ssh, en alguna ocasión puede que nos toque administrar sistemas antiguos que usan telnet para las labores de administración remota.

En este caso, permitir que un script se pueda logar por telnet en una máquina remota y ejecutar algunos comandos puede resultar tarea dificil (telnet no permite especificar por linea de comandos usuario y contraseña). A simple vista nos parecería que el logado por telnet requiere hacerse por una persona. No obstante, este proceso se puede automatizar (y por tanto, usarlo en nuestros scripts).

La idea es la siguiente: «teclear» los comandos o textos necesarios cuando las aplicaciones nos las van pidiendo. Cuando ejecutamos el comando telnet $IP_SERVIDOR, en un segundo o menos nos aparece el típico «Login: «; en este momento nuestro script tecleará el login correspondiente. Tras dos segundos (o algo menos) se nos pide «Password: «; a lo que nuestro script responderá. Y así con el resto de comandos o textos que una persona que se logase fuese introduciendo (con las temporizaciones correctas).

Si omitimos la redirección de la salida estándar a fichero, podremos ver cómo se va ejecutando todo y se van escribiendo los comandos en los tiempos establecidos. Si no dejásemos una pausa de 2 segundos entre la introducción del login y del password, el password se escribiría en pantalla antes de que el demonio telnet imprima el texto «Password: «, y muchos demonios telnet (si no todos) olvidan lo tecleado antes de solicitar el password. Lo mismo para el resto de comandos; necesitamos esperar a que «bdf» (df de HP-UX) termine de ejecutarse y nos aparezca el prompth del shell para poder meter el siguiente comando: exit.

Publicado en Unix - Linux | 1 comentario

BASH – Script suma tamaños de archivos.-

Script que muestra el tamaño total en bytes de todos los archivos que contiene el directorio actual, excluyendo directorios, subdirectorios y archivos ocultos. SÓLO ARCHIVOS!!

Publicado en Unix - Linux | Deja un comentario