Linux es un sistema operativo de código abierto basado en el kernel homónimo, desarrollado originalmente por Linus Torvalds en 1991. A diferencia de sistemas propietarios como Windows o macOS, Linux no es un producto único, sino una familia de distribuciones que comparten el mismo núcleo central pero varían en su entorno de usuario, gestor de paquetes y herramientas de configuración. Su arquitectura flexible lo convierte en la base de infraestructuras críticas, desde servidores web y supercomputadoras hasta dispositivos móviles y sistemas embebidos.

La importancia de Linux radica en su capacidad de adaptación y su modelo de desarrollo colaborativo. Al permitir que cualquier persona inspeccione, modifique y mejore el código fuente, el sistema ha logrado una estabilidad y eficiencia que lo han convertido en el estándar de facto en el mundo de la computación en nube y en la industria tecnológica. Comprender sus características técnicas es esencial para cualquier estudiante de informática o ingeniería que desee dominar la gestión de recursos del sistema.

Definición y concepto

Linux no es un producto único, sino una arquitectura modular. Técnicamente, el término se refiere a un sistema operativo de código abierto basado en Unix, pero su definición precisa requiere distinguir entre dos componentes fundamentales: el kernel y la distribución. Esta distinción es la clave para entender por qué existen tantas versiones de Linux y cómo funcionan bajo el capó.

El núcleo del sistema

El kernel de Linux es el corazón del sistema. Es un programa que actúa como intermediario entre el hardware del ordenador y los programas que ejecutamos. Cuando abres un archivo, el kernel habla directamente con la memoria RAM y el disco duro para traer los datos. Sin él, el procesador sería una máquina casi muda.

Es un kernel de tipo monolítico. Esto significa que la mayoría de las funciones esenciales, como la gestión de la memoria y los procesos, se ejecutan en el mismo espacio de direcciones. La consecuencia es directa: mayor velocidad de procesamiento a cambio de una complejidad estructural más alta.

Dato curioso: Aunque el kernel fue escrito originalmente por Linus Torvalds, hoy en día más del 70% del código fuente ha sido añadido por ingenieros de empresas como Intel, Red Hat y Google. Es un esfuerzo colectivo masivo.

La distribución: el sistema completo

Cuando los usuarios dicen "instalar Linux", generalmente se refieren a una distribución. Una distribución es el conjunto completo formado por el kernel más una selección de librerías, herramientas de usuario y un entorno gráfico. Es la capa que hace que el sistema sea habitable para el usuario final.

La diferencia es crítica. El kernel gestiona los recursos; la distribución ofrece la experiencia. Por ejemplo, Ubuntu incluye el kernel Linux, el gestor de paquetes APT y el entorno de escritorio GNOME. Debian usa el mismo kernel pero cambia el gestor de paquetes y las librerías base. Ambos son Linux, pero se comportan de forma distinta.

Arquitectura técnica y código abierto

La definición técnica de Linux se basa en su naturaleza de código abierto. El código fuente está disponible bajo licencias como la GNU General Public License (GPL). Esto permite que cualquier desarrollador pueda inspeccionar, modificar y mejorar el sistema. No hay una sola empresa que controle todo; es un modelo de gobernanza compartida.

El sistema se estructura en capas. En la base está el hardware. Encima, el kernel gestiona los dispositivos mediante controladores. Sobre el kernel, las librerías (como la famosa librería C) ofrecen funciones comunes a los programas. Finalmente, el entorno de usuario ejecuta las aplicaciones que vemos en la pantalla.

Esta separación entre el núcleo y el entorno de usuario permite una gran flexibilidad. Puedes tener un servidor Linux sin pantalla gráfica (solo kernel y herramientas de línea de comandos) o un escritorio con interfaz visual completa. La arquitectura es lo que define a Linux hoy en día, más que su historia.

¿Qué características técnicas definen a Linux?

Linux se distingue por su arquitectura modular y su eficiencia en el manejo de recursos. Estas características técnicas permiten que el sistema operativo funcione en todo, desde un reloj inteligente hasta un servidor principal. Analizar estos componentes revela por qué Linux sigue siendo el estándar en la industria tecnológica.

Gestión de memoria y paginación

