Notas de Linux

Busca archivos con find, identifica qué proceso usa un archivo o puerto con lsof y revisa conexiones y rutas con netstat.

find

Nombre, tipo y profundidad

El punto inicia la búsqueda en el directorio actual. Usa -type f para archivos, -type d para directorios y -type l para enlaces simbólicos. -name distingue mayúsculas y -iname las ignora. Entrecomilla los patrones para que los interprete find. -maxdepth 2 baja hasta dos niveles.

find . -type f -name '*.jar' -print
find . -type f -iname '*.pdf' -print
find . -maxdepth 2 -type d -name config -print
find . -type l -print

Fecha, tamaño y permisos

-mmin -10 busca cambios de contenido en los últimos 10 minutos. -mtime -1 usa periodos de 24 horas y selecciona cambios de hace menos de un día. -newermt compara con una fecha explícita. Con GNU find, -size +100M busca archivos de más de 100 MiB y -perm -0002 comprueba si otros tienen permiso de escritura.

find ./logs -type f -mmin -10 -print
find ./logs -type f -mtime -1 -print
find . -type f -newermt '2026-01-15 00:00:00' -print
find . -type f -size +100M -ls
find . -type f -perm -0002 -ls

Combinar filtros y excluir carpetas

Dos condiciones seguidas deben cumplirse a la vez. -o significa «o» y los paréntesis agrupan alternativas. En el segundo ejemplo, -prune evita entrar en .git y node_modules y la parte derecha se aplica al resto del árbol.

find . -type f \( -iname '*.jpg' -o -iname '*.png' \) -print
find . -type d \( -name .git -o -name node_modules \) -prune -o -type f -name '*.sh' -print

Buscar errores y examinar JAR

-exec pasa cada ruta como argumento mediante {}. Con + agrupa varias rutas por ejecución, útil para grep. Con \; ejecuta una vez por archivo, como necesita jar tf. En el último ejemplo, -ok solicita confirmación para cada borrado tras revisar la lista.

find ./logs -type f -name '*.log' -mmin -10 -exec grep -niH -- 'ERROR' {} +
find . -type f -name '*.jar' -exec jar tf {} \; | grep -E '\.xml$'
find ./tmp -type f -name '*.tmp' -mtime +7 -print
find ./tmp -type f -name '*.tmp' -mtime +7 -ok rm -- {} \;

lsof

Archivos de un proceso y proceso de un archivo

-p selecciona un PID, -u un usuario y -c un prefijo del nombre del proceso. -a exige que coincidan los filtros de selección. En la salida, COMMAND y PID identifican el proceso, FD el descriptor y NAME el archivo o socket. Sustituye 1234 por el PID que investigas.

lsof -p 1234
lsof -u "$USER"
lsof -a -c java -u "$USER"
lsof -- ./logs/application.log
lsof -a -p 1234 -d 1,2

Puertos y conexiones de un proceso

-i selecciona sockets de Internet. -n omite la resolución de nombres y -P mantiene los puertos en formato numérico. -sTCP:LISTEN muestra solo TCP en escucha. El último ejemplo combina el PID con conexiones TCP establecidas.

lsof -nP -iTCP:8080 -sTCP:LISTEN
lsof -nP -iUDP:53
lsof -nP -a -p 1234 -iTCP -sTCP:ESTABLISHED

Directorios y archivos borrados que siguen abiertos

+d examina el primer nivel y +D recorre todo el árbol, lo que puede tardar. +L1 muestra archivos abiertos sin enlaces. Si borraste un log y el disco sigue lleno, revisa qué proceso lo mantiene abierto. En Linux, el usuario actual puede ver solo parte de los resultados según sus permisos.

lsof +d ./logs
lsof +D ./logs
lsof +L1
lsof -a -p 1234 +L1

netstat

Puertos en escucha y PID

Estos ejemplos usan netstat de net-tools en Linux. -t selecciona TCP, -u UDP, -l sockets en escucha, -n valores numéricos y -p el PID y el programa, si tienes permiso. Las filas UDP pueden aparecer sin estado. -4 y -6 limitan la familia de direcciones.

netstat -lntup
netstat -4 -lnt
netstat -6 -lnu
netstat -lnt | awk '$4 ~ /:8080$/'

Conexiones y estados TCP

-a incluye sockets en escucha y conexiones. Local Address es el extremo local y Foreign Address el remoto. ESTABLISHED indica una conexión abierta. TIME_WAIT corresponde a un cierre reciente. -o añade información sobre temporizadores.

netstat -ant
netstat -anto
netstat -ant | awk '$6 == "ESTABLISHED"'
netstat -ant | awk '/^tcp/ {print $6}' | sort | uniq -c

Rutas, interfaces y estadísticas

-r muestra rutas, -i contadores por interfaz y -s estadísticas por protocolo. En Linux también puedes usar ss para sockets, ip route para rutas e ip -s link para contadores por interfaz.

netstat -rn
netstat -i
netstat -st
ss -lntup
ss -tn state established
ip route
ip -s link

