comandos avanzados de linux

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 archivo fue eliminado, pero no, para el sistema el espacio que está ocupando el archivo “eliminado”, ya está disponible, pero el archivo sigue ahí. Es por eso que los archivos eliminados por el usuario (o después de un formateo de disco) pueden ser recuperados con programas de recuperación.

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

play-sharp-fill

Hay otra forma de multiplexar terminales con Tmux

Multiplexor de Terminal en Linux

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

comandos avanzados de linuxLo anterior genera un código que debemos escribir en el otro equpo para ser que el archivo pueda ser recibido. En el otro equipo:

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.

Transferir fotos de Android a Linux por WiFi

Puedes ver más comandos de gestión de redes en Linux, aquí

Comandos Linux para la Gestión de Redes

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

comandos avanzados de linuxSi quisiéramos no usar parallel, tendríamos que comprimir las imágenes iso del ejemplo, una tras otra, lo que tomaría más tiempo en terminar toda la tarea.

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.

Copiar archivos y directorios con comando en Linux


Ver más comandos principales de Linux

Principales comandos de Linux

Comparte esto en
Publicado en GNU Linux.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *