Primeros Pasos en Terminal
Comandos Esenciales para Navegación y Gestión de Archivos
📚 Objetivos de Aprendizaje
Después de completar este tema, serás capaz de:
- Navegar eficientemente el sistema de archivos
- Crear, copiar, mover y eliminar archivos/carpetas
- Ver y editar contenido de archivos
- Entender la estructura de directorios en Linux
- Gestionar permisos desde terminal
- Usar comandos esenciales diariamente
🎯 Por Qué Este Tema Es Critical
La terminal es el hogar del administrador Linux. No hay GUI (interfaz gráfica) en servidores. Estos comandos los usarás 100 veces por día.
Tiempo estimado: 90-120 minutos de lectura + laboratorio práctico
💡 Ejemplos Prácticos Multi-SO
Linux (Ubuntu - Terminal nativa)
BASH
# Terminal se abre automáticamente en home del usuario
# O abre presionando Ctrl+Alt+T en escritorio Ubuntu
1$ pwd
/home/diego
$ uname -a
Linux abacom-dev 5.15.0-89-generic #1234-Ubuntu SMP x86_64 GNU/Linux
$ whoami
diego
# Ver estructura de directorios
$ ls -la ~
drwxr-xr-x diego diego /home/diego
drwxr-xr-x diego diego .cache
drwxr-xr-x diego diego .config
drwxr-xr-x diego diego Documents- 1
- pwd muestra el directorio actual donde abriste la terminal
macOS (Terminal / iTerm2)
BASH
# Terminal: Abre presionando Cmd+Space y escribes "Terminal"
# O iTerm2: brew install iterm2
$ pwd
/Users/diego
$ uname -a
Darwin MacBook-Air.local 23.2.0 Darwin Kernel Version 23.2.0 x86_64
$ whoami
diego
# Estructura de directorios (diferente a Linux):
$ ls -la ~
drwxr-xr-x diego staff /Users/diego
drwxr-xr-x diego staff .cache
drwxr-xr-x diego staff .config
drwxr-xr-x diego staff Documents
drwxr-xr-x diego staff Downloads
# Nota: macOS usa /Users en lugar de /homeWindows (PowerShell / Terminal)
POWERSHELL
# Abrir PowerShell:
# - Presionar Win+X y seleccionar "Windows PowerShell"
# - O: Win+R, escribir "powershell"
PS> # Nota: Prompt es PS> en lugar de $
# Ver directorio actual
PS> Get-Location
Path
----
C:\Users\diego
# Equivalente a pwd:
PS> pwd # También funciona (alias de Get-Location)
C:\Users\diego
# Verificar SO
PS> $PSVersionTable.OS
Microsoft Windows 11 Pro 22H2
PS> whoami
DESKTOP-LAPTOP\diego
# Ver estructura de directorios
PS> dir ~ # Equivalente a ls ~
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 1/29/2024 10:00 AM AppData
d----- 1/29/2024 10:00 AM Desktop
d----- 1/29/2024 10:00 AM Documents
d----- 1/29/2024 10:00 AM Downloads
# Nota: Windows usa C:\Users en lugar de /homeComparación rápida: | Aspecto | Linux | macOS | Windows | |——–|——-|——-|———| | Terminal | bash/zsh | bash/zsh (2021+) | PowerShell | | Comando pwd | pwd | pwd | Get-Location | | Home | /home/usuario | /Users/usuario | C:\Users\usuario | | Separador rutas | / | / | \ | | Prompt | $ | $ | PS> |
Linux (Estructura Unix estándar)
BASH
# Estructura en Linux:
$ cd /
$ ls -1
bin/ → Comandos esenciales
boot/ → Archivos de arranque
dev/ → Dispositivos
etc/ → Configuraciones
home/ → Carpetas de usuarios
lib/ → Librerías del sistema
opt/ → Software opcional
root/ → Home del root
srv/ → Datos de servicios
tmp/ → Archivos temporales
usr/ → Programas de usuario
var/ → Datos variables (logs, etc)
# Navegar
$ cd /var/log
$ pwd
/var/log
$ ls -lh
-rw-r--r-- 1 syslog syslog 250K Jan 29 10:30 auth.log
-rw-r--r-- 1 syslog syslog 500K Jan 29 10:31 syslog
-rw-r--r-- 1 root root 1.2M Jan 29 10:30 kernel.logmacOS (Estructura Unix con extensiones Apple)
BASH
# Estructura en macOS (también Unix, pero con cambios):
$ cd /
$ ls -1
Applications/ → Apps instaladas
Library/ → Librerías del sistema (¡no es /lib!)
System/ → Sistema macOS
Users/ → Carpetas de usuarios (¡no es /home!)
Volumes/ → Discos conectados
bin/ → Comandos esenciales (igual que Linux)
etc/ → Configuraciones
tmp/ → Archivos temporales
usr/ → Programas de usuario
# Navegar a logs (diferente ubicación que Linux)
$ cd /var/log
$ pwd
/var/log
$ ls -lh
-rw-r--r-- 1 _syslogd staff 200K Jan 29 10:30 system.log
-rw-r--r-- 1 root wheel 150K Jan 29 10:31 kernel.log
# Carpeta especial de macOS:
$ cd ~/Library/Application\ Support
# Muchas apps guardan config aquíWindows (Estructura de directorios Windows)
POWERSHELL
# Estructura en Windows (TOTALMENTE diferente a Unix):
PS> cd C:\
PS> dir | Select-Object Name
Name
----
ProgramFiles → Apps instaladas (64-bit)
ProgramFiles (x86) → Apps instaladas (32-bit)
Program Data → Datos de aplicaciones
Windows → Sistema operativo
System32 → Herramientas del sistema
Users → Carpetas de usuarios
Temp → Archivos temporales
# Navegar a carpeta de usuario
PS> cd $env:USERPROFILE
PS> Get-Location
C:\Users\diego
# Ver estructura
PS> dir | Select-Object Name
AppData → Datos de apps (oculto)
Desktop → Escritorio
Documents → Documentos
Downloads → Descargas
Pictures → Imágenes
# Crear carpeta de proyecto
PS> mkdir projects
PS> cd projects
PS> pwd
C:\Users\diego\projectsComparación de rutas comunes: | Tarea | Linux | macOS | Windows | |——|——-|——-|———| | Ver logs | /var/log | /var/log o ~/Library/Logs | %APPDATA%\Logs | | Home | /home/usuario | /Users/usuario | C:\Users\usuario | | Temp | /tmp | /tmp o /var/tmp | C:\Temp o %TEMP% | | Apps | /opt o /usr/bin | /Applications | C:\Program Files |
Linux (Bash script)
BASH
#!/bin/bash
# Script para verificar salud del servidor en Abacom
echo "=== VERIFICACIÓN DE SERVIDOR LINUX ==="
echo "Hostname: $(hostname)"
echo "Kernel: $(uname -r)"
echo "Usuarios conectados: $(who | wc -l)"
echo "Uso de CPU: $(top -bn1 | grep "Cpu(s)" | awk '{print $2}')"
echo "Uso de RAM: $(free -h | grep Mem | awk '{print $3 "/" $2}')"
echo "Espacio disco: $(df -h / | tail -1 | awk '{print $5}')"
# Ejecutar
$ chmod +x check_server.sh
$ ./check_server.sh
=== VERIFICACIÓN DE SERVIDOR LINUX ===
Hostname: abacom-server-01
Kernel: 5.15.0-89-generic
Usuarios conectados: 2
Uso de CPU: 15%
Uso de RAM: 4.2G / 16G
Espacio disco: 35%macOS (Bash script - casi igual a Linux)
BASH
#!/bin/bash
# Script casi idéntico para macOS
echo "=== VERIFICACIÓN DE SERVIDOR macOS ==="
echo "Hostname: $(hostname)"
echo "Kernel: $(uname -r)"
echo "Usuarios conectados: $(who | wc -l)"
# Nota: Comandos como top son diferentes en macOS
echo "Uso de CPU: $(top -l 1 | grep "CPU usage" | head -1)"
echo "Uso de RAM: $(vm_stat | grep 'Pages free' | awk '{print $3}')"
echo "Espacio disco: $(df -h / | tail -1 | awk '{print $5}')"
$ chmod +x check_server.sh
$ ./check_server.sh
=== VERIFICACIÓN DE SERVIDOR macOS ===
Hostname: MacBook-Air.local
Kernel: 23.2.0
Usuarios conectados: 1
Uso de CPU: CPU usage: 25%
Uso de RAM: 2024384
Espacio disco: 45%Windows (PowerShell script)
POWERSHELL
# check_server.ps1
# Script equivalente para Windows
Write-Host "=== VERIFICACIÓN DE SERVIDOR WINDOWS ===" -ForegroundColor Cyan
$ComputerName = $env:COMPUTERNAME
$OS = (Get-WmiObject -Class Win32_OperatingSystem).Caption
$Uptime = (Get-Date) - (Get-CimInstance Win32_OperatingSystem).LastBootUpTime
$CPUUsage = (Get-WmiObject win32_processor).LoadPercentage
$RAM = Get-WmiObject Win32_ComputerSystem
$RAMUsed = $RAM.TotalPhysicalMemory - (Get-WmiObject Win32_OperatingSystem).FreePhysicalMemory
$DiskUsage = (Get-PSDrive C).Used / (Get-PSDrive C).Total * 100
Write-Host "Nombre: $ComputerName"
Write-Host "SO: $OS"
Write-Host "Uptime: $($Uptime.Days) días, $($Uptime.Hours) horas"
Write-Host "Uso de CPU: $CPUUsage%"
Write-Host "Uso de RAM: $([math]::Round($RAMUsed/1GB)) GB"
Write-Host "Uso de disco: $([math]::Round($DiskUsage))%"
# Ejecutar
PS> .\check_server.ps1
=== VERIFICACIÓN DE SERVIDOR WINDOWS ===
Nombre: ABACOM-PC
SO: Microsoft Windows Server 2022
Uptime: 30 días, 5 horas
Uso de CPU: 18%
Uso de RAM: 8 GB
Uso de disco: 65%Conclusión: Portabilidad de scripts
- ✅ Linux ↔︎ macOS: Scripts Bash son 90% compatibles
- ⚠️ Linux ↔︎ Windows: Requieren reescritura (comandos diferentes)
- Solución: Usar Python, Node.js, Go (multiplataforma)
1. Estructura de Directorios en Linux
1.1 Visualizar el Sistema de Archivos
/
├── bin/ → Comandos binarios esenciales (/usr/bin para extra)
├── sbin/ → Comandos para root (/usr/sbin para extra)
├── etc/ → Archivos de configuración
├── home/ → Directorios de usuarios
│ ├── diego/
│ ├── carlos/
│ └── maria/
├── root/ → Home del usuario root
├── var/ → Datos variables (logs, caché)
│ ├── log/ → Logs del sistema
│ ├── www/ → Sitios web
│ └── cache/
├── tmp/ → Archivos temporales (se limpian al reboot)
├── opt/ → Software opcional
├── srv/ → Datos de servicios
├── lib/ → Librerías del sistema
├── usr/ → Programas de usuario
│ ├── bin/
│ ├── sbin/
│ └── local/ → Software compilado localmente
└── boot/ → Archivos de arranque
Ruta absoluta vs relativa:
BASH
# **Ruta absoluta: comienza con /**
/home/diego/documentos/proyecto.txt
# **Ruta relativa: desde carpeta actual**
documentos/proyecto.txt
# **Especiales**:
~ → Home del usuario actual
. → Carpeta actual
.. → Carpeta padre
- → Último directorio visitado3. Crear y Eliminar Directorios
3.1 mkdir - Crear Carpetas
BASH
# **Crear una carpeta**
mkdir miprojecto
# **Crear múltiples carpetas**
mkdir carpeta1 carpeta2 carpeta3
# **Crear carpeta anidada (necesita -p)**
mkdir -p /home/diego/proyectos/2024/enero
# -p → Crea las carpetas padre si no existen
# **Crear con permisos específicos**
mkdir -m 700 carpeta_privada
# Accesible solo por dueño3.2 rmdir - Eliminar Carpetas Vacías
BASH
# **Eliminar carpeta VACÍA**
rmdir carpeta_vacia
# **Eliminar múltiples carpetas vacías**
rmdir carpeta1 carpeta2 carpeta3
# **Eliminar estructura anidada (si todas están vacías)**
rmdir -p /home/diego/proyectos/2024/enero
# Elimina enero, 2024, proyectos (si quedan vacías)4. Copiar, Mover, Renombrar Archivos
4.1 cp - Copiar Archivos
BASH
# **Copiar un archivo**
cp archivo_original.txt archivo_copia.txt
# **Copiar a otra carpeta (mantener nombre)**
cp archivo.txt /home/diego/backup/
# **Copiar a otra carpeta con nuevo nombre**
cp archivo.txt /home/diego/backup/archivo_respaldo.txt
# **Copiar carpeta y contenido (recursivo)**
cp -r carpeta_original/ carpeta_copia/
# **Opciones útiles**:
# -i → Preguntar antes de sobrescribir
# -v → Mostrar qué copia (verbose)
# -p → Preservar permisos y fecha
# **Ejemplo completo**
cp -rpv /home/diego/proyecto /backup/proyecto_respaldo
# Copia carpeta, preserva permisos, muestra progreso4.2 mv - Mover y Renombrar
BASH
# **Renombrar archivo**
mv archivo_viejo.txt archivo_nuevo.txt
# **Mover archivo a otra carpeta**
mv archivo.txt /home/diego/documentos/
# **Mover y renombrar al mismo tiempo**
mv archivo.txt /home/diego/documentos/archivo_movido.txt
# **Mover carpeta entera**
mv carpeta_origen/ /nueva/ubicacion/
# **Opciones**:
# -i → Preguntar antes de sobrescribir
# -v → Mostrar qué mueve
# **Ejemplo: Mover varias cosas**
mv archivo1.txt archivo2.txt carpeta/ documentos/
# Mueve tres cosas a documentos/Diferencia mv vs cp:
cp archivo.txt copia.txt
# archivo.txt sigue existiendo
# copia.txt es nueva
mv archivo.txt renombrado.txt
# archivo.txt desaparece
# renombrado.txt existe (mismos datos)
5. Ver Contenido de Archivos
5.1 cat - Mostrar Contenido Completo
BASH
# **Ver archivo pequeño**
cat archivo.txt
# **Salida**:
# Contenido del archivo
# en múltiples líneas
# **Ver archivo y enumerar líneas**
cat -n archivo.txt
# **Salida**:
# 1 Primera línea
# 2 Segunda línea
# 3 Tercera línea
# **Concatenar múltiples archivos**
cat archivo1.txt archivo2.txt
# **Ver contenido con saltos visibles**
cat -A archivo.txt
# Muestra saltos de línea como $5.2 less - Ver Archivo Grande Interactivamente
BASH
# **Ver archivo página por página (mejor que cat)**
less archivo_grande.log
# **Controles**:
# Espacio o Page Down → Siguiente página
# b o Page Up → Página anterior
# G → Ir al final
# g → Ir al inicio
# /patrón → Buscar texto
# n → Siguiente resultado
# N → Resultado anterior
# q → Salir
# **Ejemplo: Ver log del sistema**
less /var/log/syslog
# Muy útil para archivos enormes5.3 head y tail - Ver Inicio y Final
BASH
# **Ver primeras 10 líneas**
head archivo.txt
# **Ver primeras 20 líneas**
head -20 archivo.txt
# **Ver últimas 10 líneas (muy común para logs)**
tail archivo.txt
# **Ver últimas 20 líneas**
tail -20 archivo.txt
# **Ver últimas líneas conforme se agregan (monitoreo)**
tail -f /var/log/syslog
# -f → follow (sigue actualizaciones)
# Presiona Ctrl+C para salir
# **Ver linea 100 en adelante**
tail -n +100 archivo.txt6. Crear y Editar Archivos
6.1 touch - Crear Archivo Vacío
BASH
# **Crear archivo vacío**
touch archivo_nuevo.txt
# **Crear múltiples archivos**
touch archivo1.txt archivo2.txt archivo3.txt
# **Actualizar fecha de acceso de archivo existente**
touch archivo_existente.txt
# Cambia la fecha de modificación a ahora6.2 echo - Escribir Texto
BASH
# **Mostrar texto en terminal**
echo "Hola Mundo"
# **Salida**:
# Hola Mundo
# **Crear archivo con contenido usando redirección**
echo "Primera línea" > archivo.txt
# **Agregar línea a archivo existente**
echo "Segunda línea" >> archivo.txt
# **Ver contenido**
cat archivo.txt
# Primera línea
# Segunda línea
# **Usar variables**
echo "Mi usuario es: $USER"
# Mi usuario es: diego
# **Múltiples líneas**
cat > archivo.txt << EOF
Línea 1
Línea 2
Línea 3
EOF6.3 Editores de Texto
Nano (más fácil):
BASH
# **Abrir o crear archivo**
nano archivo.txt
# **Controles**:
# Escribir normalmente
# Ctrl+O → Guardar
# Ctrl+X → Salir
# Ctrl+W → Buscar
# Ctrl+K → Cortar línea
# Ctrl+U → PegarVim/Vi (poderoso pero complejo):
BASH
# **Abrir archivo**
vim archivo.txt
# **Modos**:
# i → Insert (escribir)
# Esc → Normal (comandos)
# En normal: :wq (guardar y salir)Ver Anexo B: Editores Vi y Nvim para detalles completos.
7. Buscar Archivos y Contenido
7.1 find - Buscar Archivos por Nombre
BASH
# **Buscar archivo por nombre**
find . -name "archivo.txt"
# **Buscar en ubicación específica**
find /home -name "*.txt"
# **Buscar ignorando mayúsculas**
find . -iname "ARCHIVO.txt"
# **Buscar archivos (no carpetas)**
find . -type f -name "*.txt"
# **Buscar solo carpetas**
find . -type d -name "carpeta*"
# **Buscar archivos modificados en últimos 7 días**
find . -mtime -7
# **Buscar archivos mayores a 100MB**
find . -size +100M
# **Buscar archivos vacíos**
find . -empty
# **Ejecutar comando en resultados**
find . -name "*.txt" -exec rm {} \;
# Borra todos los .txt encontradosVer Anexo E: Búsqueda y Procesamiento para detalles avanzados.
7.2 grep - Buscar Texto en Archivos
BASH
# **Buscar texto en archivo**
grep "error" archivo.log
# **Salida**: Solo líneas que contienen "error"
# **Buscar ignorando mayúsculas**
grep -i "ERROR" archivo.log
# **Buscar en múltiples archivos**
grep "error" /var/log/*.log
# **Buscar recursivamente en carpeta**
grep -r "función_importante" /home/diego/proyecto/
# **Contar coincidencias**
grep -c "error" archivo.log
# **Ver líneas alrededor del resultado**
grep -B2 -A2 "error" archivo.log
# -B2 → 2 líneas antes
# -A2 → 2 líneas después8. Permisos desde Terminal
8.1 Ver Permisos Detallados
BASH
# **Ver permisos de archivos**
ls -l
# **Salida**:
# -rw-r--r-- 1 diego diego 1024 Jan 29 archivo.txt
# ^^^^^^^^
# drwxr-xr-x
# └─ archivo
# └─ permisos
# **Decodificar: rwxrwxrwx**
# Usuario(rwx) Grupo(r-x) Otros(r--)8.2 Cambiar Permisos - chmod
BASH
# **Hacer archivo ejecutable**
chmod +x script.sh
# **Remover permisos de escritura**
chmod -w archivo.txt
# **Establecer permisos exactos**
chmod 755 script.sh
# 755 = rwxr-xr-x (ejecutable para todos, editable solo por dueño)
chmod 644 archivo.txt
# 644 = rw-r--r-- (editable solo por dueño)
chmod 600 archivo_privado
# 600 = rw------- (solo dueño puede acceder)8.3 Cambiar Propietario - chown
BASH
# **Cambiar propietario**
sudo chown diego archivo.txt
# **Cambiar propietario y grupo**
sudo chown diego:administradores archivo.txt
# **Cambiar recursivamente (carpeta y contenido)**
sudo chown -R diego:administradores /home/diego/proyecto/9. Información Útil
9.1 whoami, id, groups
BASH
# **¿Quién soy?**
whoami
# diego
# **Información detallada del usuario**
id
# uid=1000(diego) gid=1000(diego) groups=1000(diego),4(adm),24(cdrom)
# **Grupos del usuario**
groups
# diego adm cdrom sudo
# **Información de otro usuario**
id carlos9.2 du - Uso de Disco
BASH
# **Tamaño de carpeta actual y subcarpetas**
du -sh *
# **Salida**:
# 2.5G carpeta1/
# 1.2G carpeta2/
# 512M archivo.iso
# **Ver solo carpetas (no archivos)**
du -sh */
# **Ver total de carpeta**
du -sh .
# 5.2G .9.3 df - Espacio Disponible en Disco
BASH
# **Ver particiones y espacio disponible**
df -h
# **Salida**:
# Filesystem Size Used Avail Use% Mounted on
# /dev/sda1 20G 15G 5G 75% /
# /dev/sda2 50G 40G 10G 80% /home
# **¿Está lleno el disco?**
# Use% > 90% → Problemas10. Laboratorio Práctico
10.1 Crear Estructura de Proyecto
Crea estructura para proyecto de desarrollo:
BASH
# Crear carpeta principal
mkdir ~/proyectos
# Crear subcarpetas
mkdir -p ~/proyectos/webapp/{src,config,tests,docs}
mkdir -p ~/proyectos/webapp/src/{frontend,backend}
# Ver estructura
tree ~/proyectos/webapp10.2 Crear Archivos de Configuración
BASH
# Crear archivo README
cat > ~/proyectos/webapp/README.md << EOF
# Webapp Project
Descripción del proyecto
EOF
# Crear archivo de configuración
cat > ~/proyectos/webapp/config/settings.sh << EOF
#!/bin/bash
# Configuración de webapp
DB_HOST=localhost
DB_USER=admin
DB_PASS=secret123
EOF
# Hacer script ejecutable
chmod +x ~/proyectos/webapp/config/settings.sh
# Verificar
ls -la ~/proyectos/webapp/config/10.3 Buscar y Reemplazar Contenido
BASH
# Ver archivos con palabra clave
grep -r "localhost" ~/proyectos/webapp/
# Encontrar scripts ejecutables
find ~/proyectos/webapp -type f -executable
# Ver tamaño total del proyecto
du -sh ~/proyectos/webapp/11. Ejercicios Prácticos
Ejercicio 2: Crear estructura
Crea:
~/documentos/
├── trabajo/
│ ├── reportes/
│ └── propuestas/
└── personal/
├── finanzas/
└── salud/
Solución:
BASH
mkdir -p ~/documentos/{trabajo/{reportes,propuestas},personal/{finanzas,salud}}
tree ~/documentos/Ejercicio 3: Buscar archivos
Encuentra todos los .txt en tu home
Busca líneas con “error” en /var/log/syslog
Cuenta cuántas veces aparece “error”
Solución:
BASH
find ~ -type f -name "*.txt"
grep "error" /var/log/syslog
grep -c "error" /var/log/syslog12. Quiz de Verificación
¿Cuál es la diferencia entre cd** y pwd?**
- Ninguna
- cd cambia directorio; pwd muestra donde estás ✅
- pwd es más rápido
- cd solo funciona en root
¿Qué hace ls -lh?
- Lista archivos
- Lista con detalles y tamaño legible ✅
- Lista y busca
- Lista ocultos
¿Cuál es la diferencia entre >** y >>?**
- No hay diferencia
sobrescribe; >> agrega ✅
es más rápido
solo para texto
¿Qué comando busca archivos?
- grep (busca contenido)
- find (busca archivos) ✅
- locate
- search
¿Qué hace chmod 755 script.sh?
- Hacer script ejecutable con rwxr-xr-x ✅
- Proteger archivo
- Cambiar propietario
- Crear backup
13. Resumen
Lo Aprendido
✅ Navegar sistema de archivos (cd, pwd, ls) ✅ Crear y eliminar carpetas (mkdir, rmdir) ✅ Copiar, mover, renombrar (cp, mv) ✅ Ver contenido (cat, less, head, tail) ✅ Crear y editar archivos (echo, touch, nano) ✅ Buscar archivos y contenido (find, grep) ✅ Entender y cambiar permisos (ls -l, chmod, chown)
Siguiente
¡Felicidades! Completaste Unidad 2: Instalación y Configuración
Próximas unidades:
- Unidad 3: Comandos Avanzados
- Unidad 4: Usuarios y Permisos (profundidad)
- Unidad 5: Procesos y Servicios
📚 Referencias
(L. Foundation 2019) (F. S. Foundation 2024b) (F. S. Foundation 2024a) (Linux.com 2024) (Project 2024)