Linux: matar procesos usando Kill, Pkill y Killall

Linux nos da tres opciones para matar procesos desde el terminal: kill, pkill y killall.

Antes de ver los tres comandos es importante recordad un punto: un usuario normal solo puede matar sus procesos, no los procesos del sistema o los de otro usuario. Un usuario root en cambio sí puede matar cualquier proceso, tanto del sistema como de otro. Realmente, a pesar de sus nombres, estos tres comandos no están pensados exclusivamente para matar procesos, sino que les pueden enviar todo tipo de señales, aunque sí es cierto que matar procesos es el comportamiento por defecto.

El comando kill nos permite matar un proceso identificándolo por su número identificador (PID), la sintaxis básica es kill -señal PID. El valor de la señal varía entre 64 posibilidades, siendo las que permiten matar procesos estas tres: SIGHUP (que se abrevia también con el valor numerico 1), SIGKILL(que se abrevia con el valor numérico 9) o SIGTERM(que se abrevia con el valor numérico 15). Si no ponemos ningún valor el tomado por defecto será 15, que es el más seguro pues no permite que se mate un proceso que esté en ejecución sino que espera a que termine y lo mata en ese momento, mientras que el valor 9 sería el más inseguro y contundente, mata al proceso incluso aunque esté ocupado. En el ejemplo siguiente veremos como matar un proceso que, por ejemplo, tenga el id 2015, primero con el valor por defecto y luego con la opción -9 o SIGKILL (las dos últimas sería la misma instrucción pero con distinta sintaxis):

kill 2015
kill -SIGKILL 2015
kill -9 2015

También podemos matar varios procesos en la misma instrucción. Imaginemos que queremos matar los procesos 2015, 2022 y 3049, solo tenemos que listarlos tras la instrucción kill separados por un espacio:

kill 2015 2022 3049

Si no queremos estar listando los procesos para poder ver sus PID podemos también matar un proceso por su nombre. Eso lo puedes hacer con el comando killall, que lo que hará será matar todos los procesos que coincidan con el nombre del comando. Imagina que quieres matar el proceso de mysql en tu servidor Linux, de esta forma lo harías, pero ojo porque si tienes varias instancias las mataría todas. Las señales para killall son distintas de las de kill, puedes listarlas ejecutando killall -l aunque coincide que el valor -9 también es el que podemos usar para matar el proceso de forma forzosa.

killall -9 mysql

Finalmente nos queda pkill, un comando que fue creado originalmente para el sistema operativo Solaris y cuyo funcionamiento es similar al de killall, la diferencia es que en este caso no necesitamos saber todo el nombre del proceso pues podemos usar exprexiones regulares para definir qué proceso queremos parar. Igual que en el ejemplo anterior veamos cómo terminaríamos el proceso de mysql, con el parámetro -e para que la consola nos informe de que lo ha eliminado.

pkill -e mysql

Comprobar la velocidad de conexión desde línea de comandos en Linux.

Hay múltiples webs que nos permiten ejecutar tests de velocidad, pero a veces estamos administrando un servidor sin entorno gráfico y resulta útil poder lanzar un comando que nos de el resultado. Con la siguiente línea puedes hacerlo sin tener que instalar nada:

curl -s https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py | python -

Os dejo una captura del resultado desde casa de mis padres.

Teste de velocidad comandos

Diferentes formas de contar el número de líneas de un fichero desde la consola de Linux.

Si queremos contar el número de líneas que tiene un fichero desde la consola de Linux tenemos, al menos, cuatro métodos para conseguirlo. Os pongo los ejemplos de código:

Usando los comandos cat y wc:

cat fichero | wc -l

Con grep le podemos decir que cuente todo el documento de esta forma:

grep -c '.*' file

La opción -n de sed junto al operador = también nos hace el servicio:

sed -n '$=' file

Y para terminar vamos a ver cómo hacerlo con awk:

awk 'END {print NR}' file

Usar cURL en Linux para descargar un fichero.

Recordaréis que hace tiempo ya hablamos aquí sobre cURL, un proyecto creado por el sueco Daniel Stenberg a mediados de los 90 para crear un bot de IRC que calculaba el cambio de importes entre dólares y coronas.

La mayoría de distribuciones de Linux nos ofrecen un comando cURL con muchas utiliades, hoy vamos a ver cómo descargar un fichero desde un servidor: Para ello nos serviremos de las opciones -O u -o.

La primera guardará el fichero en el directorio en el que estemos posicionados con el mismo nombre que tiene en la localización remota, mientras que el segundo nos permitirá especificar el nombre y la ruta del fichero:

#Sin Cambiar nombre
curl -O http://dominio.com/fichero.tar.gz
#Cambiando nombre
curl -o nuevonombre.tar.gz http://dominio.com/fichero.tar.gz

Browsh: un navegador web para Linux en modo texto desde la línea de comandos.

