🎓 Cómo usar este documento: Lee la explicación de cada bloque temático y responde las preguntas antes de pasar al siguiente. Las soluciones comentadas están al final.
Vi (Visual) fue escrito por Bill Joy en 1976 partiendo de los editores ed y ex. Es el editor de texto estándar en todos los sistemas Unix/Linux. Vim (Vi IMproved) es su versión mejorada.
💡 Conocer vi es una salvaguarda de emergencia: está presente en cualquier sistema Unix/Linux aunque no haya otros editores instalados.
Modos de vi
├── Modo COMANDO (modo por defecto al iniciar)
│ ├── Las teclas ejecutan acciones (mover, borrar, copiar...)
│ └── Para entrar: pulsar <ESC> desde cualquier modo
├── Modo TEXTO (inserción)
│ ├── Se escribe el texto directamente
│ └── Para entrar: i, a, I, A, o, O desde modo comando
└── Modo LÍNEA DE ÓRDENES (ex)
├── Comandos precedidos de ":"
└── Para entrar: pulsar ":" desde modo comando
| Tecla | Acción |
|---|---|
i |
Inserta en la posición del cursor |
a |
Inserta después del cursor |
I |
Inserta al principio de la línea |
A |
Inserta al final de la línea |
o |
Abre una línea debajo de la actual |
O |
Abre una línea encima de la actual |
⚠️ Para volver al modo comando: pulsar
<ESC>
| Tecla | Acción |
|---|---|
h / j / k / l |
Izquierda / Abajo / Arriba / Derecha |
w |
Avanza una palabra |
b |
Retrocede una palabra |
Ctrl+f |
Avanza pantalla completa |
Ctrl+b |
Retrocede pantalla completa |
Ctrl+d |
Avanza media pantalla |
Ctrl+u |
Retrocede media pantalla |
1G |
Va al principio del fichero |
G |
Va al final del fichero |
| Comando | Acción |
|---|---|
:q |
Sale si no hay cambios |
:q! |
Sale sin guardar (fuerza) |
:w |
Guarda sin salir |
:wq |
Guarda y sale |
:w fichero |
Guarda con nuevo nombre |
:w! fichero |
Sobreescribe fichero existente |
| Comando | Acción |
|---|---|
x |
Borra el carácter bajo el cursor |
dd |
Borra la línea actual (va al búfer) |
ndd |
Borra las próximas n líneas |
D |
Borra hasta el final de la línea |
dw |
Borra hasta el final de la palabra |
d$ |
Borra hasta el final de la línea |
d^ |
Borra hasta el principio de la línea |
dG |
Borra hasta el final del fichero |
| Comando | Acción |
|---|---|
yy |
Copia la línea actual al búfer |
nyy |
Copia n líneas al búfer |
p |
Pega el búfer después del cursor |
P |
Pega el búfer antes del cursor |
u |
Deshace la última operación |
U |
Restaura la línea actual |
. |
Repite la última operación |
| Comando | Acción |
|---|---|
/texto |
Busca hacia el final del fichero |
?texto |
Busca hacia el principio |
n |
Repite la búsqueda (mismo sentido) |
N |
Repite la búsqueda (sentido contrario) |
:%s/patrón1/patrón2/g |
Reemplaza en todo el fichero |
:n1,n2s/p1/p2/g |
Reemplaza en rango de líneas |
💡
%= todo el fichero.g= todas las ocurrencias de la línea. Singsolo reemplaza la primera.
.exrc / .vimrc)| Comando set | Acción |
|---|---|
:set number |
Muestra números de línea |
:set showmode |
Indica el modo actual (INSERT/REPLACE) |
:set list |
Muestra caracteres no imprimibles |
:set ignorecase |
Búsquedas sin distinguir mayúsculas |
:set autoindent |
Sangrado automático en nuevas líneas |
:set wrapscan |
Búsquedas circulares (por defecto) |
💡 El fichero de configuración se llama
.exrcpara vi y.vimrcpara vim. Se guarda en el home del usuario. Los comandossetse escriben sin los dos puntos:.
Nano es un editor de texto sencillo para el terminal, instalado por defecto en Ubuntu. Es mucho más fácil de usar que vi/vim, con dos líneas de ayuda siempre visibles en la parte inferior.
nano nombre_fichero # Abrir/crear fichero
sudo nano /etc/fstab # Editar fichero del sistema
| Tecla | Función |
|---|---|
Ctrl+G o F1 |
Mostrar ayuda |
Ctrl+X o F2 |
Salir (pregunta si guardar) |
Ctrl+O o F3 |
Guardar el fichero actual |
Ctrl+W o F6 |
Buscar cadena o expresión regular |
Ctrl+\ o Alt+R |
Buscar y reemplazar |
Ctrl+K o F9 |
Cortar la línea actual |
Ctrl+U o F10 |
Pegar la línea cortada |
M-6 o M-^ |
Copiar la línea actual |
Ctrl+C o F11 |
Mostrar posición del cursor |
Ctrl+_ o M-G |
Ir a línea y columna específica |
💡 Convención:
^= Ctrl,M-= Alt/Meta/Esc
/etc/nanorc (no editable directamente)~/.nanorc (en el home del usuario)Opción .nanorc |
Efecto |
|---|---|
set const |
Muestra nº de línea del cursor constantemente |
set smooth |
Desplazamiento suave al mover el cursor |
set mouse |
Habilita el ratón (click mueve cursor) |
set tabsize 3 |
TAB avanza 3 espacios |
set fill 72 |
Wrap de línea en columna 72 |
1. ¿En qué modo se encuentra vi cuando se inicia por primera vez?
2. ¿Qué comando de vi guarda el fichero actual y sale del editor?
:w:q!:wq:x!3. En vi, ¿qué hace el comando dd?
4. Para buscar la cadena "error" hacia el final del fichero en vi, ¿qué se escribe?
?error:search error/errors/error5. ¿Qué atajo de Nano guarda el fichero actual?
Ctrl+XCtrl+SCtrl+OCtrl+W6. El fichero de configuración personal de Nano se llama:
/etc/nanorc~/.nanorc~/.nano_config/etc/nano/configsudo (Super User DO) permite a usuarios normales ejecutar comandos con privilegios de root (o de otro usuario), basándose en una lista de control de acceso definida en /etc/sudoers.
Componentes de sudo
├── sudo → El comando con permisos SUID
├── visudo → Herramienta para editar /etc/sudoers de forma segura
└── /etc/sudoers → Fichero de permisos (quién ejecuta qué y cómo)
⚠️ En Ubuntu, el usuario root no tiene contraseña por defecto (
!en/etc/shadow). El primer usuario creado puede usarsudo.
| Opción | Función |
|---|---|
sudo comando |
Ejecuta el comando como root |
sudo -u usuario comando |
Ejecuta como otro usuario |
sudo -l |
Lista los comandos permitidos para el usuario |
sudo -v |
Extiende la validez de la sesión 5 minutos más |
sudo -k |
Invalida el tiempo de gracia (pide contraseña de nuevo) |
sudo -e fichero |
Edita un fichero como root (equivale a sudoedit) |
💡 Por defecto, tras introducir la contraseña, durante 5 minutos puede volver a usar sudo sin reescribirla.
visudo es la única forma recomendada de editar /etc/sudoers. Ventajas:
- Bloquea el fichero mientras se edita (evita ediciones simultáneas)
- Verifica la sintaxis al cerrar antes de guardar
| Opción visudo | Función |
|---|---|
visudo |
Edita /etc/sudoers |
visudo -c |
Solo comprueba la sintaxis sin editar |
visudo -s |
Modo estricto: comprueba también el orden de las reglas |
Cuando hay error de sintaxis al cerrar visudo:
- e → Editar de nuevo (posiciona en la línea del error)
- x → Salir sin guardar
- Q → Salir y guardar (con el error, ⚠️ peligroso)
/etc/sudoers
├── Alias (opcional)
│ ├── User_Alias → Agrupa usuarios
│ ├── Host_Alias → Agrupa equipos/redes
│ ├── Runas_Alias → Agrupa usuarios "como quién" ejecutar
│ └── Cmnd_Alias → Agrupa comandos
├── Reglas de acceso (obligatorio)
│ └── Sintaxis: usuario host = (comoQuien) tag: comandos
└── Defaults / Opciones (opcional)
└── Comportamiento global o por usuario/host
| Tipo | Formato | Ejemplo |
|---|---|---|
| User_Alias | User_Alias NOMBRE = user1, user2, %grupo |
User_Alias ADMIN = ana, sergio |
| Host_Alias | Host_Alias NOMBRE = ip, red/máscara, host |
Host_Alias LANS = 192.168.1.0/24 |
| Runas_Alias | Runas_Alias NOMBRE = user1, #UID |
Runas_Alias OPS = root, #1013 |
| Cmnd_Alias | Cmnd_Alias NOMBRE = /ruta/cmd1, /ruta/cmd2 |
Cmnd_Alias RED = /sbin/ifconfig, /sbin/iptables |
⚠️ Los nombres de alias deben comenzar con letra mayúscula y pueden contener letras, números y
_.
El símbolo!niega un elemento:User_Alias TODOS = ALL, !root
usuario host = (comoQuien) tag: comando1, comando2...
Ejemplos:
daniela ALL = /sbin/iptables
→ daniela puede usar iptables en cualquier host
ADMIN ALL = ALL
→ Los del alias ADMIN pueden hacer cualquier cosa
checo ALL = /usr/bin/passwd *, !/usr/bin/passwd root
→ checo puede cambiar la contraseña de cualquier usuario EXCEPTO root
sergio ALL = (ALL) ALL
→ sergio puede ejecutar cualquier comando como cualquier usuario
| Tag | Efecto |
|---|---|
NOPASSWD: |
No pide contraseña para los siguientes comandos |
PASSWD: |
Pide contraseña (por defecto) |
NOEXEC: |
Impide "escapar al shell" desde el comando (ej: en vi con !) |
EXEC: |
Permite la ejecución (por defecto) |
# Ejemplo NOPASSWD:
lux webserver = NOPASSWD: /bin/kill, /usr/bin/lprm
| Nivel | Formato |
|---|---|
| Global | Defaults opcion |
| Por usuario | Defaults:usuario opcion |
| Por usuario privilegiado | Defaults>usuario opcion |
| Por host | Defaults@host opcion |
Ejemplos:
Defaults log_year → Registra el año en el log
Defaults:ana !authenticate → Ana no necesita contraseña
Defaults logfile="/var/log/sudo.log" → Define el fichero de log
Defaults passwd_tries = 3 → Intentos antes de error (def: 3)
7. ¿Qué hace sudo -k?
8. ¿Por qué se debe usar visudo en lugar de editar /etc/sudoers directamente?
/etc/sudoers está cifrado y solo visudo puede descifrarlos9. En el fichero sudoers, la regla checo ALL = /usr/bin/passwd *, !/usr/bin/passwd root significa:
10. ¿Qué tipo de alias en sudoers agrupa los comandos que un usuario puede ejecutar?
11. ¿Qué opción de visudo comprueba la sintaxis de /etc/sudoers sin editarlo?
visudo -svisudo -vvisudo -cvisudo -tip — Sucesor de ifconfigip es la herramienta moderna para gestionar interfaces de red, direcciones, rutas y más en Linux. Sustituye a ifconfig, route y arp.
Formato: ip [objeto] [subcomando]
| Objeto | Abreviatura | Función |
|---|---|---|
address |
addr / a |
Gestionar direcciones IP |
link |
l |
Gestionar interfaces de red |
route |
r |
Gestionar tabla de enrutamiento |
neighbour |
neigh / n |
Tabla ARP (vecinos) |
maddress |
maddr |
Direcciones multicast |
ip addr| Comando | Función |
|---|---|
ip addr |
Muestra todas las direcciones IP de todas las interfaces |
ip addr show dev em1 |
Muestra info solo de la interfaz em1 |
ip addr add 192.168.1.1/24 dev em1 |
Añade la IP 192.168.1.1/24 a em1 |
ip addr del 192.168.1.1/24 dev em1 |
Elimina la IP 192.168.1.1/24 de em1 |
ip link| Comando | Función |
|---|---|
ip link |
Muestra el estado de todas las interfaces |
ip link show dev em1 |
Muestra info solo de em1 |
ip -s link |
Muestra estadísticas de las interfaces |
ip link set em1 up |
Activa la interfaz em1 |
ip link set em1 down |
Desactiva la interfaz em1 |
ip link set em1 mtu 9000 |
Establece MTU de 9000 en em1 |
ip link set em1 promisc on |
Activa modo promiscuo en em1 |
ip route| Comando | Función |
|---|---|
ip route |
Lista todas las rutas del kernel |
ip route add default via 192.168.1.1 dev em1 |
Añade ruta por defecto via gateway |
ip route add 192.168.1.0/24 via 192.168.1.1 |
Añade ruta a red via gateway |
ip route add 192.168.1.0/24 dev em1 |
Añade ruta a red via interfaz |
ip route delete 192.168.1.0/24 via 192.168.1.1 |
Elimina una ruta |
ip route replace 192.168.1.0/24 dev em1 |
Reemplaza o añade una ruta |
ip route get 8.8.8.8 |
Muestra qué ruta se usa para llegar a una IP |
ip neigh| Comando | Función |
|---|---|
ip neigh |
Muestra la tabla ARP (vecinos) |
ip neigh show dev em1 |
Muestra tabla ARP de em1 |
ip maddr| Comando | Función |
|---|---|
ip maddr |
Muestra info multicast de todos los dispositivos |
ip maddr show dev em1 |
Muestra info multicast de em1 |
| Comando moderno | Comando clásico equivalente |
|---|---|
ip addr |
ifconfig |
ip link set em1 up/down |
ifconfig em1 up/down |
ip route |
route -n |
ip neigh |
arp -n |
12. ¿Qué comando activa la interfaz de red eth0?
ip addr set eth0 upip link set eth0 upip route add eth0 upip neigh set eth0 active13. ¿Qué comando añade la dirección IP 10.0.0.5/24 a la interfaz eth0?
ip route add 10.0.0.5/24 dev eth0ip link add 10.0.0.5/24 dev eth0ip addr add 10.0.0.5/24 dev eth0ip set addr 10.0.0.5/24 eth014. ¿Qué objeto del comando ip gestiona la tabla ARP?
ip routeip linkip neighip maddr15. ¿Qué comando añade una ruta por defecto via el gateway 192.168.1.1 usando la interfaz em1?
ip route add default via 192.168.1.1 dev em1ip link add default gw 192.168.1.1 dev em1ip addr add default 192.168.1.1 dev em1ip neigh add default 192.168.1.1 dev em1| Comando | Función |
|---|---|
man comando |
Manual completo del comando |
whatis comando |
Descripción corta del comando |
apropos palabra |
Busca comandos relacionados con una palabra |
comando --help |
Ayuda rápida del comando |
| Comando | Función |
|---|---|
whoami |
Usuario actual |
who |
Usuarios conectados actualmente |
w |
Usuarios conectados con más datos |
last |
Historial de logins y reinicios |
lastb |
Últimos intentos de login fallidos |
lslogins |
Lista usuarios conocidos del sistema |
| Comando | Función |
|---|---|
ls -l |
Listado detallado |
ls -a |
Incluye ficheros ocultos |
ls -R |
Listado recursivo |
pwd |
Directorio actual |
mkdir -p /ruta/dir |
Crea directorio y todos los necesarios |
find |
Busca ficheros en un directorio |
locate |
Busca en base de datos de ficheros |
updatedb |
Actualiza la base de datos de locate |
stat fichero |
Estadísticas del sistema de ficheros |
file fichero |
Muestra el tipo del fichero |
tree |
Lista ficheros en formato árbol |
| Comando | Función |
|---|---|
ifconfig |
Configuración de interfaces (clásico) |
ip |
Herramienta moderna de red (ver Bloque 4) |
ping host |
Envía ICMP para verificar conectividad |
nslookup dominio |
Consulta DNS |
dig dominio |
Consulta DNS detallada |
whois dominio |
Información WHOIS |
nmap |
Escáner de seguridad de red |
nc |
Netcat — conexión TCP/UDP por consola |
ss |
Muestra estadísticas de sockets (sucesor de netstat) |
netstat |
Estadísticas de red (clásico) |
arp |
Muestra/modifica caché MAC/IP |
tcpdump |
Volcado de actividad de red |
bmon |
Monitor de ancho de banda |
iftop |
Monitor de interfaz de red en tiempo real |
| Herramienta | Función |
|---|---|
iptables |
Filtrado de paquetes IP y NAT |
ufw |
Firewall simplificado para iptables (Ubuntu) |
shorewall |
Firewall avanzado para iptables |
Formato: drwxr-xr-x
│└──┴──┴──
│ │ │ └─ Otros
│ │ └──── Grupo
│ └─────── Propietario
└────────── Tipo: d=dir, -=fichero, l=enlace, p=pipe, s=socket, c=char, b=bloque
r = lectura (4)
w = escritura (2)
x = ejecución/acceso a directorio (1)
- = sin permiso (0)
| Editor | Características |
|---|---|
| vi | Clásico UNIX, presente en todo sistema, difícil de aprender |
| vim | Vi Improved, más potente y configurable |
| nano | Sencillo, ayuda visible, ideal para principiantes |
| pico | Similar a nano (el original del que deriva nano) |
| emacs | GNU Emacs, muy potente y extensible |
| jed | Editor para programadores |
| micro | Editor moderno para terminal |
| mcedit | Editor integrado en Midnight Commander |
16. ¿Qué comando muestra una descripción corta de un comando Linux?
man comandoapropos comandowhatis comandohelp comando17. ¿Qué herramienta es el sucesor moderno de netstat para mostrar estadísticas de sockets?
nmapncssiftop18. ¿Qué hace updatedb?
locate para buscar ficheros19. En la notación de permisos Linux, ¿qué significa el carácter l al inicio de lrwxrwxrwx?
1 → c) Vi se inicia siempre en modo comando. Desde este modo se introducen comandos de movimiento, borrado, copia, etc. Para empezar a escribir texto hay que entrar en modo texto con i, a, o, etc.
2 → c) :wq guarda (write) el fichero y sale (quit) de vi. :w solo guarda sin salir. :q! sale sin guardar (forzado). :x también guarda y sale, pero solo escribe si hubo cambios.
3 → c) dd borra la línea completa actual y la almacena en el búfer (operación de cortar). Con ndd se borran n líneas. El contenido del búfer puede pegarse después con p o P.
4 → c) /error busca la cadena "error" hacia el final del fichero en vi. ?error buscaría hacia el principio. Después de la búsqueda, n repite en el mismo sentido y N cambia el sentido.
5 → c) Ctrl+O (o F3) guarda el fichero actual en Nano. Ctrl+X sale (pregunta si guardar si hay cambios). Ctrl+W busca texto. No confundir con Ctrl+S que no funciona en Nano por defecto.
6 → b) El fichero de configuración personal de Nano es ~/.nanorc en el directorio home del usuario. El fichero global es /etc/nanorc pero no se debe editar directamente (se crea el personal en el home).
7 → b) sudo -k (kill) invalida el tiempo de gracia de sudo, haciendo que la próxima vez que se use sudo se pida la contraseña aunque no hayan pasado los 5 minutos. sudo -v (validate) extiende el tiempo 5 minutos más.
8 → b) visudo es la herramienta recomendada porque bloquea el fichero /etc/sudoers mientras se edita (evitando ediciones simultáneas) y verifica la sintaxis al cerrar antes de guardar los cambios, evitando ficheros corruptos.
9 → c) La regla checo ALL = /usr/bin/passwd *, !/usr/bin/passwd root permite cambiar la contraseña de cualquier usuario (* = cualquier argumento) excepto root (! = negación de /usr/bin/passwd root).
10 → d) Cmnd_Alias agrupa comandos bajo un nombre de alias. User_Alias agrupa usuarios, Host_Alias agrupa equipos y Runas_Alias agrupa los usuarios "como quienes" se ejecutarán los comandos.
11 → c) visudo -c (check) comprueba la sintaxis del fichero /etc/sudoers sin abrirlo para editar. Si está correcto muestra "sudoers file parsed OK". La opción -s activa el modo estricto adicional al editar.
12 → b) ip link set eth0 up activa la interfaz eth0. El objeto link gestiona el estado de las interfaces. ip addr gestiona direcciones IP, ip route gestiona rutas e ip neigh gestiona la tabla ARP.
13 → c) ip addr add 10.0.0.5/24 dev eth0 añade la dirección IP 10.0.0.5 con máscara /24 a la interfaz eth0. El objeto addr gestiona las direcciones. No confundir con ip route add (añade rutas) ni ip link (gestiona estado).
14 → c) ip neigh gestiona la tabla de vecinos, también conocida como tabla ARP para IPv4. Muestra las asociaciones IP → MAC de los equipos de la red local. Es el equivalente moderno del comando clásico arp.
15 → a) ip route add default via 192.168.1.1 dev em1 añade la ruta por defecto (para todo el tráfico sin otra ruta más específica) indicando el gateway 192.168.1.1 accesible por la interfaz em1.
16 → c) whatis comando muestra una descripción corta (una línea) del comando consultando las páginas del manual. man muestra el manual completo. apropos busca comandos relacionados con una palabra clave.
17 → c) ss (socket statistics) es el sucesor moderno de netstat para mostrar estadísticas de sockets, conexiones activas, puertos en escucha, etc. Es más rápido que netstat porque usa las APIs del kernel directamente.
18 → b) updatedb actualiza la base de datos de ficheros que usa el comando locate para buscar. Sin actualizar esta base de datos, locate solo encontrará ficheros indexados en la última actualización.
19 → b) El carácter l al inicio de los permisos indica un enlace simbólico (symbolic link). Los tipos de fichero en Linux son: - (fichero regular), d (directorio), l (enlace simbólico), c (dispositivo de carácter), b (dispositivo de bloque), p (pipe/FIFO), s (socket).
| Concepto | Valor / Respuesta clave |
|---|---|
| vi: creado por | Bill Joy, 1976 |
| vi: versión mejorada | Vim (Vi IMproved) |
| vi: modo al iniciar | Modo comando |
| vi: entrar en modo texto | i, a, I, A, o, O |
| vi: volver a modo comando | <ESC> |
| vi: guardar y salir | :wq |
| vi: salir sin guardar | :q! |
| vi: borrar línea | dd |
| vi: copiar línea | yy |
| vi: pegar | p (después) / P (antes) |
| vi: deshacer | u |
| vi: buscar hacia adelante | /texto |
| vi: buscar hacia atrás | ?texto |
| vi: reemplazar en todo el fichero | :%s/p1/p2/g |
| vi: fichero de configuración | .exrc (vi) / .vimrc (vim) |
| Nano: guardar | Ctrl+O |
| Nano: salir | Ctrl+X |
| Nano: buscar | Ctrl+W |
| Nano: cortar línea | Ctrl+K |
| Nano: pegar | Ctrl+U |
| Nano: configuración personal | ~/.nanorc |
| sudo significa | Super User DO |
| sudo: fichero de permisos | /etc/sudoers |
| sudo: editar sudoers de forma segura | visudo |
| sudo: listar comandos permitidos | sudo -l |
| sudo: extender tiempo de gracia | sudo -v |
| sudo: invalidar tiempo de gracia | sudo -k |
| sudo: tiempo de gracia por defecto | 5 minutos |
| visudo: verificar sintaxis | visudo -c |
| sudoers: alias de usuarios | User_Alias |
| sudoers: alias de comandos | Cmnd_Alias |
| sudoers: alias de equipos | Host_Alias |
| sudoers: alias "como quién" | Runas_Alias |
| sudoers: sin contraseña | NOPASSWD: tag |
| sudoers: impedir escape a shell | NOEXEC: tag |
| ip addr | Muestra/gestiona direcciones IP |
| ip link | Muestra/gestiona interfaces |
| ip route | Muestra/gestiona rutas |
| ip neigh | Tabla ARP (vecinos) |
| ip link set eth0 up/down | Activar/desactivar interfaz |
| ip addr add x.x.x.x/n dev eth0 | Añadir IP a interfaz |
| ip route add default via x.x.x.x | Añadir ruta por defecto |
| ip vs ifconfig | ip es el sucesor moderno de ifconfig |
| ip vs route | ip route sustituye al comando route |
| ip vs arp | ip neigh sustituye al comando arp |
| ss | Sucesor moderno de netstat |
| whatis | Descripción corta de un comando |
| apropos | Busca comandos relacionados con una palabra |
| updatedb | Actualiza base de datos de locate |
Tipo fichero l |
Enlace simbólico |
Tipo fichero d |
Directorio |
Tipo fichero - |
Fichero regular |