Ghost AcademySecLearn// Seguridad Informática
🌐 unfantasmaenelsistema.com
📁 Comandos Linux · Navegación y gestión de archivos
Navegación y Gestión de Archivos
// touch · file · stat · find · locate · which · type · basename · dirname

Guía completa de comandos de navegación y gestión de archivos en Linux: creación, identificación, metadatos, búsqueda avanzada y localización de ejecutables — con perspectiva de uso en pentesting y análisis forense.

touch · timestamps stat · inodos · atime find · búsqueda real locate · base de datos which · pentesting type · basename · dirname
📄
Comandos de Navegación y Gestión de Archivos
touch · file · stat · find · locate · which · type · basename · dirname
01 touch Crear archivos vacíos o modificar marcas de tiempo

touch tiene dos usos principales: crear un archivo vacío si no existe, o actualizar las marcas de tiempo (atime, mtime, ctime) de un archivo ya existente sin modificar su contenido.

OpciónDescripción
-aSolo cambia la hora de acceso (access time).
-mSolo cambia la hora de modificación (modification time).
-t [[CC]YY]MMDDhhmm[.ss]Usa la fecha/hora especificada en lugar de la hora actual.
bash — ejemplos
# Crear un archivo vacío
touch /home/jose/ejemplo.txt

# Crear varios archivos a la vez
touch /home/jose/archivo1.txt /home/jose/archivo2.txt

# Verificar el archivo recién creado
ls -l informe_ventas.doc
-rw-rw-r-- 1 jose jose 0 Oct 9 07:00 informe_ventas.doc
# Tamaño = 0 → archivo vacío

# Establecer fecha y hora específica
touch -t 202510091200.00 /home/jose/ejemplo.txt

# Actualizar solo la hora de acceso (-a)
touch -a datos_antiguos.txt

Demostración: efecto de touch -a con stat

bash — solo atime cambia
touch datos_antiguos.txt
# (Esperar 10 segundos...)
stat datos_antiguos.txt | grep "Acceso\|Modificación"
Acceso: 2025-10-11 08:59:24.256741984 +0200
Modificación: 2025-10-11 08:58:39.417333542 +0200

touch -a datos_antiguos.txt

stat datos_antiguos.txt | grep "Acceso\|Modificación"
Access: 2025-10-09 07:01:10.000000000 +0200  ← ¡Esta se actualizó!
Modify: 2025-10-09 07:01:00.000000000 +0200  ← Esta no cambia
02 file Identificar el tipo real de un archivo examinando su contenido

file examina los bytes del archivo, no su extensión, para determinar su tipo real. Es fundamental para identificar archivos con extensiones incorrectas o sin extensión.

OpciónDescripción
-sTrabaja con archivos especiales de bloque o carácter (útil para ver el tipo de sistema de archivos en una partición).
bash — identificar distintos tipos
touch archivo_vacio.txt
echo "Hola, esto es un script" > mi_script.sh

file archivo_vacio.txt
archivo_vacio.txt: empty

file mi_script.sh
mi_script.sh: ASCII text

file /bin/bash
/bin/bash: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV),
dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, ...

file /home/jose/ejemplo.txt    # texto plano
file /bin/ls                   # ejecutable ELF
file /home/jose/archivo.zip    # Zip archive data
03 stat Metadatos completos del archivo: inodo, permisos y las tres marcas de tiempo

stat muestra información exhaustiva sobre un archivo o sistema de archivos: tamaño, inodo, permisos, propietario y las cuatro marcas de tiempo.

OpciónDescripción
-fMuestra el estado del sistema de archivos donde reside el archivo.
-c "%n %a %U %G"Formato personalizado: nombre, permisos en octal, usuario y grupo.

Las cuatro marcas de tiempo

A
Access time
Última vez que se leyó el archivo (cat, less, open…).
M
Modify time
Última vez que se modificó el contenido del archivo.
C
Change time
Última vez que cambiaron los metadatos (permisos, propietario…).
B
Birth time
Fecha de creación del archivo (no siempre disponible).
bash — salida completa de stat
touch informe_semanal.pdf
stat informe_semanal.pdf
  File: informe_semanal.pdf
  Size: 0         Blocks: 0          IO Block: 4096   regular empty file
Device: 801h/2049d  Inode: 2000001    Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1000/   jose)   Gid: ( 1000/   jose)
Access: 2025-10-09 07:05:00.000000000 +0200
Modify: 2025-10-09 07:05:00.000000000 +0200
Change: 2025-10-09 07:05:00.000000000 +0200
 Birth: 2025-10-09 07:05:00.000000000 +0200
