Manual básico UNIX/Linux

Autor:
Ricardo Naranjo Faccini
Fecha de publicación:
Tuesday 18 July 2023
Tema:
FOSS y Software Libre
Revisado por :
Ricardo Naranjo Faccini
(Tuesday 18 July 2023)

Resumen

Se proporciona una visión general de los conceptos y comandos clave en el entorno Unix/Linux. Se explorarán los fundamentos de la administración de sistemas en Unix/Linux, incluyendo la organización de directorios clave como /usr, /lib, /etc, /var y /src, así como el uso de scripts de gestión de servicios para controlar y administrar los servicios del sistema.

También se examinarán varios servicios populares en Unix/Linux, como el servidor web (www), el sistema de impresión (CUPS), el protocolo de configuración dinámica de host (DHCP), los protocolos de correo electrónico (SMTP, POP3, IMAP), el protocolo seguro de shell (SSH) y el protocolo de transferencia de archivos (FTP). Se explicará el funcionamiento y la importancia de cada uno de ellos en el contexto de la infraestructura de redes y comunicaciones.

En términos técnicos, se profundizará en aspectos como la BIOS, GRUB y LILO, que son cargadores de arranque esenciales durante el proceso de inicio del sistema. Además, se explorará el formato de disco en Linux y cómo se organizan los inodos en el sistema de archivos, proporcionando una comprensión sólida de la estructura y gestión del almacenamiento.

La línea de comandos será un enfoque central del artículo, donde se presentarán y explicarán comandos clave para obtener información del sistema, manipular archivos y directorios, filtrar y manipular texto, así como gestionar usuarios y procesos. Se explorarán comandos como uname, lsb_release, lsmod, ip, ifconfig, route, free, lspci, netstat, dmidecode, dmesg y systemctl.

El artículo también abordará la gestión y autenticación de usuarios, presentando comandos como ssh, su, su - y sudo, que son fundamentales para administrar privilegios y garantizar la seguridad en sistemas Unix/Linux. Además, se explicará la automatización de procesos mediante los comandos at y cron, permitiendo a los usuarios programar y ejecutar tareas de manera programada y automatizada.

Por último, se explorarán los comandos para el empaquetamiento y compresión de archivos, como tar, gzip, bzip2, split y cat, y se destacará la importancia de herramientas como rsync, dd y duplicity para realizar copias de seguridad eficientes y confiables de los datos.

En resumen, este artículo proporcionará a los lectores una comprensión básica e inicial de los conceptos y comandos clave en el entorno Unix/Linux, lo que les permitirá tener una guía inicial para gestionar y operar sistemas basados en Unix/Linux. A partir de esta guía, los administradores de sistemas podrán profundizar los conceptos planteados para poder optimizar sus infraestructuras y aprovechar al máximo las capacidades de Unix/Linux.


1 El mecanismo de arranque de UNIX/Linux

La BIOS (Basic Input/Output System) es un firmware que se encuentra en la placa base de una computadora. Su función principal es realizar las operaciones básicas de entrada/salida, como la inicialización del hardware, la detección de dispositivos y la carga del sistema operativo en la memoria RAM. La BIOS es responsable de arrancar la computadora y transferir el control al cargador de arranque.

La BIOS es un firmware ubicado en la placa base de la computadora que se carga y se ejecuta antes del cargador de arranque. La BIOS realiza tareas esenciales, como la inicialización del hardware, la detección de dispositivos y la configuración básica del sistema. Su función principal es iniciar el proceso de arranque y transferir el control al cargador de arranque, que luego se encargará de cargar el sistema operativo en la memoria y continuar con el proceso de inicio.

GRUB (Grand Unified Bootloader) y LILO (LInux LOader) son cargadores de arranque utilizados en sistemas operativos basados en Unix, como Linux. Su función es cargar el núcleo del sistema operativo en la memoria y transferir el control al sistema operativo para que se inicie correctamente. Ambos cargadores permiten seleccionar entre diferentes sistemas operativos o configuraciones al arrancar la computadora.

La principal diferencia entre GRUB y LILO radica en su flexibilidad y capacidad. GRUB es más avanzado y versátil, y puede manejar una variedad de sistemas de archivos y configuraciones. Además, GRUB puede mostrar un menú de inicio con opciones personalizadas y permite cargar módulos adicionales durante el arranque. Por otro lado, LILO es más simple y tiene menos características. LILO solo admite sistemas de archivos más antiguos y no proporciona una interfaz gráfica para seleccionar opciones de arranque.

Cuando el sistema se inicia, tanto GRUB como LILO muestran una interfaz de texto en la pantalla antes de que se cargue el sistema operativo. Esta interfaz generalmente presenta un menú con las diferentes opciones de arranque disponibles, como diferentes versiones del kernel del sistema operativo o sistemas operativos instalados en particiones diferentes. El usuario puede seleccionar la opción deseada mediante el teclado antes de que el cargador de arranque continúe cargando el sistema operativo.

La apariencia y el estilo exactos de GRUB y LILO pueden variar según la configuración y la personalización realizada por el usuario o el administrador del sistema. Sin embargo, en general, la interfaz de GRUB suele ser más moderna y flexible, con soporte para una interfaz gráfica y temas personalizables. Puede mostrar opciones de arranque en un formato más visual, con imágenes de fondo y texto formateado. Por otro lado, la interfaz de LILO es más simple y utiliza un formato de texto básico para mostrar las opciones de arranque.

2 El formato de los discos en UNIX/Linux

En los sistemas de archivos de Linux, como ext2, ext3, ext4, XFS, entre otros, el formato de disco define cómo se almacenan los datos y la estructura del sistema de archivos en el disco. Estos sistemas de archivos utilizan una estructura jerárquica para organizar y administrar archivos y directorios en el disco.

Los inodos son estructuras de metadatos utilizadas por los sistemas de archivos para almacenar información sobre los archivos, como permisos, propietario, tamaño y ubicación física en el disco. Cada archivo en un sistema de archivos de Linux tiene un inodo asociado que contiene los metadatos del archivo.

La forma en que se organizan los inodos puede variar según el sistema de archivos utilizado, pero generalmente siguen una estructura de tabla o lista en el disco. El sistema de archivos mantiene una tabla de inodos en una ubicación predefinida en el disco. Cada entrada de la tabla de inodos se identifica mediante un número único llamado número de inodo. El sistema de archivos utiliza este número para acceder a la información del inodo asociado al archivo.

Cuando se crea un archivo, se asigna un número de inodo único y se reserva espacio en el disco para almacenar los datos del archivo y los metadatos en el inodo correspondiente. Los metadatos del inodo incluyen información como el tamaño del archivo, los permisos, el propietario, las fechas de creación y modificación, entre otros.

Además, los inodos también contienen punteros que apuntan a bloques de datos en el disco donde se almacenan los contenidos del archivo. Estos punteros pueden ser directos, indirectos o doblemente indirectos, dependiendo del tamaño del archivo. Utilizando estos punteros, el sistema de archivos puede rastrear y acceder a los bloques de datos asociados a un archivo específico.

El formato de disco que utiliza inodos presenta varias ventajas que ayudan a evitar los problemas de fragmentación y ralentización que se observan en los sistemas de archivos FAT y VFAT utilizados en Windows. Estas ventajas incluyen:

  1. Administración eficiente del espacio: Los sistemas de archivos basados en inodos tienden a asignar de manera más eficiente el espacio en disco para los archivos. Utilizan una estructura de asignación basada en bloques, donde los archivos se dividen en bloques de tamaños estándares pequeños para repartirlos por todo el disco. Esto evita la necesidad de realizar defragmentación del disco dado que a diferencia de los formatos FAT y VFAT el sistema de archivos no requiere que la información esté contígua para recuperarla rápidamente.

  2. Utilización de bloques de tamaño variable: Los sistemas de archivos basados en inodos, como ext4, pueden utilizar bloques de tamaño variable para adaptarse mejor a los tamaños de archivo. Esto permite una asignación más precisa del espacio en disco.

  3. Uso de técnicas de preasignación: Algunos sistemas de archivos de Linux implementan técnicas de preasignación de espacio, donde se reservan bloques adicionales contiguos en el disco para el crecimiento futuro de los archivos. Esto reduce la fragmentación a medida que los archivos crecen, ya que el espacio adicional ya está asignado y disponible de antemano.

En general, los sistemas de archivos basados en inodos han sido diseñados para ofrecer una mejor administración del espacio y no requieren continuidad ni cercanía en los datos en comparación con los sistemas de archivos FAT y VFAT utilizados en Windows.

2.a Los permisos de los archivos

Unix/Linux utiliza un sistema de permisos y autorización basado en propietario, grupo y otros para controlar el acceso a archivos y directorios. Cada archivo y directorio tiene asociados tres conjuntos de permisos: permisos del propietario, permisos del grupo y permisos de otros.

  1. Propietario: El propietario es el usuario al que pertenece el archivo o directorio. El propietario tiene derechos especiales y puede cambiar los permisos, leer, escribir y ejecutar el archivo. Puede ser el creador original del archivo o un usuario con derechos de administración.

  2. Grupo: Cada archivo y directorio puede tener un grupo asociado. El grupo consiste en un conjunto de usuarios que comparten ciertos permisos en relación con el archivo o directorio. Los miembros del grupo pueden tener diferentes niveles de acceso según los permisos establecidos para el grupo.

  3. Otros: Este conjunto de permisos se aplica a todos los demás usuarios que no son ni el propietario ni miembros del grupo asociado. Los permisos para otros controlan el acceso para cualquier usuario que no esté en el grupo o no sea el propietario del archivo o directorio.

