A veces es necesario un script shell que se ejecute una sola vez, por ejemplo
cuando estas trabajando en una imagen de una maquina virtual o una distribución,
y necesitas que se ejecute un script la primera vez que arranca el sistema. Estos
scripts son faciles de escribir pero hay que tener cuidado con ciertos detalles
que pueden dar problemas.
La primera aproximación es eliminar el script tras se ejecutado.
#!/bin/bash
# Tus comandos aqui
# Elimina el script antes de salir
rm $0
El problema de éste sistema es que $0 no devuelve la ruta del script sino que
devuelve el nombre usado para su invocación, si se usó ruta absoluta no hay problema,
pero si se usó relativa puede darse el caso que si se ha cambiado el directorio de
trabajo durante su ejecución, no borrara el script o incluso puede borrar un
archivo con el mismo nombre en otro directorio.
La solución es obtener la ruta absoluta del script antes al inicio, y usarla para
borrar el archivo al finalizar.
#!/bin/bash
# Obtener ruta absoluta
RUTA_ABSOLUTA=$(cd `dirname "${BASH_SOURCE[0]}"` && pwd)/`basename "${BASH_SOURCE[0]}"`
# Tus comandos aqui
# Elimina el script
rm $RUTA_ABSOLUTA
Esto es suficiente en la mayoría de los casos, pero en algunas situaciones no es
posible eliminar el script porque puede ser necesario posteriormente. En estos casos
se usa un flag para determinar si el script ya se ha ejecutado.
#!/bin/bash
FLAG="/var/log/archivo-flag.log"
if [ ! -f $FLAG ]; then
echo "Primera ejecucion del script"
# Crear flag para recordar que se ejecuto
touch $FLAG
else
echo "El script solo se puede ejecutar una vez"
exit 0
fi
# Tus comandos aqui
Aquí se ha usado un archivo como flag que es creado en la primera ejecución, cuando
se intenta ejecutar el script posteriormente se detecta la existencia del archivo y
no se continua con la ejecución. Si quisieras ejecutarlo una vez mas, no hay mas que
eliminar el archivo flag.
Este sistema tampoco es perfecto, si por algún error se borra el archivo flag el
script se ejecutaría de nuevo, por lo que hay que tener cuidado con donde y con que
permisos se crea.
Y eso es todo, elige el método que mas te guste.
Click to read and post comments
Comprimir directorios en Linux es imprescindible para muchas tareas de backup y
administración, en éste artículo se muestran dos métodos usando los formatos
tar.gz y zip.
Tar Gzip
El formato mas usado en sistemas Unix/Linux es tar.gz que es un proceso de dos
pasos primero se usa el programa tar para unir todos los archivos a comprimir
en uno solo, sobre el que luego se usa el compresor gzip. Esta secuencia es
tan común que el comando tar incluye una opción para comprimir directamente el
archivo al finalizar.
Puede comprimir un directorio usando:
$ tar -czvf nombre-directorio.tar.gz nombre-directorio
Donde
- -z Comprime el archivo usando gzip
- -c Crea un archivo
- -v Verbose, escribe en pantalla información sobre el proceso de compresión
- -f Nombre del archivo
Imagina que quieres comprimir tu directorio home
$ tar -czvf backup-directorio-usuario.tar.gz /home/usuario
También puedes comprimir todos los archivos dentro de directorio actual
incluidos subdirectorios usando:
$ tar -czvf nombre-backup.tar.gz *
Para restaurar un archivo comprimido:
$ tar -xzvf backup-directorio-usuario.tar.gz
Donde
- -x Indica que debe extraer los archivos
Zip
Algunas veces es necesario que el archivo sea descomprimido en otros sistemas
operativos, en ese caso es útil usar el formato zip que tiene mayor
compatibilidad.
Comprimir varios archivos en un solo zip:
$ zip archivos-comprimidos.zip archivo1 archivo2 archivo3
Comprimir todos los archivos del directorio sin incluir subdirectorios:
Comprimir un directorio completo incluyendo subdirectorios:
$ zip -r directorio-comprimido.zip /home/usuario
Puedes descomprimir archivos zip usando:
Click to read and post comments
Con el auge de los servidores baratos, ya sea VPS o dedicados, cada vez es
mas común que cualquier pequeña página tenga que administrar su propio
servidor, un aspecto que es fácilmente ignorado o incluso olvidado es el
espacio swap, y puede tener una grandes repercusiones en el rendimiento.
¿Que es el espacio swap?
Swap es usado cuando Linux llena toda la memoria RAM física disponible. Si el
sistema tiene swap habilitado, datos almacenados en RAM que no están siendo
usados son movidos a swap temporalmente para liberar espacio. Con esto se
consigue que en momentos puntuales en los que la carga del sistema es alta,
exista espacio extra hasta que pase la congestión.
El espacio swap tiene sus limitaciones, al estar normalmente localizado en
algún medio de almacenamiento masivo, ya sea un disco duro o SSD, tienen
un tiempo de acceso y velocidad de transferencia ordenes de magnitud peores
que la memoria RAM. Por eso un sistema que usa swap de manera continuada
tendrá un mal rendimiento, e indica que no tiene suficiente memoria RAM y
es momento de una ampliación.
Configurar swap en Linux
El primer paso es comprobar si swap ya está activado en el sistema.
$ free -m
total used free shared buffers cached
Mem: 7709 5009 2699 312 55 1198
-/+ buffers/cache: 756 3953
Swap: 0 0 0
Con free podemos ver la memoria disponible en el sistema, en caso de que swap
no esté activado deberá aparecer ceros en la linea de swap.
Si no esta activado el siguiente paso es crear el archivo que se usara como swap
$ sudo dd if=/dev/zero of=/swapfile bs=8G count=4
$ sudo chmod 600 /swapfile
Esto crea un archivo de 8GB (recomendado que su tamaño sea el doble que la RAM),
y cambia los permisos para que no pueda ser leído mas que por el root. Tras esto
hay que crear el espacio swap en el archivo.
$ sudo mkswap /swapfile
Configurando espacio de intercambio versión 1, tamaño = 4194300 kiB
sin etiqueta, UUID=7f2020e5-0a09-4f1b-b0af-3053e94f17e2
Para activar swap
Antes de continuar es recomendable usar free para comprobar que todo ha funcionado correctamente.
$ free -m
total used free shared buffers cached
Mem: 7709 6626 1082 463 189 2464
-/+ buffers/cache: 350 3736
Swap: 7980 1029 6951
Por último es necesario configurar fstab para que swap se active al
arrancar el sistema. Con tu editor favorito añade lo siguiente a fstab.
/swapfile none swap sw 0 0
Y eso es todo, un tutorial MUY básico de como activar swap.
Click to read and post comments
Aviso: Este es un listado de comandos que constantemente olvido y
busco, asi que los he reunido en una lista para tener acceso rápido.
Compresión de directorios
Comprimir:
$ tar -zcvf backup-2013-05-03.tar.gz /home/backup/directory
Descomprimir:
$ tar -zxvf backup-2013-05-03.tar.gz
Vim
Encontrar cada ocurrencia de la cadena 'foo' en el texto, y substituirla por la
cadena 'bar'.
Encontrar cada ocurrencia de la cadena 'foo' en la línea actual, y substituirla
por 'bar'.
Substituir cada ocurrencia de la cadena 'foo' por 'bar', pero pidiendo confirmación
primero.
Grep
Buscar archivos que contengan determinado texto.
$ grep 'nombre' *.txt
$ grep '#include<example.h>' *.c
Debug
Resumen de llamadas al systema realizadas por un comand
$ strace -c ls >/dev/null
Trafico de red excepto ssh
Click to read and post comments