Saltar al contenido principal

Comandos básicos de Bash

Documento escrito por: Alejandro Aranda

Puedes ver todos los documentos de este autor aquí.

Introducción

En este artículo repasaremos los comandos básicos de Bash que todo administrador de sistemas debe conocer para realizar ciertas tareas en su día a día.

Tener conocimientos solidos sobre Bash puede hacernos la vida más fácil, una vez aprendido lo básico podremos lanzarnos directamente a la creación de scripts, algo muy útil para automatizar tareas y así trabajar menos. Ejemplos prácticos

Me he apoyado en la página man7.org para escribir este artículo.

Gestión de las interfaces de red:

Conectividad y resolución DNS

Comprobar la conectividad con otro dispositivo.

ping IP / nombre_dominio

Realizar el ping con una interfaz específica

ping -I nombre_tarjeta ejemplo.com

Muestra la ruta completa desde nuestro equipo a otro dispositivo.

mtr IP / nombre_dominio   

Resolución de nombres directa e inversa.

nslookup IP / nombre_dominio   

Muestra información sobre nuestras interfaces de red (no siempre viene instalado).

ifconfig [-a]

Habilita / Deshabilita la tarjeta de red indicada.

ifconfig nombre_tarjeta up / down   

Enrutamiento

Muestra información sobre la configuración de las reglas de enrutamiento.

route -n   

Eliminamos / Añadimos una ruta.

route [add / del] dirección_origen gw dirección_destino nombre_tarjeta  

Alternativa al comando route, tiene prácticamente la mismas funciones.

ip route list   

Análisis de tráfico

Analizar el tráfico que viaja a través de nuestras tarjetas.

tcpdump -i nombre_tarjeta   

Mostrar interfaces disponibles para analizar paquetes.

tcpdump -D   

Analiza los paquetes que pasan por la tarjeta de red enp0s3 y que llevan como destino el host 8.8.8.8.

tcpdump -i enp0s3 dst host 8.8.8.8   

Puertos y conexiones

Muestra los puertos y las conexiones activas.

netstat

Muestra todos los puertos y las conexiones activas.

netstat -a

Muestra conexiones TCP.

netstat -lt  

Muestra conexiones UDP.

netstat -lu   

Gestión de usuarios y grupos

Creación y eliminación de usuarios:

Consultar los usuarios del sistema.

Crea un usuario en el sistema y te permite establecer su contraseña

cat /etc/passwd

Crea un usuario en el sistema y te permite establecer su contraseña.

adduser usuario

Elimina un usuario del sistema.

deluser usuario

Modificación de usuarios

Crea un usuario en el sistema y te permite establecer su contraseña, nombre, teléfono, etc..

usermod [modificadores] usuario

Establece una fecha de caducidad para la cuenta (YYYY-MM-DD).

usermod -e fecha_caducidad

Establece una nueva ruta del directorio personal del usuario y mueve el contenido de su carpeta anterior.

usermod -d -m nuevo_directorio usuario

Cambia la shell por defecto de un usuario.

usermod -s /ruta/shell usuario

Añade el usuario a un grupo complementario.

usermod -a -G usuario grupo

Elimina un usuario de un grupo.

gpasswd -d usuario grupo

Creación y eliminación de grupos

Podremos consultar los grupos existentes con el siguiente comando:

cat /etc/group

Crear un grupo.

groupadd nombre_grupo

Eliminar un grupo.

groupdel nombre_grupo

Modificación de grupos

Cambiar el nombre a un grupo existente

groupmod -n nuevo_nombre_grupo nombre_grupo

Cambiar el identificador de grupo (GID).

groupmod -g nuevo_ID nombre_grupo

Ficheros y directorios

Ficheros

Crear un fichero, en caso de no especificar una ruta, el fichero se crea en el directorio actual. En lugar de nano, podemos usar otros editores que tengamos instalados (jed, vi, etc..).

nano /ruta/nombre_fichero

Eliminar un fichero.

rm /ruta/nombre_fichero

Mostrar el contenido de un fichero.

cat /ruta/nombre_fichero

Ver cuantas líneas y palabras tiene y cuántos bytes pesa un fichero.

wc /ruta/nombre_fichero # Nos lo mostrará con el formato -> líneas palabras peso (bytes)

Cambiar nombre a un fichero.

mv nombre_fichero nuevo_nombre_fichero

Mover un fichero a una nueva ubicación.

mv /ruta/nombre_fichero /nueva_ruta/nombre_fichero

Ver el tipo de fichero.

file nombre_fichero

Buscar un archivo en el sistema.

find / -name nombre_fichero

Copiar un fichero

cp /ruta/fichero /ruta/nombre_copia_fichero

Directorios

Crear una carpeta, en caso de no especificar una ruta, el fichero se crea en el directorio actual.

cat /etc/passwd

Moverse a otro directorio.

cd nombre_directorio

Mostrar el directorio actual.

pwd

Eliminar un directorio.

rm -r nombre_directorio

Eliminar un directorio y su contenido.

rm -rf nombre_directorio

Listar el contenido de un directorio. Podemos agregar el parámetro -l para mostrarlo en forma de lista y el parámetro -a para mostrar también los ficheros ocultos.

ls [-l -a]

Operaciones con procesos

Antes de continuar con este apartado, puedes profundizar más sobre los procesos en los sistemas visitando este artículo que tenemos publicado.

