sábado, 30 de marzo de 2019

Huevo de pascua en APT

En el terminal de Ubuntu (o derivado de Debian), escribir el siguiente comando:
$ apt moo
O si no se dispone de apt:
$ apt-get moo
Obteniendo el siguiente huevo de pascua:
$ apt moo
                 (__) 
                 (oo) 
           /------\/ 
          / |    ||   
         *  /\---/\ 
            ~~   ~~   
..."Have you mooed today?"...
Moo

jueves, 28 de marzo de 2019

Descargar actualizaciones con APT sin instalarlas

El gestor de paquetes de Ubuntu es apt. Se trata de un estupendo sistema de gestión que permite de forma cómoda y rápida buscar, instalar o eliminar paquetes.
Habitualmente, a la hora de actualizar paquetes se ejecutarán los siguientes comandos:
$ sudo apt update
$ sudo apt dist-upgrade
La primera línea, apt update, analizará los repositorios para saber, entre otras cosas, qué paquetes instalados en nuestro equipo tienen una nueva versión pendiente de instalar.
La segunda, apt dist-upgrade, instalará estas actualizaciones.
Hasta aquí ninguna novedad.
No obstante, en ocasiones puede ocurrir que la descarga de los nuevos paquetes a actualizar (realizada por el comando apt dist-upgrade) va muy lenta y el proceso de actualización se dilata demasiado, entre la descarga y posterior instalación. Puede ocurrir que tengamos una ventana de tiempo reducida para realizar la actualización de paquetería.
Para estos casos, se recomienda realizar una descarga previa de estos nuevos paquetes. De esta forma, cuando emprendamos el proceso de actualización de paquetería solamente se instalarán, no perdiendo tiempo en descargarlos. Para ello, ejecutar los siguientes comandos:
$ sudo apt update
$ sudo apt dist-upgrade -d
[...]
Des:102 http://archive.ubuntu.com/ubuntu bionic-updates/main amd64 cloud-init all 18.5-45-g3554ffe8-0ubuntu1~18.04.1 [390 kB]
Descargados 159 MB en 15s (10,5 MB/s)
Descarga completa y en modo de solo descarga
Los paquetes se descargan en el directorio /var/cache/apt/archives. Como ya se vio en una entrada anterior, se puede eliminar esta caché de paquetes para liberar espacio en disco.

La instalación de estos paquetes previamente descargados se realizará con el comando habitual:

$ sudo apt dist-upgrade

lunes, 25 de marzo de 2019

Aprendiendo Vim #5

Sustitución de texto en Vim

Como continuación a la última entrada referente a Vim, Aprendiendo Vim #4, en esta entrada se va a profundizar en la sustitución de texto en Vim.
Vim permite realizar sustituciones de texto de forma automatizada, en vez de ir buscando palabra por palabra y hacer las mismas a mano.
Vamos a comenzar viendo un ejemplo práctico y explicando a continuación los detalles.

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