lunes, 31 de diciembre de 2018

Reemplazar texto dentro de ficheros

En algunas ocasiones se hace necesario cambiar algún texto dentro de un fichero. En una primera aproximación, se puede usar un fichero temporal para ello:
$ cat fichero | sed "s/Buenos días/Buenas tardes/g" > tmp
$ mv tmp fichero
No obstante, hay una forma más directa y recomendable de realizar este tipo de cambios:

jueves, 27 de diciembre de 2018

Trabajo con ficheros temporales en bash

En esta entrada vamos a ver una buena forma de gestionar los archivos temporales que se crean en los scripts bash.
Inicialmente, un script que requiera la creación de ficheros temporales podría tener la siguiente forma:
#!/usr/bin/env bash

TMPFILE=/tmp/temporal
df -h > $TMPFILE
free -m >> $TMPFILE
LINEAS=$(wc -l $TMPFILE | cut -d " " -f 1)
echo "$LINEAS lineas"
rm -f $TMPFILE

lunes, 24 de diciembre de 2018

Tip: explainshell


Hoy aprovecho para comentar una web que descubrí hace poco y que es una pasada. Se trata de explainshell.com.
Esta web explica con detalle cualquier comando que se pueda escribir en el shell de Linux y aclara el significado de cada argumento usado.
Veamos un ejemplo:
iptables -A INPUT -i eth0 -p tcp -s 192.168.100.0/24 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT

El análisis de este comando mediante explainshell es el que se muestra en la siguiente imagen:


Un recurso muy interesante a tener en cuenta en el día a día.

jueves, 20 de diciembre de 2018

lunes, 17 de diciembre de 2018

Liberar espacio en disco eliminando paquetes innecesarios

Hoy vamos a ver una forma de liberar espacio en disco en Linux que mucha gente desconoce.
Con el tiempo, los paquetes del sistema operativo se van actualizando y, entre ellos, el kernel de Linux recibe actualizaciones. Por precaución, los kernels antiguos no se eliminan dado que en un momento determinado el equipo nos puede ir mal con el kernel recién instalado y puede ser necesario usar los anteriores, que todavía siguen disponibles en el sistema.
Con el tiempo, los kernels antiguos tienden a acumularse y es una buena práctica, a nivel de mantenimiento, eliminarlos. Esto también ayudará a reducir el espacio en uso de disco.

jueves, 13 de diciembre de 2018

Primeros pasos con Postgresql

En la entrada de hoy vamos a ver cómo montar un servidor de Postgresql paso a paso para disponer de lo básico para empezar a trabajar.
Indicar que en este ejemplo se usará la distribución Ubuntu 18.04 en su edición server, aunque el proceso no variará demasiado para otras distribuciones.
Vamos a dividir en dos secciones los pasos a realizar: por un lado estará el proceso de instalación y por otro el de realización de configuraciones básicas para poder usar la base de datos.

lunes, 10 de diciembre de 2018

Dando color al terminal #3

Como se ha visto en entradas anteriores del blog, se puede dar formato al texto del terminal para hacerlo más atractivo y llamativo de cara al usuario.
Inicialmente hemos visto cómo dar color al texto. Posteriormente, se vio cómo aplicar negrita, cursiva y subrayar el texto. En la entrada de hoy vamos a ampliar los estilos que se pueden usar para dar formato al texto del terminal.

jueves, 6 de diciembre de 2018

Contar lineas idénticas

Hoy voy a plantear una solución sobre cómo realizar un conteo de lineas idénticas salidas de una aplicación o script.
Pongo un ejemplo, pero este método es aplicable a cualquier otro caso.
Objetivo: se quiere conocer cuántos ficheros hay dentro de un directorio por extensión.
El listado de ficheros se puede realizar fácilmente mediante find:
find . -type f -exec basename {} \;
Ahora vamos a quedarnos solo con la extensión:

lunes, 3 de diciembre de 2018

Dando color al terminal #2

Como vimos en una entrada anterior, dando color al terminal, el terminal de Linux no siempre ha de ser negro sobre blanco. Hoy vamos a ver más formas de dar formato al texto del terminal.

sábado, 1 de diciembre de 2018

Nueva etapa

Hola a todos, como habéis visto el blog ha tomado un nuevo impulso tras un largo tiempo de inactividad. Esta nueva etapa irá cargada de constancia en la publicación de entradas con la mente puesta en enseñar pequeños trucos y nuevas formas de hacer las cosas que puedan aportar valor a los conocimientos del lector.
Aprovecho estas palabras para informaros de un nuevo enlace en esta web que veréis en la sección de enlaces de interés, Amazon afiliados, mediante el cual podéis apoyar al blog a coste cero. Con este enlace accederéis a la web de Amazon y cualquier compra que hagáis generará una pequeña comisión para el blog. Por supuesto, los precios son en todo momento los de Amazon, por lo que es una buena forma de contribuir con el blog sin ningún coste por vuestra parte.
Sin más que deciros, nos vemos en las siguientes entradas.

jueves, 29 de noviembre de 2018

printf para bash

Bash dispone del comando echo para mostrar texto por el terminal. No obstante, en ocasiones este comando se nos puede quedar corto y se hace excesivamente elaborado formatear ciertas cadenas de texto a nuestro gusto.
Para estos cometidos, el comando interno de bash printf será de gran ayuda dado que funciona de forma bastante similar a printf de C.
Veamos un ejemplo de formateo de texto en forma de tabla:

lunes, 26 de noviembre de 2018

Variables bash #1