El kernel de Linux gestiona la memoria mediante paginación. Este mecanismo divide la memoria física en bloques de tamaño fijo, llamados páginas. Cuando una aplicación necesita más memoria de la disponible en la RAM, el sistema mueve las páginas menos usadas a un espacio en el disco duro conocido como memoria virtual o swap. Esto permite ejecutar procesos más grandes que la memoria física real.

Todo es un archivo

Una de las filosofías centrales de Linux es la jerarquía de archivos. En este sistema, casi todo se representa como un archivo. Los dispositivos de hardware, como el teclado o la pantalla, se encuentran en el directorio /dev. La información del sistema operativo y los procesos activos se almacena en /proc. Esta uniformidad simplifica la programación, ya que los desarrolladores pueden leer y escribir en dispositivos casi como si fueran archivos de texto estándar.

Dato curioso: Si abres el archivo /proc/cpuinfo con un editor de texto, verás los detalles de tu procesador en tiempo real sin necesidad de un programa especial.

Procesos y la tabla de procesos

Cada programa en ejecución es un proceso. Linux mantiene una tabla de procesos en la memoria del kernel que rastrea el estado de cada uno. Cada proceso tiene un identificador único llamado PID (Process ID). El sistema asigna tiempos de ejecución a cada proceso, creando la ilusión de que varios programas funcionan simultáneamente. Puedes ver esta información en la terminal usando el comando ps aux, que muestra una lista detallada de los procesos activos y su consumo de recursos.

Llamadas al sistema

Las llamadas al sistema (System Calls) son la interfaz entre el software de usuario y el kernel. Cuando una aplicación necesita un recurso, como leer un archivo, envía una llamada al sistema al kernel. El kernel verifica los permisos y ejecuta la acción. Este mecanismo protege la memoria y los datos, evitando que una aplicación mal comportada colapse todo el sistema. Ejemplos comunes incluyen read() para leer datos y write() para escribirlos.

Modularidad del kernel

El kernel de Linux es altamente modular. Esto significa que no todo el código del sistema está cargado en la memoria al mismo tiempo. Los módulos del kernel son pequeños archivos de código (con extensión .ko) que se pueden cargar y descargar según sea necesario. Por ejemplo, cuando conectas un ratón USB, el sistema carga automáticamente el módulo del controlador USB correspondiente. Esta flexibilidad permite que Linux se adapte a diferentes hardware sin reiniciar el equipo, ahorrando memoria y aumentando la eficiencia.

Arquitectura del kernel: monolítico modular vs microkernel

El núcleo de Linux se clasifica técnicamente como un kernel monolítico modular. Esta arquitectura significa que la mayor parte del código del sistema operativo —gestión de memoria, sistema de archivos, controladores de dispositivos— se ejecuta en el mismo espacio de direcciones que el kernel. A diferencia de un sistema puramente monolítico, Linux permite cargar y descargar módulos dinámicamente sin reiniciar el equipo. Esto ofrece una flexibilidad notable para gestionar hardware sin sobrecargar el núcleo base.

Debate actual: Durante décadas, la comunidad técnica discutió si Linux debería migrar a un microkernel para ganar estabilidad. Aunque sistemas como Minix o QEMU utilizan este enfoque, Linux mantuvo su diseño por su rendimiento superior en entornos de alta carga. La decisión técnica priorizó la velocidad sobre la modulación extrema.

La distinción fundamental radica en cómo se organizan los espacios de direcciones. En el espacio de usuario, las aplicaciones ejecutan instrucciones y acceden a memoria virtual asignada. Cualquier error aquí suele afectar solo a esa aplicación. En el espacio del kernel, las instrucciones se ejecutan con privilegios elevados. Un fallo aquí, como un puntero nulo no gestionado, puede derribar todo el sistema operativo. Esta separación es crítica para la estabilidad y la seguridad del sistema.

Comparativa de arquitecturas

Característica Kernel Monolítico (Linux) Microkernel (Minix, QEMU)
Estructura Todo en un solo espacio de direcciones Solo lo esencial en el núcleo; servicios en espacios de usuario
Rendimiento Alto (menos cambios de contexto) Variable (más cambios de contexto entre servicios)
Estabilidad Un fallo en un controlador puede colapsar el kernel Un fallo en un servicio suele afectar solo a ese servicio
Modularidad Módulos cargados dinámicamente Servicios independientes en espacios de usuario
Complejidad Gestión de memoria compartida más compleja Comunicación interproceso más compleja