Cada conjunto de permisos consta de tres tipos de permisos:

  • Lectura (r): Permite leer o ver el contenido del archivo o directorio.

  • Escritura (w): Permite modificar o escribir en el archivo o directorio.

  • Ejecución (x): Permite ejecutar o acceder al archivo si es un programa o ingresar a un directorio.

Estos permisos se representan mediante una combinación de caracteres en las salidas de comandos como ls -l:

  • -: Indica que el permiso no está permitido.

  • r: Indica que se permite la lectura.

  • w: Indica que se permite la escritura.

  • x: Indica que se permite la ejecución.

Por ejemplo, en la siguiente salida de ls -l:

css-rw-r--r-- 1 usuario grupo 1024 jul 10 15:30 archivo.txt
  • El propietario tiene permisos de lectura y escritura (rw-).

  • Los miembros del grupo tienen permisos de lectura (r--).

  • Otros usuarios tienen permisos de lectura (r--).

El sistema de permisos y autorización de Unix/Linux permite un control granular sobre quién puede acceder, leer, escribir o ejecutar archivos y directorios. Los usuarios y administradores pueden modificar los permisos utilizando comandos como chmod y chown para ajustar el nivel de acceso según sea necesario. Esto ayuda a mantener la seguridad y la integridad de los archivos y directorios en el sistema operativo.

3 Los servicios en UNIX/Linux

En UNIX/Linux, los servicios se refieren a los programas o procesos que se ejecutan en segundo plano, es decir que los programas están corriendo en la CPU, pero no hay ninguna presentación en consola de texto o en ventana que evidencie que el programa está en ejecución. Estos programas generalmente se consultan por un puerto de red, o por que son ejecutados cada cierto tiempo o a una hora exacta procesando datos. Estos programas están diseñados para proporcionar diversas funciones y capacidades al sistema operativo.

3.a Organización de los servicios

El estandar UNIX/Linux obliga a que estos servicios organicen su información en directorios específicos del sistema de archivos, como /usr, /lib, /etc, /var y /src. A continuación, se explicará brevemente cómo funciona cada uno de estos directorios y cómo se organiza la información en ellos:

  1. /usr (User System Resources): El directorio /usr contiene recursos del sistema para uso compartido entre usuarios. Aquí es donde se almacenan los programas que se ejecutan para que el servicio esté en funcionamiento, bibliotecas, archivos de encabezados y documentación del sistema. El contenido de /usr se organiza en subdirectorios como /usr/bin (binarios ejecutables), /usr/lib (bibliotecas compartidas), /usr/include (archivos de cabecera) y /usr/share (archivos de datos compartidos).

  2. /lib (Libraries): El directorio /lib contiene bibliotecas compartidas requeridas por los programas del sistema operativo y otros servicios. Estas bibliotecas son conjuntos de funciones y códigos que los programas pueden utilizar para realizar tareas específicas que generalmente utilizan varios servicios, al ser comunes entre ellos requieren estar en algún lugar con acceso a los diversos servicios que se apoyarán en ellos. Estas bibliotecas son esenciales para el funcionamiento del sistema y se cargan en la memoria cuando se ejecutan los programas.

  3. /etc (Editable Text Configuration): El directorio /etc almacena archivos de configuración del sistema y de los servicios. Aquí es donde se encuentran los archivos de configuración para varios servicios y programas instalados en el sistema. Los archivos de configuración suelen estar escritos en formato de texto plano y se pueden editar para personalizar el comportamiento de los servicios y programas. Generalmente están llenos de comentarios que explican cada uno de los parámetros que se pueden modificar para alterar el funcionamiento de los servicios.

  4. /var (Variable Data): El directorio /var contiene datos variables que cambian durante la ejecución del sistema. Aquí es donde se almacenan archivos que son propensos a cambios frecuentes, como registros del sistema (/var/log), archivos de correo (/var/mail), la cola de documentos para enviar a la impresora (var/spool), bases de datos (/var/db, /var/lib/pgsql, /var/lib/mysql) y archivos de caché (/var/cache). Este directorio es importante para los servicios que generan y modifican datos continuamente.

  5. /src (Source Code): El directorio /src no es parte del sistema operativo UNIX/Linux estándar, pero a veces se utiliza para almacenar el código fuente de programas o proyectos en desarrollo. Este directorio es comúnmente utilizado por desarrolladores y contiene los archivos fuente de programas antes de ser compilados y ejecutados.

Es importante tener en cuenta que la organización exacta de estos directorios puede variar según la distribución de UNIX/Linux o Linux que estés utilizando. Sin embargo, en general, estos directorios proporcionan una estructura común y estándar para organizar los servicios y los recursos del sistema.

3.b Los script de gestión de los servicios

En UNIX/Linux, los scripts de gestión de servicios son archivos de script que permiten controlar y administrar los servicios del sistema operativo. Estos scripts suelen ubicarse en el directorio /etc/init.d o /etc/rc.d/init.d y se ejecutan con privilegios de superusuario (root). A continuación, explicaré algunos de los comandos comunes utilizados en estos scripts:

  1. start: El comando "start" se utiliza para iniciar un servicio. Cuando se ejecuta el script de inicio de un servicio con el parámetro "start", se llevan a cabo las acciones necesarias para poner en funcionamiento el servicio. Por ejemplo, si ejecutas el comando "/etc/init.d/nombre_servicio start", se iniciará el servicio llamado "nombre_servicio".

  2. stop: El comando "stop" se utiliza para detener un servicio en ejecución. Al ejecutar el script de inicio de un servicio con el parámetro "stop", se realizan las acciones necesarias para detener correctamente el servicio. Por ejemplo, "/etc/init.d/nombre_servicio stop" detendrá el servicio llamado "nombre_servicio".

  3. restart: El comando "restart" se utiliza para reiniciar un servicio. Combinando los comandos "stop" y "start", el script de inicio de un servicio realiza las acciones necesarias para detener y luego iniciar nuevamente el servicio. Por ejemplo, "/etc/init.d/nombre_servicio restart" reiniciará el servicio llamado "nombre_servicio".

  4. enable: El comando "enable" se utiliza para habilitar un servicio para que se inicie automáticamente durante el arranque del sistema. Al ejecutar el script de inicio de un servicio con el parámetro "enable", se configura el servicio para que se inicie automáticamente cada vez que se inicie el sistema. Por ejemplo, "/etc/init.d/nombre_servicio enable" habilitará el servicio llamado "nombre_servicio" para que se inicie automáticamente.

  5. disable: El comando "disable" se utiliza para deshabilitar un servicio, evitando que se inicie automáticamente durante el arranque del sistema. Al ejecutar el script de inicio de un servicio con el parámetro "disable", se configura el servicio para que no se inicie automáticamente al arrancar el sistema. Por ejemplo, "/etc/init.d/nombre_servicio disable" deshabilitará el servicio llamado "nombre_servicio".

  6. status: El comando "status" se utiliza para verificar el estado de un servicio. Al ejecutar el script de inicio de un servicio con el parámetro "status", se obtiene información sobre si el servicio está en ejecución o detenido. Por ejemplo, "/etc/init.d/nombre_servicio status" mostrará el estado actual del servicio llamado "nombre_servicio".

Es importante tener en cuenta que los nombres de los comandos y la ubicación de los scripts pueden variar dependiendo de la distribución de UNIX/Linux o Linux que estés utilizando. Algunas distribuciones también proporcionan herramientas adicionales, como "systemctl" en systemd, para administrar servicios de manera más avanzada.

3.c Ejemplos de servicios

