Autor: Joel Barrios Dueñas
Correo electrónico: darkshram en gmail punto com
Sitio de Red: https://www.alcancelibre.org
Licencia Creative Commons
© 1999-2026 Joel Barrios Dueñas. Este manual se distribuye bajo la licencia Creative Commons Reconocimiento-NoComercial-CompartirIgual 4.0 Internacional (CC BY-NC-SA 4.0). Usted es libre de compartir y adaptar el material bajo los siguientes términos: debe dar crédito al autor, no puede utilizarlo para fines comerciales y debe compartir las obras derivadas bajo la misma licencia. La licencia completa está disponible en https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode.es.
Este documento unifica y actualiza dos lecciones previas diseñadas para ejercicios prácticos en clase. Constituye el segundo paso en la secuencia didáctica completa, que debe seguirse en orden:
Siga los procedimientos al pie de la letra. En varios ejemplos se utilizará el carácter ~ (tilde), que es una forma abreviada de referirse al directorio de inicio del usuario actual. Esta lección asume que el usuario fulano, creado en el manual anterior, existe y será el utilizado. Es fundamental realizar estos ejercicios como usuario regular ―sin privilegios de superusuario― para evitar accidentes que puedan comprometer la integridad del sistema.
El objetivo es familiarizarse con el intérprete de mandatos (shell), aprender a moverse por el sistema de archivos, consultar información, manipular archivos de texto y buscar ayuda. Todas las salidas de los mandatos se han conservado para que el alumno pueda comparar con los resultados en su máquina virtual.
Ingrese al sistema como el superusuario (root) y verifique que estén instalados los paquetes necesarios.
Si utiliza una distribución derivada de RHEL moderna (AlmaLinux, Rocky Linux) o Fedora, ejecute:
dnf -y install man perl less file man-pages-es
Si utiliza ALDOS, ejecute:
yum -y install man perl less file man-pages-es
A continuación, genere el índice de las páginas de manual presentes en el sistema. En distribuciones modernas, incluida ALDOS, se utiliza el mandato mandb:
mandb
Espere unos minutos a que termine de generarse el índice. Finalmente, cierre la sesión de superusuario:
exit
Ingrese al sistema como usuario regular (en nuestro ejemplo, fulano).
El mandato su (switch user) permite cambiar de identidad. Ejecútelo sin argumentos e ingrese la clave de acceso de root cuando se le solicite:
su
Para verificar el contexto, ejecute lo siguiente para consultar algunas variables de entorno clave:
echo $USER; echo $LOGNAME; echo $SHELL; echo $PATH; echo $HOME
La salida será similar a:
fulano
fulano
/bin/bash
/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/fulano/bin
/root
Observe que, aunque se tienen privilegios de root, se carece del entorno de este ―la variable $USER aún muestra fulano y la $PATH no incluye rutas críticas del sistema como /sbin. Esto impide ejecutar algunos mandatos de administración sin especificar su ruta completa (ej: /sbin/service).
Salga del modo superusuario con exit y vuelva a ingresar, pero esta vez con la opción -l (o simplemente su -), que inicia una sesión de acceso (login) completa:
su -l
Consulte nuevamente las variables de entorno:
echo $USER; echo $LOGNAME; echo $SHELL; echo $PATH; echo $HOME
La salida reflejará ahora el entorno completo de root:
root
root
/bin/bash
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
/root
Finalmente, regrese a su sesión de usuario regular:
exit
Existen varios mandatos para obtener información básica sobre el sistema y sus usuarios activos.
Ejecute uname -a para consultar información detallada del núcleo (kernel) y del sistema:
uname -a
Salida de ejemplo:
Linux localhost.localdomain 2.6.32-71.29.1.el6.i686 #1 SMP Mon Jun 27 18:07:00 BST 2011 i686 i686 i386 GNU/Linux
Para identificar su propio nombre de usuario en el sistema:
whoami
Salida:
fulano
Para ver qué usuarios están conectados y desde dónde:
who
Para ver la misma información, además de lo que están haciendo y el uso del sistema (similar a who pero más detallado):
w
Para ver el historial de accesos recientes de todos los usuarios (resumen de /var/log/lastlog):
lastlog
Para visualizar el historial de accesos exitosos al sistema (extracto de /var/log/wtmp):
last
Para consultar los intentos fallidos de acceso (requiere privilegios de root):
su -l root -c "lastb"
Esta sección cubre mandatos esenciales para navegar y examinar el sistema de archivos.
El mandato file determina el tipo de un archivo examinando su contenido. Pruebe con un archivo conocido:
file /etc/hosts
Salida esperada:
/etc/hosts: ASCII text
El mandato pwd (print working directory) muestra la ruta absoluta del directorio de trabajo actual.
pwd
Salida:
/home/fulano
Cambie al directorio /usr/local y verifique con pwd:
cd /usr/local
pwd
Salida:
/usr/local
Para regresar al directorio de inicio, utilice cd sin argumentos y verifique:
cd
pwd
Salida:
/home/fulano
El mandato ls (list) lista el contenido de directorios. Puede listar un directorio sin moverse a él:
ls /usr/local
Ejecute ls en su directorio de inicio, primero normal y luego mostrando archivos ocultos (que comienzan con punto):
ls
ls -a
La primera ejecución puede mostrar que el directorio está vacío. La segunda, con la opción -a (all), revelará los archivos ocultos, con una salida similar a:
. .. .bash_history .bash_logout .bash_profile .bashrc
Para ver una lista larga (long) con todos los detalles (permisos, propietario, tamaño, fecha), use -la:
ls -la
Salida de ejemplo:
total 24
drwx------. 4 fulano fulano 4096 sep 23 21:22 .
drwxr-xr-x. 5 root root 4096 sep 23 20:51 ..
-rw-------. 1 fulano fulano 143 sep 23 20:59 .bash_history
-rw-r--r--. 1 fulano fulano 18 may 30 11:58 .bash_logout
-rw-r--r--. 1 fulano fulano 176 may 30 11:58 .bash_profile
-rw-r--r--. 1 fulano fulano 124 may 30 11:58 .bashrc
Combine opciones para ordenar y formatear la salida. Por ejemplo, ordenar por tamaño (-S), en orden inverso (-r), con tamaños legibles (-h):
ls -Slahr
Salida similar a:
total 24K
-rw-r--r--. 1 fulano fulano 124 may 30 11:58 .bashrc
-rw-r--r--. 1 fulano fulano 176 may 30 11:58 .bash_profile
-rw-r--r--. 1 fulano fulano 18 may 30 11:58 .bash_logout
-rw-------. 1 fulano fulano 143 sep 23 20:59 .bash_history
drwxr-xr-x. 5 root root 4.0K sep 23 20:51 ..
drwx------. 4 fulano fulano 4.0K sep 23 21:35 .
Para ordenar por tamaño (-S), de mayor a menor:
ls -Sla
Salida similar a:
total 24
drwx------. 4 fulano fulano 4096 sep 23 21:35 .
drwxr-xr-x. 5 root root 4096 sep 23 20:51 ..
-rw-r--r--. 1 fulano fulano 176 may 30 11:58 .bash_profile
-rw-------. 1 fulano fulano 143 sep 23 20:59 .bash_history
-rw-r--r--. 1 fulano fulano 124 may 30 11:58 .bashrc
-rw-r--r--. 1 fulano fulano 18 may 30 11:58 .bash_logout
Para ordenar por fecha de modificación (-t), del más reciente al más antiguo:
ls -tla
Salida similar a:
total 24
drwx------. 4 fulano fulano 4096 sep 23 21:35 .
-rw-------. 1 fulano fulano 143 sep 23 20:59 .bash_history
drwxr-xr-x. 5 root root 4096 sep 23 20:51 ..
-rw-r--r--. 1 fulano fulano 18 may 30 11:58 .bash_logout
-rw-r--r--. 1 fulano fulano 176 may 30 11:58 .bash_profile
-rw-r--r--. 1 fulano fulano 124 may 30 11:58 .bashrc
Ejecute ls -tlar para ver la misma lista ordenada por fecha, pero en orden inverso (más antiguos primero):
ls -tlar
Salida similar a:
total 24
-rw-r--r--. 1 fulano fulano 124 may 30 11:58 .bashrc
-rw-r--r--. 1 fulano fulano 176 may 30 11:58 .bash_profile
-rw-r--r--. 1 fulano fulano 18 may 30 11:58 .bash_logout
drwxr-xr-x. 5 root root 4096 sep 23 20:51 ..
-rw-------. 1 fulano fulano 143 sep 23 20:59 .bash_history
drwx------. 4 fulano fulano 4096 sep 23 21:35 .
Ejecute ls -htlar para ver la lista anterior con tamaños de archivo en un formato legible para humanos (human-readable):
ls -htlar
Salida similar a:
total 24K
-rw-r--r--. 1 fulano fulano 124 may 30 11:58 .bashrc
-rw-r--r--. 1 fulano fulano 176 may 30 11:58 .bash_profile
-rw-r--r--. 1 fulano fulano 18 may 30 11:58 .bash_logout
drwxr-xr-x. 5 root root 4.0K sep 23 20:51 ..
-rw-------. 1 fulano fulano 143 sep 23 20:59 .bash_history
drwx------. 4 fulano fulano 4.0K sep 23 21:35 .
El mandato touch se utiliza principalmente para actualizar las marcas de tiempo de acceso y modificación de un archivo. Un efecto secundario útil es que si el archivo no existe, touch lo crea vacío. Es una herramienta perfecta para generar archivos de prueba.
Cree varios archivos de ejemplo ejecutando:
touch archivo1 archivo2 archivo11 archivo12 archivo135 archivo246
Ahora, utilice ls con patrones para listar selectivamente:
shellls archivo1*shellls *2shellls *35* *46*El mandato mkdir (make directory) crea nuevos directorios. Cree un directorio llamado pruebas en su directorio de inicio:
mkdir ~/pruebas
Para crear una estructura de directorios anidados (por ejemplo, a/b/c), necesita la opción -p (parents), que crea los directorios padres necesarios:
mkdir -p ~/proyecto/2024/documentos/borradores
En Linux, los espacios en los nombres deben manejarse con cuidado, ya que el intérprete de mandatos los usa para separar argumentos. Para crearlos o referirse a ellos, debe "escapar" el espacio o encerrar el nombre completo entre comillas.
Para crear un directorio llamado Mi Documento:
mkdir "Mi Documento"
# o también: mkdir Mi\ Documento
Para cambiar a ese directorio:
cd "Mi Documento"
Para listar su contenido (que estará vacío) y luego regresar al directorio padre:
ls -la
cd ..
Para crear un archivo con espacios dentro de ese directorio:
touch "Mi Documento/notas finales.txt"
La mayoría de los programas ofrecen ayuda rápida con la opción --help. Por ejemplo:
ls --help
La fuente de información más completa son las páginas de manual, accesibles con man. Consulte el manual de ls:
man ls
Dentro del visor de manuales (less), puede navegar con Av Pág/Re Pág, buscar una palabra con /palabra y salir con q.
Para buscar manuales relacionados con un tema, use man -k (o apropos):
man -k crontab
Salida de ejemplo:
crontab (1) - maintains crontab files for individual users
crontab (5) - files used to schedule the execution of programs
Los números entre paréntesis indican la sección del manual. Las secciones estándar son:
/dev).Para ver el manual de la sección 5 sobre crontab (el formato del archivo):
man 5 crontab
La orden whatis ofrece una descripción muy breve:
whatis ls
El mandato wc (word count) cuenta líneas, palabras y caracteres.
wc -l /etc/crontab # Cuenta líneas
wc -w /etc/crontab # Cuenta palabras
wc -c /etc/crontab # Cuenta bytes (caracteres)
wc -L /etc/crontab # Muestra la longitud de la línea más larga
El mandato cat (concatenate) muestra el contenido de archivos. Véalo en acción con un archivo del sistema:
cat /etc/crontab
Salida de ejemplo:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * command to be executed
También puede concatenar varios archivos en uno nuevo. El siguiente mandato combina /etc/fstab y /etc/crontab en un archivo en su directorio de inicio:
cat /etc/fstab /etc/crontab > ~/concatenados.txt
cat ~/concatenados.txt
El mandato grep filtra líneas de texto que coinciden (o no) con un patrón. Para buscar líneas que contengan "root" en /etc/crontab:
grep root /etc/crontab
Salida esperada:
MAILTO=root
Para mostrar las líneas que no contienen "root", use la opción -v (invert match):
grep -v root /etc/crontab
Salida similar a:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
Puede encadenar mandatos con tuberías (|). Este ejemplo filtra las líneas sin "root" y luego elimina las líneas en blanco usando sed:
grep -v "root" /etc/crontab | sed -e '/^$/d'
Salida similar a:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
Estos mandatos muestran el principio (head) o el final (tail) de un archivo. Use -n para especificar el número de líneas.
head -3 /etc/crontab # Muestra las 3 primeras líneas
Salida:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
tail -3 /etc/crontab # Muestra las 3 últimas líneas
Salida:
# | | | | |
# * * * * * command to be executed
El mandato sort ordena líneas de texto. Para ordenar alfabéticamente el archivo de usuarios (/etc/passwd) y luego filtrar solo las líneas que contienen el dígito "0":
sort /etc/passwd | grep 0
Salida de ejemplo que lista usuarios cuyas líneas en /etc/passwd contienen el carácter '0' después de ordenar:
avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
fulano:x:500:500:Fulano de Tal:/home/fulano:/bin/bash
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
halt:x:7:0:halt:/sbin:/sbin/halt
operator:x:11:0:operator:/root:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
sync:x:5:0:sync:/sbin:/bin/sync
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
Para ordenar en orden inverso (descendente), utilice la opción -r:
sort -r /etc/passwd | head -5
El mandato cp (copy) copia archivos y directorios. La sintaxis básica es cp origen destino.
Copiar archivos:
Para copiar un archivo a otro lugar, simplemente especifique la ruta de destino. El siguiente ejemplo copia /etc/crontab a su directorio de inicio:
cp /etc/crontab ~/
Para copiar un archivo y renombrarlo en el proceso:
cp /etc/crontab ~/mi_crontab_copia.txt
Copiar directorios: Requiere la opción -r (recursive). Para copiar todo el contenido del directorio ~/pruebas a un nuevo directorio llamado ~/respaldo_pruebas:
cp -r ~/pruebas ~/respaldo_pruebas
Copiar preservando atributos: La opción -a (archive) es útil para respaldos, ya que copia de manera descendente preservando permisos, fechas y enlaces simbólicos.
cp -a ~/proyecto ~/respaldo_total_proyecto
El mandato cut extrae secciones de cada línea de un archivo o entrada. Es muy útil para procesar datos tabulares, como el archivo /etc/passwd.
Para extraer la primera columna (nombres de usuario) de /etc/passwd, usando : como delimitador:
cut -d: -f1 /etc/passwd
Para extraer la primera y tercera columna (usuario y ID de usuario):
cut -d: -f1,3 /etc/passwd
Para extraer caracteres específicos (por ejemplo, los caracteres del 1 al 5 de cada línea del archivo ~/concatenados.txt):
cut -c1-5 ~/concatenados.txt
Linux soporta dos tipos de enlaces que permiten acceder a un archivo desde múltiples ubicaciones:
Crear un enlace físico: Use ln sin opciones. Crea una entrada alternativa copia_fisica.txt para el archivo archivo1:
ln archivo1 copia_fisica.txt
Eliminar el nombre original archivo1 no afecta a copia_fisica.txt, ya que los datos permanecen en el disco.
Crear un enlace simbólico: Use ln -s. Crea un acceso directo acceso_crontab que apunta a /etc/crontab:
ln -s /etc/crontab acceso_crontab
Si elimina el archivo original (/etc/crontab), el enlace simbólicico quedará "roto".
El intérprete de mandatos permite automatizar tareas repetitivas mediante bucles. La estructura for es una de las más comunes.
El siguiente ejemplo imprime los números del 1 al 5, cada uno en una línea:
for i in 1 2 3 4 5; do echo "Número: $i"; done
Un uso más práctico es procesar archivos. Este bucle convierte a minúsculas el nombre de todos los archivos .TXT en el directorio actual:
for archivo in *.TXT; do mv "$archivo" "$(echo $archivo | tr 'A-Z' 'a-z')"; done
Otro ejemplo crea cinco directorios de trabajo consecutivos:
for n in {1..5}; do mkdir "tarea_$n"; done
Un alias es un atajo o nombre alternativo que usted define para un mandato o serie de mandatos. Se configuran típicamente en el archivo ~/.bashrc.
Para crear un alias temporal en la sesión actual (por ejemplo, ll para ls -la):
alias ll='ls -la'
Después de esto, ejecutar ll será igual que ejecutar ls -la.
Para listar todos los alias definidos en su sesión:
alias
Para eliminar un alias temporal:
unalias ll
Importante: Para que un alias sea permanente, debe añadirlo al final de su archivo ~/.bashrc y luego recargar la configuración con source ~/.bashrc.
Estos mandatos generalmente requieren privilegios de superusuario. Utilice su -l o prefíjelos con sudo si está configurado.
Para apagar el sistema inmediatamente:
su -l -c "shutdown -h now"
# o, si usa sudo: sudo shutdown -h now
Para reiniciar el sistema:
su -l -c "shutdown -r now"
# o: sudo shutdown -r now
Para programar un apagado en 10 minutos:
su -l -c "shutdown -h +10"
Para cancelar un apagado programado:
su -l -c "shutdown -c"
Ha completado esta lección sobre mandatos básicos de Linux. Ha aprendido a cambiar de usuario, consultar información del sistema, navegar por el sistema de archivos, examinar archivos de texto y buscar ayuda en las páginas de manual.
Estas habilidades son la base para los siguientes pasos. Para continuar con la secuencia didáctica y aprender a gestionar archivos comprimidos, proceda con el manual: Compresión y descompresión de archivos.