¿Cómo salir de Vim en Linux?

Es un meme clásico de las webs de chiste de programadores, pero ¿cómo se sale del editor Vim? En serio, todo el que lo ha usado ha acabado por teclear alguna vez «How to exit Vim».

Pulsando la tecla Esc Vim entra en modo línea de comandos. Ahí puedes escribir:

  • :q para salir (abreviatura de :quit).
  • :q! para salir sin guardar (abreviatura de :quit!).
  • :wq para escribir y salir.
  • :wq! para escribir y salir incluso si el fichero es del tipo solo lecutra.
  • :qa para salir de todo (abreviatura de :quitall)

fping: Una herramienta de ping «vitaminado» para Linux.

Todos conocemos ping, una utilidad diagnóstica que comprueba el estado de la comunicación del host local con uno o varios equipos remotos de una red IP por medio del envío de paquetes ICMP de solicitud (ICMP Echo Request) y de respuesta (ICMP Echo Reply). Hoy vamos a ver cómo funciona fping, un programa que nos permite ampliar las posibilidades que tiene el ping standar de Linux.

Para instalarlo, en un sistema de la familia Ubuntu/Debian, basta con teclear lo siguiente:

sudo apt-get install fping

¿Qué cosillas nos aporta fping? Veamos:

  • Lanzar un ping a varias IP a la vez: Basta con pasar como parámetro las direcciones IP separadas por un espacio y fping lanzará un ping a cada uno y nos responderá con el estado de cada IP.
  • Lanzar un ping a un rango de IP: Similar a lo anterior, pero en lugar de definir manualmente una lista de IP le damos dos valores para que compruebe todo entre ellos. Para hacerlo la sintaxis es fping -s -g y las dos direcciones IP separadas por un espacio. fping a rango
  • Lanzar un ping a toda la red: También podemos definir una máscara de red para que fping envíe ping a todos los equipos de la misma. En este caso la sintaxis fping -g seguido de la red que queremos revisar (en mi caso sería fping -g 192.168.1.0/24) dará una vuelta a vuestra red mandando pings a todas las direcciones.
    fping a toda la red
  • Carga direcciones desde un fichero: Supongamos que tenemos un fichero que se llama ListaIP.txt, pues con fping podemos cargar esa lista y recorrerla. Bastaría con hacer un fping < ListaIP.txt
  • Redirigir la salida a un fichero: Esto realmente no es una característica de fping sino que es algo general de Linux. Ya sabes que añadiendo el carácter > seguido de un nombre la salida de un comando se guarda en ese fichero. Por ejemplo fping -g -r 1 192.168.1.0/24 > red.txt crearía un fichero con ese nombre con el resultado de ese comando.

En este enlace puedes ver la documentación para exprimir a fondo todas las opciones de fping.

Distintas formas de invertir una cadena de texto en Linux.

Vamos a hablar un poco más sobre programar scripts en Linux y veamos cómo podemos invertir una cadena con distintos métodos:

Empezamos con lo más sencillo, usar la función rev:

echo holiii | rev

Usando el comando sed dos veces, junto con tac, también podemos hacerlo:

echo holiii | sed 's/./&\n/g' | tac | sed -e :a -e 'N;s/\n//g;ta'

Ya os podéis imaginar que si podemos hacerlo con sed es que también podemos hacerlo con awk, en este caso con la función substr() y un bucle for con el que recorreremos la cadena de fin a principio pintando cada letra:

echo holiii | awk '{ for(i=length;i!=0;i--)x=x substr($0,i,1);}END{print x}'

Y no podría faltar el tradicional script de shell. El principio es el mismo que con awk: recorrer la cadena del final hacia el inicio pintando cada elemento

#!/bin/bash
a="holiii"
len=`echo ${#a}`
while [ $len -ne 0 ]
do
        b=$b`echo $a | cut -c $len`
        ((len--))
done
echo $b

Instalar Visual Studio Code en Ubuntu

La versión ligera del popular editor de código de Microsoft hace tiempo que está disponible para diversos sabores de Linux. En principio bastaría con descargar el fichero .deb de la última versión e instalarlo desde el gestor de paquetes, lo que se encargaría ya de instalar el software, las dependencias y añadiría los repositorios. Pero hay gente que ha experimentado problemas en algunas versiones de Ubuntu para hacerlo de la forma simple. ¿Solución? Descargar el paquete .deb de la web e instalar desde línea de comandos.

#El nombre del fichero
#variará según la versión
#que descarguemos
sudo dpkg -i nombredelfichero.deb

#Instalamos dependencias
sudo apt-get install -f 

#Este código agrega
#los repositorios
curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg
sudo mv microsoft.gpg /etc/apt/trusted.gpg.d/microsoft.gpg
sudo sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/vscode stable main" > /etc/apt/sources.list.d/vscode.list'

Comandos de red obsoletos en Linux y sus reemplazos

Aunque todavía son muy usados y muchas versiones de Linux, la mayoría, todavía les dan soporte, la realidad es que los comandos ifconfig, netstat, arp, iwconfig, iptunnel, nameif, y route están ya considerados obsoletos. El paquete net-tools, que contenía la mayoría de ellos, lleva tiempo sin mantenimiento y ha sido reemplazado por iproute2.

