Mostrando entradas con la etiqueta tips. Mostrar todas las entradas
Mostrando entradas con la etiqueta tips. Mostrar todas las entradas

viernes, 26 de abril de 2019

Habilitar confirmación ante borrado de ficheros

En un sistema Linux, es una práctica recomendable tener activada la confirmación ante el borrado de ficheros. De esta forma, evitaremos eliminar por error información útil pues en el terminal no hay “papelera de reciclaje”.
Los pasos para activar la confirmación para el comando rm en todos los usuarios es la siguiente para Ubuntu:

lunes, 22 de abril de 2019

Afinando la búsqueda con grep

El comando grep es ampliamente usado cuando se tiene que buscar textos dentro de ficheros. Sin embargo, vamos a comentar algunos parámetros no muy conocidos y que será de ayuda a la hora de mostrar el resultado por pantalla.
No distinguir entre mayúsculas y minúsculas
El modo de búsqueda por defecto es case sensitive, es decir, distingue entre mayúsculas y minúsculas. Si no conocemos con exactitud si el texto que buscamos tiene algún caracter en mayúsculas (o minúsculas), será mejor usar el parámetro -i:
$ grep -i -r ENS32 *
netplan/01-netcfg.yaml:    ens32:
Se ha obviado explicar la opción -r, de búsqueda recursiva, por ser de uso común.
Mostrar el número de línea
Puede resultar útil conocer el número de línea donde aparece el texto buscado. De esta forma, podremos ir con más precisión a la línea en cuestión para editarla si fuera el caso. Para ello, se usará el parámetro -n:
$ grep -i -r -n ENS32 *
netplan/01-netcfg.yaml:7:    ens32:
Mostrar solamente el nombre de los ficheros
Si no se desea visualizar por pantalla la línea de texto que encaja con el patrón de búsqueda, usaremos la opción -l:
$ grep -r -l ens32 *
netplan/01-netcfg.yaml

lunes, 15 de abril de 2019

Conocer a qué velocidad funciona la tarjeta de red

En Ubuntu es posible conocer a qué velocidad funciona nuestra tarjeta de red. Hay que indicar que una cosa es la velocidad a la que puede funcionar una tarjeta y otra a qué velocidad trabaja en un momento determinado. Esto vendrá impuesto por el tipo de cableado de red que se use, por la velocidad negociada con el otro extremo, etc.
Por ejemplo, podemos tener una tarjeta Gigabit Ethernet (es decir, capaz de trabajar a 1 Gbps) pero conectarla a un switch que trabaje a 100 Mbps. En este caso, se negociará una velocidad de 100 Mbps.
Vamos a ver cómo comprobar la velocidad máxima a la que puede trabajar nuestra tarjeta de red y la velocidad a la que está trabajando con la conexión actual.

jueves, 11 de abril de 2019

Averiguar los nombres de las interfaces de red en Ubuntu

En esta entrada se va a ver cómo averiguar el nombre de las tarjetas de red instaladas en un equipo con Ubuntu 18.04 (aunque también es aplicable a versiones anteriores).
Veamos un caso práctico: se tiene una máquina virtual con Ubuntu Server 18.04. Esta máquina tiene una tarjeta de red asociada. Se puede ver de la siguiente forma:
$ sudo ifconfig
enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.139  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::a00:27ff:fe3b:740  prefixlen 64  scopeid 0x20<link>
        ether 08:00:27:3b:07:40  txqueuelen 1000  (Ethernet)
        RX packets 151358  bytes 228391106 (228.3 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 12188  bytes 1009977 (1.0 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 228  bytes 17347 (17.3 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 228  bytes 17347 (17.3 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
O de esta otra:

lunes, 8 de abril de 2019

Significado de primera línea de ls -l

El comando ls suele ejecutarse habitualmente seguido de la opción -l (entre otras). A parte de ver por pantalla la información que esperamos, siempre aparece una primera línea con el siguiente aspecto:
$ ls -l
total 12
-rw-r--r-- 1 root root 12287 abr  8 20:45 a
Aunque se suele pasar por alto esta primera línea, conviene saber qué significa toda información que nos muestre el sistema, y más en un comando tan usado como es ls -l.
La explicación que se encuentra en la documentación oficial del comando es la siguiente:

jueves, 4 de abril de 2019

Variables bash #3

En una entrada anterior, Variables bash #2, se vio cómo utilizar los parámetros que se pasan a un script en bash. En esta ocasión se va a mostrar una variable de bash llamada LINENO.
La variable $LINENO contiene el número de línea que se está ejecutando en cada momento en un script bash. Por tanto, si tenemos el siguiente código:
#!/usr/bin/env bash

echo "Primera linea"
echo $LINENO
echo "Segunda linea"
y se ejecuta, obtendremos el siguiente resultado:
$ ./prueba.sh
Primera linea
4
Segunda linea
Hay que destacar que se consideran las líneas vacías (en blanco) en la contabilidad de la línea en ejecución. En el caso mostrado, echo $LINENO está efectivamente en la línea número 4.
El uso de esta variable es útil para acotar errores en la ejecución de un script. Se pueden cambiar las líneas del tipo echo “Pasa por aquí” por un echo $LINENO. Además, se puede combinar con la activación de numeración de líneas en Vim para depurar de forma más rápida nuestro script.

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

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.

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.

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:

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 -*-