A continuación, describiré brevemente algunos de los servicios más comunes en UNIX/Linux, donde se evidencia claramente que la ejecución de éstos programas no se evidencia en una ventana o en una consola de texto sino que en la mayoría de los casos los usuarios se conectan mediante un programa cliente a través de una conexión de red con el servidor que brinda el servicio:

  1. www (World Wide Web): El servicio www se refiere al World Wide Web, que es un sistema de información distribuido que permite acceder y visualizar páginas web a través de Internet. Utiliza el protocolo HTTP (Hypertext Transfer Protocol) para la transferencia de datos entre clientes y servidores web. Los servidores web, como Apache o Nginx, son responsables de proporcionar el contenido solicitado a los navegadores web de los usuarios.

  2. cups (Common UNIX/Linux Printing System): El servicio CUPS es un sistema de impresión común en UNIX/Linux. Proporciona la capacidad de imprimir en impresoras locales y de red utilizando diferentes protocolos, como IPP (Internet Printing Protocol) y LPD (Line Printer Daemon). CUPS maneja la cola de impresión, la administración de trabajos y la configuración de las impresoras.

  3. dhcp (Dynamic Host Configuration Protocol): El servicio DHCP es un protocolo de red que permite a los dispositivos obtener automáticamente una configuración de red, como dirección IP, máscara de subred, puerta de enlace y servidores DNS, sin necesidad de configuración manual. Los servidores DHCP asignan y administran las direcciones IP de manera dinámica a los clientes que se conectan a la red.

  4. smtp (Simple Mail Transfer Protocol): El servicio SMTP es un protocolo de red utilizado para el envío de correos electrónicos. Es responsable de la transferencia y el enrutamiento de mensajes de correo electrónico entre servidores de correo. Los servidores SMTP, como Postfix o Sendmail, son utilizados para enviar correos electrónicos salientes desde un cliente de correo hacia los servidores de correo del destinatario.

  5. pop3 (Post Office Protocol version 3): El servicio POP3 es un protocolo de correo electrónico utilizado por los clientes de correo para recuperar mensajes de correo electrónico desde un servidor de correo remoto. POP3 permite a los usuarios descargar mensajes de correo electrónico en sus dispositivos locales y, de forma predeterminada, elimina los mensajes del servidor después de la descarga.

  6. imap (Internet Message Access Protocol): El servicio IMAP es otro protocolo de correo electrónico utilizado por los clientes de correo para acceder a los mensajes de correo electrónico almacenados en un servidor remoto. A diferencia de POP3, IMAP permite a los usuarios administrar sus correos electrónicos en el servidor, como organizar carpetas, marcar mensajes como leídos/no leídos y mantener una sincronización entre el cliente y el servidor.

  7. ssh (Secure Shell): El servicio SSH es un protocolo de red que proporciona una conexión segura y encriptada a través de la cual se pueden realizar operaciones remotas en un sistema. SSH permite acceder de forma segura a un servidor y ejecutar comandos o transferir archivos de forma remota. También se utiliza para administrar servidores de manera segura.

  8. ftp (File Transfer Protocol): El servicio FTP es un protocolo de red utilizado para la transferencia de archivos entre un cliente y un servidor. Permite cargar (subir) y descargar (bajar) archivos de manera remota a través de una conexión FTP. Sin embargo, debido a la falta de cifrado, FTP ha sido en gran medida reemplazado por protocolos más seguros como SFTP (Secure FTP) y FTPS (FTP over SSL/TLS).

  9. LDAP (Lightweight Directory Access Protocol): LDAP es un protocolo de acceso a directorios utilizado para acceder y mantener información de directorios. Los directorios LDAP almacenan información como usuarios, grupos, contactos y recursos en una estructura jerárquica. LDAP es ampliamente utilizado para la autenticación centralizada y la administración de usuarios en redes y sistemas distribuidos.

  10. SMB (Server Message Block): SMB es un protocolo de red utilizado para compartir archivos, impresoras y otros recursos entre sistemas en una red local. Es el protocolo subyacente utilizado en el entorno de red de Windows y permite el intercambio de archivos e impresoras entre computadoras con diferentes sistemas operativos, incluyendo Windows, Linux y macOS.

  11. NTP (Network Time Protocol): NTP es un protocolo utilizado para sincronizar los relojes de los sistemas en una red. Proporciona una referencia de tiempo precisa y se utiliza para asegurarse de que los dispositivos en una red estén sincronizados. Los servidores NTP sincronizan sus relojes con fuentes de tiempo confiables y los dispositivos clientes se sincronizan con los servidores NTP para mantener una hora precisa en toda la red.

  12. BIND (Berkeley Internet Name Domain): BIND es el software de servidor DNS más comúnmente utilizado en Internet. Es responsable de traducir los nombres de dominio legibles por humanos en direcciones IP numéricas y viceversa. BIND implementa el protocolo DNS y permite la resolución de nombres de dominio, lo que permite acceder a sitios web y servicios en Internet utilizando nombres de dominio en lugar de direcciones IP.

  13. X Window System (X11): El sistema X Window, comúnmente conocido como X11, es un sistema de ventanas utilizado en entornos gráficos de UNIX/Linux y Linux. X11 permite la ejecución de aplicaciones gráficas en un servidor X y su visualización en sistemas cliente. Proporciona capacidades para la gestión de ventanas, interacción con el teclado y el ratón, y permite la ejecución de aplicaciones gráficas remotas a través de la red.

  14. crond (Cron Daemon): El servicio crond es el demonio del cron en UNIX/Linux. Cron es un programador de tareas que permite programar la ejecución automática de comandos o scripts en momentos específicos o en intervalos regulares. El servicio crond verifica periódicamente las tareas programadas y las ejecuta según la configuración establecida en los archivos de cron.

  15. PostgreSQL (pgsql): PostgreSQL es un sistema de gestión de bases de datos relacional (RDBMS) de código abierto. Ofrece una amplia gama de características y funcionalidades avanzadas, incluyendo consultas complejas, integridad de datos, replicación, transacciones ACID y soporte para múltiples lenguajes de programación. PostgreSQL es ampliamente utilizado en aplicaciones web y empresariales debido a su estabilidad, seguridad y escalabilidad.

  16. MariaDB: MariaDB es otro sistema de gestión de bases de datos relacional (RDBMS) de código abierto y una bifurcación del proyecto MySQL. MariaDB se basa en los mismos principios y características de MySQL, pero con algunas mejoras adicionales y desarrollo continuo. Ofrece compatibilidad con aplicaciones y herramientas existentes de MySQL y es una alternativa popular en sistemas Linux y entornos de desarrollo web.

4 Comandos útiles en UNIX/Linux

4.a Consolas virtuales

En Linux, las consolas virtuales son una característica que permite tener múltiples sesiones de terminal simultáneamente en un mismo sistema. Cada consola virtual es una instancia independiente de una sesión de terminal, lo que permite a los usuarios realizar múltiples tareas o trabajar con diferentes usuarios al mismo tiempo.

