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
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
también podemos filtrar por nombre y campo. Por ejemplo, podríamos filtrar por el comando que ha ejecutado el proceso pulsando "o"
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
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.
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"
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".
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.
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.
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.
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".
Ejemplos prácticos
Ejemplo 1
Almacenar las conexiones activas en nuestro equipo que utilizan TCP IPv6 y almacenarlas en un fichero.
Ejemplo 2
Buscar la ruta del fichero "estadísticas y almacenarla en un fichero"
Ejemplo 3
Listar los procesos relacionados con ssh que son ejecutados por el usuario "alex" y almacenarlos en un fichero.
Ejemplo 4
Filtrar la fecha actual para solo mostrar el año y almacenar el resultado en un archivo.
Espero que te haya servido el articulo :)