Con la idea de recuperar la esencia de los navegadores que usaban la interfaz de línea de comandos ha nacido Browsh. Se trata de un navegador web que funciona desde la línea de comandos, pero que abre una instancia de Firefox para poder poder mostrar páginas web en HTML5 con CSS3, JavaScript, vídeos, fotos y contenidos que tiran de WebGL. Se ha publicado bajo licencia GPLv3 y está disponible para varias plataformas: GNU/Linux, FreeBSD, OSX y Windows.

browsh the modern text-based browser

Los requisitos para instalar Browsh son tener una versión actual de Firefox (superior a la 57) y un cliente de terminal que soporte color real. Cumpliendo ambos solo tienes que descargar desde este enlace el instalador. Para Linux tienes paquetes .deb o .rpm dependiendo de tu distro.

Si te decides por los binarios estáticos recuerda que tendrás que darles permisos para que sean ejecutables: chmod a+x browsh_1.4.12_linux_amd64. Eso te permitirá ejecutar después el cliente TTY de Browsh: ./browsh_1.4.12_linux_amd64.

Está disponible también una imagen para Docker que incluye también una versión actualizada de Firefox, por lo que todo lo necesario para la ejecución ya está autocontenido en el paquete. Puedes ejecutar el cliente TTY con: docker run -it –rm browsh/browsh

Si no quieres instalarlo pero sí probarlo puedes utilizar el siguiente comando para acceder a una demo mediante ssh:

ssh brow.sh

Puedes revisar el código fuente de Browsh en la página de Github del proyecto y puedes también echarle un ojo a este vídeo-tutorial que he visto en youtube con el proceso de instalación:

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.

Chateando en LAN con Linux: el comando talk

Existe desde los años 80 en los sistemas basados en UNIX, y Linux no es una excepción, un programa en línea de comandos llamado talk. ¿Qué nos permite hacer este comando? Pues chatear con otro terminal.

Imagina que dos usuarios estáis conectados por ssh a un mismo sistema y queréis comunicaros. En principio, si tenéis talk instalado (si no viene por defecto en vuestra distro lo podéis instalar desde algún repositorio tal que # apt-get install talk talkd), bastaría con que pusieras el comando talk seguido del usuario, y si ambos tenéis talk instalado se le abrirían dos ventanas de terminal: una para escribir y otra en la que vería los mensajes.

En caso de querer chatear con un usuario de otro equipo la cosa sería similar, en ese caso en lugar del usuario lo que tendríais que mandar como parámetro al abrir talk es el usuario seguido de una arroba y el nombre o la ip de la máquina. Por ejemplo:

#ej 1
#usuario en el mismo equipo
talk donnie
#ej 2
#usuario en LAN
talk donnie@192.168.1.100

El comando mesg será en este caso el que nos permitirá decidir si un usuario puede enviarnos mensajes por talk o no a nuestro terminal.

#Si no queremos recibir
#mensajes por talk
mesg n
#si queremos permitirlo
mesg y

Es posible que los cortafuegos impidan la comunicación con talk: Revisa los puertos TCP y UDP 518 y 517, así que fíjate si están abiertos.

Y de esta forma tienes un primitivo chat en tu equipo, no es gran cosa, pero en ocasiones es útil.

¿Qué tamaño le asigno a la partición SWAP en Linux?

Si decides realizar una instalación manual en Linux ya sabes que necesitas al menos dos particiones: una para / y otra para el espacio de intercambio (SWAP). Aunque yo suelo hacer 4 particiones (/, swap, /boot y /home) para máquinas virtuales, y hasta 5 si el equipo va a usarse para editar vídeo, audio o trabajar con bases de datos muy grandes (ahí meto además separada /tmp); y tengo colegas que rara vez bajan de 7… (yo eso ya diría que es vicio). En todo caso suele surgir una duda ¿Qué espacio le asigno a SWAP durante la instalación?

Tradicionalmenet se decía «el doble de SWAP que lo que tengas de RAM«, pero es una teoría de los primeros tiempos de Linux, cuando los equipos andaban faltos de memoria. A día de hoy, tener 12 gigas de SWAP es una verdadera animalada, además de un desperdicio de recursos. Lo que sí se recomienda en varias páginas es que SWAP sea la primera partición del disco, por motivos de rendimiento.

Por lo que recomienda el señor Russell Coker la regla a seguir es la siguiente:

  • Si tienes hasta 1GB de RAM: El clásico «doble de SWAP que de RAM«
  • Si tienes entre 2GB y 4GB de RAM: Nueva teoría «La mitad de SWAP que de RAM«
  • Si tienes más de 4GB: Con 2 GB de SWAP vas que chutas.

Es más, si te fijas, todas las cuentas dan un máximo de 2GB de RAM. En fin, espero que esta minientrada te sea útil.