La elección de Linux por el modelo monolítico modular responde a necesidades prácticas de rendimiento. En sistemas donde la velocidad de respuesta es crítica, como servidores web o estaciones de trabajo gráficas, la reducción de cambios de contexto entre el espacio de usuario y el kernel marca la diferencia. Los microkernels, al mover más servicios al espacio de usuario, requieren más comunicación interproceso, lo que introduce latencia.

Un ejemplo concreto ilustra esta diferencia. En un sistema con microkernel, si el controlador de pantalla falla, solo se reinicia ese servicio. En Linux, si ese controlador falla en modo kernel, puede provocar un pantallazo azul o reinicio completo. Sin embargo, la madurez de los controladores de Linux ha reducido significativamente estos fallos, haciendo que la ventaja de estabilidad del microkernel sea menos decisiva en la práctica.

La arquitectura de Linux demuestra que no existe una solución perfecta para todos los escenarios. El equilibrio entre rendimiento y modularidad que ofrece el kernel monolítico modular ha sido clave para su adopción masiva. Desde servidores de datos hasta dispositivos móviles, esta arquitectura ha demostrado su capacidad de adaptación y eficiencia.

Gestión de procesos y concurrencia en Linux

La gestión de procesos es el núcleo de la eficiencia de Linux. El sistema no ejecuta todo al mismo tiempo, sino que organiza el flujo de trabajo mediante estados definidos y un planificador inteligente. Esta arquitectura permite que múltiples tareas compartan recursos sin colapsar la memoria o la velocidad de procesamiento.

Ciclo de vida y estados de un proceso

Cada proceso en Linux atraviesa una secuencia de estados que determinan su interacción con la CPU. Un proceso nuevo entra en estado de Ejecución cuando el planificador le asigna tiempo de procesador. Si espera un evento externo, como la lectura de un archivo o una entrada del usuario, pasa a Espera o Dormido. En este estado, el proceso consume poca energía porque la CPU puede atender otras tareas mientras llega el dato necesario.

Existe también el estado Detenido, común cuando se pausa una tarea manualmente o por una señal del sistema. Un proceso solo vuelve a ejecutarse cuando cambia su estado hacia la cola de espera activa. Esta transición constante es lo que da la sensación de simultaneidad en el escritorio.

Dato curioso: En sistemas monoprocesador antiguos, un proceso "dormido" liberaba la CPU casi instantáneamente, permitiendo que tres programas se sintieran activos al mismo tiempo gracias a cambios de estado cada pocos milisegundos.

El planificador CFS y la justicia computacional

Linux utiliza el Completely Fair Scheduler (CFS) como planificador por defecto en la mayoría de las versiones modernas. Este algoritmo busca equilibrar el tiempo de CPU entre todos los procesos activos, evitando que uno solo domine el recurso. El CFS mide la "justicia" basándose en el tiempo de ejecución virtual, ajustando dinámicamente la prioridad según la carga del sistema.

La decisión de qué proceso corre a continuación depende de una estructura de datos llamada Red Negra Roja, que ordena los procesos por su tiempo de espera. El proceso con mayor tiempo acumulado sin ejecutar suele ser el siguiente en correr. Este mecanismo garantiza que la interfaz gráfica responda incluso cuando un cálculo pesado ocupa el fondo.

Proceso vs. Hilo: La estructura task_struct

En Linux, la distinción entre proceso y hilo es más sutil que en otros sistemas operativos. Ambos se representan mediante la estructura task_struct, que contiene toda la información necesaria para gestionar la ejecución. La diferencia clave radica en cómo comparten los recursos de memoria.

Un hilo comparte el espacio de memoria principal con sus hermanos, lo que permite acceso rápido a variables comunes. Un proceso, en cambio, suele tener su propio espacio de memoria aislado. Esta compartición hace que los hilos sean más ligeros y rápidos de crear, ideales para tareas que requieren comunicación frecuente.

Visualización práctica con ps y top

Para observar esta gestión en tiempo real, los usuarios utilizan comandos simples. El comando ps aux muestra una instantánea de todos los procesos activos, revelando su estado actual y el porcentaje de CPU que consumen. Por otro lado, top ofrece una vista dinámica que se actualiza cada segundo, permitiendo ver cómo el planificador mueve los procesos entre estados según la carga del sistema.