stat en Pentesting — Usos clave
Detección de backdoors: Un archivo con Modify time reciente que no coincide con la instalación del sistema puede indicar una alteración maliciosa.
Archivos críticos leídos: Access time en /etc/passwd, /etc/sudoers o ~/.ssh/id_rsa revela si un atacante accedió a información sensible.
Escalada de privilegios: stat -c "%n %a %U %G" /usr/bin/comando verifica rápidamente si un binario tiene permisos laxos o bits SUID/SGID explotables.
Clave SSH privada: stat ~/.ssh/id_rsa — si existe, el atacante puede usarla para movimiento lateral hacia otros servidores sin contraseña.
bash — usos en pentesting
# Verificar cuándo se modificó /etc/passwd
stat /etc/passwd

# Revisar acceso a clave privada SSH
stat ~/.ssh/id_rsa

# Formato personalizado: nombre, permisos, usuario, grupo
stat -c "%n %a %U %G" /usr/bin/comando_sospechoso
🔍
Búsqueda de archivos
find — búsqueda en tiempo real · locate — búsqueda por base de datos
04 find Búsqueda potente en tiempo real recorriendo el sistema de archivos

find busca en una jerarquía de directorios archivos que cumplan condiciones combinables. Siempre preciso — ve los archivos en el momento exacto de ejecución.

sintaxis
find ruta [opciones] [condiciones]
OpciónDescripción
-name "patron"Busca por nombre (distingue mayúsculas/minúsculas).
-iname "patron"Busca por nombre ignorando mayúsculas/minúsculas.
-type fSolo archivos regulares. Usa d para directorios, l para enlaces simbólicos.
-user nombreArchivos propiedad del usuario especificado.
-not -user nombreArchivos no propiedad del usuario.
-mtime +N / -NModificados hace más de N días (+N) o menos de N días (-N).
-size +10MArchivos mayores a 10 MB. Usa k, M, G.
-exec cmd {} \;Ejecuta un comando sobre cada resultado encontrado.
bash — ejemplos prácticos
# Buscar por nombre en /etc
find /etc -name "interfaces"
/etc/cups/interfaces

# Todos los .txt en carpeta personal
find /home/jose -type f -name "*.txt"

# Archivos modificados en las últimas 24 horas
find /home/jose -type f -mtime -1

# Archivos mayores a 10 MB
find /home/jose -type f -size +10M

# Buscar y listar detalles con -exec
find /home/jose -type f -name "*.log" -exec ls -lh {} \;

# Buscar en /etc archivos NO de jose modificados hoy
sudo touch /etc/mi_nuevo_config.conf
find /etc/mi_nuevo_config.conf -type f -not -user jose -mtime -1

# Buscar todos los directorios
sudo find -type d

# Buscar todos los archivos de jose
sudo find -user jose
05 locate Búsqueda ultrarrápida usando base de datos pre-indexada (mlocate.db)
📦 Instalación: sudo apt install plocate
OpciónDescripción
-iIgnora mayúsculas/minúsculas.
-cSolo cuenta el número de resultados.
bash — ejemplos
# Buscar archivos con "bashrc" en el nombre
locate bashrc | head -3
/etc/bash.bashrc
/etc/skel/.bashrc
/home/jose/.bashrc

# Buscar todos los .pdf
locate "*.pdf"

# Contar archivos con "mysql" (ignorando mayúsculas)
locate -i -c mysql
152

# Si el archivo no aparece → actualizar la base de datos
sudo updatedb
locate app.py
/home/jose/proyectos/python/app.py  ← ¡Ahora sí aparece!
⚠️ Nota clave: Si un archivo acaba de ser creado, locate no lo encontrará hasta que se ejecute sudo updatedb para actualizar la base de datos.

find vs locate — ¿cuál usar?

🔍 find
MétodoBusca directamente en el sistema de archivos en tiempo real.
VelocidadMás lento en directorios grandes.
PrecisiónSiempre preciso — ve los archivos en el momento exacto.
Archivos nuevosSí — los encuentra inmediatamente.
Usar cuandoNecesitas precisión absoluta o condiciones complejas.
⚡ locate
MétodoConsulta una base de datos pre-indexada (mlocate.db).
VelocidadExtremadamente rápido.
PrecisiónSolo preciso si la base de datos está actualizada.
Archivos nuevosNo hasta ejecutar sudo updatedb.
Usar cuandoBuscas archivos que llevan tiempo en el sistema.
📍
Ejecutables, tipos y rutas
which · type · basename · dirname
06 which Localiza la ruta absoluta del ejecutable en el $PATH

which busca binarios ejecutables en los directorios listados en la variable $PATH y devuelve la ruta completa al primer resultado.

