Ir ao contido

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 información interesante

# 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