cat / grep - Lectura e Busca en Ficheiros
Descrición
Comandos fundamentales para ler e buscar contido en ficheiros. cat mostra o contido completo e grep filtra liñas que coinciden cun patrón.
Sintaxe básica
cat <ficheiro>
grep <patrón> <ficheiro>
Opcións principais de cat
| Opción |
Descrición |
-n |
Numerar liñas |
-A |
Mostrar caracteres non imprimibles |
-b |
Numerar liñas non baleiras |
-s |
Suprimir liñas baleiras repetidas |
Opcións principais de grep
| Opción |
Descrición |
-i |
Ignorar maiúsculas/minúsculas |
-r |
Busca recursiva |
-v |
Invertir busca (liñas que NON coinciden) |
-n |
Mostrar número de liña |
-c |
Contar coincidencias |
-l |
Só mostrar nomes de ficheiros |
-A <n> |
Mostrar n liñas despois |
-B <n> |
Mostrar n liñas antes |
-C <n> |
Mostrar n liñas antes e despois |
-E |
Usar expresións regulares extendidas |
-o |
Só mostrar o texto que coincide |
Exemplos de uso
Lectura básica con cat
# Ler ficheiro completo
cat /etc/passwd
# Ler múltiples ficheiros
cat ficheiro1.txt ficheiro2.txt
# Con números de liña
cat -n /etc/passwd
# Crear/sobrescribir ficheiro
cat > ficheiro.txt
Contido aquí
CTRL+D para gardar
# Engadir a ficheiro existente
cat >> ficheiro.txt
Máis contido
CTRL+D
Busca básica con grep
# Buscar patrón nun ficheiro
grep "root" /etc/passwd
# Buscar en múltiples ficheiros
grep "error" /var/log/*.log
# Case-insensitive
grep -i "password" ficheiro.txt
# Busca recursiva en directorio
grep -r "password" /var/www/
# Mostrar número de liña
grep -n "root" /etc/passwd
# Invertir busca (liñas sen o patrón)
grep -v "^#" /etc/ssh/sshd_config
Combinación cat + grep
# Filtrar saída de cat
cat /etc/passwd | grep "bash"
# Buscar e numerar liñas
cat /etc/passwd | grep -n "root"
# Múltiples filtros
cat /etc/passwd | grep "bash" | grep -v "false"
Uso en escalada de privilexios
Ficheiros sensibles a revisar
# /etc/passwd - Usuarios do sistema
cat /etc/passwd
cat /etc/passwd | grep -v "nologin\|false"
# /etc/shadow - Hashes de contrasinais (require root)
cat /etc/shadow
# /etc/group - Grupos
cat /etc/group | grep -E "sudo|admin|root"
# Ficheiros de configuración SSH
cat /etc/ssh/sshd_config | grep -v "^#"
cat ~/.ssh/authorized_keys
cat ~/.ssh/id_rsa
# Historiais de comandos
cat ~/.bash_history
cat ~/.mysql_history
cat ~/.python_history
# Ficheiros de configuración de aplicacións
cat /var/www/html/config.php
cat /etc/mysql/my.cnf
cat /etc/apache2/apache2.conf
# Variables de entorno
cat /proc/*/environ | tr '\0' '\n'
# Cronjobs
cat /etc/crontab
cat /etc/cron.d/*
cat /var/spool/cron/crontabs/*
Buscar contrasinais
# Buscar palabra "password" en ficheiros
grep -r "password" /var/www/ 2>/dev/null
grep -r "passwd" /home/ 2>/dev/null
grep -ri "pass" /var/log/ 2>/dev/null
# Buscar en historiais
grep -i "pass" ~/.bash_history
grep -i "mysql" ~/.bash_history
# Buscar en ficheiros de configuración
grep -r "DB_PASSWORD" /var/www/ 2>/dev/null
grep -r "api_key" /var/www/ 2>/dev/null
# Buscar contrasinais en scripts
grep -r "password=" /opt/ 2>/dev/null
grep -r "PASSWORD=" /usr/local/ 2>/dev/null
# Buscar flags (CTF)
grep -r "flag{" / 2>/dev/null
grep -r "THM{" / 2>/dev/null
grep -r "HTB{" / 2>/dev/null
# Buscar chaves privadas
grep -r "BEGIN RSA PRIVATE KEY" /home/ 2>/dev/null
grep -r "BEGIN OPENSSH PRIVATE KEY" /home/ 2>/dev/null
# Buscar URLs e IPs
grep -r "http://" /var/www/ 2>/dev/null
grep -rE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' /etc/ 2>/dev/null
# Buscar usuarios con bash
cat /etc/passwd | grep "/bin/bash"
# Buscar SUID/SGID en ficheiros de texto (resultados de find)
grep -i "suid\|sgid" ficheiro.txt
Analizar logs
# Logs de autenticación
cat /var/log/auth.log | grep "Failed"
cat /var/log/auth.log | grep "Accepted"
# Logs de sistema
cat /var/log/syslog | grep -i "error"
# Logs de Apache/Nginx
cat /var/log/apache2/access.log | grep "POST"
cat /var/log/nginx/error.log | tail -50
# Buscar accesos sospeitosos
grep "root" /var/log/auth.log
grep "sudo" /var/log/auth.log
Combinacións avanzadas
# Buscar contrasinais excluíndo binarios
grep -r "password" /var/www/ 2>/dev/null | grep -v "Binary"
# Buscar con contexto (liñas antes e despois)
grep -C 5 "password" config.php
# Buscar múltiples patróns
grep -E "password|passwd|pwd" /var/www/config.php
# Só ficheiros PHP con "password"
grep -r --include="*.php" "password" /var/www/
# Contar ocorrencias
grep -c "error" /var/log/syslog
# Buscar e mostrar só o match
grep -o "user=[a-zA-Z]*" ficheiro.log
Ler ficheiros con restriccións
# Se cat non está dispoñible, alternativas:
more ficheiro.txt
less ficheiro.txt
head ficheiro.txt
tail ficheiro.txt
nl ficheiro.txt # numerado
# Ler ficheiros grandes por partes
head -n 50 ficheiro.txt
tail -n 50 ficheiro.txt
# Seguir cambios en tempo real
tail -f /var/log/syslog
Expresións regulares útiles
# Buscar emails
grep -rE '[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}' /var/www/
# Buscar IPs
grep -rE '([0-9]{1,3}\.){3}[0-9]{1,3}' /etc/
# Buscar URLs
grep -rE 'https?://[a-zA-Z0-9./?=_%:-]*' /var/www/
# Buscar hashes MD5
grep -rE '[a-f0-9]{32}' /tmp/
# Buscar liñas que comezan con algo específico
grep "^root" /etc/passwd
# Buscar liñas que rematan con algo específico
grep "bash$" /etc/passwd
# Buscar liñas non baleiras e sen comentarios
grep -v "^$\|^#" /etc/ssh/sshd_config
Notas adicionais
cat é útil para lectura rápida, pero less ou more son mellores para ficheiros grandes
- Sempre redirixir erros con
2>/dev/null en buscas recursivas
grep -r é moi potente pero pode ser lento en sistemas grandes
- A combinación
| grep -v é útil para excluír patróns non desexados
- Usar
-i con grep para buscas case-insensitive é case sempre recomendable
grep -A, -B, -C son extremadamente útiles para ver contexto
- En ocasións,
cat pode non funcionar con ficheiros binarios - usar strings nese caso
- Para ficheiros moi grandes, considerar
head ou tail primeiro
- Combinar con
wc -l para contar liñas: cat ficheiro.txt | wc -l