jueves, 21 de marzo de 2019

Significado de segunda columna de comando ls

Un comando ampliamente utilizado en un sistema Linux es ls con el parámetro -l, que ofrece información adicional por cada fichero. Veamos un ejemplo:
$ ls -l
total 12
-rwxr-xr-x 1 root root 4017 mar 20 09:49 specs.sh
drwx------ 3 root root 4096 mar 18 10:29 systemd-private-ac
drwx------ 2 root root 4096 ago  7  2018 vmware-root
Sin embargo, no es habitual conocer el significado de la segunda columna, ese valor numérico que tiene cada fichero o directorio listado.
Este valor indica el número de enlaces duros que tiene el fichero o directorio. Recordar que un fichero cualquiera mantiene sus datos almacenados en el disco duro, y dispone de una estructura de inodos para indicar qué bloques son los que tienen sus datos. Un enlace duro es un fichero que usa el mismo inodo que el fichero original. Veamos un ejemplo:

lunes, 18 de marzo de 2019

Liberar espacio de disco eliminando caché de paquetes

Cuando nos encontramos ante un equipo con poco espacio libre en disco, hace falta ejecutar una serie de acciones para liberar espacio.
Una de ellas es liberar espacio reservado para root. Con esta acción conseguiremos ganar bastante si la partición es grande.
Otra acción encaminada a ganar espacio libre consiste en liberar espacio en disco eliminando paquetes innecesarios. Se puede llegar a liberar 1 GB o incluso más.
En esta ocasión se va a exponer un tercer método para liberar espacio en disco: eliminar la caché de paquetes .deb, que se almacena en el equipo tras la instalación de paquetes por si en el futuro hay que volver a [re]instalarlos. Esto, por supuesto, solo es aplicable para sistemas basados en paquetería mediante APT. Como Debian o Ubuntu.
Para ello, ejecutaremos:
$ sudo apt clean
O si nuestra versión de sistema operativo es más antigua:
$ sudo apt-get clean
Este comando no ofrece ninguna salida por pantalla pero elimina la caché de paquetes ubicada en el directorio /var/cache/apt. De hecho, podemos ejecutar una simulación del comando que indicará los pasos que realiza:
$ sudo apt-get -s clean
Del /var/cache/apt/archives/* /var/cache/apt/archives/partial/*
Del /var/lib/apt/lists/partial/*
Del /var/cache/apt/pkgcache.bin /var/cache/apt/srcpkgcache.bin

jueves, 14 de marzo de 2019

Aprendiendo Vim #4

Como continuación a la última entrada referente a Vim, Aprendiendo Vim #3, en esta ocasión se explicará cómo buscar texto en Vim.
Para ello, partiremos del modo normal que es en el que nos encontramos al abrir un fichero con Vim. Estando en este modo, escribiremos lo siguiente:
/palabra
Siendo palabra lo que se desea buscar. Al pulsar Enter, se iniciará la búsqueda desde la posición actual del cursor. Finalmente, el cursor se posicionará al inicio de la primera palabra que se encuentre.
Algo habitual es buscar repeticiones de la misma palabra. Bastará con pulsar n en el modo normal y se repetirá la búsqueda de nuevo, buscando hacia adelante. Si por el contrario se desea realizar la búsqueda de la palabra hacia atrás, pulsaremos N.
Entradas anteriores de Aprendiendo Vim

lunes, 11 de marzo de 2019

Conocer el nombre del kernel en uso

Los sistemas operativos de tipo Unix-like suelen disponer de mecanismos para averiguar qué kernel es el que está en uso. Esto es útil para, por ejemplo, restringir el uso de un script a un tipo de kernel en concreto.
El siguiente comando servirá para detectar el tipo de kernel en uso, y está diponible en la amplia mayoría de sistemas Unix-like:
$ uname -s
Linux
Para el caso de FreeBSD:
$ uname -s
FreeBSD
Y para el caso de MacOS:
$ uname -s
Darwin
Y un ejemplo de uso prodría ser el siguiente:
#!/usr/bin/env bash

if [ `uname -s` = "Darwin" ]; then
  echo "Continuar con el script en este Mac"
fi

jueves, 7 de marzo de 2019

Invertir cadena de texto con Python

Python dispone de mecanismos internos para invertir una cadena de texto. Es decir, se invierte el orden de los caracteres tal que se imprime primero el último, después el penúltimo y así hasta el primero.
Siendo cadena un String:
cadena = 'Me gusta mucho el blog www.administracion-linux.com'
La forma para invertir la cadena de texto es la siguiente:
cadena[::-1]
'moc.xunil-noicartsinimda.www golb le ohcum atsug eM'
Si lo que se desea en realidad es invertir el texto de cada palabra, pero que estas se impriman en su orden natural (palabra1 palabra2 … palabraN), se puede realizar lo siguiente:
for item in cadena.split(' '):
  print item[::-1],
Obteniendo como resultado:
eM atsug ohcum le golb moc.xunil-noicartsinimda.www

lunes, 4 de marzo de 2019

Cambiar servidor de hora en Ubuntu 18.04

En una entrada anterior se explicó cómo establecer el timezone en Ubuntu 18.04. Una personalización relacionada con el timezone es la de cambiar el servidor NTP a partir del cual nos sincronizamos.
En Ubuntu 18.04, el encargado de gestionar la sincronización horaria es el demonio systemd-timesyncd. Por defecto, este demonio sincroniza la hora del sistema mediante los servidores de hora de Ubuntu (golem.ubuntu.com). Si lanzamos un tcpdump y esperamos un poco, veremos tráfico de red por el puerto 123 UDP, que es el relacionado con el protocolo NTP:
$ sudo tcpdump port 123
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on enp0s3, link-type EN10MB (Ethernet), capture size 262144 bytes
21:32:36.048941 IP us18.home.44687 > golem.canonical.com.ntp: NTPv4, Client, length 48
21:32:36.093463 IP golem.canonical.com.ntp > us18.home.44687: NTPv4, Server, length 48

jueves, 28 de febrero de 2019

Volver al directorio anterior

Aquí va un tip rápido y útil relacionado con el desplazamiento entre directorios en la línea de comandos de Linux.
Para ir al directorio anterior en el que nos encontrábamos, basta con usar el siguiente comando:
$ cd -
A continuación se muestra un ejemplo:
user@srv:/usr/local$ cd /tmp
user@srv:/tmp$ cd -
/usr/local
user@srv:/usr/local$ cd -
/tmp
user@srv:/tmp$

lunes, 25 de febrero de 2019

Redirección de salida estándar y de error

En el terminal de Linux, las aplicaciones disponen de dos salidas por defecto por las que sacar texto: la salida estándar (stdout) y la salida estándar de error (stderr).
Por defecto, ambas salidas son redireccionadas al terminal, por lo que si escribimos el siguiente comando:
$ ls + a.sh
ls: cannot access '+': No such file or directory
a.sh
Por un lado obtendremos la primera línea, que salió por stderr, y por otro la segunda línea que salió por stdout al no tratarse de ningún error.

jueves, 21 de febrero de 2019

Obtener la temperatura de una ciudad

Hoy vamos a ver una forma rápida para obtener la temperatura que hay en una ciudad mediante un script. Para ello vamos a basarnos en la web https://www.eltiempo.es, pero este método es extensible a cualquier otra web.
Para ello, accederemos mediante un navegador web e iremos a la página del tiempo en la ciudad deseada, por ejemplo Murcia: https://www.eltiempo.es/murcia.html
El siguiente paso será hacer esto mismo que hemos realizado con un navegador, pero esta vez mediante un script para quedarnos con el valor que nos interesa: la temperatura.

lunes, 18 de febrero de 2019

Aprendiendo Vim #3

Como continuación de la entrada anterior sobre vim, Aprendiendo Vim #2, hoy vamos a ver cómo trabajar con el portapapeles.

Copiar líneas

Para copiar la línea sobre la que estamos, bastará con teclear yy estando en el modo normal. Si se desea copiar varias líneas a partir de la actual hacia abajo, bastará con anteponer el número de líneas a la yy. Por ejemplo, para copiar 5 líneas se pondrá 5yy.

jueves, 14 de febrero de 2019

Fichero pg_hba.conf de Postgresql

Como continuación del post sobre primeros pasos con Postgresql, hoy vamos a ver un poco más en profundidad el fichero pg_hba.conf que se suele ubicar en el directorio /etc/postgresql/XX/main/ (siendo XX el número de versión, por ejemplo 10 ó 9.3).
El fichero pg_hba.conf sirve para especificar los accesos a las bases de datos que permitiremos, es decir, sirve de ACL.
Si se edita el fichero, se comprobará que cada linea (no comentada) consta de una serie de campos separados por un espacio o un tabulador. El significado de los distintos campos es el siguiente:
Columna 1: TYPE
Puede tener el valor local o host.
Si utilizamos local, indicaremos que el acceso que estamos definiendo tendrá como origen el propio equipo donde está instalado el servicio Postgresql y accederemos al localhost.
Si usamos host, indicaremos que el acceso provendrá de un equipo en red, es decir, el que inicie el acceso no será la máquina donde se tenga instalado el servicio Postgresql y por tanto accederá por IP o hostname al servidor.

lunes, 11 de febrero de 2019

Evitar borrado automático en /tmp en Ubuntu 18.04


Por defecto, el contenido del directorio /tmp es eliminado tras el arranque del sistema operativo en Ubuntu. En Ubuntu 18.04, el demonio systemd-tmpfiles es el encargado de esta acción.
Si se desea deshabilitar la eliminación automática del contenido de /tmp en el arranque, bastará con editar el fichero /usr/lib/tmpfiles.d/tmp.conf y comentar la siguiente linea:

jueves, 7 de febrero de 2019

Fallo al copiar, mover o borrar múltiples ficheros

Hoy vamos a exponer una situación anómala cuando se intentan eliminar, mover o copiar grandes cantidades de ficheros. Pongamos un ejemplo:
Queremos eliminar todos los archivos de un directorio. Este directorio contiene una cantidad enorme de archivos, por lo que nos encontramos con este fallo:
$ rm -f *
/bin/rm: cannot execute [Argument list too long]
Lo mismo ocurre si hacemos masivamente un cp o mv de estos ficheros.

lunes, 4 de febrero de 2019

Aprendiendo Vim #2

En el post anterior Aprendiendo Vim #1 hicimos una primera toma de contacto con Vim. Hoy vamos a ver algunos atajos de teclado para movernos por el fichero en edición.

Ir al principio del fichero

Si queremos movernos hasta el principio del fichero, bastará con pulsar gg en el modo normal, es decir, en el modo en el que nos encontramos al entrar en Vim o en el modo al que llegamos al pusar Esc estando en el modo inserción.

jueves, 31 de enero de 2019

Establecer timezone en Ubuntu 18.04


Tras instalar Ubuntu 18.04 server, una de las cosas a revisar es la fecha y hora de nuestro sistema.
Mediante el comando date podemos comprobar estos valores:
$ date
mié ene 30 21:54:35 UTC 2019
No obstante, no está ajustando correctamente el huso horario real, que en mi caso es España. Hay un retraso de una hora.

lunes, 28 de enero de 2019

Fallo al referenciar parámetros a partir de la décima posición

Como se vio en la entrada anterior, donde se explica cómo hacer uso de los parámetros que se le pasan a un script, se puede referenciar a los distintos parámetros de forma individual.
No obstante, surgirán problemas si intentamos referenciar los parámetros a partir de la posición 10.
Veamos un ejemplo:

jueves, 24 de enero de 2019

Variables bash #2

Como dijimos en un post anterior, bash tiene multitud de variables internas que podemos usar en nuestros scripts.
En esta ocasión nos vamos a centrar en las variables relacionadas con el paso de parámetros a nuestro script.

Parámetros

En bash podemos hacer referencia a cada parámetro pasado a un script de forma individual mediante las variables $1, $2, etc, que corresponden con el primer parámetro, segundo parámetro, etc.
Veamos un ejemplo:

lunes, 21 de enero de 2019

Aprendiendo Vim #1

Vim es un editor de textos que está presente en prácticamente todas las distribuciones Linux. Por este motivo, y por todas las funcionalidades que ofrece, es muy recomendable saber usarlo.
Con este post se inicia una serie dedicada a aprender las distintas opciones de Vim. La idea es aprender en cada entrada unas pocas combinaciones de teclas o funciones, con el objetivo de memorizarlas y ponerlas en práctica en cuanto tengamos la ocasión. Entrada tras entrada iremos aumentando los conocimientos sobre Vim hasta poder llegar a ser unos ninjas.

jueves, 17 de enero de 2019

Calcular fechas futuras o pasadas con date

Hoy vamos a ver una sencilla forma para calcular fechas futuras o pasadas respecto a la actual en el shell de Linux. Para ello usaremos el comando date.
Por hacer un breve repaso, el comando date devuelve la fecha y hora del momento actual:
$ date
mié ene 16 21:56:23 CET 2019
Podemos modificar el formato de salida para adecuarlo a nuestras necesidades:

lunes, 14 de enero de 2019

Ejecutar funciones bash dentro del comando find

El comando find es muy potente y se usa habitualmente en shell scripts. En ocasiones, se requiere ejecutar una serie de acciones por cada uno de los ficheros encontrados por find y esto puede resultar una tarea imposible. Veamos un ejemplo.
Propósito
Se requiere analizar todos los ficheros con extensión .py ubicados dentro de un directorio para detectar todos aquellos que no contienen la declaración de la codificación de texto utilizada. Para estos ficheros, añadir automáticamente la directiva siguiente:
# -*- coding: latin-1 -*-

jueves, 10 de enero de 2019

No guardar comandos ejecutados en historial de bash

Hoy vamos a ver un sencillo truco para evitar que los comandos ejecutados en nuestra sesión de bash pasen al fichero .bash_history. Será de utilidad cuando se quieren eliminar parte de las huellas de un acceso a un equipo o para evitar que otros sepan qué comandos ejecutó alguien en una conexión anterior.

lunes, 7 de enero de 2019

Usar tildes y eñes en Python

Python es un lenguaje de programación ampliamente usado para todo tipo de proyectos. Es usado también para realizar scripts de administración de sistemas que requieren una complejidad excesiva para realizarlos en bash, por lo que se usa casi un día sí y otro también.
Hoy vamos a ver cómo solucionar un problema que se da en ocasiones: cómo usar tildes, eñes y otros caracteres usados en castellano sin que nos de el siguiente error:
SyntaxError: Non-ASCII character '\xc3' in file ./script.py on line 3, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details

jueves, 3 de enero de 2019

Crear un servidor web con un solo comando

Hoy vamos a ver cómo desplegar rápidamente un mini sevidor web para publicar una pequeña web.
Dado que se quiere publicar un fichero html y los requerimientos de la web son básicos, no instalaremos ningún servidor web al uso. Utilizaremos el comando ncat para ofrecer esta funcionalidad.