25 comandos Linux esenciales para Soporte de Aplicaciones

Cuando trabajas como Application Support Engineer, Linux se convierte en una de las herramientas más importantes para investigar incidentes en producción ya que aquí es donde la magia se crea.

Un problema puede comenzar con un mensaje tan sencillo como:

“La aplicación está lenta.”

Pero detrás de esa alerta puede existir un filesystem lleno, falta de memoria, un proceso Java consumiendo CPU, problemas de conectividad, errores en logs, certificados vencidos o simplemente un servicio que dejó de responder.

Por eso, estos son algunos de los comandos Linux que considero más útiles en la operación diaria de soporte L3.


1. Verificar el espacio disponible: df

Uno de los primeros comandos que utilizo cuando existe una alerta de filesystem es:

df -h

Permite identificar rápidamente particiones con poco espacio disponible.

También puedes revisar un filesystem específico:

df -h /opt
df -h /var
df -h /tmp

Una partición al 100% puede provocar que una aplicación no pueda generar logs, archivos temporales o incluso iniciar correctamente.


2. Encontrar qué directorios consumen más espacio: du

Después de encontrar un filesystem lleno, necesitamos saber qué está consumiendo el espacio.

du -sh *

Para ordenar los directorios por tamaño:

du -sh * | sort -h

Otra opción muy útil:

du -x /var | sort -n | tail -20

Esto ayuda a localizar logs, dumps, temporales o archivos antiguos que están consumiendo almacenamiento.


3. Encontrar archivos: find

find es indispensable para investigar servidores.

Buscar archivos .log:

find /opt -type f -name "*.log"

Buscar archivos mayores a 1 GB:

find / -type f -size +1G 2>/dev/null

Buscar archivos modificados durante las últimas 24 horas:

find /opt/app -type f -mtime -1

Buscar archivos modificados durante los últimos 30 minutos:

find /opt/app -type f -mmin -30

4. Investigar logs con grep

Probablemente uno de los comandos más utilizados en soporte de aplicaciones.

Buscar errores:

grep -i "error" application.log

Buscar excepciones Java:

grep -i "exception" application.log

Buscar múltiples patrones:

grep -Ei "error|exception|failed|critical" application.log

Mostrar el número de línea:

grep -in "error" application.log

5. Analizar archivos con less

Cuando un log tiene cientos de MB o varios GB, abrirlo con un editor no siempre es buena idea.

less application.log

Dentro de less podemos buscar:

/error

Siguiente coincidencia:

n

Coincidencia anterior:

N

Salir:

q

6. Monitorear logs en tiempo real con tail

Para observar lo que está haciendo una aplicación:

tail -f application.log

Mostrar las últimas 100 líneas:

tail -100 application.log

Combinarlo con grep:

tail -f application.log | grep -i error

Este comando resulta especialmente útil durante deployments, restarts y troubleshooting en producción.


7. Revisar procesos con ps

Para verificar si una aplicación Java está ejecutándose:

ps -ef | grep java

Buscar WebLogic:

ps -ef | grep -i weblogic

Buscar Tomcat:

ps -ef | grep -i tomcat

Una combinación que utilizo frecuentemente es:

ps -ef | grep java | grep -v grep

8. Analizar CPU y memoria con top

Cuando recibimos un incidente indicando que “la aplicación está lenta”, uno de los primeros pasos es revisar los recursos del servidor.

top

Aquí podemos observar:

  • CPU utilizada
  • memoria
  • load average
  • procesos
  • PID
  • tiempo de CPU

También podemos analizar un proceso específico:

top -p PID

9. Revisar memoria con free

Para verificar rápidamente la memoria del servidor:

free -h

Nos permite revisar memoria total, utilizada, disponible y swap.

Es particularmente útil cuando investigamos problemas relacionados con aplicaciones Java.


10. Identificar puertos abiertos con ss

Una aplicación puede estar ejecutándose pero no estar escuchando en el puerto esperado.

ss -lntp

Buscar un puerto específico:

ss -lntp | grep 7001

Por ejemplo, si esperamos que WebLogic escuche en el puerto 7001, este comando permite comprobarlo rápidamente.

En servidores antiguos también podemos encontrar:

netstat -lntp

11. Probar conectividad con curl

En soporte de aplicaciones modernas, curl es indispensable para probar APIs y servicios HTTP.

curl https://server/application

Mostrar headers:

curl -I https://server/application

Mostrar información detallada de la conexión:

curl -v https://server/application

Probar una API:

curl -X GET https://api.example.com/status

Además de HTTP, curl -v puede proporcionar información muy valiosa durante troubleshooting de TLS, certificados, proxies y APIs REST.


12. Probar DNS con nslookup y dig

Muchos problemas aparentemente relacionados con aplicaciones terminan siendo problemas de resolución DNS.

nslookup server.example.com

También podemos utilizar:

dig server.example.com

Una prueba rápida:

dig +short server.example.com

13. Probar conectividad hacia un puerto

Para verificar si un servidor remoto acepta conexiones:

nc -vz server.example.com 443

Otro ejemplo:

nc -vz database.example.com 1521

Esto ayuda a diferenciar rápidamente entre un problema de aplicación y uno de red, firewall o conectividad.


14. Revisar archivos abiertos con lsof

Para saber qué proceso está utilizando un puerto:

lsof -i :8080

También podemos revisar archivos abiertos por un proceso:

lsof -p PID

O encontrar procesos utilizando determinado archivo:

lsof /path/application.log

15. Revisar información de un proceso en /proc

Una de las ventajas de Linux es que podemos investigar directamente información del proceso.

Por ejemplo:

cat /proc/PID/status