Las consolas virtuales se pueden cambiar utilizando una combinación de teclas específica, que generalmente es [CTRL]+[ALT]+[F#]. El número de F# representa el número de la consola virtual a la que deseas cambiar. Por ejemplo, [CTRL]+[ALT]+[F1] te llevará a la primera consola virtual, [CTRL]+[ALT]+[F2] a la segunda, y así sucesivamente.

Cada consola virtual muestra una pantalla de terminal independiente donde puedes iniciar sesión con tu nombre de usuario y contraseña. Al cambiar entre las consolas virtuales, se guardan los estados y procesos en segundo plano, lo que te permite alternar entre ellas sin perder la información o el trabajo que estás realizando en cada sesión.

Esta característica es especialmente útil en sistemas Linux sin entorno gráfico o en situaciones donde se necesita un acceso rápido a múltiples terminales para realizar tareas administrativas o de depuración. Cada consola virtual puede ejecutar comandos y aplicaciones de forma independiente, lo que proporciona una mayor flexibilidad y capacidad multitarea.

Es importante destacar que el uso de las consolas virtuales puede variar dependiendo de la distribución de Linux y el entorno de escritorio utilizado. Algunas distribuciones pueden tener configuraciones personalizadas para las combinaciones de teclas o utilizar diferentes accesos directos para cambiar entre las consolas virtuales.

4.b Consolas gráficas

En X Window System (también conocido como X11), el sistema gráfico utilizado en la mayoría de los entornos de escritorio de Linux y Unix, es posible tener múltiples consolas gráficas o sesiones gráficas en ejecución simultáneamente en un mismo computador.

Cada sesión gráfica se ejecuta en un servidor X, que es responsable de gestionar las ventanas, la representación gráfica y la interacción con el usuario. Estos servidores X pueden ejecutarse en el mismo sistema o en máquinas remotas.

El mecanismo utilizado para permitir el despliegue remoto de aplicaciones gráficas en un servidor X remoto es el comando "export DISPLAY". Este comando permite establecer una variable de entorno llamada DISPLAY que especifica la dirección IP y el número de pantalla del servidor X al que se deben enviar las aplicaciones gráficas.

El formato general del comando "export DISPLAY" es el siguiente:

export DISPLAY=:#

Donde "#" representa el número de pantalla del servidor X remoto al que deseas conectarte. Por ejemplo, "export DISPLAY=:0" se refiere a la primera pantalla del servidor X local, mientras que "export DISPLAY=192.168.0.100:0" especifica el servidor X ubicado en la dirección IP 192.168.0.100 y en la primera pantalla.

Una vez que has establecido la variable de entorno DISPLAY, puedes ejecutar aplicaciones gráficas en el servidor X remoto y visualizarlas en tu pantalla local. Por ejemplo, puedes ejecutar una aplicación gráfica como Gedit escribiendo "gedit" en la línea de comandos después de haber configurado correctamente la variable de entorno DISPLAY.

Es importante tener en cuenta que para que el despliegue remoto funcione, el servidor X remoto debe tener habilitada la opción de escucha de conexiones externas y debe tener permisos para aceptar conexiones desde tu sistema. Además, es posible que se requieran configuraciones adicionales, como túneles SSH, para garantizar la seguridad de las conexiones remotas.

En resumen, el comando "export DISPLAY" se utiliza para establecer la variable de entorno DISPLAY, que especifica la dirección IP y el número de pantalla del servidor X remoto. Esto permite la ejecución de aplicaciones gráficas en servidores X remotos y su visualización en tu pantalla local. Es un mecanismo poderoso para el despliegue remoto de aplicaciones gráficas en entornos X Window System.

4.c Autenticación y cambio de usuario

Los comandos asociados con la gestión y autenticación de usuarios son fundamentales en sistemas Unix y Linux. A continuación, te explicaré los comandos que mencionaste y su función específica:

  1. ssh (Secure Shell): El comando ssh permite acceder y administrar de forma segura sistemas remotos a través de una conexión encriptada. Se utiliza para iniciar una sesión de terminal remota en un servidor o dispositivo utilizando el protocolo SSH. Esto permite ejecutar comandos y acceder a recursos de forma segura a través de una red. La sintaxis básica es: ssh usuario@servidor, donde "usuario" es el nombre de usuario en el servidor remoto y "servidor" es la dirección IP o el nombre de dominio del servidor remoto.

  2. su (Switch User): El comando su permite cambiar de usuario en un sistema Unix o Linux sin cerrar la sesión actual. Con este comando, puedes asumir la identidad de otro usuario y ejecutar comandos o tareas con los permisos y privilegios asociados a ese usuario. La sintaxis básica es: su usuario, donde "usuario" es el nombre del usuario al que deseas cambiar.

  3. su - (Switch User with login shell): El comando su - es similar al comando su, pero también inicia una nueva sesión de inicio de sesión del usuario al que cambias. Esto significa que se cargan las variables de entorno, directorio de inicio y configuraciones específicas del usuario. La sintaxis básica es: su - usuario, donde "usuario" es el nombre del usuario al que deseas cambiar.

  4. sudo (Superuser Do): El comando sudo permite a los usuarios ejecutar comandos con los privilegios del superusuario (root) de forma controlada y segura. Proporciona una forma de delegar temporalmente los permisos de administración sin necesidad de iniciar sesión como superusuario. Los usuarios deben tener los permisos adecuados en el archivo de configuración sudoers para utilizar el comando sudo. La sintaxis básica es: sudo comando, donde "comando" es el comando que se desea ejecutar con privilegios de superusuario.

Cada uno de estos comandos tiene su función específica en la gestión y autenticación de usuarios en sistemas Unix y Linux. El comando ssh se utiliza para acceder de forma segura a sistemas remotos, el comando su permite cambiar de usuario, el comando su - cambia de usuario con una nueva sesión de inicio de sesión y el comando sudo permite ejecutar comandos con privilegios de superusuario de manera controlada.

4.d Comandos para obtener información del sistema

A continuación se presenta una explicación de los comandos para obtener información del sistema junto con los ejemplos solicitados:

  1. uname: El comando uname muestra información sobre el sistema operativo y el nombre del kernel. Usando el parámetro -a, muestra todos los detalles disponibles. Por ejemplo: uname -a.

  2. lsb_release: El comando lsb_release proporciona información sobre la distribución Linux según las especificaciones LSB (Linux Standard Base). El parámetro -a muestra todos los detalles disponibles. Por ejemplo: lsb_release -a.

  3. lsmod: El comando lsmod muestra los módulos del kernel cargados actualmente. Proporciona una lista de los módulos del kernel que están en uso. Por ejemplo: lsmod.

  4. ip: El comando ip muestra y configura la información de red del sistema. Utilizando el parámetro a, muestra todos los detalles de las interfaces de red. Con el parámetro route, muestra la tabla de enrutamiento. Por ejemplo: ip a o ip route.

  5. ifconfig: El comando ifconfig muestra información sobre las interfaces de red, como dirección IP, máscara de red y estadísticas. Sin embargo, en las distribuciones más recientes, se ha reemplazado en favor del comando ip. Por ejemplo: ifconfig.

  6. route: El comando route muestra y manipula la tabla de enrutamiento del sistema. Con el parámetro -n, muestra la tabla de enrutamiento con direcciones IP en lugar de nombres de host. Por ejemplo: route -n.

  7. free: El comando free muestra información sobre el uso de memoria del sistema. Utilizando el parámetro -mt, muestra la información en megabytes y agrega una línea de resumen total. Por ejemplo: free -mt.

  8. lspci: El comando lspci muestra información detallada sobre los dispositivos PCI conectados al sistema. Con los parámetros -v, -vv, -nn y -k, se pueden obtener diferentes niveles de detalles y visualizar información específica, como controladores de dispositivos y números de identificación. Por ejemplo: lspci -v, lspci -vv, lspci -nn y lspci -k.

  9. netstat: El comando netstat muestra información sobre las conexiones de red, tablas de enrutamiento y estadísticas. Con los parámetros -tnpa y -tnpl, muestra las conexiones TCP y sus correspondientes programas asociados. Por ejemplo: netstat -tnpa o netstat -tnpl.

  10. dmidecode: El comando dmidecode proporciona información detallada sobre la configuración del hardware del sistema. Con el parámetro -t 0, muestra información sobre el BIOS del sistema. Por ejemplo: dmidecode -t 0.

    1. -t bios: El parámetro -t bios muestra información sobre el BIOS (Basic Input/Output System) del sistema. Proporciona detalles como el fabricante, la versión y la fecha del BIOS.

    2. -t system: El parámetro -t system muestra información sobre la placa base y el sistema en general. Incluye detalles como el fabricante, el modelo, el número de serie y la versión del sistema.

    3. -t baseboard: El parámetro -t baseboard muestra información específica sobre la placa base del sistema, como el fabricante, el modelo y la versión.

    4. -t chassis: El parámetro -t chassis muestra información sobre la carcasa o chasis del sistema. Esto puede incluir detalles sobre el tipo de chasis, el fabricante y la versión.

    5. -t processor: El parámetro -t processor muestra información detallada sobre el procesador o la CPU del sistema. Esto incluye detalles como el fabricante, el modelo, la velocidad de reloj y las características compatibles.

    6. -t memory: El parámetro -t memory muestra información sobre los módulos de memoria instalados en el sistema. Proporciona detalles como la capacidad total de memoria, la velocidad y la configuración de los módulos de memoria.

    7. -t cache: El parámetro -t cache muestra información sobre las cachés del sistema, como la caché de nivel 1 (L1), la caché de nivel 2 (L2) y la caché de nivel 3 (L3) del procesador. Puede proporcionar detalles sobre el tamaño y la configuración de las cachés.

    8. -t connector: El parámetro -t connector muestra información sobre los conectores físicos en el sistema, como puertos USB, puertos de audio y otros puertos externos disponibles.

    9. -t slot: El parámetro -t slot muestra información sobre los slots de expansión en el sistema, como ranuras PCI, ranuras PCIe y otros slots de expansión disponibles.

  11. dmesg: El comando dmesg muestra los mensajes del kernel relacionados con el hardware y el inicio del sistema. Con el comando grep EFI, se pueden filtrar los mensajes relacionados con EFI (Extensible Firmware Interface). Por ejemplo: dmesg | grep EFI.

Estos comandos son útiles para obtener información detallada sobre el sistema, el hardware y la configuración de red en entornos Linux y Unix. Algunos comandos pueden requerir privilegios de superusuario (root) para mostrar información completa.

4.e Comandos para los sistemas de archivos (discos duros)

En Linux, un sistema de archivos es una estructura jerárquica que se utiliza para organizar y administrar los datos almacenados en un dispositivo de almacenamiento, como un disco duro o una partición. Define cómo se almacenan y acceden los archivos y directorios en el disco, y proporciona métodos para realizar operaciones como lectura, escritura y eliminación de datos.

A continuación, te explicaré los comandos en Linux que se utilizan para obtener información sobre los sistemas de archivos:

  1. df: El comando df (disk free) muestra información sobre el uso del espacio en disco de los sistemas de archivos montados. Utilizando el parámetro -h, muestra el tamaño y el uso en un formato legible por humanos (en unidades como KB, MB, GB, etc.). Por ejemplo: df -h.

  2. mount: El comando mount muestra las particiones o sistemas de archivos que están montados actualmente en el sistema. Utilizando el parámetro -t ext4, muestra solo los sistemas de archivos del tipo ext4. Por ejemplo: mount -t ext4.

  3. hdparm: El comando hdparm se utiliza para obtener información y realizar ajustes en los discos duros. Utilizando los parámetros -Tt, mide el rendimiento de transferencia de lectura y escritura en la memoria caché del disco. Por ejemplo: hdparm -Tt /dev/sda.

  4. swapon: El comando swapon se utiliza para activar una partición o un archivo de intercambio (swap). Activa el espacio de intercambio para el sistema. Por ejemplo: swapon /dev/sdb1.

  5. fdisk -l: El comando fdisk -l muestra información detallada sobre las particiones de los discos en el sistema. Muestra la tabla de particiones y la información relacionada con el tamaño, tipo de sistema de archivos y ubicación de las particiones. Por ejemplo: fdisk -l.

  6. blkid: El comando blkid muestra información sobre los identificadores únicos (UUID o LABEL) de los sistemas de archivos presentes en el sistema. Proporciona información como el tipo de sistema de archivos y los atributos del sistema de archivos. Por ejemplo: blkid.

  7. lsblk: El comando lsblk muestra información sobre los dispositivos de bloque (como discos duros, particiones y dispositivos de almacenamiento) en el sistema. Muestra una vista jerárquica de los dispositivos y su relación. Por ejemplo: lsblk.

  8. mkfs: El comando mkfs se utiliza para crear un sistema de archivos en una partición o dispositivo específico. Con los parámetros mkfs.ext4 y mkfs.msdos, se crean sistemas de archivos del tipo ext4 y FAT32 (MS-DOS). Por ejemplo: mkfs.ext4 /dev/sdc1 o mkfs.msdos /dev/sdd1.

Estos comandos son útiles para obtener información sobre los sistemas de archivos, administrar particiones, formatear dispositivos y ajustar el rendimiento de los discos en Linux. Proporcionan detalles importantes para la administración del almacenamiento y la gestión de los sistemas de archivos.

4.f Comandos para gestión de archivos

En Linux, hay varios comandos disponibles para manipular archivos y realizar operaciones como crear, copiar, mover, renombrar y eliminar archivos. A continuación, se explicarán algunos de los comandos más comunes para la manipulación de archivos:

  1. ls: El comando ls se utiliza para listar archivos y directorios en un directorio específico. Proporciona información como nombres de archivo, permisos, tamaño y fecha de modificación. Por ejemplo: ls o ls -l para ver una lista detallada.

  2. rm: El comando rm se utiliza para eliminar archivos y directorios en Linux. Por ejemplo, para eliminar un archivo: rm archivo.txt o para eliminar un directorio y su contenido de forma recursiva: rm -r directorio/.

  3. mv: El comando mv se utiliza para mover o renombrar archivos y directorios. Por ejemplo, para mover un archivo a un directorio diferente: mv archivo.txt directorio/ o para cambiar el nombre de un archivo: mv archivo.txt nuevo_nombre.txt.

  4. cp: El comando cp se utiliza para copiar archivos y directorios. Por ejemplo, para copiar un archivo a un directorio diferente: cp archivo.txt directorio/ o para copiar un archivo con un nuevo nombre: cp archivo.txt nuevo_archivo.txt.

  5. file: El comando file se utiliza para determinar el tipo de archivo de un archivo específico. Proporciona información sobre el formato y el contenido del archivo. Por ejemplo: file archivo.txt.

  6. wc: El comando wc se utiliza para contar palabras, líneas y caracteres en un archivo. Por ejemplo: wc archivo.txt para obtener el recuento de palabras, líneas y caracteres en el archivo.

  7. cat: El comando cat se utiliza para concatenar y mostrar el contenido de un archivo en la salida estándar. También se puede utilizar para crear nuevos archivos. Por ejemplo: cat archivo.txt o cat archivo1.txt archivo2.txt > archivo3.txt para concatenar varios archivos en uno nuevo.

  8. pr: El comando pr se utiliza para formatear y mostrar el contenido de un archivo en columnas. Proporciona opciones para ajustar el ancho de las columnas y controlar la paginación. Por ejemplo: pr -t -2 archivo.txt muestra el contenido en dos columnas.

  9. ed, vim, pico, nano, emacs, gedit: Estos son editores de texto en línea de comandos o con interfaz gráfica utilizados para editar archivos. Cada uno tiene su propio conjunto de características y comandos para la edición y manipulación de archivos. Algunos ejemplos son:

  • ed: ed archivo.txt para abrir el archivo en el editor ed.

  • vim: vim archivo.txt para abrir el archivo en el editor Vim.

  • pico: pico archivo.txt para abrir el archivo en el editor Pico.

  • nano: nano archivo.txt para abrir el archivo en el editor Nano.

  • emacs: emacs archivo.txt para abrir el archivo en el editor Emacs.

  • gedit: gedit archivo.txt para abrir el archivo en el editor de texto Gedit.

  1. find: El comando find se utiliza para buscar archivos y directorios en un sistema de archivos según ciertos criterios, como nombre, tamaño, tipo, fecha de modificación, etc. Permite realizar búsquedas avanzadas y operaciones en los archivos encontrados. Por ejemplo: find /ruta -name "*.txt" busca todos los archivos con extensión .txt en una determinada ruta.

  2. chmod: El comando chmod se utiliza para cambiar los permisos de un archivo o directorio. Permite otorgar o revocar permisos de lectura, escritura y ejecución a usuarios, grupos y otros. Por ejemplo: chmod +x script.sh otorga permisos de ejecución al archivo script.sh.

  3. chown: El comando chown se utiliza para cambiar el propietario de un archivo o directorio. Permite asignar un nuevo propietario tanto por nombre de usuario como por identificador numérico. Por ejemplo: chown usuario archivo.txt cambia el propietario del archivo.txt al usuario especificado.

  4. chgrp: El comando chgrp se utiliza para cambiar el grupo de un archivo o directorio. Permite asignar un nuevo grupo tanto por nombre de grupo como por identificador numérico. Por ejemplo: chgrp grupo archivo.txt cambia el grupo del archivo.txt al grupo especificado.

  5. touch: El comando touch se utiliza para crear un archivo vacío o actualizar la fecha y hora de acceso y modificación de un archivo existente. Si el archivo no existe, se creará vacío. Por ejemplo: touch archivo.txt crea un archivo llamado archivo.txt.

4.g Manejo de carpetas directorios

  1. pwd: El comando pwd (print working directory) muestra la ruta completa del directorio actual en el que te encuentras. Por ejemplo: pwd.

  2. cd: El comando cd (change directory) se utiliza para cambiar de directorio. Puedes cambiar al directorio padre con cd .. o al directorio de inicio con cd sin argumentos. También puedes cambiar a un directorio específico proporcionando la ruta completa o relativa como argumento. Por ejemplo: cd /ruta/directorio o cd directorio.

  3. cp: El comando cp se utiliza para copiar archivos o directorios. Con el parámetro -r, se copia un directorio y su contenido de forma recursiva. Por ejemplo: cp archivo.txt destino/ para copiar un archivo o cp -r directorio/ destino/ para copiar un directorio.

  4. mkdir: El comando mkdir se utiliza para crear un nuevo directorio. Puedes especificar la ruta completa o relativa del directorio a crear. Por ejemplo: mkdir nuevo_directorio o mkdir /ruta/nuevo_directorio.

  5. ln: El comando ln se utiliza para crear enlaces (links) entre archivos y directorios. Con el parámetro -s se crea un enlace simbólico, mientras que -f sobrescribe el enlace existente. Por ejemplo: ln -s archivo enlace para crear un enlace simbólico.

  6. ls: El comando ls se utiliza para listar archivos y directorios en el directorio actual. Proporciona información como nombres de archivo, permisos, tamaño y fecha de modificación. Puedes utilizar diferentes opciones para personalizar la salida, como -l para una lista detallada o -a para mostrar archivos ocultos. Por ejemplo: ls, ls -l, ls -a.

  7. tree: El comando tree muestra la estructura de directorios en forma de árbol. Proporciona una vista jerárquica de los directorios y subdirectorios. Por ejemplo: tree.

  8. du: El comando du (disk usage) muestra el uso de espacio en disco de archivos y directorios. Proporciona información sobre el tamaño ocupado por los archivos y directorios. Puedes utilizar opciones como -h para mostrar el tamaño en un formato legible por humanos. Por ejemplo: du -h.

  9. umask: El comando umask muestra o establece la máscara de creación de archivos por defecto. La máscara de umask define los permisos predeterminados que se aplican a los nuevos archivos y directorios. Por ejemplo: umask muestra la máscara actual, mientras que umask 022 establece la máscara en 022.

4.h Filtros

Los filtros en Unix son programas que procesan datos de entrada y generan una salida modificada. Estos filtros se pueden combinar utilizando operadores y redireccionamientos para realizar tareas más complejas. Aquí tienes una explicación de los filtros mencionados y cómo se pueden poner a interactuar:

  1. , (coma): El operador de coma permite ejecutar múltiples comandos en secuencia, uno después del otro. Por ejemplo: comando1; comando2.

  2. ` Operador (backticks): Los backticks se utilizan para ejecutar un comando y utilizar su salida como parte de otro comando. Por ejemplo: `echo `date ejecuta el comando date y utiliza su salida como argumento para el comando echo.

  3. Operador " " (comillas dobles): Las comillas dobles se utilizan para preservar los espacios y caracteres especiales en un argumento o cadena de texto. Por ejemplo: echo "Hola, mundo" mostrará la cadena "Hola, mundo" con los espacios preservados.

  4. & (ampersand): El operador de ampersand se utiliza para ejecutar un comando en segundo plano. Por ejemplo: comando &.

  5. | (pipe): El operador de tubería o pipe redirige la salida de un comando a la entrada de otro comando. Esto permite encadenar comandos para procesar datos en secuencia. Por ejemplo: comando1 | comando2.

  6. > (redirección de salida): El operador de redirección de salida > redirige la salida de un comando a un archivo, sobrescribiendo su contenido existente. Por ejemplo: comando > archivo.txt.

  7. >> (redirección de salida, anexar): El operador de redirección de salida >> redirige la salida de un comando y la agrega al final de un archivo existente sin sobrescribirlo. Por ejemplo: comando >> archivo.txt.

  8. >& (redirección de salida y error): El operador de redirección >& combina la salida estándar y el flujo de error en una sola salida. Por ejemplo: comando > archivo.txt 2>&1.

  9. less: El comando less se utiliza para mostrar el contenido de un archivo página por página. Permite desplazarse hacia arriba y hacia abajo para leer el contenido. Por ejemplo: less archivo.txt.

  10. head: El comando head muestra las primeras líneas de un archivo. Por defecto, muestra las 10 primeras líneas, pero se puede especificar un número diferente con la opción -n. Por ejemplo: head -n 5 archivo.txt muestra las primeras 5 líneas del archivo.

  11. tail: El comando tail muestra las últimas líneas de un archivo. Por defecto, muestra las 10 últimas líneas, pero se puede especificar un número diferente con la opción -n. Por ejemplo: tail -n 5 archivo.txt muestra las últimas 5 líneas del archivo.

  12. sort: El comando sort ordena las líneas de un archivo en orden alfabético o numérico. Por defecto, ordena en orden ascendente. Por ejemplo: sort archivo.txt.

  13. sed: El comando sed (stream editor) se utiliza para realizar operaciones de búsqueda y reemplazo en un archivo o en la entrada estándar. Permite editar y transformar texto de forma programática. Por ejemplo: sed 's/palabra1/palabra2/g' archivo.txt reemplaza todas las instancias de "palabra1" por "palabra2" en el archivo.

  14. grep: El comando grep (global regular expression print) busca líneas que coincidan con un patrón especificado en un archivo o en la entrada estándar. Permite realizar búsquedas utilizando expresiones regulares. Por ejemplo: grep "patrón" archivo.txt.

  15. cmp: El comando cmp compara dos archivos byte a byte y muestra las diferencias encontradas. Si no se encuentran diferencias, no muestra ninguna salida. Por ejemplo: cmp archivo1.txt archivo2.txt.

  16. diff: El comando diff compara dos archivos o directorios y muestra las diferencias entre ellos en un formato legible. Muestra las líneas que difieren entre los archivos. Por ejemplo: diff archivo1.txt archivo2.txt.

  17. patch: El comando patch se utiliza para aplicar parches generados por el comando diff. Permite aplicar cambios a archivos utilizando los archivos de parche generados previamente. Por ejemplo: patch -p1 < archivo.patch.

  18. xargs: El comando xargs se utiliza para ejecutar comandos en lotes utilizando datos de entrada. Acepta argumentos de entrada y los pasa a otro comando para su procesamiento. Por ejemplo: ls | xargs rm elimina todos los archivos listados por ls.

  19. tee: El comando tee redirige la salida de un comando tanto a la salida estándar como a uno o más archivos. Permite visualizar y almacenar la salida al mismo tiempo. Por ejemplo: comando | tee archivo.txt muestra la salida en la pantalla y la guarda en el archivo.

Al utilizar estos filtros y operadores en combinación, puedes realizar tareas complejas de manipulación de archivos, como búsqueda, filtrado, ordenación, comparación y transformación de datos.

4.i Manejo de procesos

Aquí tienes una explicación de los comandos para el manejo de procesos que mencionaste:

  1. ps: El comando ps (process status) muestra información sobre los procesos en ejecución en el sistema. Proporciona detalles como el ID del proceso (PID), el estado, el uso de CPU y memoria, y el comando asociado. Por ejemplo: ps aux muestra todos los procesos del sistema.

  2. top: El comando top muestra una vista en tiempo real de los procesos en ejecución y su uso de recursos. Proporciona información sobre el uso de CPU, memoria y otros recursos del sistema. Puedes ordenar la lista según diferentes criterios y realizar acciones en los procesos, como finalizarlos. Por ejemplo: top.

  3. watch: El comando watch se utiliza para ejecutar un comando repetidamente en intervalos regulares y mostrar la salida actualizada en tiempo real. Es útil para monitorear el resultado de un comando de forma continua. Por ejemplo: watch -n 1 ps aux muestra la salida actualizada del comando ps aux cada segundo.

  4. kill: El comando kill se utiliza para enviar señales a procesos en ejecución. Puedes terminar un proceso utilizando su PID. Algunas señales comunes son:

    • -1 (SIGHUP): Recargar la configuración de un proceso.

    • -9 (SIGKILL): Terminar un proceso inmediatamente.

    • -15 (SIGTERM): Enviar una señal de terminación suave al proceso. Por ejemplo: kill -9 PID finaliza el proceso con el ID de proceso especificado.

  5. ^C (Control-C): La combinación de teclas ^C (Control-C) se utiliza para enviar una señal de interrupción (SIGINT) a un proceso en ejecución en la terminal. Es utilizado para detener o abortar un proceso. Por ejemplo, al presionar ^C, se interrumpe la ejecución de un comando en la terminal.

  6. ^Z (Control-Z): La combinación de teclas ^Z (Control-Z) se utiliza para suspender un proceso en ejecución y colocarlo en segundo plano. El proceso se detiene temporalmente y puedes reanudarlo en primer plano o segundo plano utilizando los comandos fg o bg. Por ejemplo, al presionar ^Z, se suspende un proceso.

  7. bg: El comando bg se utiliza para poner un proceso en segundo plano. Permite que un proceso suspendido o detenido se ejecute en segundo plano. Por ejemplo: bg %1 pone en segundo plano el primer proceso en la lista de procesos suspendidos.

  8. fg: El comando fg se utiliza para poner un proceso en primer plano. Permite que un proceso suspendido o detenido se ejecute en primer plano y controle la terminal. Por ejemplo: fg %1 trae al primer proceso suspendido al primer plano.

  9. nohup: El comando nohup se utiliza para ejecutar un comando o proceso de forma persistente incluso después de cerrar la sesión o terminal actual. El comando se ejecuta en segundo plano y no se ve afectado por la desconexión. Por ejemplo: nohup comando &.

  10. nice: El comando nice se utiliza para ajustar la prioridad de ejecución de un proceso. Puedes asignar una prioridad más alta o más baja al proceso en función de su valor de niceness. Por ejemplo: nice -n 10 comando establece una prioridad baja para el proceso.

  11. renice: El comando renice se utiliza para cambiar la prioridad de ejecución de un proceso en ejecución. Puedes ajustar la prioridad de un proceso existente utilizando su PID. Por ejemplo: renice -n 5 -p PID cambia la prioridad del proceso con el ID de proceso especificado.

  12. dmesg: El comando dmesg muestra el buffer de mensajes del kernel. Proporciona información sobre eventos y mensajes del sistema relacionados con el kernel y los controladores. Por ejemplo: dmesg muestra los mensajes del kernel más recientes.

  13. systemd-analyze blame: El comando systemd-analyze blame muestra una lista de los servicios y unidades de systemd, ordenados por el tiempo que tardaron en iniciarse. Proporciona información sobre qué servicios están ralentizando el arranque del sistema. Por ejemplo: systemd-analyze blame.

  14. systemctl: El comando systemctl se utiliza para controlar y administrar los servicios de systemd en un sistema Linux. Proporciona comandos para iniciar, detener, reiniciar, habilitar y deshabilitar servicios. Por ejemplo: systemctl start servicio inicia un servicio específico.

Estos comandos te permiten administrar y controlar los procesos en un sistema Linux. Puedes ver información sobre los procesos, monitorear su uso de recursos, finalizarlos, suspenderlos, cambiar su prioridad y gestionar servicios relacionados con systemd.

4.j Comandos informativos

Aquí tienes una descripción de los comandos para obtener información en Unix/Linux:

  1. man: El comando man (manual) se utiliza para mostrar el manual de usuario de otros comandos. Proporciona documentación detallada y ayuda sobre cómo usar un comando específico. Por ejemplo: man ls muestra el manual del comando ls.

  2. info: El comando info muestra información de ayuda en formato de documentos de info. Proporciona una vista más estructurada y enlazada que el manual man. Algunos paquetes y comandos tienen información disponible en el formato info. Por ejemplo: info coreutils muestra la información principal de los comandos del paquete coreutils.

  3. La tecla tab: La tecla tab se utiliza para completar automáticamente nombres de archivos, directorios y comandos en la línea de comandos. Al presionar la tecla tab, el sistema intentará completar la palabra o mostrar las opciones disponibles para completarla. Por ejemplo, al escribir ls mydir/TAB, se completarán automáticamente los nombres de archivos o directorios que comiencen con "mydir".

  4. ^D (Control + D): La combinación de teclas ^D (Control + D) se utiliza para indicar el final de entrada o salida. En la mayoría de las situaciones, se utiliza para enviar el carácter de fin de archivo (EOF) al comando o programa que está esperando entrada. Por ejemplo, al ejecutar un comando interactivo, como cat, ^D se usa para finalizar la entrada de datos.

  5. who: El comando who muestra información sobre los usuarios que están actualmente conectados al sistema. Proporciona detalles como nombres de usuario, terminal de conexión, fecha y hora de inicio de sesión. Por ejemplo: who muestra la lista de usuarios conectados al sistema.

  6. which: El comando which muestra la ubicación de un archivo ejecutable asociado con un comando en particular. Muestra la ruta completa del archivo binario que se ejecutaría si se ingresa el comando. Por ejemplo: which ls muestra la ubicación del comando ls.

  7. whoami: El comando whoami muestra el nombre de usuario del usuario actual que está ejecutando el comando. Proporciona el nombre de usuario del contexto actual. Por ejemplo: whoami muestra el nombre de usuario actual.

  8. date: El comando date muestra la fecha y hora actual del sistema. Puede mostrar la fecha y hora en diferentes formatos según las opciones especificadas. Por ejemplo: date, date +%Y-%m-%d muestra la fecha en el formato AAAA-MM-DD.

  9. echo: El comando echo muestra mensajes o variables en la salida estándar. Puede mostrar texto simple o el valor de variables de entorno y variables definidas por el usuario. Por ejemplo: echo "Hola, mundo" muestra el mensaje "Hola, mundo" en la pantalla.

  10. bc: El comando bc (basic calculator) es una calculadora interactiva de precisión arbitraria. Proporciona una interfaz de línea de comandos para realizar cálculos matemáticos. Puede realizar operaciones aritméticas simples y más complejas, como funciones trigonométricas y logarítmicas. Por ejemplo: bc, 10 + 5 muestra el resultado de la suma.

Estos comandos te permiten obtener información útil en Unix/Linux. Puedes acceder a la documentación de los comandos con man o info, completar automáticamente nombres de archivos con la tecla tab, obtener información sobre usuarios y procesos con who, which, whoami y obtener información de fecha y hora con date. Además, puedes mostrar mensajes en la salida estándar utilizando echo y realizar cálculos matemáticos básicos con bc.

4.k Empaquetamiento y compresion

  1. tar: El comando tar se utiliza para crear y manipular archivos de almacenamiento. Permite combinar múltiples archivos y directorios en un solo archivo, conocido como archivo tar. No comprime los archivos, solo los agrupa. Por ejemplo:

    • Crear un archivo tar: tar -cf archivo.tar archivo1 archivo2 directorio

    • Extraer archivos de un archivo tar: tar -xf archivo.tar

    • Ver el contenido de un archivo tar: tar -tf archivo.tar

  2. gzip: El comando gzip se utiliza para comprimir archivos utilizando el algoritmo de compresión gzip. Comprime un solo archivo y agrega la extensión ".gz" al archivo comprimido. Por ejemplo:

    • Comprimir un archivo: gzip archivo

    • Descomprimir un archivo: gzip -d archivo.gz

  3. bzip2: El comando bzip2 se utiliza para comprimir archivos utilizando el algoritmo de compresión bzip2. Proporciona una mayor relación de compresión que gzip, pero a costa de una mayor utilización de CPU. Agrega la extensión ".bz2" al archivo comprimido. Por ejemplo:

    • Comprimir un archivo: bzip2 archivo

    • Descomprimir un archivo: bzip2 -d archivo.bz2

  4. split: El comando split se utiliza para dividir un archivo grande en partes más pequeñas. Puede especificar el tamaño de cada parte en bytes, kilobytes, megabytes, etc. Los archivos divididos se denominan "xaa", "xab", "xac", etc. Por ejemplo:

    • Dividir un archivo en partes de 1 MB: split -b 1M archivo archivo_parte

    • Unir partes divididas en un solo archivo: cat archivo_parte* > archivo_unido

  5. cat: El comando cat se utiliza para concatenar archivos y mostrar su contenido en la salida estándar. También se puede utilizar para crear nuevos archivos o agregar contenido a un archivo existente. Por ejemplo:

    • Concatenar archivos y mostrar el contenido: cat archivo1 archivo2

    • Crear un nuevo archivo: cat > nuevo_archivo

    • Agregar contenido a un archivo existente: cat contenido >> archivo_existente

Estos comandos te permiten empaquetar archivos en un solo archivo con tar, comprimir archivos con gzip o bzip2, dividir archivos grandes en partes más pequeñas con split y concatenar archivos con cat. Puedes utilizar estas herramientas para organizar y comprimir archivos, así como para manejar archivos grandes de manera más eficiente.

4.l Backup

Los comandos más frecuentes para realizar copias de seguridad (backups) en Unix/Linux son:

  1. rsync: El comando rsync se utiliza para sincronizar y copiar archivos y directorios de forma eficiente. Puede realizar copias de seguridad incrementales, lo que significa que solo se copian los archivos nuevos o modificados. Además, rsync puede comprimir y descomprimir datos durante la transferencia, y puede realizar copias de seguridad tanto en sistemas locales como en sistemas remotos a través de SSH. Por ejemplo:

    • Realizar una copia de seguridad local: rsync -av origen/ destino/

    • Realizar una copia de seguridad remota a través de SSH: rsync -avz origen/ usuario@host:destino/

  2. dd: El comando dd se utiliza para copiar y convertir archivos. Aunque no está específicamente diseñado para realizar copias de seguridad, puede usarse para clonar particiones o discos completos. Con dd, puedes copiar el contenido de un disco o partición en otro, creando una copia exacta, incluidos los datos y la estructura del sistema de archivos. Sin embargo, ten cuidado al usar dd, ya que puede ser destructivo si se utilizan los parámetros incorrectos. Por ejemplo:

    • Realizar una copia de seguridad de una partición: dd if=/dev/sda1 of=copia_particion.img

  3. duplicity: El comando duplicity es una herramienta de respaldo que se enfoca en la seguridad y el cifrado. Utiliza la compresión y la encriptación para realizar copias de seguridad de forma incremental en almacenamientos locales, remotos o en la nube. Duplicity también admite la programación de respaldos y la restauración selectiva de archivos o directorios específicos. Por ejemplo:

    • Realizar una copia de seguridad local en un directorio: duplicity /origen/ file:///destino/

    • Realizar una copia de seguridad en un servidor remoto usando SSH: duplicity /origen/ ssh://usuario@host/destino/

Estos comandos te proporcionan opciones para realizar copias de seguridad de archivos y directorios de manera eficiente y segura. rsync se especializa en la sincronización y copia incremental, dd es útil para clonar particiones o discos completos, y duplicity ofrece características avanzadas de encriptación y programación de respaldos. Dependiendo de tus necesidades y requisitos específicos, puedes elegir el comando más adecuado para tus tareas de copia de seguridad.

4.m Automatización de procesos

Los comandos para programar la ejecución de procesos en Unix/Linux son: at y cron.

  1. at: El comando at se utiliza para programar la ejecución de comandos o scripts en un momento específico en el futuro. Puedes especificar la hora y la fecha exactas en que deseas que se ejecute el comando. at es útil para realizar tareas puntuales y programadas. Por ejemplo:

    • Programar un comando para ejecutarse en un momento específico: at 10:00 PM + 2 days

    • Especificar el archivo que contiene los comandos a ejecutar: at 8:30 AM < script.sh

    • Listar las tareas programadas con atq y eliminar tareas con atrm.

  2. cron: El cron es un servicio de programación de tareas que se ejecuta en segundo plano. Permite ejecutar comandos o scripts de forma periódica y automática en base a una configuración predefinida. La configuración de cron se guarda en archivos llamados "crontabs". Puedes crear y editar los crontabs utilizando el comando crontab. Cada línea de un crontab define una tarea a realizar y su frecuencia. Por ejemplo:

    • Editar el crontab del usuario actual: crontab -e

    • Programar un comando para que se ejecute cada día a las 8:00 AM: 0 8 * * * comando

    • Listar las tareas programadas con crontab -l y eliminar tareas con crontab -r.

El cron y el comando at son herramientas poderosas para la automatización de procesos en Unix/Linux. Mientras que at es adecuado para ejecuciones únicas y programadas en momentos específicos, cron se enfoca en la ejecución periódica y repetitiva de tareas. Puedes utilizar estas herramientas para programar y automatizar la ejecución de comandos y scripts de manera eficiente en tu sistema.

5 Modos de inicio

En los sistemas Unix/Linux, los modos de inicialización son diferentes estados en los que puede encontrarse el sistema operativo durante el proceso de arranque y apagado. El comando init se utiliza para cambiar los modos de inicialización del sistema, mientras que los comandos poweroff y shutdown se utilizan para apagar el sistema.

  1. Modos de inicialización:

    • Modo de arranque (boot): Es el estado en el que el sistema se encuentra durante el proceso de inicio. Aquí se realizan tareas como la inicialización del hardware, la carga del núcleo del sistema operativo y la configuración inicial.

    • Modo de usuario único (single user): También conocido como modo de mantenimiento, es un estado de inicio mínimo en el que solo se carga el nivel de ejecución esencial. Se utiliza para realizar tareas de mantenimiento y solución de problemas, como la reparación de archivos dañados.

    • Modo multiusuario (multiuser): Es el estado de funcionamiento normal del sistema, en el que se cargan todos los servicios y se permite el acceso a múltiples usuarios. Aquí se inician los servicios del sistema, como los servicios de red, servidores web, bases de datos, etc.

  2. Comando init: El comando init se utiliza para cambiar el nivel de ejecución (modo de inicialización) del sistema. Su uso depende de la distribución y versión de Unix/Linux que se esté utilizando. Por ejemplo:

    • Cambiar al modo de usuario único (modo de mantenimiento): init 1

    • Cambiar al modo multiusuario: init 2 o init 5

  3. Comando poweroff: El comando poweroff se utiliza para apagar el sistema de forma segura. Detiene todos los servicios y apaga el sistema de manera adecuada, evitando la pérdida de datos o daños en el sistema de archivos. Por ejemplo:

    • Apagar el sistema inmediatamente: poweroff

    • Establecer un tiempo de espera antes de apagar: poweroff -t 60 (apaga el sistema en 60 segundos)

  4. Comando shutdown: El comando shutdown se utiliza para programar el apagado del sistema o para enviar un mensaje de advertencia a los usuarios antes de apagarlo. Proporciona una opción de tiempo de espera configurable y permite enviar mensajes a los usuarios conectados antes de apagar el sistema. Por ejemplo:

    • Programar un apagado en un tiempo específico: shutdown -h 10:00 (apaga el sistema a las 10:00 AM)

    • Enviar un mensaje a los usuarios antes de apagar: shutdown -h +5 "El sistema se apagará en 5 minutos"

Estos comandos te permiten controlar los modos de inicialización del sistema y realizar un apagado adecuado del sistema operativo en Unix/Linux. Utilízalos con precaución y asegúrate de guardar cualquier trabajo importante antes de apagar el sistema.

6 Modos de inicio

En sistemas Unix/Linux, los modos de inicialización son diferentes estados en los que puede estar el sistema operativo durante el proceso de arranque, apagado o reinicio. A continuación se describen los modos de inicialización más comunes y los comandos asociados:

  1. Modo de inicialización 0 (halt): El modo de inicialización 0, también conocido como halt, se utiliza para apagar el sistema de manera segura. Puedes utilizar el comando halt, poweroff o shutdown con la opción -h para entrar en este modo. Por ejemplo: halt -h, poweroff -h, shutdown -h now.

  2. Modo de inicialización 1 (single-user): El modo de inicialización 1, también conocido como modo de usuario único o modo de mantenimiento, es un estado de arranque mínimo en el que solo se cargan los servicios y procesos esenciales. Se utiliza para realizar tareas de mantenimiento o solución de problemas sin cargar el entorno completo del sistema. Para entrar en este modo, puedes utilizar el comando init con el nivel de ejecución 1. Por ejemplo: init 1.

  3. Modo de inicialización 2 y 3 (multi-user): Los modos de inicialización 2 y 3, también conocidos como modos multiusuario, son estados de arranque en los que se cargan servicios y procesos adicionales para admitir múltiples usuarios. Estos modos pueden variar según la distribución de Linux, pero generalmente se utilizan para arrancar en un entorno de línea de comandos o en un entorno de línea de comandos con servicios adicionales cargados. No se carga un entorno de escritorio gráfico en estos modos. Puedes utilizar el comando init con los niveles de ejecución 2 o 3 para entrar en estos modos. Por ejemplo: init 2, init 3.

  4. Modo de inicialización 5 (multi-user con entorno gráfico): El modo de inicialización 5, también conocido como modo multiusuario con entorno gráfico, es similar al modo de inicialización 3, pero también carga un entorno de escritorio gráfico. Este modo es el que se utiliza normalmente para iniciar un sistema con interfaz gráfica de usuario (GUI). Puedes utilizar el comando init con el nivel de ejecución 5 para entrar en este modo. Por ejemplo: init 5.

  5. Modo de inicialización 6 (reinicio): El modo de inicialización 6, también conocido como reinicio, se utiliza para reiniciar el sistema. Puedes utilizar el comando reboot, shutdown o init con el nivel de ejecución 6 para reiniciar el sistema. Por ejemplo: reboot, shutdown -r now, init 6.

Los comandos poweroff, halt, shutdown y reboot son herramientas para apagar o reiniciar el sistema de manera controlada. poweroff y halt se utilizan para apagar el sistema, mientras que shutdown se utiliza para programar un apagado o reinicio futuro. Puedes utilizar diferentes opciones con estos comandos para especificar la hora de apagado o reinicio, enviar un mensaje a los usuarios antes de la acción, etc.

7 Shell

Los shells de Linux son programas que proporcionan una interfaz de línea de comandos entre el usuario y el sistema operativo. En Linux, existen varios shells disponibles, cada uno con sus propias características y funcionalidades, los más comunes son:

  1. sh (Bourne Shell): El sh (Bourne Shell) es uno de los shells más antiguos y básicos en Linux. Tiene una sintaxis sencilla y proporciona un conjunto mínimo de funcionalidades. Aunque es limitado en comparación con otros shells más modernos, sigue siendo utilizado en sistemas Unix y Linux como el shell predeterminado.

  2. bash (Bourne Again Shell): bash (Bourne Again Shell) es el shell más comúnmente utilizado en la mayoría de las distribuciones de Linux. Es una mejora del sh original y es compatible con él. bash proporciona una amplia gama de características y funcionalidades, como historial de comandos, expansión de comandos, autocompletado y scripting avanzado. Es altamente personalizable y extensible.

  3. csh (C Shell): csh (C Shell) se basa en el lenguaje de programación C y tiene una sintaxis similar. Proporciona características adicionales, como la edición de comandos en línea y el uso de variables y alias. csh es conocido por su conjunto de comandos y su capacidad para personalizar el entorno del usuario.

  4. tcsh (TENEX C Shell): tcsh (TENEX C Shell) es una mejora del csh original. Proporciona características adicionales, como autocompletado mejorado, edición de comandos más avanzada y soporte para variables y alias. tcsh es compatible con el csh, lo que significa que los scripts escritos en csh se pueden ejecutar en tcsh sin modificaciones.

  5. zsh (Z Shell): zsh (Z Shell) es un shell muy potente y altamente personalizable. Combina características de bash, csh y otros shells, y agrega sus propias funcionalidades. zsh proporciona autocompletado avanzado, expansión de comandos más sofisticada, corrección de errores y tematización. Es muy popular entre los usuarios que desean un shell con muchas opciones de configuración.

Cada shell tiene sus ventajas y características distintivas. La elección del shell depende de las preferencias personales, las necesidades específicas y la compatibilidad con el sistema en uso. bash es el más ampliamente utilizado y se considera el estándar de facto en Linux, pero otros shells como zsh y csh ofrecen características adicionales que pueden resultar útiles para ciertos usuarios y escenarios.

7.a Scripts

Un script es un archivo de texto que contiene una serie de comandos y instrucciones que se pueden ejecutar en un shell o intérprete de comandos. Estos scripts son utilizados para automatizar tareas repetitivas, ejecutar secuencias de comandos complejas y realizar acciones específicas en sistemas operativos basados en Unix, como Linux.

Los scripts se utilizan comúnmente en diversas áreas, como administración de sistemas, desarrollo de software, automatización de tareas y procesamiento de datos. Algunos usos comunes de los scripts incluyen:

  1. Automatización de tareas: Los scripts permiten automatizar tareas repetitivas o secuencias de comandos complejas. Por ejemplo, se pueden crear scripts para realizar copias de seguridad, actualizar el sistema, configurar entornos de desarrollo, entre otros.

  2. Administración del sistema: Los scripts facilitan la administración del sistema al realizar tareas como la gestión de usuarios, la configuración de servicios, la monitorización del rendimiento, la programación de tareas, etc.

  3. Desarrollo de software: Los scripts son utilizados por desarrolladores para compilar, probar y desplegar aplicaciones, automatizar la construcción de proyectos, ejecutar pruebas unitarias o realizar tareas de gestión de código fuente.

  4. Procesamiento de datos: Los scripts se utilizan para procesar y manipular datos, realizar transformaciones, filtrar información y generar informes. Pueden ser útiles en tareas de análisis de log, procesamiento de archivos CSV, transformaciones de datos en lote, entre otros.

  5. Personalización del entorno de usuario: Los usuarios pueden crear scripts para personalizar su entorno de trabajo, como configurar variables de entorno, definir alias, crear funciones personalizadas o automatizar flujos de trabajo específicos.

Los scripts se escriben en lenguajes de scripting como bash, Python, Perl, Ruby, entre otros. Cada lenguaje tiene su propia sintaxis y características específicas, pero comparten el objetivo común de ejecutar comandos y automatizar tareas. Los scripts proporcionan flexibilidad y eficiencia al permitir a los usuarios y administradores personalizar y automatizar acciones según sus necesidades específicas.

Aquí se presentan ejemplos de scripts en sh, bash y tcsh:

  1. Ejemplo de script en sh (Bourne Shell):

sh#!/bin/sh# Este es un ejemplo de script en shecho "Hola, este es un script en sh."echo "La fecha actual es: $(date)"echo "El directorio actual es: $(pwd)"
  1. Ejemplo de script en bash (Bourne Again Shell):

bash#!/bin/bash# Este es un ejemplo de script en bashecho "Hola, este es un script en bash."echo "La fecha actual es: $(date)"echo "El directorio actual es: $(pwd)"
  1. Ejemplo de script en tcsh (TENEX C Shell):

tcsh#!/bin/tcsh# Este es un ejemplo de script en tcshecho "Hola, este es un script en tcsh."echo "La fecha actual es: `date`"echo "El directorio actual es: `pwd`"

Estos ejemplos muestran scripts básicos que imprimen un mensaje de saludo, la fecha actual y el directorio actual utilizando diferentes shells. Cada script comienza con la línea shebang #! seguida de la ruta del intérprete adecuado para el shell específico. Luego, se utilizan comandos como echo, date y pwd para mostrar información en la salida estándar.

Recuerda que debes dar permisos de ejecución al archivo del script usando el comando chmod +x script.sh para poder ejecutarlos.

9 Créditos y descargo de responsabilidad

Este artículo se ha producido con apoyo de la información proporcionada por ChatGPT, un modelo de lenguaje desarrollado por OpenAI la cual ha sido solicitada, consolidada, verificada y corregida por el autor.

10 Licencia

 
Manual básico UNIX/Linux está bajo una licencia de Creative Commons Reconocimiento-CompartirIgual 4.0 Internacional.

Ricardo Naranjo Faccini

Ricardo Naranjo Faccini Desarrollador WWW

Nació en Barranquilla, Atl, Colombia el 14 de enero de 1971

  • Magíster en Ingeniería de Sistemas y Computación de la Universidad de Los Andes 1998
  • Ingeniero Civil de la Universidad de Los Andes 1995
  • Diplomado en docencia en Ingeniería de la Pontificia Universidad Javeriana 2008
  • Gerente de la firma Skina IT Solutions, su gestión ha llevado a la empresa al nivel de exportación de software. Experto en calidad en el desarrollo de software con énfasis en el uso de herramientas libres orientadas hacia WWW.
  • CTO de AuthorsGlobe, empresa participante en el MIT 100K, elegida como parte del "TOP 10" entre 300 proyectos presentados en este concurso del Massachussets Institute of Technology MIT.
  • Durante el periodo 2004-2005 se desempeñó como Gerente de desarrollo de negocios NOVELL en Nexsys de Colombia.
  • Ejerce docencia como catedrático en la Universidad Javeriana, al igual que lo ha realizado en la Universidad de Los Andes, Universidad de Manizales y Universidad autónoma de Bucaramanga.
  • Comprometido con la divulgación del software libre y su aplicación en Colombia, ha dictado más de 60 conferencias en todo el país, co-fundador de LinuxCol, la primera comunidad de usuarios de Linux en Colombia.
  • Colaborador del grupo ACIS-Linux.

Calle 95 #47-33 int 8

Calle 95 #47-33 int 8, Bogotá, Colombia

Tel: +57 300 214 6210

ventas@skinait.com

Desarrollado por Skina IT Solutions