Estas herramientas son esenciales para diagnosticar cuellos de botella. Si un proceso permanece en estado de ejecución consumiendo el 100% de la CPU, el sistema puede volverse lento. La consecuencia es directa: identificar al culpable permite ajustar prioridades o cerrar tareas innecesarias.

¿Cómo gestiona Linux los permisos y la seguridad?

La gestión de permisos en Linux se basa en un modelo de tres niveles que define quién puede acceder a cada archivo o directorio. Este sistema asigna atributos a cada elemento del sistema de archivos, determinando el acceso del propietario, del grupo asociado y de los demás usuarios. Los permisos se dividen en tres categorías fundamentales: lectura, escritura y ejecución. La lectura permite ver el contenido, la escritura habilita la modificación y la ejecución permite correr el archivo como programa o entrar en un directorio.

Representación en bits y sistema octal

Cada permiso se representa mediante un bit, lo que permite combinarlos matemáticamente. La lectura tiene un valor de 4, la escritura de 2 y la ejecución de 1. Al sumar estos valores, se obtiene un número único que describe la combinación de permisos para cada categoría. Por ejemplo, si un archivo tiene lectura y escritura para el propietario, su valor es 6 (4 + 2). Este sistema se conoce como notación octal y es esencial para la configuración rápida de permisos desde la línea de comandos.

La estructura completa de permisos se representa con tres dígitos octales. El primer dígito corresponde al propietario, el segundo al grupo y el tercero a los demás usuarios. Un conjunto de permisos común es 755, donde el propietario tiene todos los permisos (lectura, escritura, ejecución), mientras que el grupo y los demás solo tienen lectura y ejecución. Esta configuración es típica para archivos ejecutables compartidos.

Para modificar estos permisos, se utiliza el comando chmod. Este comando permite ajustar los bits de permiso de forma precisa. Por ejemplo, ejecutar chmod 755 archivo.txt asigna los permisos descritos anteriormente. También se puede usar la notación simbólica, como chmod u+x archivo.txt, que añade el permiso de ejecución al propietario. La flexibilidad de chmod lo convierte en una herramienta indispensable para la administración de sistemas.

Propietarios y grupos: UID y GID

Más allá de los permisos de lectura y escritura, Linux identifica a los usuarios y grupos mediante identificadores únicos. Cada usuario tiene un UID (User ID) y cada grupo tiene un GID (Group ID). Estos números permiten al sistema operativo rastrear la propiedad de los archivos de manera eficiente. Cambiar el propietario de un archivo se realiza con el comando chown, que ajusta tanto el UID como el GID según sea necesario.

Dato curioso: El primer usuario del sistema, a menudo llamado root, tiene el UID 0. Este usuario posee poderes casi ilusorios, pudiendo leer, escribir y ejecutar casi cualquier archivo en el sistema, lo que lo convierte en el administrador supremo.

Sistemas de seguridad avanzados

El modelo básico de permisos puede volverse limitado en entornos complejos. Para abordar esto, Linux ofrece sistemas avanzados como las ACLs (Listas de Control de Acceso). Las ACLs permiten asignar permisos específicos a usuarios o grupos individuales, más allá de la estructura básica de propietario-grupo-otros. Esto resulta útil cuando varios usuarios necesitan diferentes niveles de acceso a un mismo archivo.

Otro nivel de seguridad lo proporcionan los sistemas de seguridad obligatoria, como SELinux y AppArmor. Estos sistemas restringen el acceso a los recursos del sistema mediante políticas predefinidas. A diferencia de los permisos tradicionales, que son discretas, estas políticas son más granulares y pueden limitar incluso a los procesos en ejecución. SELinux es común en distribuciones como Red Hat, mientras que AppArmor es popular en Ubuntu. Ambos sistemas añaden una capa de defensa contra fallos de software y ataques de nivel de proceso.

La implementación de estos sistemas avanzados requiere una configuración cuidadosa. Las políticas demasiado estrictas pueden ralentizar el sistema o bloquear procesos esenciales. Por ello, la administración de la seguridad en Linux implica un equilibrio entre la flexibilidad y la protección. Entender estos conceptos permite a los administradores crear entornos robustos y adaptados a las necesidades específicas de cada sistema.