OpciónDescripción
-aImprime todas las coincidencias en el $PATH, no solo la primera.
bash — ejemplos
which ls
/usr/bin/ls

which python3
/usr/bin/python3

which man
which nano
which df      # Disk Free — uso de espacio en disco
which passwd  # Binario de cambio de contraseña

# Herramientas disponibles para pentesting
which gcc     # ¿Hay compilador?
which perl    # ¿Scripting avanzado?
which nc      # ¿Netcat disponible?
which python  # Para reverse shell
which en Pentesting
Rutas absolutas en exploits: En un shell comprometido sin $PATH configurado, which permite obtener la ruta exacta (ej. /bin/bash) para garantizar la ejecución de scripts y exploits.
Detección de binarios troyanizados: Un administrador puede haber reemplazado ls, netcat u otros con versiones modificadas para registrar actividad. which muestra qué binario se está ejecutando realmente.
Conciencia situacional: Verificar rápidamente qué herramientas están disponibles: compiladores (gcc), intérpretes (perl, ruby), herramientas de red (nc, ncat).
07 type Describe cómo interpreta el shell un nombre de comando

type indica si un comando es un alias, una función, un builtin del shell o un ejecutable externo en disco.

OpciónDescripción
-aMuestra todas las formas en las que podría interpretarse el nombre.

Los cuatro tipos posibles

ls alias ls is aliased to 'ls --color=auto'
cd builtin cd is a shell builtin
find externo find is /usr/bin/find
grep alias grep es un alias de 'grep --color=auto'
nano externo nano is /usr/bin/nano
bash
type ls       # alias
type cd       # builtin
type find     # ejecutable externo
type python3  # ruta del intérprete
08 basename Extrae el nombre del archivo de una ruta completa

basename elimina el prefijo de directorio de una ruta, dejando solo el nombre del archivo o directorio final. Opcionalmente puede quitar también la extensión.

Ruta completa: /home/jose/proyectos/python/app.py
dirname /home/jose/proyectos/python
basename app.py
sin .py app
bash
basename /home/jose/documentos/completo.txt
completo.txt

basename /etc/apt/
apt

# Eliminar extensión (especificar el sufijo)
basename /home/jose/completo.txt txt
completo

basename /home/jose/script.sh .sh
script
09 dirname Extrae la ruta del directorio de una ruta completa

dirname complementa a basename: elimina el último componente de la ruta, dejando solo la parte del directorio.

bash
dirname /home/jose/completo.txt
/home/jose/

dirname completo.txt
.
# El punto (.) representa el directorio actual

dirname /usr/local/bin/
/usr/local

dirname /home/jose/documentos/ejemplo.txt
/home/jose/documentos
ℹ️ Uso típico en scripts: dirname y basename se usan frecuentemente en scripts para separar la parte del directorio del nombre del archivo, por ejemplo: DIR=$(dirname "$0") obtiene el directorio donde está el script que se está ejecutando.
🏋️
Ejercicio Final Integrador
Aplica todos los comandos sobre un mismo archivo y directorio
🎯 Archivo objetivo: /home/jose/proyectos/python/app.py
bash — flujo completo
# 1. Crear el archivo
mkdir -p /home/jose/proyectos/python
touch /home/jose/proyectos/python/app.py

# 2. Descomponer la ruta
basename /home/jose/proyectos/python/app.py
app.py

dirname /home/jose/proyectos/python/app.py
/home/jose/proyectos/python

# 3. Identificar tipo de archivo
file /home/jose/proyectos/python/app.py
/home/jose/proyectos/python/app.py: empty

# 4. Ver metadatos completos
stat /home/jose/proyectos/python/app.py
# Muestra tamaño, inodo, fecha, permisos...

# 5. Buscar en tiempo real (siempre preciso)
find /home/jose/proyectos -name "*.py"
/home/jose/proyectos/python/app.py

# 6. Buscar en base de datos (puede no aparecer aún)
locate app.py
# Si no aparece, actualizar la BD:
sudo updatedb
locate app.py
/home/jose/proyectos/python/app.py  ← ¡Ahora aparece!

# 7. Localizar el intérprete de Python
which python3
/usr/bin/python3

# 8. Ver tipo de comandos relacionados
type cd
cd is a shell builtin

type python3
python3 is /usr/bin/python3
💡 Resumen rápido: touch crea/actualiza timestamps · file identifica tipo real · stat muestra todos los metadatos · find busca en tiempo real con condiciones · locate busca rápido en BD · which ruta del ejecutable · type tipo de comando · basename nombre del fichero · dirname ruta del directorio