# Chuleta de comandos Linux

## Si prefieres puedes ver el [repositorio](https://github.com/shanickcuello/linux-commands-cheat-sheet)

Esta chuleta está basada en el libro "Linux Basics for Hackers" de OccupyTheWeb.

> ⚠️ Esta lista no reemplaza el libro. Es un recordatorio rápido de los comandos más utilizados.\
> Para más detalles, usá `man` o `--help`.

📚 Recomendado:\
[Amazon](https://www.amazon.com/-/es/OccupyTheWeb/dp/1593278551)\
[Sitio oficial](https://www.hackers-arise.com/welcome)

***

## 📚 Comandos y Gestión de Usuarios en Linux

### ⌨️ Atajos de teclado en la terminal

| Atajo        | Descripción                                                         |
| ------------ | ------------------------------------------------------------------- |
| `Ctrl + C`   | Interrumpe un comando en ejecución.                                 |
| `Ctrl + Z`   | Suspende un proceso (lo deja en segundo plano).                     |
| `Ctrl + D`   | Cierra la sesión de la terminal actual o finaliza entrada de texto. |
| `Ctrl + R`   | Busca comandos previos en el historial (búsqueda reversa).          |
| `Ctrl + L`   | Limpia la pantalla (como `clear`).                                  |
| `Ctrl + A`   | Mueve el cursor al inicio de la línea.                              |
| `Ctrl + E`   | Mueve el cursor al final de la línea.                               |
| `Flecha ↑`   | Navega hacia comandos anteriores.                                   |
| `Flecha ↓`   | Navega hacia comandos más recientes.                                |
| `Flecha ← →` | Mueve el cursor a izquierda o derecha.                              |

***

### 🧭 Comandos básicos

| Comando   | Descripción                                            | Ejemplo                               |
| --------- | ------------------------------------------------------ | ------------------------------------- |
| `pwd`     | Muestra el directorio actual.                          | `pwd`                                 |
| `whoami`  | Muestra el usuario actual.                             | `whoami`                              |
| `cd`      | Cambia de directorio.                                  | `cd /ruta/del/directorio`             |
| `ls`      | Lista contenido del directorio.                        | `ls -la`                              |
| `--help`  | Muestra ayuda de un comando.                           | `ls --help`                           |
| `man`     | Muestra el manual de un comando.                       | `man ls`                              |
| `locate`  | Busca archivos por nombre.                             | `locate archivo`                      |
| `find`    | Busca archivos de forma recursiva.                     | `find /ruta -name archivo`            |
| `which`   | Muestra la ruta de un comando.                         | `which ls`                            |
| `whatis`  | Explica brevemente qué hace un comando.                | `whatis chmod`                        |
| `whereis` | Muestra ubicación del binario, código fuente y manual. | `whereis ls`                          |
| `ps`      | Muestra procesos en ejecución.                         | `ps aux`                              |
| `cat`     | Muestra contenido de archivos.                         | `cat archivo.txt`                     |
| `mkdir`   | Crea un nuevo directorio.                              | `mkdir nuevo_directorio`              |
| `rm`      | Elimina archivos o carpetas.                           | `rm archivo.txt` `rm -rf carpeta`     |
| `rmdir`   | Elimina directorios vacíos.                            | `rmdir carpeta_vacía`                 |
| `mv`      | Mueve o renombra archivos.                             | `mv viejo.txt nuevo.txt`              |
| `touch`   | Crea archivos vacíos o actualiza fecha.                | `touch nuevo.txt`                     |
| `wget`    | Descarga archivos desde la web.                        | `wget http://ejemplo.com/archivo.txt` |

***

### ✏️ Manipulación de texto

| Comando | Descripción                         | Ejemplo                             |
| ------- | ----------------------------------- | ----------------------------------- |
| `head`  | Muestra las primeras líneas.        | `head -n 10 archivo.txt`            |
| `tail`  | Muestra las últimas líneas.         | `tail -n 10 archivo.txt`            |
| `nl`    | Numera líneas.                      | `nl archivo.txt`                    |
| `sed`   | Editor de texto por flujo.          | `sed 's/viejo/nuevo/g' archivo.txt` |
| `more`  | Muestra archivos página por página. | `more archivo.txt`                  |
| `less`  | Igual que `more`, pero mejor.       | `less archivo.txt`                  |

***

### ⚙️ Gestión del sistema

| Comando   | Descripción                     | Ejemplo                       |
| --------- | ------------------------------- | ----------------------------- |
| `ps`      | Muestra procesos activos.       | `ps`                          |
| `nice`    | Ejecuta con prioridad ajustada. | `nice -n 10 comando`          |
| `kill`    | Termina procesos por PID.       | `kill 1234`                   |
| `killall` | Termina procesos por nombre.    | `killall firefox`             |
| `fg`      | Trae procesos al frente.        | `fg %1`                       |
| `at`      | Programa tareas.                | \`echo "comando"              |
| `chown`   | Cambia dueño de archivos.       | `chown usuario:grupo archivo` |
| `chmod`   | Cambia permisos.                | `chmod 755 archivo`           |

***

### 💻 Información del sistema

| Comando    | Descripción                                     | Ejemplo    |
| ---------- | ----------------------------------------------- | ---------- |
| `uname -a` | Info del kernel y sistema.                      | `uname -a` |
| `df -h`    | Uso del disco.                                  | `df -h`    |
| `top`      | Monitor de procesos en tiempo real.             | `top`      |
| `htop`     | Igual que `top` pero mejor (si está instalado). | `htop`     |

***

### 👥 Gestión de usuarios y grupos

| Comando          | Descripción                                 | Ejemplo                           |
| ---------------- | ------------------------------------------- | --------------------------------- |
| `adduser`        | Añade un nuevo usuario.                     | `sudo adduser jose`               |
| `deluser`        | Elimina un usuario.                         | `sudo deluser jose`               |
| `groupadd`       | Crea un nuevo grupo.                        | `sudo groupadd comercial`         |
| `groupdel`       | Elimina un grupo.                           | `sudo groupdel comercial`         |
| `usermod -aG`    | Añade un usuario a un grupo.                | `sudo usermod -aG comercial jose` |
| `cat /etc/group` | Muestra todos los grupos del sistema.       | `cat /etc/group`                  |
| `sudo su`        | Eleva a superusuario (requiere contraseña). | `sudo su`                         |
| `su usuario`     | Cambia al usuario especificado.             | `su jose`                         |
| `id usuario`     | Muestra ID y grupos de un usuario.          | `id jose`                         |

#### 📌 Ejemplo práctico:

Crear un usuario y añadirlo a un grupo:

```bash
sudo adduser jose
sudo groupadd comercial
sudo usermod -aG comercial jose
```

***

### 🛡️ Permisos y propiedad de archivos

| Comando | Descripción                              | Ejemplo                       |
| ------- | ---------------------------------------- | ----------------------------- |
| `chmod` | Cambia permisos de archivo o directorio. | `chmod 755 archivo`           |
| `chown` | Cambia el propietario.                   | `chown usuario:grupo archivo` |
| `chgrp` | Cambia solo el grupo de un archivo.      | `chgrp comercial archivo`     |

***

### ⚙️ Operadores útiles de consola

| Operador | Descripción                                                | Ejemplo                                           |
| -------- | ---------------------------------------------------------- | ------------------------------------------------- |
| `&`      | Ejecuta un comando en segundo plano.                       | `ping google.com &`                               |
| \`       | \`                                                         | Pasa la salida de un comando como entrada a otro. |
| `>`      | Redirige salida a un archivo (sobrescribe).                | `echo hola > salida.txt`                          |
| `>>`     | Redirige salida (añade al final).                          | `echo otra >> salida.txt`                         |
| `<`      | Toma entrada desde archivo.                                | `sort < archivo.txt`                              |
| `;`      | Ejecuta múltiples comandos en secuencia.                   | `cd /tmp; ls -l`                                  |
| `&&`     | Ejecuta el segundo comando solo si el primero fue exitoso. | `make && make install`                            |
| \`       |                                                            | \`                                                |

***

## Recomendaciones para practicar

* [Bandit](https://overthewire.org/wargames/bandit/) (capture the flag y desafíos)
* [cmdChallenge](https://cmdchallenge.com/?authuser=0) (desafíos de comandos)
* [Terminus](https://web.mit.edu/mprat/Public/web/Terminus/Web/main.html) (aventura gráfica)
* [LearnShell](https://www.learnshell.org/) (teoría y ejercicios)
* [LinuxCommand](https://linuxcommand.org/) (teoría y práctica)



<sup><sub>**`Que la terminal siempre esté de tu lado >.`**<sub></sup>