El ecosistema de paquetes y la gestión de dependencias

La gestión de software en Linux difiere radicalmente de la experiencia tradicional en otros sistemas operativos. En lugar de depender exclusivamente de archivos ejecutables descargados directamente de la web, la mayoría de las distribuciones utilizan gestores de paquetes centralizados. Herramientas como apt (común en Debian y Ubuntu), dnf (en Fedora y RHEL) o pacman (en Arch Linux) actúan como bibliotecarios eficientes. Estos gestores no solo instalan el archivo principal, sino que analizan qué otros componentes necesita ese software para funcionar correctamente. Este proceso se conoce como resolución de dependencias.

Repositoros y resolución de dependencias

Los repositorios son servidores remotos que almacenan versiones actualizadas y probadas de los paquetes. Cuando un usuario solicita instalar una aplicación, el gestor consulta estos repositorios y construye un grafo de dependencias. Si la biblioteca libX requiere la versión 2.0 de libY, el sistema verifica si libY está presente y si su versión es compatible. Si existe un conflicto, el gestor puede sugerir actualizar otras aplicaciones o incluso instalar dos versiones de la misma biblioteca simultáneamente. Esta capacidad evita el famoso "infierno de las dependencias" que aquejaba a los sistemas más antiguos.

Dato curioso: La resolución de dependencias en Linux se basa en teoría de grafos. Algoritmos como SAT (Satisfacibilidad Booleana) permiten determinar la combinación óptima de paquetes a instalar o desinstalar sin romper todo el sistema.

Esta estructura ofrece una ventaja de coherencia. Al actualizar el sistema, todos los paquetes se sincronizan con las versiones probadas por los mantenedores del repositorio. La consecuencia es directa: mayor estabilidad que instalar binarios sueltos desde la web.

Binarios versus código fuente

La flexibilidad de Linux también radica en la forma en que se empaqueta el software. Los archivos .deb y .rpm son contenedores que incluyen el ejecutable ya compilado y sus metadatos. Son ideales para una instalación rápida y uniforme en equipos con arquitectura similar. Sin embargo, esta comodidad tiene un costo: el software debe ser recompilado para cada arquitectura de procesador (x86_64, ARM, etc.).

Por otro lado, compilar desde el código fuente ofrece un control granular. El desarrollador o usuario final puede activar o desactivar características específicas mediante banderas de compilación. Esto permite reducir el tamaño del ejecutable o optimizarlo para el procesador exacto de la máquina. Aunque este método requiere más tiempo y conocimientos técnicos, es fundamental en entornos empaquetadores como Arch Linux o Gentoo, donde la personalización es prioritaria. La elección entre un binario listo para usar y una compilación a medida define gran parte de la experiencia del usuario en el ecosistema Linux.

¿Qué diferencia a Linux de otros sistemas operativos?

Linux se distingue de sus principales competidores, Windows y macOS, por una arquitectura basada en la simplicidad y la modularidad. Mientras que los sistemas de escritorio modernos suelen priorizar la experiencia de usuario mediante capas de abstracción complejas, Linux mantiene una estructura más plana que permite un control granular sobre los recursos del hardware. Esta diferencia no es solo estética; afecta directamente a cómo el sistema gestiona la memoria, los archivos y los periféricos.

Arquitectura de archivos y gestión de dispositivos

En Windows, la organización se basa en unidades de disco separadas (C:, D:, E:), lo que implica que cada partición tiene su propia jerarquía de carpetas. Linux, junto con macOS, utiliza un sistema de archivos en árbol único. Todo el contenido, desde el documento de texto hasta la tarjeta de red, cuelga de una raíz común denotada como /. Esta estructura simplifica la gestión de rutas y la ubicación de archivos dispersos.

La filosofía de "todo es un archivo" es fundamental en Linux. Los dispositivos de hardware se representan como archivos especiales ubicados en el directorio /dev. Cuando un usuario lee datos del teclado, el sistema operativo accede al archivo /dev/keyboard de la misma manera que lee un archivo de texto en /home/usuario. Esto permite tratar la entrada y salida de datos con comandos simples, como la redirección de flujo, facilitando la depuración y la automatización sin necesidad de librerías complejas.

