Comandos Avanzados de Linux
Con la publicación anterior comenzamos con una serie de entregas acerca de los comandos Linux más usados y necesarios, para la gestión archivos, directorios y demás servicios desde la terminal. Continuamos pues con el mismo ejercicio, ahora con los comandos avanzados de Linux más usados.
Comandos Avanzados de Linux
El comando find nos ayuda a encontrar archivos y directorios con un amplio abanico de características y posibilidades.
find . -name "mitexto.txt": Que encuentre todos los archivos llamados mitexto.txt find . -type d -name "mi_directorio": Encuentre todos los directorios llamados "mi_directorio" find . -type f -name "*.jpg": Busque todos los archivos con formato jpg find . -type f -size +100M: Buscar todos los archivos que pesen más de 100 MB find . -type f -size +100M -size -500M: Buscar todos los archivos que pesen entre 100 MB y 500 MB find . -type f -mtime -1: Encuentre todos los archivos modificados en el último día find . -mtime -7 -mtime +1: Busquelos entre ayer y 7 días atrás find . -type f -name "*.tmp" -delete: Encuentre y borre todos los archivos temporales find . -type -perm 0777: Encuentre todos los archivos con permisos 0777 find . -type -perm -u+x: Encuentre todos los archivos con permiso de ejecución para el usuario find . -type f -name "*.txt" -exec cat {} \; : Busque todos los txt y muestre su contenido find . -type f -amin -60: Busquese todos los archivos accesados en la última hora find . -type f -user: Erwin Encuentre todos los archivos propiedad de Erwin find . -type f -ctime -2: Busque los archivos creados en los últimos dos días find . -maxdepth 1 -name "mi_texto.txt": Busque solamente en el directorio actual find . -type f -name "*.txt" | xargs chmod 644: Cambie los permisos a 644 de todos los txt find . -type f -name "*.jpg" | xargs tar -cf imagenes.tgz: Comprima todos los JPG find . -type f -name "*.png" | xargs -l {} mv {} /tmp: Encuentre y mueva las imágenes PNG a al directorio de temporales find ./ -name “*.mp4” -print -exec mv {} directorio \: Mover archivos MP4 a otro directorio find . -type f l -delete: Encuentre y elimine todos los links simbólicos rotos find . -type d -empty -delete: Busque y borre todos los directorios vacíos sudo find /home -nouser: Busque archivos sin propietarios definidos find . -newermt "2024-01-05" ! "2024-04-28": Use un rango de fechas find $PWD -maxdepth 1: Listar los archivos con su ruta absoluta
Listar archivos en Linux
Listar archivos mostrando su ruta absoluta
ls -d -1 $PWD/*.*
Listar archivos y directorios mostrando su ruta absoluta
ls -d -1 $PWD/*
Mostrar archivos con su ruta absoluta dentro de subdirectorios
ls -d -1 $PWD/*/*
Lo mismo para archivos ocultos
ls -d -1 $PWD/.*
Podemos usar realpath como alternativa a $PWD
realpath archivo
realpath *
realpath /root/*
Cambiar de extensión todos los archivos CHK a JPG
rename 's/\.CHK/\.jpg/' *
Comandos Linux para la Seguridad Informática
Podemos generar contraseñas aleatorias desde la línea de comandos, con los comando makepassd y pwgen.
Instalamos los dos comandos:
sudo apt install makepasswd
sudo apt install pwgen
Generamos las contraseñas
pwgen 15 1
makepasswd -count 10 -minchars 10
Borrado de archivos y directorio
Normalmente, desde la línea de comandos borramos los archivos y directorio del siguiente modo (respectivamente9:
rm archivo
rm -rf directorio
Aunque el borrado normal parece seguro, en realidad lo que hace el sistema es eliminar su referencia del sistema ficheros. Entonces da la sensación de que el
Para hacer un borrado realmente seguro, podemos acudir a un comando llamado src, que hace parte de un toolkit llamado Secure-delete. Instalamos entonces el toolkit.
sudo apt install secure-delete
Borramos archivos y directorios
srm -vz archivo
srm -r directorio/
Multiplexión de terminales
Cuando nos toca ejecutar procesos en terminal que pueden durar decenas de minutos, sin opción de interrumpirlos y a través de SSH (un backup, la copia de una tabla de BD, una compulación, etc), puede ocurrir que la conexión se nos cae justo finalizando el proceso en cuestión. Para esquivar este problema, podemos ejecutar esos procesos dentro una «terminal virtual» llamada Screen. Con Screen los procesos pueden seguir ejecutańdose en segundo plano, así se nos caiga la conexión de SSH.
Instalamos Screen
sudo apt install screen
Ejemplo. Desde una consola de terminal, vamos a revisar el estado del sistema con el comando htop, dentro de una pantalla screen. Luego, cerramos la consola de terminal. Finalmente volvemos a abrir una consola de terminal, y recuperamos nuestro screen con htop funcionando tal como lo dejamos.
screen -S prueba //Creamos una nueva pantalla htop
Cerramos la consola de terminal. La volvemos a abrir. Luego listamos las pantallas en ejecución
screen -ls
Retomamos la pantalla de prueba
screen -r 15124 (id del screen)
Cancelamos la pantalla
CTL+a luego d
Hay otra forma de multiplexar terminales con Tmux
Visualizar inicios de sesión
Visualizar usuarios logueados en el sistema
who
Visualizar el histórico de usuarios logueados en el sistema
last //Muestre todos los registros
last | head -10 //Visualizamos solo los 10 primeros registros
Ver la fecha con hora desde que se encendió la máquina
who -b
Restando la fecha y la hora actual, a la fecha que nos da el anterior comando, podemos calcular el tiempo que tiene la máquina encendida, pero para eso tenemos al comando uptime
uptime -p
Crear un usuario y cambiarle la contraseña
sudo useradd dylan -g sistemas -m -d /home/dylan -s /bin/bash sudo passwd dylan
Comandos Linux para redes
Hacer un flush a la cache DNS de la máquina
/etc/init.d/nscd restart
Hacer una traza con traceroute
apt install inetutils-traceroute //instalamos traceroute
traceroute www.google.com.co
Montar un directorio en nuestro sistema de ficheros, por medio de SSH (con SSHFS). Instalamos sshfs y montamos el directorio remoto.
sudo apt install sshfs
sshfs usuario@servidor.com:/mi/directorio /media/ssh
Si el servicio SSH está funcionando en otro puerto, entonces específiquelo:
sshfs -p 220 usuario@servidor.com:/mi/directorio /media/ssh
Detectar ataques DoS
netstat -ntu|awk '{print $5}'|cut -d: -f1 -s|sort|uniq -c|sort -nk1 -r
Con el comando anterior veremos conexiones enumeradas que van desde 1 hasta aproximadamente 50 conexiones por IP. Esa cantidad es común para el tráfico normal. Sin embargo, si ves algunas direcciones IP con más de 100 conexiones, esto es algo que se deberá analizar.
Enviar archivos con Croc. El funcionamiento de Croc es parecido al de Send Anywhere, solo que por línea de comando. A lo que me refiero es al envío de archivos desde un computador a otro, por medio de la línea de comandos.
Instalamos a Croc
wget https://github.com/schollz/croc/releases/download/v9.4.2/croc_9.4.2_Linux-64bit.deb sudo dpkg -i croc_9.4.2_Linux-64bit.deb
Seleccionamos con Croc el archivo que queremos pasar a otro equipo
croc archivo

croc el_código
Transferir multiples archivos
croc send archivo.txt archivo2.txt archivo3.txt croc send *.txt
Transferir con un código personalizado
croc send --code mi_código_personal archivo
Enviar texto
croc send --text "Guardame este texto"
Con KDEConnect podemos tranferir archivos desde Android a Linux, fácilmente.
Puedes ver más comandos de gestión de redes en Linux, aquí
Paralelizar tareas en Linux
Existe una herramienta especialmente pensada para paralelizar tareas. Es decir, hacer que el procesador ejecute varias tareas al mismo tiempo. Su nombre es parallel, y simplemente la instalamos así:
sudo apt install parallel
Ejemplo. Vamos a buscar todos las imágenes iso en el directorio actual, y las comprimimos en paralelo
find . -name "*.iso" | parallel bzip2

Más sobre parallel en la página de GNU.
Consultar fecha
El comando para consultar fechas es:
date
Podemos modificar la salida de date formateando el resultado con los siguientes argumentos:
%M → Minutos %H → Horas, hora militar %I → Horas, hora regular %a → Día de la semana, forma corta %A → Día de la semana, forma larga %d → Día de dos dígitos %b → Nombre del mes contraido %B → Nombre del mes completo %m → Mes en dos dígitos %y → Año en dos dígitos %Y → Año en cuatro dígitos %D → Fecha en formato mes/día/año
Por ejemplo, mostrar el minuto, hora:minuto y fecha—hora:minuto actual:
date +%M date +%H-%M date +%b---%H:%M
Gestionando paquetes en un sistema Debian (dpkg)
Instalar paquetes:
sudo dpkg --install nombre.deb sudo dpkg -i nombre.deb
Instalar paquete saltando errores que impidan su instalación:
sudo dpkg --install nombre.deb --force-conflicts
Desinstalar paquete excepto archivos de configuración:
sudo dpkg --remove nombre sudo dpkg -r nombre
Desinstalar todo incluyendo los archivos de configuración:
sudo dpkg --purge nombre sudo dpkg -P nombre
Listar información acerca de un paquete instalado:
sudo dpkg --print-avail nombre sudo dpkg -p nombre
Listar paquetes instalados
sudo dpkg --list nombre sudo dpkg -l nombre
Listar estado de un paquete
sudo dpkg --status nombre sudo dpkg -s nombre
Listar archivos instalados por un paquete:
sudo dpkg --listfiles nombre sudo dpkg -L nombre
Listar a quien corresponde un archivo:
sudo dpkg --search nombre sudo dpkg -S nombre
Buscar dentro de las descripciones de los paquetes.
Dentro de /var/lib/dpkg se encuentra la lista de paquetes “available” y su “status”, se puede abrir esos archivos y buscar una palabra para encontrar el paquete al que corresponde.
Comandos Avanzados – Programación Bash
Combinando de manera lógica los comandos básicos y avanzados de Linux, podemos construir sólidos algoritmos para automatizar actividades repetitivas de nuestro día día en el sistema. Actividades relativamente básicas como la copia diaría de una carpeta, guardar registros de eventos, hasta cosas avanzadas como el bloqueo de puertos de un servidor, o la creación de un instalador de algún paquete de software.
Por ejemplo, el siguiente algoritmo didáctico nos lista al directorio Documents. Si el directorio existe, nos mostrará en pantalla “Directorio presente”, sino, nos mostrará el texto “El directorio no está presente”.
#!/bin/bash ls -lshd Documents if [ $? -eq 0 ]; then echo "Directorio presente" else echo "el directorio no está presente " fi
En el siguiente artículo podemos ver una forma avanzada de copiar archivos y directorios.
Ver más comandos principales de Linux