Revisar variables de ambiente:

tr '\0' '\n' < /proc/PID/environ

Revisar el comando utilizado para iniciar el proceso:

tr '\0' ' ' < /proc/PID/cmdline

Esto puede ser extremadamente útil investigando aplicaciones Java.


16. Revisar servicios con systemctl

En sistemas modernos basados en systemd:

systemctl status application

Iniciar:

systemctl start application

Detener:

systemctl stop application

Reiniciar:

systemctl restart application

Revisar logs:

journalctl -u application

17. Revisar logs del sistema con journalctl

Consultar eventos recientes:

journalctl -xe

Logs de un servicio:

journalctl -u application.service

Últimas 100 líneas:

journalctl -u application.service -n 100

Seguir los eventos en tiempo real:

journalctl -u application.service -f

18. Buscar información histórica con history

Durante un incidente también puede ser útil saber qué comandos fueron ejecutados recientemente:

history

Buscar comandos relacionados con una aplicación:

history | grep weblogic

Buscar reinicios:

history | grep restart

Naturalmente, el historial disponible dependerá de la configuración del shell y del usuario.


19. Verificar quién está conectado al servidor

who

También:

w

Y para revisar accesos anteriores:

last

Esto puede ser útil cuando varias personas están trabajando simultáneamente durante un incidente crítico.


20. Analizar archivos con awk

awk es extremadamente útil para procesar logs y resultados de comandos.

Por ejemplo, obtener la quinta columna:

awk '{print $5}' archivo.log

En archivos CSV:

awk -F',' '{print $5}' archivo.csv

También podemos combinarlo con otros comandos:

ps -ef | awk '{print $1,$2,$8}'

21. Procesar texto con sed

Por ejemplo, reemplazar texto:

sed 's/ERROR/WARNING/g' archivo.txt

Mostrar determinadas líneas:

sed -n '100,120p' application.log

sed, awk y grep forman una combinación extremadamente poderosa para analizar grandes cantidades de información.


22. Ordenar y contar resultados

Comandos como sort, uniq y wc son muy útiles durante troubleshooting.

sort archivo.txt

Contar líneas:

wc -l archivo.log

Contar valores únicos:

sort archivo.txt | uniq -c

Ordenarlos por frecuencia:

sort archivo.txt | uniq -c | sort -nr

Esto puede ayudarnos, por ejemplo, a encontrar los errores que aparecen con mayor frecuencia.


23. Revisar conexiones de red

ss -ant

Podemos analizar conexiones hacia un puerto:

ss -ant | grep :443

O contar conexiones por estado:

ss -ant | awk '{print $1}' | sort | uniq -c

Muy útil cuando investigamos problemas de saturación o conectividad.


24. Revisar certificados SSL/TLS con openssl

En ambientes empresariales, muchos incidentes están relacionados con certificados.

Consultar un servidor:

openssl s_client -connect server.example.com:443

Mostrar información del certificado:

openssl s_client -connect server.example.com:443 </dev/null 2>/dev/null |
openssl x509 -noout -subject -issuer -dates

Esto permite revisar rápidamente el subject, issuer y fechas de validez.


25. Revisar carga del servidor con uptime

Un comando sencillo pero extremadamente útil:

uptime

Además del tiempo que lleva encendido el servidor, muestra el load average de los últimos 1, 5 y 15 minutos.


Un escenario real de troubleshooting L3

Supongamos que recibimos el incidente:

“La aplicación de producción no responde.”

En lugar de reiniciar inmediatamente el servicio, podemos investigar:

1. ¿El servidor tiene recursos?

uptime
free -h
df -h
top

2. ¿La aplicación está ejecutándose?

ps -ef | grep java

3. ¿Está escuchando en el puerto?

ss -lntp | grep 8080

4. ¿Responde localmente?

curl -v http://localhost:8080/application

5. ¿Qué dicen los logs?

tail -100 application.log
grep -Ei "error|exception|failed" application.log

6. ¿Existe conectividad con las dependencias?

nc -vz database-server 1521
nc -vz api-server 443

7. ¿Existe algún problema DNS?

dig api-server.example.com

Con unos cuantos comandos podemos comenzar a determinar si estamos frente a un problema de aplicación, JVM, filesystem, memoria, CPU, red, DNS, base de datos o servicio externo.


Cheat Sheet — Linux para Application Support L3

FILESYSTEM
df -h
du -sh *
find / -type f -size +1G

LOGS
tail -f application.log
less application.log
grep -Ei "error|exception|failed" application.log

PROCESSES
ps -ef | grep java
top
free -h

NETWORK
ss -lntp
nc -vz host port
dig hostname

HTTP / APIs
curl -v URL
curl -I URL

SERVICES
systemctl status service
journalctl -u service

SSL/TLS
openssl s_client -connect host:443

TEXT PROCESSING
grep
awk
sed
sort
uniq
wc

SERVER
uptime
who
w
last

Conclusión

Trabajar como Application Support Engineer no significa simplemente reiniciar servicios cuando algo falla.

El verdadero trabajo consiste en recopilar evidencia, correlacionar logs, analizar procesos, revisar recursos, validar conectividad y encontrar la causa raíz del problema.

Después de años trabajando con Linux, middleware, aplicaciones Java, APIs, bases de datos y ambientes distribuidos, comandos aparentemente sencillos como grep, find, ps, top, curl, ss, awk y tail terminan convirtiéndose en algunas de las herramientas más importantes para resolver incidentes críticos.

Dominar Linux no significa memorizar cientos de comandos.

Significa saber qué comando utilizar cuando producción está fallando y necesitas descubrir por qué.

Deja un comentario

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