Listar Procesos

Listar procesos que han sido ejecutados en la misma terminal en la que se ejecuta el comando y están en segundo plano o detenidos.

jobs -l

Listar todos los procesos del sistema junto con el usuario que los ejecuta.

ps -axu

Listar un proceso específico sabiendo su identificador (PID).

ps PID

Listar los procesos de un usuario concreto

ps -U usuario -u usuario

Listar un proceso filtrando por su nombre

ps -C nombre_proceso

Operaciones con procesos

A la hora de trabajar con procesos, enviaremos señales que serán diferentes en función de lo que queramos hacer. Por defecto la señal que se enviará es SIGKILL, que matará el proceso.

Las diferentes señales las podemos listar con el siguiente comando.

kill -l

Matar un proceso.

kill PID

Detener un proceso.

kill -s 19 PID

Procesos de forma interactiva

También podemos trabajar con procesos de forma interactiva, la mejor opción (en mi opinión) es el comando htop pero por defecto no viene instalado. En su defecto podemos usar el comando top.

Abrir la "interfaz" del comando top.

top

ImagenTop1

Podemos filtrar procesos por usuario (desde el modo interactivo) pulsando "u" y escribiendo el nombre del usuario. también podemos hacerlo con el siguiente comando.

top -u usuario

ImagenTop2

también podemos filtrar por nombre y campo. Por ejemplo, podríamos filtrar por el comando que ha ejecutado el proceso pulsando "o"

ImagenTop3

Puedes ver todas las operaciones posibles pulsando "h" dentro de la interfaz del comando top.

Redirecciones, filtros y tuberías.

Redirecciones

Las redirecciones las utilizaremos para trasladar información de un tipo a otro. Crearemos redirecciones de salida utilizando el símbolo ">" y redirecciones de entrada con el símbolo "<".

Redirecciones de salida

Por ejemplo, podemos trasladar la salida de un comando a un fichero de la siguiente forma.

comando > fichero

ImagenRedireccion1

Ahora si queremos añadir más contenido al fichero sin borrar el contenido que ya tiene, lo haremos de la siguiente manera.

comando > fichero

El comando "echo" normalmente mostraría por pantalla el texto indicado, pero con una redirección conseguimos introducir el texto en un fichero.

ImagenRedireccion1

Redirecciones de entrada

Este tipo de redirecciones apenas se usan en el día a día, pero nunca está de más ver un ejemplo.

Por ejemplo, podemos mostrar un texto con el comando cat usando estas redirecciones.

cat <<<"texto"

ImagenRedireccion1

Filtros

Muchas veces cuando estamos trabajando en la terminal nos encontramos con demasiada información que realmente no nos es útil para nada, es por esto que saber filtrar es realmente importante.

El comando principal para esto es "grep", que nos permite filtrar de diversas formas. Por ejemplo, podemos filtrar por una coincidencia en un fichero de la siguiente forma.

grep [modificadores] filtro archivo

En este caso, mostramos las líneas del fichero "listado" que contengan "alex".

ImgFiltro1

Filtrar con "grep" ignorando si es mayúscula o minúscula.

grep -i filtro archivo

Como se puede apreciar en el caso de usar el modificador "-i" grep contempla también la palabra en mayúscula.

ImgFiltro2

Existen otros modificadores para este comando como por ejemplo "-o" que muestra solo la coincidencia exacta o por ejemplo "-v" que invierte la salida del comando y muestra las lineas en las que no hay coincidencias.

Puedes ver más información sobre el comando grep con el siguiente comando.

man grep

Tuberías (Pipes)

Las tuberías las utilizaremos para usar la salida de un comando como entrada para otro comando. Esto puede sonar confuso al principio, pero con un par de ejemplos lo vas a entender mejor.

Por ejemplo, normalmente listaríamos el contenido de un directorio con el comando "ls -l", pero ¿Y si queremos ver solo los ficheros y directorios del usuario root? En ese caso, podríamos usar tuberías para filtrar.

ls -l | grep root

En este caso solo usamos una tubería, pero esto lo podemos hacer utilizando varias.

ImgPipes1

Por ejemplo podríamos saber cuántos usuarios utilizan como terminal una bash con el siguiente comando.

grep bash /etc/passwd | wc -l

En este caso solo usamos una tubería, pero esto lo podemos hacer utilizando varias.

ImgPipes2

Otro ejemplo, listar que usuarios usan una bash.

grep bash /etc/passwd | cut -d ":" -f 1

En este caso, usamos el comando cut para mostrar solo la primera palabra "-f" que encuentre junto al delimitador ":" indicado con el parámetro "-d".

ImgPipes3

Ejemplos prácticos

Ejemplo 1

Almacenar las conexiones activas en nuestro equipo que utilizan TCP IPv6 y almacenarlas en un fichero.

ImgEjemplo1

Ejemplo 2

Buscar la ruta del fichero "estadísticas y almacenarla en un fichero"

ImgEjemplo1

Ejemplo 3

Listar los procesos relacionados con ssh que son ejecutados por el usuario "alex" y almacenarlos en un fichero.

ImgEjemplo1

Ejemplo 4

Filtrar la fecha actual para solo mostrar el año y almacenar el resultado en un archivo.

ImgEjemplo1

Espero que te haya servido el articulo :)