Veamos una lista con estos reemplazos:

  • arp: ha sido reemplazado por ip n
  • ifconfig: hoy por hoy puede ser sustituído por ip a , por ip link o por ip -s
  • iptunnel: ha sido reemplazado por ip tunnel
  • iwconfig: ha sido reemplazado por iw
  • nameif: hoy por hoy puede ser sustituído por ip link o por ifrename
  • netstat: hoy por hoy puede ser sustituído por ss, y dependiendo de qué datos quisiéramos filtrar también por ip route,ip -s link o ip maddr
  • route: ha sido reemplazado por ip r

¿Cómo listar todos los puertos a la escucha en Linux?

Vamos con un tip linuxero rápido ¿cómo puedo listar todos los puertos a la escucha en un sistema Linux?:

Basta con el siguiente comando:

$ ss -lntu

Las variables con las que lo invocamos son las siguientes:

  • l – le decimos que solo nos muestre los puertos a la escucha.
  • n – pedimos que se nos muestre el puerto.
  • t – activa el listado de puertos TCP.
  • u – activa el listado de puertos UDP.

Comandos de información del sistema en Linux

Existen una serie de comandos que nos dan información sobre el estado de nuestro sistema operativo Linux. Son los siguientes abajo listados:

  • date: muestra la fecha y hora actuales.
  • cal: muestra el calendario de este mes.
  • uptime: muestra el tiempo que lleva el equipo funcionando.
  • w: muestra quién está en línea.
  • whoami: muestra con qué usuario estás conectado al sistema.
  • uname -a: muestra la configuración del kernel.
  • cat /proc/cpuinfo: muestra información detallada sobre la CPU.
  • cat /proc/meminfo: muestra información detallada sobre la memoria del equipo.
  • man nombre_de_comando: muestra el manual de uso de un comando.
  • df: muestra el espacio usado del disco.
  • du: muestra el espacio usado del directorio.
  • du -sh: muestra el espacio usado del disco en un formato más legible, en Gigas.
  • whereis aplicación: muestra dónde están los binarios, documentación o código de una aplicacion.
  • which aplicación: muestra las rutas de los ficheros que serán ejecutados si llamamos a ejecución dicha aplicación.

Shred: Borrado seguro en Linux

Con las herramientas forenses adecuadas no es complicado recuperar los datos que han sido borrados de un disco duro siguiendo el procedimiento normal. Con vaciar la papelera de reciclaje no basta para borrarlos totalmente, ya que esos datos simplemente han sido desindexados, pero permanecen en el disco y son recuperables. ¿Hay una forma de hacer esto sin recurrir a métodos tan drásticos como la destrucción del disco duro?

Sí, para todos los sistemas operativos hay programas de borrado que permiten realizar una eliminación más intensiva de los ficheros. Hoy nos centraremos en sistemas Linux y en el software de borrado seguro Shred.

Shred viene instalado por defecto en varias distribuciones, su sintaxis es shred [opciones] nombre de fichero y puede ser invocado usando las siguientes opciones:

  • f: Force. Cambia los permisos del archivo para forzar su borrado.
  • n: Número de veces que se sobrescribirá el archivo o partición (por defecto son 3). A mayor número, más difícil será la recuperación y más tiempo tardará. Hay que poner el número de escrituras después del parámetro
  • u: Trunca y elimina el archivo después de sobrescribirlo.
  • v: Muestra el progreso en pantalla.
  • z: Zero, sobreescribe con 0 para eliminar rastros.

 
Veamos un ejemplo, donde borraríamos un fichero llamado prueba.ls de forma contundente:

shred -n 15 -fuzv prueba.ls

De esta forma le decimos que elimine el fichero sobreescribiendo 15 veces, forzando el borrado, truncando y eliminando, sobreescribiendo con ceros y mostrando el progreso en pantalla. La recuperación del mismo tras esto puede que no fuera imposible, pero sí extremadamente compleja.

Script de Linux para controlar el uso de memoria

Una entrada rápida: Un script de linux para controlar el uso de memoria en Linux, que además envía un email a la cuenta que le digamos.

#!/bin/bash
while [ true ] ;do
used=`free -m |awk 'NR==3 {print $4}'`
 
if [ $used -lt 900 ] && [ $used -gt 700 ]; then
echo "Uso elevado de memoria, hay menos de 900 megas libres." | /bin/mail -s "USO ELEVADO DE MEMORIA" micuenta@midominio.com
 
 
fi
sleep 5
done

Instalar Microsoft ODBC 17 para SQL-Server en Ubuntu 17.10

Una entrada rápida ¿Cómo se instala el driver ODBC 17 para SQL-Server de Microsoft en un equipo con Ubuntu? No es algo muy habitual usar SQL-Server en Linux, pero por si os interes la cosa va así:

sudo su 
curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -

#PARA OTRA VERSIÓN
#CAMBIA EL 17.10 DE LA URL
#POR LO QUE CORRESPONDA
curl https://packages.microsoft.com/config/ubuntu/17.10/prod.list > /etc/apt/sources.list.d/mssql-release.list

exit
sudo apt-get update
sudo ACCEPT_EULA=Y apt-get install msodbcsql
# LO SIGUIENTE ES PARA LOS COMANDOS bcp Y sqlcmd
# ES OPCIONAL PERO MUY RECOMENDABLE
sudo ACCEPT_EULA=Y apt-get install mssql-tools
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
source ~/.bashrc
# PARA LOS ENCABEZADOS unixODBC
# ES OPCIONAL, PERO DE NUEVO RECOMENDABLE
sudo apt-get install unixodbc-dev