Gestión de memoria y estabilidad

La gestión de memoria en Linux es notablemente eficiente gracias a su uso intensivo de la memoria RAM como caché de disco. A diferencia de Windows, que a menudo libera memoria liberada por aplicaciones para mantener una reserva disponible, Linux tiende a retener los datos en la memoria principal para acelerar el acceso posterior. Esto significa que un Linux con poca memoria libre puede estar funcionando más rápido que uno con mucha, ya que el sistema está aprovechando la velocidad de la RAM frente a la del disco duro.

Dato curioso: El kernel de Linux puede gestionar más de 1 TB de memoria RAM en arquitecturas de 64 bits, aunque en sistemas de escritorio típicos de 2026, la eficiencia radica en cómo prioriza los procesos activos sobre los datos en reposo, reduciendo la necesidad de intercambio (swap) constante.

Comparativa técnica

Las diferencias técnicas se resumen en la forma en que cada sistema organiza sus componentes básicos. La siguiente tabla compara características clave entre Linux, Windows y macOS, destacando las implicaciones prácticas para el usuario y el desarrollador.

Característica Linux Windows macOS
Sistema de archivos por defecto EXT4 o Btrfs NTFS APFS
Gestor de paquetes Modular (apt, dnf, pacman) Centralizado (WinGet, Store) Centralizado (Homebrew, App Store)
Licencia típica Libre (GPLv2/GPLv3) Propietaria (Monolítica) Híbrida (Unix + Propietaria)
Gestión de dispositivos Archivos en /dev Objetos en el espacio de nombres Archivos en /dev (herencia Unix)

La gestión de paquetes en Linux es más descentralizada que en Windows. En lugar de depender exclusivamente de una tienda centralizada, Linux utiliza gestores como apt o dnf que descargan y descomprimen archivos directamente del sistema de archivos, integrando dependencias con mayor precisión. Esto reduce la fragmentación del disco y permite actualizaciones más limpias, aunque requiere una comprensión mayor de las dependencias entre librerías.

La licencia abierta de Linux permite que cualquier fabricante modifique el kernel, lo que genera una diversidad de distribuciones adaptadas a necesidades específicas. En contraste, Windows y macOS mantienen un control estricto sobre su código fuente, lo que garantiza una experiencia uniforme pero limita la personalización profunda del núcleo del sistema. La elección entre estos sistemas depende de si el usuario prioriza la estandarización corporativa o la flexibilidad técnica.

Ejercicios resueltos

La teoría de Linux cobra sentido cuando se aplica a la terminal. Estos ejercicios prácticos conectan los conceptos abstractos con la salida real del sistema, una habilidad esencial para depurar entornos y entender el comportamiento del núcleo.

Ejercicio 1: Decodificación de permisos en `ls -l`

Analiza la siguiente línea de salida de comando para determinar los permisos exactos del archivo y su propietario:

-rwxr-xr-- 1 ana staff 4096 oct 15 10:30 script.sh

La estructura se divide en bloques de tres caracteres tras el tipo de archivo. El primer carácter, un guion (-), indica que es un archivo regular. Los siguientes tres (rwx) corresponden al propietario: lectura, escritura y ejecución. Los tres centrales (r-x) pertenecen al grupo: lectura y ejecución, pero sin escritura. Los últimos tres (r--) son para los demás usuarios: solo lectura. El usuario 'ana' puede leer, escribir y ejecutar. El grupo 'staff' puede leer y ejecutar. El resto del mundo solo puede leer. La consecuencia es directa: si un usuario del grupo intenta modificar el archivo, necesitará permiso de escritura explícito o ser el propietario.

Ejercicio 2: Cálculo de uso de memoria desde `/proc`

Para medir la memoria real de un proceso, el archivo `/proc/[pid]/status` es más preciso que el comando `top` básico. Busca la línea `VmRSS` (Resident Set Size). Supongamos que para el proceso con PID 1024, el archivo muestra:

VmRSS: 15360 kB

El sistema informa en kilobytes, pero a menudo necesitamos megabytes para una visión rápida. La conversión requiere dividir por 1024, ya que en el sistema binario utilizado por el núcleo, 1024 kilobytes forman 1 megabyte. La fórmula es:

Memoria en MB=1024VmRSS en kB​