Archivos y directorios

Listar, ordenar y contar

Consulta permisos y tamaños, incluye archivos ocultos y explora dos niveles del árbol. El último comando cuenta archivos regulares en el directorio actual.

ls -lah
ls -lv
ls -lrth
ls -1 | sort -r
ls -ld */
tree -L 2
find . -maxdepth 1 -type f -printf '.' | wc -c

Buscar por nombre o contenido

Usa comillas en los patrones. En grep, -r recorre subdirectorios, -n muestra números de línea y -w busca palabras completas. locate consulta un índice.

locate archivo.txt
find . -type f -name '*.jar' -ls
find . -type d -name 'config' 2>/dev/null
find . -type f -name '*.backup' -mmin -2 -ls
find . -type f \( -iname '*.jpg' -o -iname '*.png' \)
grep -rnw -- 'pattern' ./project
grep -ril -- 'pattern' ./project
find . -type f -name '*.xml' ! -exec grep -qF '<device>' {} \; -print

Copiar, crear y enlazar

cp -a copia el árbol conservando sus atributos cuando los permisos lo permiten. rm elimina el enlace simbólico indicado.

mkdir -p backup/config
touch example.log
cp -a source/. backup/
ln -s /path/to/source source-link
rm -- source-link

Espacio en disco

df muestra espacio por sistema de archivos. du mide lo que ocupa un directorio. sort -h ordena tamaños con unidades.

df -h
du -h -d 2 .
du -sh .[!.]* *
du -ah . | sort -hr | head -n 10
du -x -m . | sort -n | tail -n 20

Acciones por lote

Separa nombres con un byte nulo para admitir espacios y saltos de línea. Revisa la lista antes de sustituir ls por una operación que modifique archivos.

find . -type f -name '*.log' -print0 | xargs -0 -r ls -ld --
find . -type f -name '*.tmp' -print
find . -type f -name '*.tmp' -ok rm -- {} \;

Texto, formatos y compresión

Finales de línea y codificación

cat -e permite ver los retornos de carro como ^M. En Vim puedes usar :set fileformat=unix y guardar con :wq.

cat -e script.sh
file script.sh
dos2unix script.sh
sed -i 's/\r$//' script.sh
iconv -f UTF-8 -t 'ASCII//TRANSLIT' input.txt > output.txt
iconv -f UTF-8 -t UTF-8 input.txt >/dev/null

Leer y editar texto

La segunda consulta muestra las líneas 10 a 20. Escribe las sustituciones en un archivo nuevo para revisar el resultado.

tail -n 100 application.log
sed -n '10,20p' application.log
sed 's/OLD_TEXT/NEW_TEXT/g' input.txt > updated.txt
truncate -s 0 example.log

Archivos tar y registros gzip

Lista el contenido antes de extraer. Las herramientas z* permiten consultar registros comprimidos directamente.

tar -cf backup.tar source/
tar -czf backup.tar.gz source/
tar -tzf backup.tar.gz
tar -xzf backup.tar.gz -C destination/
find . -type f -name '*.css' -print0 | tar --null -T - -cf styles.tar
gzip -k application.log
zcat application.log.gz
zgrep -i 'error' application.log.gz
zless application.log.gz
zdiff old.log.gz new.log.gz

Procesos y diagnóstico

CPU, memoria y disco

Ordena los procesos por memoria residente o CPU y revisa actividad de memoria, disco y dispositivos de bloque.

free -h
vmstat 1
iostat -xz 1
lsblk
sudo fdisk -l
ps aux --sort=-rss | head
ps -eo pid,pcpu,pmem,rss,args --sort=-pcpu | head
ps -eo pid,ppid,stat,args | awk '$3 ~ /^Z/'

Procesos y archivos abiertos

Localiza el PID antes de enviar una señal. SIGTERM permite que el proceso termine de forma ordenada.

pgrep -af 'java'
lsof -p 1234 -Fn | grep -i '\.jar$' | sort
lsof +D /var/log
kill -TERM 1234

Registros y volcados

Filtra el journal por arranque, servicio o PID. coredumpctl permite inspeccionar los volcados registrados por systemd.

journalctl -xe
journalctl -b -p err
journalctl -u NetworkManager
journalctl _PID=1234
coredumpctl list
coredumpctl info 1234

Analizar registros con awk

Estos ejemplos suponen un registro de ejemplo con cliente en la primera columna, latencia en la segunda y ruta en la séptima. Ajusta los campos al formato de tu servidor.

awk '$2 > 200 && $7 ~ /[?&]id=/ {print $2, $1, $7}' access.log | sort -nr
awk '$7 ~ /[?&]id=/ {count++} END {print count+0}' access.log
grep -F '2026-01-15' audit.log | grep -F 'example-event' | sort -u

Red, TLS y almacenamiento remoto

DNS, puertos y conexiones

Usa un nombre de tu entorno autorizado. Una respuesta DNS puede mostrar la dirección que ve ese resolvedor, pero por sí sola no confirma que haya NAT.

