Lo que Aprenderas en este Tutorial
- Navegacion y verificacion de directorios
- Operacion de archivos y directorios
- Visualizacion de contenido de archivos
- Busqueda basica de archivos
Historia de Linux y UNIX
Por que Aprender Linux
Linux funciona en aproximadamente el 96% de los servidores del mundo, y se usa en todas partes, desde smartphones (Android) hasta supercomputadoras y dispositivos IoT. Para los ingenieros, la operacion de la linea de comandos de Linux es una habilidad esencial.
El Nacimiento de UNIX
Las raices de los comandos actuales de Linux se remontan a 1969. UNIX fue desarrollado por Ken Thompson y Dennis Ritchie en los Laboratorios Bell.
“UNIX es un sistema operativo creado por programadores para programadores” — Brian Kernighan
El Nacimiento de Linux
En 1991, el estudiante universitario finlandes Linus Torvalds desarrollo un kernel de sistema operativo gratuito compatible con UNIX. Su famosa publicacion:
“Hola a todos los que usan minix. Estoy haciendo un sistema operativo (gratuito) para maquinas AT compatibles 386(486)” — Linus Torvalds, 1991
Filosofia UNIX
La filosofia de diseno de UNIX ha tenido una gran influencia en el desarrollo de software moderno:
- Combinar pequenos programas: Crear programas que hagan una cosa bien y combinarlos
- Flujos de texto: Usar texto para la comunicacion entre programas
- Prototipado temprano: Primero crear algo que funcione, luego mejorar
“Esta es la filosofia de UNIX. Escribe programas que hagan una cosa bien” — Doug McIlroy
Terminal y Shell
Que es un Terminal
Un terminal (emulador de terminal) es una aplicacion que proporciona una interfaz de linea de comandos.
- macOS: Terminal.app, iTerm2
- Windows: Windows Terminal, PowerShell
- Linux: GNOME Terminal, Konsole
Que es un Shell
Un shell es un programa que interpreta los comandos del usuario y los comunica al sistema operativo.
| Shell | Descripcion |
|---|---|
| bash | El mas comun. Por defecto en Linux/macOS (antiguo macOS) |
| zsh | Por defecto desde macOS Catalina. Compatible con bash |
| fish | Rico en funciones amigables para el usuario |
| sh | Shell estandar POSIX. Alta portabilidad |
# Verificar el shell que estas usando
echo $SHELL
Operaciones Basicas de Directorios
pwd - Verificar tu Ubicacion Actual
pwd (Print Working Directory) te permite verificar el directorio donde te encuentras.
$ pwd
/home/username
Dato Curioso: En UNIX, los directorios tambien se tratan como “archivos”. Un directorio es “un archivo especial que contiene enlaces a otros archivos”.
ls - Listar Archivos
ls muestra una lista de archivos en el directorio.
# Lista basica
$ ls
# Mostrar detalles (permisos, tamano, etc.)
$ ls -l
# Mostrar archivos ocultos tambien
$ ls -a
# Detalles + archivos ocultos
$ ls -la
# Mostrar tamanos legibles por humanos
$ ls -lh
Leer la Salida de ls -l
-rw-r--r-- 1 user group 4096 Jan 1 12:00 file.txt
| Parte | Significado |
|---|---|
- | Tipo de archivo (-:normal, d:directorio, l:enlace) |
rw-r--r-- | Permisos (owner/group/others) |
1 | Numero de enlaces duros |
user | Propietario |
group | Grupo propietario |
4096 | Tamano del archivo |
Jan 1 12:00 | Fecha de modificacion |
Documentacion Oficial: GNU Coreutils - ls
cd - Navegar Directorios
# Mover a un directorio especifico
$ cd /var/log
# Volver al directorio home
$ cd ~
$ cd
# Mover al directorio padre
$ cd ..
# Volver al directorio anterior
$ cd -
Tipos de Rutas
| Tipo | Descripcion | Ejemplo |
|---|---|---|
| Ruta absoluta | Ruta completa desde la raiz (/) | /home/user/docs |
| Ruta relativa | Ruta relativa desde la ubicacion actual | ./docs o ../other |
Notaciones especiales de directorio:
.- Directorio actual..- Directorio padre~- Directorio home/- Directorio raiz
Crear y Eliminar Archivos y Directorios
mkdir - Crear Directorio
# Crear directorio
$ mkdir myproject
# Crear jerarquia profunda de una vez (-p: parents)
$ mkdir -p myproject/src/components
# Establecer permisos al crear
$ mkdir -m 755 secure_dir
Mejor Practica: Siempre usa la opcion
-pal crear multiples niveles. No da error aunque el directorio ya exista.
touch - Crear Archivo
touch es originalmente un comando para “actualizar la marca de tiempo de un archivo”, pero crea un archivo vacio si no existe.
# Crear archivo vacio
$ touch index.html
# Crear multiples archivos a la vez
$ touch style.css script.js
# Establecer marca de tiempo a fecha/hora especifica
$ touch -t 202501011200 file.txt
Documentacion Oficial: GNU Coreutils - touch
rm - Eliminar Archivos y Directorios
# Eliminar archivo
$ rm file.txt
# Eliminar directorio (incluyendo contenido)
$ rm -r mydir
# Eliminar sin confirmacion (precaucion!)
$ rm -rf mydir
# Mostrar confirmacion antes de eliminar
$ rm -i file.txt
Advertencia:
rm -rfelimina inmediatamente sin confirmacion. No va a la papelera. Ten especial cuidado al usarlo cerca de/o con expansion de variables (rm -rf $DIR/).
Mejores Practicas para Eliminacion Segura
# 1. Primero verificar con ls
ls /path/to/delete
# 2. Eliminar con confirmacion usando opcion -i
rm -ri /path/to/delete
# 3. Configurar alias (agregar a ~/.bashrc)
alias rm='rm -i'
Copiar y Mover Archivos
cp - Copiar
# Copiar archivo
$ cp original.txt copy.txt
# Copiar directorio (-r: recursive)
$ cp -r mydir mydir_backup
# Copiar multiples archivos a directorio
$ cp file1.txt file2.txt destination/
# Preservar marca de tiempo y permisos
$ cp -p original.txt copy.txt
# Confirmacion de sobrescritura
$ cp -i source.txt dest.txt
Documentacion Oficial: GNU Coreutils - cp
mv - Mover y Renombrar
mv se usa tanto para mover como para renombrar archivos.
# Mover archivo
$ mv file.txt /path/to/destination/
# Renombrar archivo
$ mv oldname.txt newname.txt
# Mover directorio
$ mv mydir /path/to/destination/
# Confirmacion de sobrescritura
$ mv -i source.txt dest.txt
Ver Contenido de Archivos
| Comando | Descripcion | Ejemplo de Uso |
|---|---|---|
cat | Mostrar archivo completo | cat file.txt |
head | Mostrar primeras N lineas (por defecto 10) | head -n 20 file.txt |
tail | Mostrar ultimas N lineas | tail -f log.txt |
less | Mostrar con paginador (con scroll) | less file.txt |
more | Paginador antiguo | more file.txt |
Aplicaciones de cat
# Mostrar numeros de linea
$ cat -n file.txt
# Concatenar multiples archivos
$ cat file1.txt file2.txt > combined.txt
# Comprimir lineas vacias
$ cat -s file.txt
Operaciones de less
less te permite explorar archivos interactivamente:
Space/f- Avanzar una paginab- Retroceder una pagina/pattern- Buscar hacia adelante?pattern- Buscar hacia atrasn- Siguiente resultado de busquedaN- Resultado de busqueda anteriorg- Ir al inicio del archivoG- Ir al final del archivoq- Salir
Dato Curioso: El nombre
lessviene de “less is more” (menos es mas). Es una version mejorada del comandomore.
Monitorear Logs con tail -f
# Monitorear log en tiempo real
$ tail -f /var/log/syslog
# Monitorear multiples archivos simultaneamente
$ tail -f file1.log file2.log
# Iniciar monitoreando desde las ultimas 100 lineas
$ tail -n 100 -f app.log
Fundamentos de Permisos (Privilegios)
Leer Permisos
-rwxr-xr--
| Parte | Significado |
|---|---|
- | Tipo de archivo |
rwx | owner (propietario): todos permitidos |
r-x | group (grupo): lectura+ejecucion |
r-- | others (otros): solo lectura |
| Simbolo | Valor | Significado |
|---|---|---|
| r | 4 | lectura (read) |
| w | 2 | escritura (write) |
| x | 1 | ejecucion (execute) |
| - | 0 | sin permiso |
chmod - Cambiar Permisos
# Especificar con numeros (755 = rwxr-xr-x)
$ chmod 755 script.sh
# Especificar con simbolos
$ chmod u+x script.sh # Agregar permiso de ejecucion al propietario
$ chmod g-w file.txt # Quitar permiso de escritura al grupo
$ chmod o=r file.txt # Establecer solo lectura para otros
$ chmod a+r file.txt # Agregar lectura para todos
Documentacion Oficial: GNU Coreutils - chmod
Permisos Comunes
| Permiso | Uso |
|---|---|
| 755 | Scripts ejecutables |
| 644 | Archivos normales |
| 600 | Archivos confidenciales (claves SSH, etc.) |
| 700 | Directorios privados |
Practica: Crear Estructura de Proyecto
Creemos una estructura basica de proyecto web usando los comandos aprendidos.
# Crear directorio del proyecto
mkdir -p mywebsite/{css,js,images}
# Crear archivos basicos
touch mywebsite/index.html
touch mywebsite/css/style.css
touch mywebsite/js/main.js
# Verificar estructura
ls -R mywebsite
# Si tienes el comando tree, muestra mejor
tree mywebsite
Configuracion de Proyecto Practico
# Ejemplo de creacion de proyecto Node.js
mkdir -p my-app/{src/{components,utils,styles},tests,docs}
touch my-app/{package.json,README.md,.gitignore}
touch my-app/src/index.js
# Verificar estructura
tree my-app
# my-app
# ├── README.md
# ├── docs
# ├── package.json
# ├── src
# │ ├── components
# │ ├── index.js
# │ ├── styles
# │ └── utils
# └── tests
Errores Comunes y Solucion de Problemas
Nombres de Archivos con Espacios
# Error: el nombre se divide por el espacio
$ rm my file.txt # Intenta eliminar "my" y "file.txt"
# Correcto: encerrar en comillas
$ rm "my file.txt"
$ rm 'my file.txt'
# O, escapar con barra invertida
$ rm my\ file.txt
Errores de Permisos
# En caso de error Permission denied
$ sudo command # Ejecutar con privilegios de administrador
# Verificar permisos del archivo
$ ls -l file.txt
# Si falta permiso de ejecucion
$ chmod +x script.sh
Archivo No Encontrado
# Buscar archivo
$ find /path -name "filename"
# Buscar por coincidencia parcial
$ find . -name "*.txt"
# Comando locate (usa base de datos, mas rapido)
$ locate filename
Atajos y Consejos Utiles
Atajos del Terminal
| Atajo | Descripcion |
|---|---|
Tab | Autocompletar comandos o rutas |
Ctrl + C | Interrumpir comando en ejecucion |
Ctrl + L | Limpiar pantalla (igual que clear) |
Ctrl + A | Ir al inicio de la linea |
Ctrl + E | Ir al final de la linea |
Ctrl + U | Eliminar a la izquierda del cursor |
Ctrl + K | Eliminar a la derecha del cursor |
Ctrl + R | Buscar en historial de comandos |
Arriba / Abajo | Mostrar historial de comandos |
!! | Re-ejecutar comando anterior |
Combinar Comandos
# Pipe (|): pasar salida de un comando como entrada al siguiente
$ ls -la | grep ".txt"
# Redireccion (>): guardar salida en archivo
$ ls > filelist.txt
# Append (>>): agregar al archivo
$ echo "new line" >> file.txt
# Encadenamiento de comandos
$ mkdir newdir && cd newdir # Ejecutar siguiente solo si tiene exito
$ command1 || command2 # Ejecutar siguiente si falla
$ command1 ; command2 # Ejecutar en secuencia
Proximos Pasos
Una vez que domines los comandos basicos, aprende shell scripting para automatizar tu trabajo.
- Introduccion a Shell Scripting -> Introduccion a Shell Scripting
- Aprender expresiones regulares -> Uso de grep, sed, awk
Enlaces de Referencia
Documentacion Oficial
- Manual de GNU Coreutils - Referencia oficial de comandos basicos
- The Linux Documentation Project - Documentacion general de Linux
- Paginas man de Linux - Version online de las paginas man
Libros y Articulos Recomendados
- The Linux Command Line (Ingles/Gratis) - Un clasico de introduccion a la linea de comandos
- Explainshell - Sitio que explica comandos cuando los ingresas
Cheat Sheets y Herramientas
- Linux Command Cheat Sheet - Lista de comandos mas usados
- tldr pages - Version concisa de paginas man. Usa como
tldr ls - cheat.sh - Muestra cheat sheet con
curl cheat.sh/ls