Lección de mandatos básicos

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.

Introducción

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:

  1. Gestión de cuentas de usuario (primer paso)
  2. Breve lección de mandatos básicos (este manual)
  3. Compresión y descompresión de archivos (tercer paso)
  4. Gestión de procesos y trabajos (cuarto paso)

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.

Preparativos

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

Procedimientos

Ingrese al sistema como usuario regular (en nuestro ejemplo, fulano).

Cambiar de usuario a superusuario

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

Consultar información del sistema y usuarios

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"

Operaciones comunes con archivos y directorios

Esta sección cubre mandatos esenciales para navegar y examinar el sistema de archivos.

Uso de file

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

Uso de pwd

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

Uso de ls

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 .

Uso de touch y creación de archivos de prueba

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:

Uso de mkdir

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

Trabajando con nombres de archivos y directorios con espacios

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"

Consultar ayuda, páginas de manual e información

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:

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

Gestionando texto simple

Uso de wc

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

Uso de cat

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

Uso de grep

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

Uso de head y tail

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

Uso de sort

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

Gestión avanzada de archivos, enlaces y sistema

Uso de cp

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

Uso de cut

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

Enlaces físicos y simbólicos

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".

Programación de bucles (for)

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

Uso de aliases

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.

Apagado y reinicio de sistema

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"

Conclusión y continuación

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.