Bash tiene multitud de variables internas que permiten obtener una gran variedad de información. Una de ellas es $SECONDS.
Esta variable indica el número de segundos que el proceso bash está en ejecución. Si lo ejecutamos sobre la linea de comandos, obtendremos el tiempo que ese shell lleva en ejecución:
$ echo $SECONDS
292
Si lo ejecutamos dentro de un shell script que use bash, podremos usar esta variable para controlar el tiempo máximo de ejecución del script, ejecutar alguna acción cada x segundos, etc.
#!/usr/bin/env bash

MAXIMO=10

while [ $SECONDS -le $MAXIMO ]
do 

  echo "$SECONDS segundos de ejecucion del script"
  sleep 1

done

jueves, 22 de noviembre de 2018

Dando color al terminal

La consola de Linux permite el uso de colores en el texto para dar un toque distinto a nuestras aplicaciones. Estos colores se activan mediante el uso de códigos de escape ANSI.
Por ejemplo, si se desea escribir un texto en rojo pondríamos lo siguiente:
$ echo -e "\033[31mRojo"
Siendo los caracteres iniciales el código de escape ANSI asociado a dicho color.
Los colores que se pueden usar son los siguientes:
  • Negro: \033[30m
  • Rojo: \033[31m
  • Verde: \033[32m
  • Amarillo: \033[33m
  • Azul: \033[34m
  • Lila: \033[35m
  • Cian: \033[36m
  • Blanco: \033[37m
A continuación se muestra una forma práctica de usar estos códigos de escape:

lunes, 19 de noviembre de 2018

Instrucción vacía

La mayoría de los lenguajes de programación tienen lo que se denomina instrucción vacía. Esta instrucción en realidad no realiza ninguna función práctica, pero permite rellenar un hueco allí donde se necesita.
Veamos un ejemplo en Python:
import sys
try:
    f = open('myfile','r')
except:
    pass
En este ejemplo, si el fichero myfile no existe saltará una excepción que será capturada por el bloque try. Como no se requiere ejecutar ninguna acción si salta la excepción y la sección except hay que colocarla, se pone en ella la instrucción vacía pass de Python.
Veamos cuál es la instrucción vacía en bash y qué usos se le puede dar.

jueves, 15 de noviembre de 2018

bash en modo debug

Bash permite la ejecución de shell scripts bastante potentes. A menudo, este es un recurso muy utilizado por administradores de sistemas para labores de lo más variadas.
A todo el mundo el ocurre en alguna ocasión que un script no hace lo que debería, falla en algún punto y a pesar de revisar el código una y otra vez no se ve el punto de fallo.
Llegados a esta situación, es el momento de añadir comentarios a lo largo del código para intentar acotar el segmento donde se produce el fallo. Un echo dentro del if y otro en el else, para ver por dónde pasa. Y uno más en el bucle para ver las repeticiones que se producen.
Una vez encontrada y corregida la errata, a buscar todos los comentarios que se insertadon para eliminarlos.
Hay un método mucho más fácil para seguir la pista a la ejecución de un script y ver así cuál es su punto de fallo.

lunes, 12 de noviembre de 2018

Manipulación de ficheros que empiezan con un guión

En esta ocasión vamos a ver el tratamiento que hay que dar a los ficheros cuyo nombre comienza con un guión, dado que las técnicas habituales de uso de caracteres de escape para no tratar los caracteres especiales no funcionan.
Veamos un ejemplo clásico:
$ echo "HOLA" > tm?p
$ rm tm\?p
rm: remove regular file 'tm?p'?
Como se observa, el caracter “?” es considerado como un caracter especial, y para referirse a él como un simple caracter y no como un símbolo especial, hay que usar el caracter de escape “\” antecediéndolo.
Sin embargo, esto no ocurre si el nombre del fichero comienza con un guión intermedio:
$ echo "HOLA" > -tmp
$ rm -tmp
rm: invalid option -- 't'
Try 'rm ./-tmp' to remove the file '-tmp'.
Try 'rm --help' for more information.
$ rm \-tmp
rm: invalid option -- 't'
Try 'rm ./-tmp' to remove the file '-tmp'.
Try 'rm --help' for more information.
$ rm "-tmp"
rm: invalid option -- 't'
Try 'rm ./-tmp' to remove the file '-tmp'.
Try 'rm --help' for more information.
Los errores mostrados indican que el comando usado (rm en este caso, pero puede ser otro cualquiera) considera el guión como el comienzo de un parámetro.
Vamos a ver dos métodos para referirnos a los ficheros que comienzan con un guión.

jueves, 8 de noviembre de 2018

Usos del comando hostname

A continuación vamos a ver algunos usos útiles que se le puede dar al comando hostname de Linux para obtener información sobre la configuración de red del equipo:

Conocer el nombre del equipo

Este es el uso habitual que se le suele dar a este comando: conocer el hostname de la máquina en la que estamos.
$ hostname
myserver
Adicionalmente, se puede usar el parámetro -s, de short, para conocer el nombre del equipo, o lo que es lo mismo, la primera parte del nombre FQDN.
$ hostname -s
myserver
Conocer el dominio DNS del equipo
Para obtener el nombre del dominio DNS configurado en el equipo, habrá que usar el parámetro -d:
$ hostname -d
example.com

Conocer el nombre FQDN del equipo

​El FQDN (Fully Qualified Domain Name) de un equipo está formado por su hostname y el nombre de dominio. La forma de conocer este dato es la siguiente:
$ hostname -f
myserver.example.com