Aplicando los datos:

102415360​=15 MB

El proceso ocupa 15 megabytes de memoria física real. Este cálculo es fundamental cuando la memoria virtual (VmSize) engaña mostrando valores enormes debido a bibliotecas compartidas. VmRSS muestra lo que realmente consume de la RAM disponible.

Ejercicio 3: Creación de archivos y gestión de permisos

Automatizar tareas es el corazón de la eficiencia en Linux. Crea un script llamado `iniciar_proyecto.sh` que genere un archivo de configuración y ajuste sus permisos para que solo el propietario pueda leerlo y escribirlo.

El script debe contener las siguientes instrucciones:

#!/bin/bash

touch config.txt

chmod 600 config.txt

El comando `touch` invoca la llamada al sistema `open()` con la bandera `O_CREAT`, creando el archivo si no existe. Luego, `chmod` ajusta los permisos. El número 600 se descompone en octales: 6 para el propietario (4 de lectura + 2 de escritura = 6), 0 para el grupo (ningún permiso) y 0 para los demás. Esto asegura que `config.txt` sea privado. Ejecutar el script con `bash iniciar_proyecto.sh` crea el archivo y aplica los permisos en una sola acción. Esta técnica es estándar en la gestión de secretos en servidores web.

Dato curioso: El directorio `/proc` no está en el disco duro físico. Es un sistema de archivos virtual que el núcleo genera en tiempo real, lo que significa que leerlo consume ciclos de CPU, no solo acceso a disco.

Preguntas frecuentes

¿Es Linux un sistema operativo gratuito?

Sí, la mayoría de las distribuciones de Linux son gratuitas bajo la Licencia Pública General de GNU (GPL). Esto significa que el usuario puede usarlo, estudiarlo, compartirlo y modificarlo sin pagar licencias, aunque existen versiones comerciales con soporte técnico pagado.

¿Necesito saber programar para usar Linux?

No necesariamente. Aunque la línea de comandos (terminal) es poderosa, la mayoría de las distribuciones modernas incluyen un entorno gráfico similar al de Windows o macOS. Sin embargo, para aprovechar todo su potencial, conocer algunos comandos básicos es muy útil.

¿Qué es el kernel de Linux?

El kernel es el núcleo central del sistema operativo. Es el programa que gestiona los recursos de la computadora (CPU, memoria, dispositivos de entrada/salida) y actúa como puente entre el hardware y el software que ejecutamos.

¿Puedo ejecutar aplicaciones de Windows en Linux?

Sí, existen varias formas de hacerlo. Se pueden usar emuladores como Wine, máquinas virtuales o contenedores (como Docker) para ejecutar ejecutables de Windows (.exe) sin necesidad de reiniciar el sistema completo.

¿Es Linux seguro contra los virus?

Linux es históricamente más seguro que otros sistemas debido a su gestión de permisos y a la diversidad de distribuciones. Aunque no es inmune, los virus suelen afectar más a los sistemas operativos con mayor cuota de mercado en el escritorio, como Windows.

¿Cuál es la diferencia entre Linux y GNU/Linux?

Técnicamente, "Linux" se refiere solo al kernel, mientras que "GNU/Linux" incluye el kernel más las herramientas del proyecto GNU (como el compilador GCC y el shell Bash). Muchos puristas prefieren el término compuesto para reconocer la contribución de Richard Stallman y el proyecto GNU.

Resumen

Linux se define por su kernel monolítico modular, su gestión eficiente de procesos y su sistema de permisos basado en tres niveles (lector, escritor, ejecutor). Su modelo de paquetes permite una actualización granular del sistema, diferenciándolo de la actualización masiva de otros sistemas operativos.

La combinación de estabilidad, flexibilidad y código abierto ha posicionado a Linux como una herramienta fundamental en la educación técnica y la industria, ofreciendo un control detallado sobre el hardware y el software que otros sistemas a menudo ocultan al usuario final.

Referencias

  1. «características de linux sistema operativo» en Wikipedia en español
  2. The Linux Kernel Archives - Official Source and Documentation
  3. Linux Foundation - Home of the Linux Kernel and Open Source Projects
  4. IEEE Xplore: Linux Operating System Research Papers and Standards
  5. ACM Digital Library: Linux and Open Source Computing Articles