SoftwareLibre
Open in Telegram
621
Subscribers
No data24 hours
+57 days
+1630 days
Posts Archive
Ubunlog
Samba corrige graves fallos de ejecución remota de código (RCE)
https://ubunlog.com/wp-content/uploads/2020/09/samba.png El popular software de código abierto Samba, encargado de conectar sistemas Linux con las redes y directorios de Windows, acaba de recibir una actualización de emergencia. Los equipos de desarrollo han lanzado las versiones 4.24.3, 4.23.8 y 4.22.10 para poner fin a una serie de problemas de seguridad bastante serios. En total, se han corregido seis vulnerabilidades crÃticas, y lo más preocupante es que dos de ellas permitÃan a un atacante, sin necesidad de tener usuario o contraseña, tomar el control del servidor a distancia.
Además de estos problemas principales, la actualización también arregla fallos que permitÃan saltarse permisos de solo lectura, sobrescribir archivos protegidos y bloquear servicios clave de la red con un simple paquete de datos trucado. El peligro del comodÃn en las contraseñas
El primero de los fallos graves (identificado como CVE-2026-4408) afecta directamente a cómo Samba revisa las contraseñas. El problema está en el servicio SAMR, que es el encargado de administrar las bases de datos de usuarios y grupos. Esta vulnerabilidad impacta a los servidores clásicos que usan un comando especial en su configuración (check password script) y le añaden el comodÃn %u para que el sistema sepa de qué usuario se trata.
La falla ocurre porque el sistema tomaba el nombre de usuario y lo metÃa directo en el comando sin revisarlo ni limpiar caracteres especiales. Esto significa que un atacante podÃa inventarse un nombre de usuario que contuviera instrucciones ocultas del sistema y, al intentar verificar la contraseña, el servidor ejecutaba esos comandos sin darse cuenta. Mientras se instala el parche, los administradores pueden esquivar el problema usando una variable de entorno en lugar del comodÃn %u en sus archivos de configuración. Trabajos de impresión que abren puertas traseras
El segundo agujero de seguridad crÃtico (CVE-2026-4480) funciona de una manera muy similar, pero ataca a través del sistema de impresión de Samba. En este caso, el responsable es el comodÃn %J, que se utiliza en las configuraciones de impresión para pasar la descripción o el tÃtulo del documento que se va a imprimir. Al igual que con las contraseñas, el sistema no filtraba correctamente los caracteres extraños.
Esto abrÃa la puerta para que alguien enviara un trabajo de impresión con un tÃtulo malicioso lleno de comandos de sistema. Como las redes suelen permitir que los invitados manden archivos a imprimir por defecto, un atacante remoto ni siquiera necesitaba una cuenta válida para lanzar el ataque y lograr ejecutar código en el servidor. La solución temporal rápida, si no puedes actualizar de inmediato, es quitar el comodÃn %J de la configuración de impresión. Más correcciones para la red
Además de los dos grandes sustos, estas nuevas versiones tapan otros cuatro agujeros importantes para mantener la red segura y estable:
* Protección de archivos WORM (CVE-2026-2340): El módulo diseñado para que los archivos se escriban una sola vez y no se puedan modificar (Write-Once, Read Many) tenÃa un fallo. PermitÃa que alguien sobrescribiera un archivo protegido simplemente cambiándole el nombre a un archivo nuevo y poniéndolo encima del viejo.
* Ataques de denegación de servicio (CVE-2026-3238): Se arregló un error en el servidor WINS de los controladores de dominio de Active Directory. Antes, bastaba con enviarle un paquete de red UDP alterado para que el servicio colapsara por completo.
* Saltos de permisos (CVE-2026-1933): Se corrigió un problema donde los usuarios podÃan borrar o alterar ciertos atributos especiales de los archivos (los puntos de reanálisis) incluso en carpetas que estaban marcadas como de «solo lectura».
* Certificados inseguros (CVE-2026-3012): El sistema confiaba en conexiones HTTP sin cifra[...]
prise Linux 10.2?
Para los interesados en poder obtener las imágenes de instalación de RHEL 10.2, deben saber que estas ya están listas para quienes tienen acceso al portal de clientes, mientras que los desarrolladores pueden probar las novedades de forma gratuita y la comunidad tiene a su disposición las compilaciones de CentOS.
Cabe mencionar que esta entrega cuenta con versiones para inmensa variedad de procesadores, incluyendo una vista previa para la emergente arquitectura RISC-V. En cuanto a su ciclo de vida, esta versión en particular recibirá mantenimiento hasta mayo de 2032, asegurando una base confiable a largo plazo para las empresas que decidan actualizar sus servidores.
Desde Linux RHEL 10.2 presenta asistente IA, nuevas funciones para contenedores, seguridad cuántica y mas
https://blog.desdelinux.net/wp-content/uploads/2021/06/red-hat-nuevo.png
Red Hat acaba de liberar la versión 10.2 de Enterprise Linux, una gran actualización que llega de la mano de mejoras para la rama 9.8. Lejos de quedarse en pequeños ajustes de rendimiento, esta actualización cambia las reglas del juego en la administración y el desarrollo de software.
Desde la integración de un asistente de inteligencia artificial directamente en la lÃnea de comandos hasta herramientas de seguridad preparadas para resistir ataques de computadoras cuánticas, el sistema busca adelantarse a los problemas del futuro. Todo esto se combina con una gestión de actualizaciones mucho más inteligente, un instalador que ahora maneja paquetes Flatpak con total naturalidad y un consumo de energÃa optimizado para aliviar la enorme factura eléctrica en los centros de datos. Principales novedades de Red Hat Enterprise Linux 10.2
En esta nueva version que se presenta de Red Hat Enterprise Linux 10.2, podremos encontrar que la terminal recibio una mejora, ya que ahora se vuelve más ágil con la llegada de Goose. Este nuevo asistente de inteligencia artificial, disponible como una extensión opcional, permite a los administradores resolver problemas complejos mediante un chat fluido sin salir de la consola. Goose genera respuestas en tiempo real y el texto ahora cuenta con colores que separan las instrucciones de las explicaciones, haciendo que la lectura sea mucho más amigable.
Ademas de ello, ahora los procesos de instalacion y mantenimiento del sistema operativo también han recibido mejoras, ya que ahora el tradicional instalador Anaconda es capaz de descargar y configurar aplicaciones en formato Flatpak durante el mismo proceso de instalación, como ocurre con el navegador Firefox si eliges montar un entorno de escritorio.
Además, el manejo de imágenes basadas en contenedores toma mayor reelevacia en este nuevo lanzamiento, pues los administradores ahora pueden usar comandos especÃficos para descargar las actualizaciones de todo el sistema sin aplicarlas de inmediato, evitando reinicios sorpresivos a mitad del dÃa. También se suma la posibilidad de transformar estos contenedores de arranque directamente en máquinas virtuales desechables, una opción perfecta para hacer pruebas de código sin arriesgar el equipo principal. Seguridad cuántica y eficiencia energética
La seguridad no se puede quedar atras en esta nueva version, ya que los desarrolladores tambien presentan mejoras en herramientas de conexión segura como OpenSSH, las cuales ya han comenzado a utilizar algoritmos de firmas digitales diseñados para resistir ataques de fuerza bruta generados por computación cuántica.
A nivel de eficiencia pura, el núcleo del sistema estrena un modo inteligente para el manejo de interrupciones de red. Este mecanismo alterna entre revisar constantemente si hay datos nuevos y quedarse en reposo esperando un aviso, dependiendo de qué tan pesado sea el tráfico en ese instante. Esta simple adaptación puede reducir el gasto de energÃa de un centro de datos hasta en un treinta por ciento.
Por otra parte la utilidad Leapp ahora permite convertir distribuciones compatibles y subir a una nueva versión de Red Hat en un solo paso, acortando las horas que los servidores deben estar apagados por mantenimiento.
Para los programadores, la plataforma incluye versiones recién salidas del horno de lenguajes como Python 3.14, Ruby 4.0, PHP 8.4 y la base de datos PostgreSQL 18, garantizando un desempeño superior y tiempos de respuesta más rápidos en la web.
Finalmente, si estas interesado en poder conocer mas al respecto de esta nueva version, puedes consultar los detalles en el siguiente enlace. ¿Como obtener esta nueva versión de Red Hat Enter[...]
MuyLinux
Canonical toma las riendas de Flutter Desktop con el respaldo de Google
https://www.muylinux.com/wp-content/uploads/2026/06/FlutterDesktop.png
Canonical se hace cargo del mantenimiento de Flutter Desktop. Asà lo confirmó Google durante el Google I/O 2026, tras anunciar una ampliación de su colaboración con la compañÃa responsable de Ubuntu, convertida ahora en mantenedora principal y «guardiana estratégica» de Flutter para el escritorio para Windows, macOS y Linux.
La noticia no se veÃa venir, pero tampoco sorprende mucho, habida cuenta de que Canonical lleva años apostando por Flutter como tecnologÃa de referencia para crear nuevas aplicaciones gráficas en Ubuntu. Lo hizo público en 202o y desde entonces ha trasladado esa apuesta a piezas visibles del sistema, como App Center, Firmware Updater, Security Center o el nuevo instalador de Ubuntu, nada menos
Lo relevante ahora es que Canonical pasa de ser uno de los actores más interesados en Flutter a asumir un papel de liderazgo en su desarrollo, según recogen en OMG! Ubuntu!
En la presentación de novedades de Flutter en Google I/O, Kate Lovett, del equipo de Flutter Framework en Google, destacó que la experiencia de escritorio del framework ha alcanzado «un nuevo nivel de madurez» gracias a la colaboración técnica con Canonical, confirmando más tarde que la compañÃa se pondrá al frente del mantenimiento de Flutter Desktop y de su hoja de ruta.
Cabe señalar que Google no abandona Flutter, pero sà delega una parte muy concreta de su desarrollo en quien más interés directo tiene en que funcione bien en el escritorio… Y no solo en Linux, porque el encargo cubre también Windows y macOS. Se trata de un movimiento que podrÃa ser, además, el primer paso de una ampliación de la gobernanza del proyecto hacia un modelo más colaborativo.
https://www.muylinux.com/wp-content/uploads/2026/06/Gio.png
¿Por qué Canonical y por qué ahora? Si bien el interés de la desarrolladora de Ubuntu en este tecnologÃa es un hecho, también lo es su posición como entidad con los recursos suficientes como hacerse cargo de algo asÃ. Sin embargo, el contexto importa y ya hablamos por estos lares de la inquietud que habÃan provocado los despidos en Google en equipos relacionados con Python, Dart y Flutter.
Entonces se apuntaba al posible impacto que una ralentización del desarrollo de Flutter y Dart podÃa tener en Ubuntu, dada la dependencia creciente de Canonical de esta tecnologÃa. Sin embargo, Google aseguró que no habÃa cambios de estrategia ni de hoja de ruta. Pero la duda quedaba ahÃ.
Visto asÃ, el nuevo papel de Canonical parece una respuesta plausible. Si Google concentra sus prioridades en otros frentes de Flutter, especialmente móviles, web, Dart y herramientas con más foco en IA, poner el escritorio en manos de Canonical reduce incertidumbre para Ubuntu y para el resto de plataformas soportadas. Y conste: este es un esfuerzo enfocado con prioridad en el escritorio.
La novedad llega además con mejoras especÃficas para Flutter Desktop, incluyendo soporte para tooltips, vistas ajustadas al contenido y capacidad para crear ventanas adicionales y diálogos, algo clave para desarrollar aplicaciones más complejas y mejor integradas en Linux, Windows y macOS. Por otro lado, Google también ha movido las bibliotecas Material y Cupertino fuera del SDK principal, convirtiéndolas en paquetes independientes.
La entrada Canonical toma las riendas de Flutter Desktop con el respaldo de Google es original de MuyLinux
Ubunlog
Flutter Desktop cambia de manos: Google confÃa su evolución a Canonical
https://ubunlog.com/wp-content/uploads/2026/06/Flutter-Desktop.webp
Flutter Desktop ha dado un paso importante en su evolución tras el anuncio realizado durante Google I/O 2026. Google ha confirmado que Canonical, la compañÃa responsable de Ubuntu, asumirá el papel de mantenedor principal y supervisor estratégico de la plataforma de escritorio de Flutter. Este movimiento afecta directamente al desarrollo y mantenimiento de las versiones para Linux, Windows y macOS, marcando una nueva etapa para uno de los frameworks multiplataforma más populares del momento.
La noticia supone un cambio relevante dentro del ecosistema de desarrollo de aplicaciones. Durante los últimos años, Canonical ha colaborado estrechamente con Google para mejorar la experiencia de Flutter en Linux, contribuyendo con nuevas funciones y desarrollando aplicaciones propias basadas en esta tecnologÃa. Ahora, la empresa británica (aunque su CEO es sudafricano) tendrá una mayor responsabilidad sobre la hoja de ruta del proyecto en entornos de escritorio, algo que podrÃa acelerar la llegada de nuevas caracterÃsticas y una mejor integración con los sistemas operativos tradicionales.
Flutter Desktop entra en una nueva etapa bajo la dirección de Canonical
La decisión anunciada por Google refleja la creciente importancia que ha adquirido Flutter más allá del ámbito móvil. Aunque originalmente nació como una herramienta para crear aplicaciones Android e iOS desde una única base de código, con el tiempo se ha expandido a la web, sistemas embebidos y ordenadores de escritorio.
Canonical ya habÃa demostrado su compromiso con esta tecnologÃa al utilizarla en varias aplicaciones clave de Ubuntu. Herramientas como App Center, Security Center o Firmware Updater han sido desarrolladas utilizando Flutter, permitiendo a la compañÃa acumular una amplia experiencia en el framework y participar activamente en su evolución.
Junto con este cambio de liderazgo, Google también presentó varias mejoras para el entorno de escritorio. Entre ellas destacan el soporte para aplicaciones con múltiples ventanas, la posibilidad de crear diálogos independientes y nuevas capacidades para mostrar elementos como menús contextuales o ayudas visuales de forma más nativa. Estas funciones buscan que las aplicaciones desarrolladas con Flutter ofrezcan una experiencia más cercana a la de los programas tradicionales de Windows, macOS y Linux.
Otro de los cambios anunciados es la reorganización interna del framework. Algunas bibliotecas visuales, como Material y Cupertino, dejarán de formar parte del núcleo principal para convertirse en paquetes independientes. Gracias a ello, los desarrolladores podrán actualizar el framework sin verse obligados a adoptar inmediatamente cambios de diseño que puedan afectar a sus aplicaciones.
Canonical y Flutter Desktop
La llegada de Canonical como responsable de Flutter Desktop también puede interpretarse como un paso hacia un modelo de gobernanza más abierto. Google seguirá participando activamente en el desarrollo del proyecto, pero delegará parte de la gestión en socios estratégicos con experiencia especÃfica en determinados ámbitos. En este caso, Canonical se convierte en la referencia para el escritorio, un segmento donde lleva años invirtiendo recursos y desarrollando soluciones reales.
Para los desarrolladores, la noticia supone una señal positiva. La implicación directa de una empresa que utiliza Flutter en productos de producción puede traducirse en mejoras más rápidas, mayor estabilidad y una atención especial a las necesidades de quienes crean aplicaciones para ordenadores. Todo apunta a que Flutter Desktop seguirá creciendo durante los próximos años con el objetivo de convertirse en una alternativa cada vez más sólida para el desarrollo multiplataforma.
Ubunlog
Linux 7.1-rc6 ya está disponible y entra en la recta final antes de su lanzamiento estable
https://ubunlog.com/wp-content/uploads/2026/05/Linux-7.1-rc6.avif
Linux 7.1-rc6 ya está disponible para pruebas y continúa acercando el desarrollo del próximo kernel estable a su fase final. La nueva versión candidata llega tras una semana que el propio Linus Torvalds ha descrito como más grande de lo que le habrÃa gustado a estas alturas del ciclo de desarrollo, aunque sin problemas especialmente preocupantes que puedan comprometer el calendario previsto para el lanzamiento definitivo.
Como ocurre habitualmente en las últimas Release Candidate de una nueva versión del kernel, el trabajo se centra principalmente en la corrección de errores, la mejora de la estabilidad y el pulido de funcionalidades incorporadas durante las fases anteriores. Linux 7.1 está siendo una actualización especialmente interesante por la gran cantidad de cambios introducidos desde la apertura de la rama, incluyendo mejoras de rendimiento, nuevo soporte para hardware, optimizaciones en sistemas de archivos y numerosas actualizaciones para arquitecturas modernas. Con Linux 7.1-rc6, el objetivo sigue siendo asegurar que todas esas novedades lleguen en las mejores condiciones posibles a la versión final.
Linux 7.1-rc6 continúa el proceso de estabilización antes del lanzamiento final
Según ha explicado Linus Torvalds en el anuncio oficial de Linux 7.1-rc6, la semana ha resultado algo más activa de lo esperado para una fase tan avanzada del desarrollo. Aun asÃ, el responsable del kernel indicó que los cambios recibidos no muestran señales de problemas graves y que la situación general sigue siendo bastante normal para este punto del ciclo.
La mayor parte de las modificaciones incluidas en esta versión están relacionadas con correcciones distribuidas por múltiples subsistemas. Entre ellas se encuentran ajustes para controladores gráficos, mejoras en redes, correcciones en sistemas de archivos, cambios relacionados con la gestión de memoria y diversas actualizaciones para arquitecturas y plataformas de hardware compatibles.
Uno de los apartados que ha recibido atención durante la semana ha sido el subsistema USB. Los desarrolladores han incorporado nuevas identificaciones de dispositivos compatibles, además de pequeñas correcciones destinadas a resolver problemas detectados por usuarios y herramientas de análisis automatizado. Aunque se trata de cambios menores de forma individual, contribuyen a mejorar la compatibilidad general del kernel con una amplia variedad de dispositivos.
Linux 7.1 supone además la continuación de una rama que ya ha introducido importantes novedades desde la publicación de la primera Release Candidate. Entre ellas destacan un nuevo controlador NTFS más rápido y moderno, mejoras en el planificador del sistema, optimizaciones en la gestión de memoria, avances en el soporte de tiempo real para determinadas arquitecturas y numerosas actualizaciones para procesadores y plataformas de nueva generación.
La publicación de Linux 7.1-rc6 indica que el proyecto se encuentra ya en la recta final del desarrollo. Si no aparecen incidencias importantes durante las próximas semanas, la versión estable podrÃa llegar a mediados de junio, manteniendo el calendario habitual seguido por el equipo de desarrollo del kernel.
Por el momento, Linux 7.1-rc6 está orientado principalmente a desarrolladores, probadores y usuarios avanzados que quieran ayudar a detectar posibles errores antes del lanzamiento definitivo. Para el resto de usuarios, la recomendación continúa siendo esperar a la versión estable, que será la que termine llegando progresivamente a las distintas distribuciones GNU/Linux.
MuyLinux
Rocky Linux 10.2 refuerza la seguridad poscuántica y la gestión de imágenes
https://www.muylinux.com/wp-content/uploads/2025/06/RockyLinux10.jpg
Una semana más, seguimos recogiendo los lanzamientos que deja tras de sà Red Hat Enterprise Linux 10.2 y, después de AlmaLinux, es el turno de Rocky Linux 10.2 y Rocky Linux 9.8, dos nuevas versiones estables de la derivada que se mantiene más apegada a la propuesta original de RHEL, pese a estar igualmente construida a partir de CentOS Stream.
Como sucede con el resto, Rocky Linux replica buena parte del grueso de novedades de RHEL 10.2, su base empresarial: actualización de lenguajes, toolchains, servidores web y bases de datos; mejoras en contenedores, virtualización, seguridad y administración del sistema; y nuevos medios de instalación, imágenes cloud, contenedores y live disponibles para quienes prefieran desplegar el sistema en diferentes entornos.
Rocky Linux 10.2 continúa también con la adopción de criptografÃa poscuántica en varios frentes: OpenSSH añade intercambio de claves hÃbrido ML-KEM en modo FIPS, libssh incorpora métodos PQ/T hÃbridos, Directory Server soporta certificados TLS con claves ML-DSA, p11-kit suma definiciones PQC en sus cabeceras PKCS #11 y podman-sequoia soporta firmas poscuánticas compuestas.
La advertencia importante está en la polÃtica criptográfica FUTURE, que ahora solo permite algoritmos hÃbridos ML-KEM para el intercambio de claves. O lo que es lo mismo: quien utilice esa polÃtica deberá revisar bien sus conexiones, porque los métodos tradicionales quedan fuera y eso puede romper la interoperabilidad con servicios que todavÃa no soporten criptografÃa poscuántica, es decir, la mayorÃa de Internet.
En el escritorio, Rocky Linux 10.2 sigue el mismo camino que RHEL 10.2: Firefox y Thunderbird pasan a servirse por defecto como Flatpak cuando se instala un entorno gráfico mediante Anaconda, aunque los paquetes RPM seguirán disponibles en AppStream durante todo el ciclo de vida de esta versión, por lo que quien lo prefiera podrá forzar su uso mediante configuraciones Kickstart.
También hay cambios relevantes en instalación y creación de imágenes: la partición /boot crece de 1 a 2 GB para acomodar imágenes initramfs más grandes; aparece un nuevo comando Kickstart rdp para instalaciones gráficas sin monitor; Cockpit Image Builder puede crear imágenes de contenedor arrancable y de disco; y se añade soporte para imágenes PXE sin estado orientadas a HPC y sistemas sin disco.
En cuanto a componentes, Rocky Linux 10.2 actualiza piezas como Node.js 24, PHP 8.4, Ruby 4.0, Python 3.14, OpenJDK 25, Apache HTTP Server 2.4.63, MariaDB 11.8 y PostgreSQL 18, junto con GCC 14.3, glibc 2.39, GCC Toolset 15, LLVM Toolset 21.1.8, Rust Toolset 1.92.0 y Go Toolset 1.26.2. En contenedores destaca el salto de Podman a Sequoia-PGP para la verificación de firmas OpenPGP, manteniendo compatibilidad con flujos basados en GnuPG.
Más novedades incluyen io_uring en vista previa tecnológica, soporte para WiFi 7, mejoras en nftables y firewalld, PRP y HSR como protocolos industriales ya soportados, QEMU con FUA nativo, cifrado de secretos de libvirt mediante credenciales de systemd y una nueva versión de Cockpit con panel de salud, personalización visual y mejoras en cockpit-podman.
Por su parte, Rocky Linux 9.8 llega con un enfoque más conservador, pero también con novedades destacadas: OpenSSH 9.9, GnuTLS 3.8.10 con ML-KEM y ML-DSA, p11-kit 0.26.1 con definiciones PQC, fapolicyd 1.4.3, MariaDB 11.8, PostgreSQL 18, Ruby 4.0, Node.js 24 y nuevas versiones de GCC Toolset, LLVM, Rust y Go. Image Builder, además, gana particionado avanzado, inyección de Kickstart en ISO y creación de imágenes WSL2.
Toda la información y las descargas, en el anuncio oficial de Rocky Linux 10.2 y Rocky Linux 9.8.
La entrada Rocky Linux 10.2 refuerza la seguridad poscuántica y la gestión de imágenes es original de MuyLinux
code>archivo.close()
Este programa abre el archivo usando el parámetro a para indicar que el texto debe incluirse a continaución del texto actual.
Probemos un ejemplo combinado: https://ubunlog.com/wp-content/uploads/2026/05/quincedos.png Este es un ejemplo combinado de creación, escritura y lectura de un archivo de texto plano en Python.
Este programa hace lo siguietne:
* Crea el archivo distribuciones.txt en modo escritura, crea un objeto para que Python trabaje con él y se lo asigna a la variable archivo.
* Escribe en el archivo el nombre de tres distribuciones seguidos de un salto de lÃnea para que se ordenen en columans.
* Cierra el archivo.
* Abre el archivo en modo lectura, crea el objeto para que Python trabaje con él y se lo asigna a la variable archivo.
* Imprime en pantalla el mensaje de que va a mostrar el contenido del archivo.
* Inicia el bucle para leer lÃnea por lÃnea el contenido del archivo.
* Imprime lÃnea por lÃnea omitiendo el caracter indicador del salto de lÃnea.
* Ciera el archivo. Manejo de errores
Muchas veces, por errores de codificación o del usuario, pueden producirse situaciones que hacen que el programa no pueda seguir funcionando. Usualmente Python detiene la ejecución y muestra un mensaje de error. Sin embargo podemos adoptar medidas para prevenir esto. Esto se llama manejo de excepciones.
Python dispone de un mecanismo para manejar los problemas (O situaciones excepcionales) que es conocido como el bloque try-except. En try se coloca el código que Python asigna al error y en except cómo debe responderse a ese error. Un error serÃa por ejemplo intentar abrir un archivo que no existe o escribir en uno para el que el programa no tiene permisos suficientes. https://ubunlog.com/wp-content/uploads/2026/05/quincedieciocho.png Python incluye mecanismos para prevenir errores de codificación o del usuario
1. Iniciamos con la instrucción try el bloque de código que Python debe ejecutar.
2. Abrimos el archivo (Suponiendo que exista) en modo lectura.
3. Asignamos el contenidodel archivo a la variable contenido.
4. Imprimimos el tÃtulo «Contenido del archivo»
5. Imprimimos el contenido.
6. Cerramos el archivo.
7. En caso de que el programa no encuentre el archivo muestra dos mensajes indicando que el archivo no existe y que verifiquemos el nombre. Tipos de errores más comunes:
* ValueError: Se intenta utilizar un valor inválido a una operación o función.
* TypeError: Se intenta usar un tipo de dato inválido en una operación o función.
* IndexError: Se quiere acceder a un Ãndice inexistente en una lista o tupla.
* KeyError: Se intenta acceder a una clave inexistente en un diccionario.
* FileNotFoundError: Se intenta acceder a un archivo inexistente.
* ZeroDivisionError: Se intenta dividir a un número por cero.
* AttributeError: Se intenta acceder a un atributo inexistente en un objeto.
* ImportError: Se produce cuando se intenta importar un módulo que no existe o se producen errores al momento de una importación.
En próximos articulos continuaremos con este curso
Ubunlog Curso de programación en Python usando Linux. Decimocuarta parte
https://ubunlog.com/wp-content/uploads/2026/05/ultimoarticulo.png En las entregas anteriores de este curso de programación en Python usando Linux vimos que se podÃan ingresar datos desde listas, tuplas y diccionarios o pidiéndole al usuario que los ingresara manualmente. Ahora veremos como trabajar leyendo o guardando archivos.
Con la importación de los módulos necesarios, Python puede leer , crear y escribir en diversos formatos de archivos incluyendo los de las suites ofimáticas más populares y pdf, sin embargo en este post nos quedaremos por el momento con los archivos de texto. Curso de programación en Python usando Linux. Decimocuarta parte
Los archivos de texto plano son la forma más básica de almacenar datos. Se trata de letras, números sÃmbolos y espacios almacenados en lÃneas sin ningún tipo de formato. Es el tipo de archivo que se crea con programas como Gedit, Kate o el bloc de notas de WIndows.
Al ser compatibles con la mayorÃa de los programas y lenguajes de programación, el formato de texto plano se usa para guardar información simple como configuraciones, registros de actividades, listras o resultados de la ejecución de programas.
Python integra desde su instalación los comandos básicos para trabajar con archivos de texto icluyendo abrirlos, leerlos, escribirlos y cerrarlos. La función open()
Esta función necesita dos parámetros, el nombre del archivo y alguno de los siguientes:
* r: Lee un archivo existente.
* w: Comprueba si el archivo existe, en caso de que no exista lo crea y si existe sobrescribe su contenido.
* r+: Combina lectura y escritura del archivo.
* a: Escribe a continuación del contenido del archivo.
Por ejemplo, esta instrucción: archivo = open("archivo.txt", "r")
* Abre el archivo archivo y lee su contenido.
* La variable almacena el objeto que la función open crea al abrir el archivo.
Con este programa abrimos el archivo, leemos e imprimimos su contenido y cerramos el archivo. archivo = open("archivo.txt", "r") contenido = archivo.read() print(contenido) archivo.close()
Este programa
1. Abre el archivo en modo lectura y asigna el objeto a la variable archivo.
2. El método read asignado a la variable del objeto archivo lee el contenido usando el método read y lo asigna a la variable contenido.
3. Imprime el contenido almacenado en la variable contenido.
4. Cierra el archivo.
Ahora veamos otra forma de leer el contenido de un archivo; https://ubunlog.com/wp-content/uploads/2026/05/ejemplo15.png Con este método Python lee un archivo lÃnea por lÃnea
En este caso utilizamos otro método llamado readlines.
* El programa abre el archivo en modo lectura, crea el objeto y lo asigna a la variable archivo.
* Con la función archivo.readlines se crea una lista con todas las lÃneas del archivo de texto y se asigna a la variable lÃneas.
* El bucle imprime lÃnea por lÃnea con un detablle. Como los editores de texto plano incluyen un caracter especial para indicar los saltos de lÃnea, el método strip elimina ese caracter en la impresión.
* Se cierra el archivo.
Podemos escribir un archivo con un programa como este archivo = open("archivo.txt", "w") archivo.write("Hola, estamos escribiendo un archivo.\n") archivo.write("usando un programa en Python.") archivo.close()
1. El programa abre un archivo o lo crea si no existe, crea un objeto y lo asigna a la variable archivo.
2. Escrive la primera lÃnea agregando el método write a la variable archivo. .\n indica que debe haber un salto de lÃnea.
3. Escribe la segunda lÃnea.
4. Cierra el archivo.
Otro método de escribir en un archivo: archivo = open("archivo.txt", "a") archivo.write("Voy a agregar una lÃnea más.") <[...]
as nm
Usando nm en cualquier referencia al módulo en el nombre del código.
Si no queremos hacer referencia al módulo cada vez que invocamos a alguno de sus elementos podemos hacer: from nombre_modulo import *
Esto nos permitirá llamar desde el código a cada elementos dle módulo como si lo hubiésemos definido en el mismo código. Aunque podrÃa generar confictos con elementos existentes. Ubicación de los mádulos
En el primer ariculo del curso explicamos el concepto de entornos virtuales. Esta práctica que es obligatoria en Ubuntu y otras distribuciones Linux y optativa en Windows crea una estructura de archivos que incluyen lugares para el almacenamiento de módulos. En general un módulo puede estar almacenado en tres lugares:
* El directorio donde está el programa principal que llama al módulo.
* Si lo instalaste mediante un gestor de paquetes, en la carpeta lib del entorno virtual.
* En directorios determinados por el usuario, se indica la ubicación en el comando import. Tipos de módulos:
* Módulos estandar: Se incluyen en la instalación de Python y sirven para una amplia gama de las tareas más comunes que realizan los programadores como la generación de números aleatorios. No requieren de configuración adicional y su desarrollo está a cardo de los mismos desarrolladores que el lenguaje.
* Modulos desarrollados por elusuario: Responden a necesidades especÃficas de un proyectos y si se ponen a disposición de otros usuarios en foros o sitios de descarga no hay garantÃas de que haya soporte oficial o actualizaciones.
* Mantenidos por terceros: Se instalan mediante gestores de paquetes especÃficos y cumplen necesidades comunes a múltiples usuarios no cubiertas por los módulos estándar como por ejemplo mandar mensajes por WhatsApp. Aunque en muchos casos son mantenidos por empresas o usuarios responsables con documentación completa o actualizada, también se han encontrado paquetes maliciosos.
Algunos ejemplos de módulos estándar son:
* Math: Brinda soporte a funciones matemáticas como cálculo de raÃces, trigonometrÃa, logaritmos y constantes.
* Random: SIrve para la generación de números aleatorios y la selección aleatorias de elementos.
* Datetime: Manejo de calendario, trabajo con fechas y horas y cálculo de diferencias de tiempos.
* Os: Se ocupa de la interacción de la aplicación con el sistema operativo incluyendo el trabajo con archivos, directorios y variables de entorno. El gestor de paquetes pip
Como tanos nombres del mudno del software libre, pip es el acrónimo recursivo en inglés para instalador de paquetes pip. Es la herramienta oficial para la instalación de modulos creados port terceros. La lista de paquetes disponibles podemos verla aquÃ.
Los comandos básicos son:
Instalar módulo pip3 install nombre_modulo
Actualizar módulo pip3 install --upgrade nombre_modulo.
Desinstalar módulo pip3 uninstall nombre_modulo
En la siguiente entrega continuaremos con el curso.
Ubunlog Curso de programación en Python usando Linux. Decimotercera parte
https://ubunlog.com/wp-content/uploads/2026/05/trece.png Una de las mejores caracterÃsticas de Python, como vimos en entregas anteriores del curso de programación en Python usando Linux, es que el código se puede reutilizar en otras partes de la aplicación o en otras aplicaicones.
En este post veremos cómo utilizar programas en otros programas sin necesidad de tener que pegar o tipear el código en ellos. Esto es útil porque python cuenta con una cantidad de librerÃas para tareas especÃficas que nos liberan del trabajo de «volver a reinventar la rueda». Curso de programación en Python usando Linux
Hasta ahora lo que hacÃamos era definir una función y llamarla en el momento en que la necesitamos. Ahora vamos a introducir el concepto de módulo. Un módulo es un archivo en el cuál se definieron funciones y clases y se declararon variables. Dado que los múdulos son archivos independientes, su utilización para construir proyectos grandes hace más fácil su mantenimiento y actualización.
Python incluye una serie de módulos para una diversa variedad de tareas y además podemos crear los nuestros.
Las ventajas de usar módulos son:
* Reutilización: Podemos escribir una sola vez un programa que haga una tarea especÃfica (Por ejemplo calcular un impuesto) y llamarlo para ser utilizado en cuántos programas necesitemos esa función sin necesidad de volver a reescribir el código.
* Orden: Los módulos ayudan a dividir las partes del proyecto en forma lógica haciendo que cualquier persona con un mÃnimo conocimiento de Python pueda saber qué hace cada parte del programa.
* Mantenimiento: Cuánto más corto sea el código más fácil se hace encontrar errores y hacer modificaciones.
* Escalabilidad: En proyectos grandes la construcción modular hace que sea más fácil dividir y volver a unificar el trabajo.
* LibrerÃas: Python pone a disposición d elos programadores una amplia gama de módulos que van desde la creacón de juegos a grandes proyectos de Inteligencia Artificial.
Para una correcta construcción de de un proyecto de Python en módulos hay que dividir y guardar las difeferentes partes en archivos con la extensión .py. Lo ideal es seguir los siguientes criterios:
* Identificar partes del código que cumplen funciones similares: Por ejemplo podemos agrupar en un módulo la captura de datos, en otro el procesamiento y en otro la salida y almacenamiento.
* Asignar nombres descriptivos: La idea es que cualquiera de una mirada pueda saber que hace cada módulo Si es un módulo de validación de datos es más útil llamarlo validación.py que 1234.py.
Vamos a crear un módulo con el nombre mostrar_distro.py. Este es el módulo: https://ubunlog.com/wp-content/uploads/2026/05/ejemplocatorce1.png Los modulos son programas reutilizables que se almacenan en forma externa.
Este módulo crea una función para imprimir e nombre de una distribución que se indicará en el programa que importe la función junto con el texto «La mejor distro es… No lo dudes»
Está es la aplicación que llama al módulo. https://ubunlog.com/wp-content/uploads/2026/05/catorcedos.png Este programa llama al módulo que creamos y guardamos previamente.
Este programa llama al módulo que guardamos previamente, invoca a la función distro y la ejecuta con el parámetro «Ubuntu. Si cambiamos algo en el módulo, como el texto que se muestra junto con el nombre de la distribución, se reflejará en el programa. La instrucción import
Como vimos en el código, para importar un módulo hacemos import nombre_modulo
No se agrega la extensión.py
Sin eambargo, no necesitamos importar todo el módulo. Podemos hacerlo con partes especÃficas: from nombre_modulo import elemento1, elemento2
Para ahorrar tecleo o conflictos de nombres es posible asignarle un alias al módulo importado. import nombre_moulo[...]
ón encontrada:", distro)
Da el mensaje que se encontró la distribución buscada e imprime cuál es el nombre. break
Detiene el bucle. print("Fin de la búsqueda.")
Muestra el mensaje de fin de la búsqueda, cosa que también harÃa aunque no se encontrara la distribución buscada. Continue
La instrucción continue funciona de una manera parecida que en el bucle while. Cuando la encuentra Python salta el siguiente elemento de la lista ignorando el resto del código que queda por ejecutar. Esto nos sirve cuando el elemento actual no cumple una condición pero queremos que el bucle se siga ejecutando.
Esto es un ejemplo: https://ubunlog.com/wp-content/uploads/2026/05/ejemplo1226.png La instrucción continue, en un bucle for, al igual que sucede en un bucle while, detiene la ejecuciń del código actual pasa al siguiente elementonde la lista. distros = ["Ubuntu", "Debian", "arch linux", "Fedora", "Linux Mint"]
Crea una lista con 5 distribuciones Linux. Lo de poner arch linux con minúscula es intencional. for distro in distros
Recorre cada uno de los elementos de la lista asignándoselo por turnos a la variable distro. if distro[0].islower():
Comprueba que la primera letra de la distribución sea mayúscula.
print(f»‘{distro}’ no empieza con mayúscula,»)
Le avisa al usuario que la distro no cumple con la condición de empezar con mayúsculas y que va a seguir con la siguiente:
continue
Como no se cumple la condición pasa al siguiente elemento del bucle. print(f"* {distro}")
Imprime las distribuciones que si cumplen con la condición de empezar con mayuscula. Range
La función range se usa junto al bucle for para generar secuencias de números. range(inicio, fin, paso)
Donde:
* Inicio: Número donde se inicia la secuencia. Por defecto 0
* Fin: Es el número donde termina la secuencia sin incluir este valor.
* Paso: Es el intervalo entre cada número de la secuencia. Por defecto es 1.
Supongamo que tenemos esta instrucción: for i in range(4):
Dado que por defecto se comienza desde el 0 y se usa el intervalo 1, la instrucción : print(i)
Imprimirá los números de 0 a 3.
Mientras que si definimos el bucle: for i in range(4, 10): print(i)
Mostrará todos los números de 4 al 9
Mientras que el bucle: for i in range(3, 21, 3):
Al hacer: print(i)
Mostrará
3
6
9
12
15
18
También podemos generar la secuencia de números en forma decreciente: for i in range(21, 3,- 3):
Es posible usar range para enumerar los elementos de una lista. SerÃa algo como esto: https://ubunlog.com/wp-content/uploads/2026/05/ejemplo1225.png Range se puede usar para enumerar los elementos de una lista aunque Python 3 tiene un comando propio para eso.
Veamos el programa en forma detallada distros = ["Ubuntu", "Debian", "Fedora"]
Crea una lista de tres distribuciones. len(distros)
Determina la cantidad de elementos de la lista. range(len(distros))
Pone la cantidad de elementos de la lista como lÃmite superior para range. for i in range(len(distros)):
Comienza a recorrer cada uno de los elementos de la lista. print(f"{i} - {distros[i]}")
Imprime el Ãndice y el elemento de la lista.
De todas maneras esto puede hacerse en forma más fácil con: for i, distro in enumerate(distros)
En el próximo articulo continuaremos con las caracterÃsticas de Python
Ubunlog Curso de programación en Python usando Linux. Duodécima parte.
https://ubunlog.com/wp-content/uploads/2026/05/ilustracion.png Como dijimos en el post anterior de este curso de programación en Python usando Linux, cuando necesitemos que un programa se ejecute sin detenerse, podemos usar los bucles. Estos repiten la ejecución de un código mientras se cumplan una o más condiciones.
HabÃamos dejado el artÃculo anterior explicando la utilidad de las instrucciones break y continue. Curso de programación en Python usando Linux https://ubunlog.com/wp-content/uploads/2026/05/ejemplo-1210.png Usando las instrucciones break y continue dentro de un bucle while podemos detener total o parcialmente la ejecución del código dentro del bucle.
Veamos de manera detallada lo que hace este código: intentos = 0
Crea la variable intentos que permitirá llevar el control de cuantos ingresos válidos hizo el usuario. Establece el valor en 0. while intentos = 5
Establece que el bucle debe ejecutarse 5 veces a menos que se encuentre con la instrucción break. distro = input(f"Intento {intentos + 1}/5 - Escribà una distro: ")
Le pide al usuario que ingrese el nombre de una distribución y lo asigna a la variable a distro. Para no confundir al usuario hace que lo que para el contador sea el intento 0 se muestre como el intento 1. if distro == ""
Comprueba si el usuario pulsó Enter sin escribir nada. print("No escribiste nada, no cuenta como intento.")
Le avisa al usuario que no escribió nada continue
Vueve a iniciar el bucle sin sumar ningún intento. intentos += 1
Si el usuario escribió algo suma un intento al contador. if distro == "Ubuntu"
Comprueba si el usuario escribió «Ubuntu» print(f"¡Correcto! Adivinaste en {intentos} intento(s).")
Indica que la respuesta es correcta y cuantos intentos se necesitaron. break
Como el usuario acertó, detiene el bucle. else:
Dado que ya no se cumple la condición de menos de 5 intentos se aplica la alternativa. print("¡Se acabaron los intentos! Era Ubuntu.")
Se imprime el mensaje de que se acabaron los intentos y que la distro era Ubuntu. El bucle for
El bucle while es útil cuando queremos que un programa se repita hasta que se cumpla una determinada condición. Pero si queremos ejecutar un bucle, por ejemplo haciendo que se muestren todos los elementos de una lista y, esa lista tiene un número de elementos variables, nos resultará más útil la instrucción for.
La sintaxis es la siguiente: for variable in secuencia
El bucle for trabaja con una secuencia que puede ser una lista, una cadena de texto o un rango numérico y la recorre en su totalidad , ejecutando el mismo bloque de código para cada uno de los elementos de la secuencia.
Este es un ejemplo: https://ubunlog.com/wp-content/uploads/2026/05/ejemplo122.png En este ejemplo se muestra el mensaje establecido con cada uno de los elementos de la lista. Break
La instrucción break detiene la ejecución del bucle antes de que se llegue al final de la secuencia. https://ubunlog.com/wp-content/uploads/2026/05/ejemplo123.png En este caso la instrucción break detiene al bloque for cuando se encuentra el resultado deseado distribuciones = ["Ubuntu", "Debian", "Linux Mint", "Arch Linux", "Fedora"]
Crea una lista de distribuciones distro_a_buscar = "Debian"
Establece que se va a busca la distribución Debian. for distro in distribuciones
Va asignando de manera secuencial cada elemento de la lista a la variable distro. print("Buscando...")
Muestra el mensaje de búsqueda al principio de cada intento. if distro == distro_a_buscar
Comprueba si encontró la distribución que buscaba. print("Distribuci[...]
Available now! Telegram Research 2025 — the year's key insights 