nslookup example.com
ip addr show
traceroute example.com
nc -zv -w 5 example.com 443
ss -lntup
ss -Htn state established '( sport = :1521 or dport = :1521 )' | wc -l
sudo tcpdump -i any -c 20

Certificados TLS y almacenes Java

Inspecciona el certificado y verifica su huella por un canal de confianza antes de importarlo. keytool solicita la contraseña si hace falta.

openssl s_client -connect example.com:443 -servername example.com </dev/null
openssl s_client -connect example.com:443 -servername example.com </dev/null \
  | openssl x509 -out server.crt
openssl x509 -in server.crt -noout -subject -issuer -fingerprint -sha256
keytool -importcert -file server.crt -alias example -keystore truststore.p12
keytool -list -keystore truststore.p12

Transferir por SSH

scp copia en ambos sentidos. En una sesión sftp, get descarga y put sube.

scp example.txt user@host.example:/tmp/
scp user@host.example:/tmp/example.txt .
sftp user@host.example
get example.txt
put example.txt

Montajes NFS y CIFS

Revisa los montajes y prueba un punto concreto con mount. Para CIFS usa un archivo de credenciales local con modo 600. Estas líneas de ejemplo pertenecen a /etc/fstab.

server.example:/export /mnt/nfs nfs ro,_netdev 0 0
//server.example/share /mnt/share cifs ro,_netdev,credentials=/etc/samba/share.creds 0 0

En el servidor NFS, exportfs muestra las exportaciones. En el cliente, findmnt muestra qué está montado. Para diagnosticar reglas locales del cortafuegos, consulta el conjunto activo.

sudo exportfs -v
sudo mount /mnt/nfs
findmnt
sudo nft list ruleset

Permisos y cuentas

Modos y propietarios

Lectura vale 4, escritura 2 y ejecución 1. El modo 755 da al propietario rwx y a los demás r-x. El modo 644 da rw- al propietario y r-- a los demás.

stat example.txt
chmod a+r example.txt
find ./project -type d -exec chmod 755 {} +
find ./project -type f -name '*.php' -exec chmod 644 {} +
sudo chown user:group example.txt

Máscara de creación

umask retira bits de los permisos solicitados. Con 022, las bases habituales 777 y 666 dan 755 para directorios y 644 para archivos. Los paréntesis limitan el cambio a un subshell.

umask
(umask 022; mkdir example-dir; touch example-file)

Usuarios, grupos y sesiones

-aG añade un grupo suplementario conservando los anteriores. newgrp abre un shell con el grupo seleccionado. userdel -r también borra el directorio personal.

id
groups
w
last
lastlog
write username pts/1
sudo groupadd examplegroup
sudo usermod -aG examplegroup username
newgrp examplegroup
sudo userdel username

En sistemas configurados con pam_faillock, consulta primero el registro de bloqueos y restablécelo solo para la cuenta indicada si corresponde.

sudo faillock --user username
sudo faillock --user username --reset

Shell, tareas y paquetes

Entorno e historial

source ejecuta el archivo en el shell actual. bash -x muestra las órdenes y sus argumentos expandidos durante la ejecución.

printenv
command -v java
whereis java
source ./environment.sh
bash -n script.sh
bash -x script.sh
history
fc -l -10

Programar y observar tareas

crontab lista o edita tareas recurrentes, at programa una tarea puntual y watch repite una consulta.

crontab -l
crontab -e
at 18:30
watch -n 5 date

Fecha, distribución y RPM

timedatectl muestra la configuración del reloj en sistemas con systemd. rpm -Uvh instala o actualiza un paquete local y rpm -e lo desinstala por nombre.

date
date -u
timedatectl status
sudo timedatectl set-time '2026-01-15 14:30:00'
cat /etc/os-release
rpm -qa
sudo rpm -Uvh ./example.rpm
sudo rpm -e example

Java, Maven y servidores

Maven y pruebas

-DskipTests evita ejecutar las pruebas. -Dmaven.test.skip=true también omite su compilación en los plugins que lo respetan. -U fuerza la comprobación de snapshots actualizados y releases que faltan.

mvn clean install
mvn install -DskipTests
mvn -U clean install -Dmaven.test.skip=true

JVM, bibliotecas y entorno

jcmd puede obtener el listado de hilos de una JVM compatible con el mismo usuario. Usa ldd con ejecutables de confianza. Ajusta las rutas y el SID a tu instalación.

jcmd -l
jcmd 1234 Thread.print
ldd /bin/ls
export JAVA_HOME=/opt/jdk
export ORACLE_HOME=/opt/oracle
export ORACLE_SID=EXAMPLE
export PATH="$JAVA_HOME/bin:$ORACLE_HOME/bin:$PATH"

Máscara de Tomcat

Cuando Tomcat se inicia mediante catalina.sh, puedes fijar UMASK en bin/setenv.sh. Con 0027, las bases 777 y 666 dan 750 para directorios y 640 para archivos.

UMASK=0027