0% encontró este documento útil (0 votos)
15 vistas60 páginas

Linux Essentials

El documento explora la evolución de Linux y su relación con UNIX, destacando que Linux es un kernel no certificado que se asemeja a UNIX. Se detalla el rol del kernel en la gestión de recursos y procesos, así como la importancia del código abierto en el desarrollo de Linux. Además, se discuten las consideraciones para elegir un sistema operativo, incluyendo el propósito de la máquina, el ciclo de vida del software y las diferencias entre Linux, Windows y OS X.

Cargado por

fabianlr0505
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
15 vistas60 páginas

Linux Essentials

El documento explora la evolución de Linux y su relación con UNIX, destacando que Linux es un kernel no certificado que se asemeja a UNIX. Se detalla el rol del kernel en la gestión de recursos y procesos, así como la importancia del código abierto en el desarrollo de Linux. Además, se discuten las consideraciones para elegir un sistema operativo, incluyendo el propósito de la máquina, el ciclo de vida del software y las diferencias entre Linux, Windows y OS X.

Cargado por

fabianlr0505
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

1.

2 La evolución del Linux y los sistemas operativos populares

La definición de la palabra Linux depende del contexto en el que se utiliza.


Linux se refiere al kernel. Es el controlador central de todo lo que pasa en el
equipo (veremos más detalles a continuación). Quienes dicen que su equipo
"se ejecuta con Linux" generalmente se refiere al kernel y el conjunto de
herramientas que vienen con él (llamados distribución). Si tienes
"Experiencia con Linux", probablemente te refieres a los propios programas,
aunque dependiendo del contexto, podrías hablar sobre tu capacidad de
ajustar con precisión el kernel. Cada uno de estos componentes será
explorado para que puedas entender exactamente qué papel juega cada
uno.

El término que más complica las cosas es UNIX. UNIX era originalmente un
sistema operativo desarrollado en los laboratorios de Bell AT&T en la década
de 1970. Éste fue modificado y bifurcado (es decir, las personas lo
modificaron y estas modificaciones sirvieron de base para otros sistemas).
En la actualidad hay muchas variantes de UNIX. Sin embargo, UNIX es ahora
una marca registrada y una especificación, propiedad de un consorcio
industrial llamado Open Group. Sólo el software que ha sido certificado por el
Open Group puede llamarse UNIX. A pesar de la adopción de todos los
requisitos de la especificación de UNIX, Linux no ha sido certificado. ¡Eso
significa que Linux realmente no es un UNIX! Es sólo... como UNIX.

1.2.1 Rol del Kernel

El kernel del sistema operativo es como un controlador de tráfico aéreo en


un aeropuerto. El kernel determina que programa obtiene que pedazos de
memoria, arranca y mata a los programas, y se encarga de mostrar texto en
un monitor. Cuando una aplicación necesita escribir en disco, debe pedir al
sistema operativo que lo haga. Si dos aplicaciones piden el mismo recurso, el
kernel decide cuál de las dos lo recibe y en algunos casos, mata a una de las
aplicaciones para salvar el resto del sistema.

El kernel también se encarga de cambiar entre aplicaciones. Un equipo


tendrá un pequeño número de procesadores CPU y una cantidad finita de
memoria. El kernel se encarga de descargar una tarea y cargar una nueva si
hay más tareas que CPUs. Cuando la tarea actual se ha ejecutado una
cantidad suficiente de tiempo, la CPU detiene la tarea para que otra pueda
ejecutarse. Esto se llama multitarea preferente. Multitarea significa que la
computadora realiza varias tareas a la vez, preferente significa que el kernel
decide cuándo cambia el enfoque entre las tareas. Con las tareas de
conmutación rápida, parece que el equipo está haciendo muchas cosas a la
vez. Cada aplicación puede pensar que tiene un bloque grande de memoria
en el sistema, pero es el kernel que mantiene esta ilusión, reasignando
bloques más pequeños de memoria, intercambiando bloques de memoria
con otras aplicaciones, o incluso sacando al disco bloques que aún no se
hayan tocado.

Cuando el equipo arranca, carga un pequeño trozo de código llamado gestor


de arranque. El gestor de arranque debe cargar el kernel y arrancarlo. Si
estás más familiarizado con sistemas operativos como Microsoft Windows y
Apple OS X, probablemente nunca ves al gestor de arranque, pero en el
ambiente de UNIX es generalmente visible por lo que puedes modificar la
manera en la que tu equipo arranque.

El gestor de arranque carga el kernel de Linux y luego transfiere el control.


Linux continúa con el funcionamiento de los programas necesarios para
hacer que el equipo sea útil, tales como conexión a la red o abrir un servidor
web.

1.2.2 Las Aplicaciones

Al igual que un controlador de tráfico aéreo, el kernel no es útil sin tener algo
que controlar. Si el kernel es la torre, las aplicaciones son los aviones. Las
aplicaciones mandan peticiones al kernel, en cambio, éste recibe recursos
tales como memoria, CPU y disco. El kernel también abstrae los detalles
complicados de la aplicación. La aplicación no sabe si un bloque de disco es
una unidad de estado sólido de fabricante A, un disco duro metálico de
spinning del fabricante B, o incluso, alguna parte del archivo de red. Las
aplicaciones sólo tienen que seguir la Interfaz de Programación de
Aplicaciones (API - Application Programming Interface) del kernel y a cambio
no tienen que preocuparse por los detalles de implementación.

Cuando nosotros, como usuarios, pensamos en aplicaciones, tendemos a


pensar en los procesadores de texto, navegadores web y clientes de correo
electrónico. Al kernel no le importa si se está ejecutando algo orientado al
usuario, es un servicio de red que se comunique con un equipo remoto, o
una tarea interna. Por lo tanto, de esto obtenemos una abstracción llamada
proceso. Un proceso es solamente una tarea que está cargada y rastreada
por el kernel. Una aplicación puede necesitar incluso múltiples procesos para
funcionar, por lo que el kernel se encarga de ejecutar los procesos, los
arranca y para según lo requerido, y entrega los recursos del sistema.

1.2.3 Rol de Código Abierto


Linux comenzó como un proyecto de pasatiempo por Linus Torvalds en 1991.
Hizo la fuente disponible libremente y otros se unieron para formar este
sistema operativo de vanguardia. Su sistema no fue el primero desarrollado
por un grupo. Sin embargo, ya que fue un proyecto creado desde cero, los
primeros usuarios podían influir el rumbo del proyecto y asegurarse de que
no se repitieran los errores de otros UNIXes.

Los proyectos de software toman la forma de código fuente, que es un


conjunto de instrucciones de computo legibles para el humano. El código
fuente puede escribirse en cualquiera de los cientos de lenguajes diferentes,
Linux ha sido escrito solamente en C, que es un lenguaje que comparte
historia con el UNIX original.

El código fuente no se entiende directamente por el equipo, por lo que debe


ser compilado en instrucciones de máquina por un compilador. El compilador
reúne todos los archivos fuente y genera algo que se puede ejecutar en el
equipo, como el kernel de Linux.

Históricamente, la mayor parte del software se ha publicado bajo una


licencia de código cerrado, lo que significa que obtienes el derecho a utilizar
el código de máquina, pero no puedes ver el código fuente. ¡A menudo la
licencia dice específicamente, que no se intente revertir el código máquina al
código de fuente para averiguar lo que hace!

El Código Abierto toma una vista centrada en la fuente del software. La


filosofía de código abierto es que tienes derecho a obtener el software y
modificarlo para tu propio uso. Linux adoptó esta filosofía con gran éxito. La
gente tomó la fuente, hizo cambios y lo compartió con el resto del grupo.

Junto a ésto, fue el proyecto GNU (GNU, no UNIX). Mientras que GNU estaba
construyendo su propio sistema operativo, eran mucho más eficaces en la
creación de las herramientas que están de acuerdo con el sistema operativo
UNIX, como los compiladores y las interfaces de usuario. La fuente era
completamente gratuita, así que Linux pudo enfocar sus herramientas y
proporcionar un sistema completo. Como tal, la mayoría de las herramientas
que forman parte del sistema Linux provienen de estas herramientas GNU.

Hay muchas diversas variantes en código abierto, y los veremos en un


capítulo posterior. Todos coinciden en que debes tener acceso al código
fuente, pero difieren en cómo puedes, o en algunos casos, cómo debes
redistribuir los cambios.
[Link] ¿Qué es un Comando?

La respuesta más simple a la pregunta "¿Qué es un comando?" es que un


comando es un programa de software que cuando se ejecuta en la línea de
comandos, realiza una acción en el equipo.

Cuando tomas en cuenta un comando utilizando esta definición, en realidad


estás tomando en cuenta lo que sucede al ejecutar un comando. Cuando se
escribe un comando, el sistema operativo ejecuta un proceso que puede leer
una entrada, manipular datos y producir la salida. Desde esta perspectiva,
un comando ejecuta un proceso en el sistema operativo, y entonces la
computadora realiza un trabajo.

Sin embargo, un comando se puede ver desde una perspectiva diferente:


desde su origen. La fuente es desde donde el comando "proviene" y hay
varios orígenes diferentes de comandos dentro de shell de la CLI:

Comandos integrados en el shell: Un buen ejemplo es el comando cd ya que


es parte del bash shell. Cuando un usuario escribe el comando cd, el bash
shell ya se está ejecutando y sabe cómo interpretar ese comando, sin
requerir de ningún programa adicional para iniciarse.

Comandos que se almacenan en archivos que son buscados por el shell: Si


escribes un comando ls, entonces shell busca en los directorios que
aparecen en la variable RUTA DE ACCESO (PATH) para tratar de encontrar un
archivo llamado ls que puede ejecutar. Estos comandos se pueden ejecutar
también escribiendo la ruta de acceso completa del comando.

Alias: Un alias puede reemplazar un comando integrado, la función o un


comando que se encuentra en un archivo. Los alias pueden ser útiles para la
creación de nuevos comandos de funciones y comandos existentes.

Funciones: Las funciones también pueden ser construidas usando los


comandos existentes o crear nuevos comandos, reemplazar los comandos
integrados en el shell o comandos almacenados en archivos. Los alias y las
funciones normalmente se cargan desde los archivos de inicialización cuando
se inicia el shell por primera vez, que veremos más adelante.

1.3 Elegir un Sistema Operativo

Has aprendido que Linux es un sistema operativo de tipo UNIX, lo que


significa que no ha pasado por una certificación formal y por lo tanto no
puede usar la marca oficial de UNIX. Hay muchas otras alternativas; algunas
son tipo UNIX y algunas están certificadas como UNIX. Existen también
sistemas operativos no-Unix como Microsoft Windows.

La pregunta más importante para determinar la configuración de


una máquina es "¿Qué hará esta máquina?" Si necesitas ejecutar un
software especializado que sólo se ejecuta en Oracle Solaris,
entonce eso es lo que necesitarás. Si necesitas leer y escribir
documentos de Microsoft Office, entonces necesitarás Windows o
algo capaz de ejecutar OpenOffice o LibreOffice.

1.3.1 Puntos de Decisión

En primer lugar tienes que decidir que rol debe tener tu máquina. ¿Estará
sentado en la consola ejecutando aplicaciones de productividad o navegando
la web? Si es así, necesitarás un equipo de escritorio (desktop). ¿Vas a
utilizar la máquina como un servidor Web o de otra manera a parte de estar
sentado en una estantería de servidor en algún lugar? Estás buscando un
servidor.

Los servidores generalmente están en un rack y comparten un teclado y un


monitor con muchos otros equipos, ya que el acceso de la consola sólo se
utiliza para configurar y solucionar problemas en el servidor. El servidor se
ejecutará en modo no gráfico, que libera recursos para el propósito real de la
computadora. Un equipo de escritorio ejecutará principalmente una GUI.

A continuación, debes determinar las funciones de la máquina. ¿Existe


software específico que necesita para funcionar, o funciones específicas que
debe hacer? ¿Quieres manejar cientos o miles de estas máquinas al mismo
tiempo? ¿Cuál es el conjunto de habilidades del equipo que administra la
máquina y del software?

También debes determinar la vida útil y la tolerancia de riesgo del servidor.


Los sistemas operativos y actualizaciones de software vienen sobre una base
periódica, llamada el ciclo de liberación. Los proveedores de software sólo
darán soporte a las versiones anteriores del software durante un tiempo
antes de que ya no ofrezcan las actualizaciones, lo que se llama ciclo de
mantenimiento (o ciclo de vida). Por ejemplo, las versiones principales de
Fedora Linux salen aproximadamente cada 6 meses. El Fin de vida (EOL- End
of Life) de las versiones se considera después de 2 versiones principales más
un mes, por lo que tienes entre 7 y 13 meses después de instalar Fedora
antes que necesites actualizaciones. Compara esto con la variante del
servidor comercial, Red Hat Enterprise Linux, y puedes utilizarla hasta 13
años sin la necesidad de actualizar.

Los ciclos de mantenimiento y liberación son importantes porque en un


entorno de servidor empresarial las actualizaciones importantes del servidor
requieren mucho tiempo y por lo tanto se hacen raramente. En cambio, el
propio servidor se reemplaza cuando hay actualizaciones importantes o
reemplazos de las aplicaciones que requieren actualización del sistema
operativo. Del mismo modo, un ciclo de liberación lento es importante
porque las aplicaciones a menudo se enfocan en la versión actual del
sistema operativo y querrás evitar la sobrecarga de las constantes
actualizaciones para mantenerse al día en los servidores y sistemas
operativos. Hay una gran cantidad de trabajo involucrada en la actualización
de un servidor, y la función del servidor tiene a menudo muchas
personalizaciones que dificultan el portar a un nuevo servidor. Esto requiere
mucho más pruebas que si sólo se haya actualizado una aplicación.

Si te dedicas al desarrollo de software o al trabajo tradicional de escritorio, a


menudo querrás tener el software más reciente. El software más reciente
tiene mejoras en funcionalidad y aspecto que contribuyen a que el uso del
equipo sea más agradable. Un escritorio frecuentemente guarda su trabajo
en un servidor remoto, por lo que el escritorio se puede limpiar e instalar el
sistema operativo más reciente con poca interrupción.

Las versiones de software individuales se pueden caracterizar por ser beta o


estables. Una de las ventajas de ser un desarrollador de código abierto es
que puedes liberar tu nuevo software y rápidamente obtener
retroalimentación de los usuarios. Si una versión de software está en una
etapa de muchas funciones nuevas que no han sido rigurosamente probados
por lo general se denomina beta. Después de que tales funciones hayan sido
probadas en el campo el software se mueve a un punto estable. Si necesitas
las últimas funciones, buscarás una distribución que tiene un ciclo de
liberación corto y el software beta es de fácil uso. Cuando se trate de un
servidor querrás un software estable a menos que las nuevas funciones sean
necesarias y no te importe ejecutar código que no haya sido completamente
probado.

Otro concepto ligeramente relacionado es la compatibilidad con versiones


anteriores. Esto se refiere a la capacidad de un sistema operativo más
reciente de ser compatible con el software creado para las versiones
anteriores. Esto es generalmente una preocupación si necesitas actualizar tu
sistema operativo, pero no estás en condiciones de actualizar el software de
la aplicación.

Por supuesto, el costo siempre es un factor. Linux en sí podría ser gratuito,


pero tendrías que pagar por soporte dependiendo de las opciones que elijas.
Microsoft tiene costo de licencia de servidor y podría aplicar los gastos
adicionales de soporte durante la vigencia del servidor. El sistema operativo
que hayas elegido puede que sólo se ejecute en un hardware en particular,
lo que también afecta el costo.

1.3.2 Microsoft Windows

El mundo de Microsoft divide los sistemas operativos de acuerdo al propósito


de la máquina: ¿escritorio o servidor? La edición de escritorio de Windows ha
experimentado diversos esquemas de nomenclatura con la versión actual (al
momento de escribir esto) siendo ahora simplemente Windows 8. Nuevas
versiones del escritorio salen cada 3-5 años y tienden a recibir soporte por
muchos años. La compatibilidad con versiones anteriores es también una
prioridad para Microsoft, llegando incluso a agrupar la tecnología de la
máquina virtual para que los usuarios puedan ejecutar software antiguo.

En el mundo de los servidores existe Windows Server. Actualmente hay


(hasta la fecha de este texto) la versión 2012 para indicar la fecha de
lanzamiento. El servidor ejecuta una GUI, pero en gran parte como una
respuesta competitiva a Linux. Ha hecho progresos sorprendentes en la línea
de comandos con capacidades de scripting a través de PowerShell. También
puedes hacer que el servidor parezca una computadora de sobremesa con
un paquete de experiencia de escritorio opcional.
1.3.3 Apple OS X

Apple produce el sistema operativo OS X que pasó por la certificación de


UNIX. OS X está parcialmente basado en software del proyecto FreeBSD.

Por el momento, OS X es principalmente un sistema operativo de escritorio,


pero existen paquetes opcionales que ayudan con la gestión de servicios de
red que permiten a muchas computadoras de escritorio OS X colaborar, tal
como compartir archivos o ejecutar un inicio de sesión de red.

OS X en el escritorio suele ser una decisión personal ya que mucha gente


considera este sistema más fácil de usar. La creciente popularidad de OS X
ha asegurado un sano soporte de proveedores de software. OS X es también
muy popular en las industrias creativas como por ejemplo la producción de
vídeo. Es un área donde las aplicaciones manejan la decisión de sistema
operativo y por lo tanto la elección de hardware, ya que OS X se ejecuta en
el hardware de Apple.

1.3.4 BSD

Hay varios proyectos open source BSD (Berkeley Software Distribution) como
OpenBSD, FreeBSD y NetBSD. Estas son alternativas a Linux en muchos
aspectos ya que utilizan una gran cantidad de software común. BSD por lo
general se implementa en la función del servidor, aunque también hay
variantes como GNOME y KDE que fueron desarrolladas para las funciones
del escritorio.

1.3.5 Otros UNIX Comerciales

Algunos de los UNIX comerciales más populares son:

Oracle Solaris

IBM AIX

HP-UX
Cada uno de ellos se ejecuta en el hardware de sus respectivos creadores. El
hardware es generalmente grande y potente, que ofrece características tales
como CPU y memoria o integración de intercambio con sistemas de legado
mainframe también ofrecidos por el proveedor.

A menos que el software requiera un hardware específico o las necesidades


de la aplicación requieran de la redundancia en el hardware, muchas
personas tienden a elegir estas opciones porque ya son usuarios de
productos de la compañía. Por ejemplo, IBM AIX ejecuta en una amplia
variedad de hardware de IBM y puede compartir el hardware con
mainframes. Por lo tanto, encontrarás AIX en empresas que ya tienen una
larga tradición de uso de IBM o que hacen uso de software de IBM software
como el WebSphere.

1.3.6 Linux

Un aspecto donde Linux es muy diferente a las alternativas, es que después


de que un administrador haya elegido Linux todavía tiene que elegir una
distribución Linux. Acuérdate del tema 1, la distribución empaca el kernel,
utilidades y herramientas administrativas de Linux en un paquete instalable
y proporciona una manera de instalar y actualizar paquetes después de la
instalación inicial.

Algunos sistemas operativos están disponibles a través de un único


proveedor, como OS X y Windows, con el soporte del sistema proporcionado
por el proveedor. Con Linux, hay múltiples opciones, desde las ofertas
comerciales para el servidor o de escritorio, hasta las distribuciones
personalizadas hechas para convertir una computadora antigua en un
firewall de red.

A menudo los proveedores de aplicaciones eligen un subconjunto de


distribuciones para proporcionar soporte. Diferentes distribuciones tienen
diferentes versiones de las librerías (bibliotecas) principales y es difícil para
una empresa dar soporte para todas estas versiones diferentes.

Los gobiernos y las grandes empresas también pueden limitar sus opciones a
las distribuciones que ofrecen soporte comercial. Esto es común en las
grandes empresas donde pagar para otro nivel de soporte es mejor que
correr el riesgo de interrupciones extensas. También, las diferentes
distribuciones ofrecen ciclos de liberación a veces tan frecuentes como cada
seis meses. Mientras que las actualizaciones no son necesarias, cada versión
puede obtener soporte sólo para un periodo razonable. Por lo tanto, algunas
versiones de Linux tienen un Periodo Largo de Soporte (LTS- Long Term
Support) hasta 5 años o más, mientras que otros sólo recibirán soporte por
dos años o menos.

Algunas distribuciones se diferencian entre estables, de prueba y versiones


inestables. La diferencia es que la distribución inestable intercambia
fiabilidad a cambio de funciones. Cuando las funciones se hayan integrado
en el sistema por mucho tiempo y muchos de los errores y problemas hayan
sido abordados, el software pasa por pruebas para ser una versión estable.
La distribución Debian advierte a los usuarios sobre los peligros de usar la
liberación "sid" con la siguiente advertencia:

"sid" está sujeta a cambios masivos y actualizaciones de librerías


(biblioteca). Esto puede resultar en un sistema muy "inestable" que contiene
paquetes que no se pueden instalar debido a la falta de librerías,
dependencias que no se pueden satisfacer, etc. Usar bajo el propio riesgo!

Otras versiones dependen de las distribuciones Beta. Por ejemplo, la


distribución de Fedora libera las versiones Beta o versiones de su software
antes de la liberación completa para minimizar errores. Fedora se considera
a menudo una comunidad orientada a la versión Beta de RedHat. Se agregan
y cambian las funciones en la versión de Fedora antes de encontrar su
camino en la distribución de RedHat Enterprise.

1.3.7 Android

Android, patrocinado por Google, es la distribución Linux más popular del


mundo. Es fundamentalmente diferente de sus contrapartes. Linux es un
kernel y muchos de los comandos que se tratarán en este curso son en
realidad parte del paquete GNU (GNU no es Unix). Por esta razón algunas
personas insisten en utilizar el término GNU/Linux en lugar de Linux por sí
solo.
Android utiliza la máquina virtual Dalvik con Linux, proporcionando una
sólida plataforma para dispositivos móviles como teléfonos y tabletas. Sin
embargo, carece de los paquetes tradicionales que se distribuyen a menudo
con Linux (como GNU y Xorg), por lo que Android es generalmente
incompatible con distribuciones Linux de escritorio.

Esta incompatibilidad significa que un usuario de RedHat o Ubuntu no puede


descargar software de la tienda de Google Play. Además, un terminal
emulador en Android carece de muchos de los comandos de sus
contrapartes de Linux. Sin embargo, es posible utilizar BusyBox con Android
para habilitar el funcionamiento de la mayoría de los comandos.

2.2 Las Principales Aplicaciones de Código Abierto

El kernel de Linux puede ejecutar una gran variedad de software a través de


muchas plataformas de hardware.

Una computadora puede actuar como un servidor, que significa que


principalmente maneja datos en nombre de otro.

 Puede actuar como un escritorio lo que significa que un usuario puede


interactuar con él directamente.
 La máquina puede ejecutar el software o puede ser utilizada
como máquina de desarrollo en el proceso de creación de software.
 Incluso puede ejecutar múltiples roles ya que no hay distinción en el
Linux en cuanto a la función de la máquina; es simplemente una
cuestión de configurar cuáles de las aplicaciones se ejecutarán.

Una ventaja de esto es que se pueden simular casi todos los aspectos de un
entorno de producción, desde el desarrollo a las pruebas y hasta la
verificación en un hardware reducido, lo cual ahorra costos y tiempo. Como
estudiante de Linux puedes ejecutar las mismas aplicaciones de servidor en
tu escritorio o un servidor virtual no muy costoso que funciona a través de
un gran proveedor de servicios de Internet. Por supuesto no vas a poder
manejar el mismo volumen que un proveedor de servicios grande, ya que
éste posee un hardware mucho más caro. Sin embargo, vas a poder simular
casi cualquier configuración sin necesidad de un hardware muy potente o un
servidor de licencias para el servidor.

El software de Linux cae generalmente en una de tres categorías:


 Software de servidor – software que no tiene ninguna interacción
directa con el monitor y el teclado de la máquina en la que se ejecuta.
Su propósito es servir de información a otras computadoras
llamados clientes. A veces el software de servidor puede no
interactuar con otros equipos, sin embrago, va a estar ahí sentado y
"procesando" datos.

 Software de escritorio – un navegador web, editor de texto,


reproductor de música u otro software con el que tú interactúas. En
muchos casos, como un navegador web, el software consultará a un
servidor en el otro extremo e interpretará los datos para ti. Aquí, el
software de escritorio es el cliente.

 Herramientas – una categoría adicional de software que existe para


que sea más fácil gestionar el sistema. Puedes tener una herramienta
que te ayude a configurar la pantalla o algo que proporcione
un shell de Linux o incluso herramientas más sofisticadas que
convierten el código fuente en algo que la computadora pueda
ejecutar.

Adicionalmente, vamos a ver las aplicaciones móviles, principalmente para el


beneficio del examen LPI. Una aplicación móvil es muy parecida a una
aplicación de escritorio pero se ejecuta en un teléfono o una tableta en lugar
de una maquina de escritorio.

Cualquier tarea que quieras hacer en Linux probablemente pueda ser


acomodada por cualquier número de aplicaciones. Hay muchos navegadores,
muchos servidores web y muchos editores de texto (los beneficios de cada
uno son objeto de muchas guerras santas de UNIX). Esto no es diferente que
el mundo de código cerrado. Sin embargo, una ventaja del código abierto es
que si a alguien no le gusta la manera en la que funciona su servidor web,
puede empezar a construir su propio. Una cosa que aprenderás mientras
vayas progresando con Linux es cómo evaluar el software. A veces querrás ir
con el líder de la manada y otras querrás conocer la última vanguardia de la
tecnología.

2.2.1 Aplicaciones de Servidor

Linux destaca en la ejecución de aplicaciones de servidor gracias a su


confiabilidad y eficiencia. Cuando queremos hablar de un software de
servidor la pregunta más importante es "¿Qué tipo de servicio estoy
ejecutando?" ¡Si quieres proporcionar un servicio de páginas web necesitas
un software de servidor web, no un servidor de correo!
Uno de los primeros usos de Linux era para servidores web. Un servidor web
aloja contenido para páginas web a las que ve el explorador web mediante el
Protocolo de transferencia de hipertexto (HTTP - Hypertext Transfer Protocol)
o su forma cifrada HTTPS. La propia página web puede ser estática, lo que
significa que cuando el navegador solicita una página, el servidor web envía
sólo el archivo tal y como aparece en el disco. El servidor también puede
proporcionar un contenido dinámico, esto es, el servidor web envía la
solicitud a una aplicación que genera el contenido. WordPress es un ejemplo
popular. Los usuarios pueden desarrollar contenidos a través de su
navegador en la aplicación de WordPress y el software lo convierte en un
sitio web completamente funcional. Cada vez que realizas compras en línea
estás viendo un sitio dinámico.

Hoy en día, Apache es el servidor web dominante. Apache fue originalmente


un proyecto independiente, pero el grupo ha formado la Apache Software
Foundation y mantiene más de cien proyectos de software de código abierto.

Otro servidor web es nginx con su base en Rusia. Se centra en el rendimiento


haciendo uso de kernels UNIX más modernos y solo se puede hacer un
subconjunto de lo que Apache puede hacer. Más de un 65% de los sitios web
funcionan mediante Apache o nginx.

El correo electrónico (e-mail) siempre ha sido un uso popular para servidores


Linux. Cuando se habla de servidores de correo electrónico siempre es útil
considerar las 3 funciones diferentes para recibir correo electrónico entre
personas:

Agente de transferencia de correo (MTA- Mail Transfer Agent) – decide qué


servidor debe recibir el correo electrónico y utiliza el Protocolo simple de
transferencia de correo (SMTP- Simple Mail Transfer Protocol) para mover el
correo electrónico hacia tal servidor. No es inusual que un correo electrónico
tome varios "saltos" para llegar a su destino final, ya que una organización
puede tener varios MTAs.

Agente de entrega de correo (MDA- Mail Delivery Agent, también llamado el


Agente de entrega local) se encarga de almacenar el correo electrónico en el
buzón del usuario. Generalmente se invoca desde el MTA al final de la
cadena.

Servidor POP/IMAP – (Post Office Protocol e Internet Message Access Protocol)


son dos protocolos de comunicación que permiten a un cliente de correo
funcionando en tu computadora actuar con un servidor remoto para recoger
el correo electrónico.

A veces un software implementará varios componentes. En el mundo de


código cerrado, Microsoft Exchange implementa todos los componentes, por
lo que no hay ninguna opción para hacer selecciones individuales. En el
mundo del código abierto hay muchas opciones. Algunos servidores
POP/IMAP implementan su propio formato de base de datos de correo para el
rendimiento, por lo que también incluirá el MDA si se requiere una base de
datos personalizada. Las personas que utilizan formatos de archivo estándar
(como todos los correos en un archivo) pueden elegir cualquier MDA.

El MTA más conocido es sendmail. Postfix es otro MDA popular y pretende ser
más simple y más seguro que sendmail.

Si utilizas formatos de archivo estándar para guardar mensajes de correo


electrónico, tu MTA también puede entregar el correo. Como alternativa,
puedes usar algo como procmail que te permite definir filtros personalizados
para procesar el correo y filtrarlo.

Dovecot es un servidor POP/IMAP popular gracias a su facilidad de uso y bajo


mantenimiento. Cyrus IMAP es otra opción.

2.2.2 Aplicaciones de Escritorio

El ecosistema de Linux tiene una amplia variedad de aplicaciones de


escritorio. Puedes encontrar juegos, aplicaciones de productividad,
herramientas creativas y mucho más. Esta sección es un mero estudio de lo
que existe centrándose en lo que LPI considera más importante.

Antes de considerar las aplicaciones individuales, es útil conocer el entorno


de escritorio. Un escritorio de Linux ejecuta un sistema llamado X Window,
también conocido como X11. Un servidor Linux X11 es un [Link] que hace
que el software opere en un modo gráfico y acepte la entrada de un teclado
y un ratón. Otro software controla a las ventanas y a los iconos, y se llama
administrador de ventanas o entorno de escritorio. El administrador de
ventanas es una versión más simple del entorno de escritorio, ya que sólo
proporciona el código para dibujar menús y gestionar las ventanas de las
aplicaciones en la pantalla. Los niveles de funciones en el entorno de
escritorio como ventanas de inicio, sesiones, administrador de archivos y
otras utilidades. En resumen, una estación de trabajo Linux de sólo texto se
convierte en un escritorio gráfico con la adición de X-Windows y un entorno
de escritorio o un administrador de ventanas.

Los administradores de ventanas incluyen: Compiz, FVWM y Enlightenment,


aunque hay muchos más. Los entornos de escritorio principalmente son KDE
y GNOME, los cuales tienen sus propios administradores de ventanas. KDE y
GNOME son proyectos maduros con una cantidad increíble de utilidades
construidas, y la elección es a menudo una cuestión de preferencia personal.

Las aplicaciones de productividad básicas, tales como un procesador de


textos, hoja de cálculo y paquete de presentación son muy importantes.
Conocidos como la suite ofimática (de oficina), en gran parte debido a
Microsoft Office el jugador dominante en el mercado.

OpenOffice (a veces llamado [Link]) y LibreOffice ofrecen una suite


ofimática (de oficina) completa, incluyendo una herramienta de dibujo que
busca la compatibilidad con Microsoft Office, tanto en términos de
características como en formatos de archivo. Estos dos proyectos también
sirven de gran ejemplo de cómo influir en política de código abierto.

En 1999 Sun Microsystems adquirió una compañía alemana relativamente


desconocida que estaba haciendo una suite ofimática (de oficina) para Linux
llamada StarOffice. Pronto después de eso, Sun cambio la marca a
OpenOffice y la había liberado bajo una licencia de código abierto. Para
complicar más las cosas, StarOffice seguía siendo un producto propietario
que se separó de OpenOffice. En 2010 Sun fue adquirido por Oracle, que más
tarde entregó el proyecto a la fundación Apache.

Oracle ha tenido una historia pobre de soporte a los proyectos de código


abierto que va adquiriendo, así pues pronto después de la adquisición por
parte de Oracle el proyecto se bifurcó para convertirse en LibreOffice. En ese
momento se crearon dos grupos de personas desarrollando la misma pieza
de software. La mayor parte del impulso fue al proyecto LibreOffice, razón
por la cual se incluye por defecto en muchas distribuciones de Linux.

Para navegar por la web, los dos principales contendientes son Firefox y
Google Chrome. Ambos son navegadores rápidos de código abierto, ricos en
funciones y tienen un soporte excelente para desarrolladores web. Estos dos
paquetes son un buen ejemplo de cómo la diversidad es buena para el
código abierto – mejoras de uno dan estímulo al otro equipo para tratar de
mejorar al otro. Como resultado, Internet tiene dos navegadores excelentes
que empujan los límites de lo que se puede hacer en la web y el trabajo a
través de una variedad de plataformas.

El proyecto Mozilla ha salido también con Thunderbird, un cliente integral de


correo electrónico de escritorio. Thunderbird se conecta a un servidor POP o
IMAP, muestra el correo electrónico localmente y envía el correo electrónico
a través de un servidor SMTP externo.

Otros clientes de correo electrónico notables son Evolution y KMail que son
clientes de correo electrónico de los proyectos GNOME y KDE. Los formatos
de estandarización a través de POP, IMAP y correo electrónico local significa
que es fácil cambiar entre clientes de correo electrónico sin perder datos. El
correo electrónico basado en web también es otra opción.

Para los tipos creativos existen Blender, GIMP y Audacity que controlan la
creación de películas 3D, manipulación de imágenes 2D y edición de audio
respectivamente. Han tenido diversos grados de éxito en los mercados
profesionales. Blender se utiliza para todo, desde películas independientes
hasta películas de Hollywood, por ejemplo.

Para compartir archivos, Samba es el ganador sin duda. Samba permite que
una máquina Linux se parezca a una máquina Windows para que pueda
compartir archivos y participar en un dominio de Windows. Samba
implementa los componentes del servidor, tales como archivos disponibles
para compartir y ciertas funciones de servidor de Windows, así como el
cliente para que una máquina de Linux puede consumir un recurso
compartido de archivos de Windows.

Si tiene máquinas Apple en la red, el proyecto Netatalk permite que tu


máquina Linux se comporte como un servidor de archivos de Apple.

El protocolo para compartir el archivo nativo para UNIX se llama Sistema de


Archivos de Red (NFS-Network File System). NFS es generalmente parte del
kernel lo que significa que un sistema de archivos remoto puede montarse
como un disco regular, haciendo el acceso al archivo transparente para otras
aplicaciones.

Al crecer tu red de computadoras, necesitarás implementar algún tipo de


directorio. El directorio más antiguo se llama Sistema de nombres de dominio
y se utiliza para convertir un nombre como [Link] a una
dirección IP como [Link] lo que es un identificador único de ese
equipo en Internet. DNS contiene también información global como la
dirección de la MTA para un nombre de dominio proporcionado. Una
organización puede ejecutar su propio servidor DNS para alojar sus nombres
públicos y también para servir como un directorio interno de servicios. El
Consorcio de Software de Internet (Internet Software Consortium), mantiene
el servidor DNS más popular, llamado simplemente bind, esto tras el nombre
del proceso que ejecuta el servicio.

El DNS se centra en gran parte en nombres de equipos y direcciones IP y no


es fácilmente accesible. Han surgido otros directorios para almacenar
información distinta tales como cuentas de usuario y roles de seguridad. El
Protocolo ligero de acceso a directorios (LDAP- Lightweight Directory Access
Protocol) es el directorio más común que alimenta también el Active
Directory de Microsoft. En el LDAP, un objeto se almacena en una forma de
árbol (ramificada), y la posición de tal objeto en el árbol se puede utilizar
para obtener información sobre el objeto, además de lo que se almacena en
el objeto en sí. Por ejemplo, un administrador de Linux puede almacenarse
en una rama del árbol llamado "Departamento TI", que está debajo de una
rama llamada "Operaciones". Así uno puede encontrar personal técnico
buscando bajo la rama del Departamento TI. OpenLDAP es aquí el jugador
dominante.

Una última pieza de la infraestructura de red se denomina el Protocolo de


configuración dinámica de Host (DHCP- Dynamic Host Configuration
Protocol). Cuando un equipo arranca, necesita una dirección IP para la red
local por lo que puede identificarse de manera unica. El trabajo de DHCP
sirve para identificar las solicitudes y asignar una dirección disponible del
grupo DHCP. La entidad Internet Software Consortium también mantiene el
servidor ISC DHCP que es el jugador más común.

Una base de datos almacena la información y también permite una


recuperación y consulta fáciles. Las bases de datos más populares son
MySQL y PostgreSQL. En la base de datos podrías ingresar datos de venta
totales y luego usar un lenguaje llamado Lenguaje de consulta estructurado
(SQL- Structured Query Language) para agregar ventas por producto y fecha
con el fin de producir un informe.

3.4 Virtualización y Cloud Computing

Linux es un sistema operativo multiusuario, lo que significa que muchos


usuarios diferentes pueden trabajar en el mismo sistema al mismo tiempo y
en su mayor parte no pueden hacer cosas para dañar a otros usuarios. Sin
embargo, esto tiene limitaciones: los usuarios pueden acaparar el espacio en
disco o tomar demasiada memoria o recursos de la CPU y causar que el
sistema sea lento para todos. Compartir el sistema en modo multiusuario
también requiere que cada uno ejecute en modo de usuarios sin privilegios,
por lo que permitir que cada usuario ejecuta su propio servidor web es muy
difícil.

La virtualización es un proceso donde un equipo físico, llamado host, ejecuta


múltiples copias de un sistema operativo, cada una llamada invitado. El host
ejecuta un software llamado hipervisor que cambia el control entre los
diferentes invitados, tal como el kernel de Linux funciona para los procesos
individuales.
La virtualización funciona porque los servidores pasan la mayor parte de su
tiempo inactivo y no necesitan recursos físicos tales como un monitor y un
teclado. Ahora puedes tomar una potente CPU y difundirla alrededor de
varias máquinas virtuales y mantener una distribución más equitativa entre
los invitados de lo que es posible en un sistema de Linux de puro. La
principal limitación es por lo general la memoria, con los avances en la
tecnología de hipervisor y la CPU es posible poner más máquinas virtuales en
un host que nunca.

En un entorno virtualizado un host puede ejecutar docenas de sistemas


operativos invitados, y con el apoyo de la CPU, los invitados no saben que se
están ejecutando en una máquina virtual. Cada invitado obtiene su propia
CPU, RAM y disco virtual y se comunica con la red. Ni siquiera es necesario
ejecutar el mismo sistema operativo en todos los invitados, lo que reduce
aún más el número de servidores físicos necesarios.

La virtualización ofrece una manera para que una empresa reduzca su


consumo de energía y espacio de centro de datos frente a una flota
equivalente de servidores físicos. Los invitados ahora sólo son
configuraciones de software, así que es fácil proporcionar una nueva
máquina para una prueba y destruirla cuando haya pasado su utilidad.

Si es posible ejecutar varias instancias de un sistema operativo en una


máquina física y conectarse en la red, entonces la ubicación de la máquina
no importa. El Cloud Computing (Cómputo o Informática en la Nube) toma
este enfoque y te permite tener una máquina virtual en un centro de datos
remoto que no posees y sólo pagas por los recursos que utilizas. Los
proveedores de Cloud Computing pueden tomar ventaja de las economías de
escala para ofrecer recursos de computación a mejores precios de lo que
costaría adquirir tu propio hardware, espacio y enfriamiento.

Los servidores virtuales sólo son una faceta de Cloud Computing. También
puedes obtener almacenamiento de archivos, bases de datos o incluso
software. La clave en la mayoría de estos productos es que pagas por lo que
usas, por ejemplo una cierta cantidad por giga bytes de datos por mes, en
lugar de comprar el hardware y el software para darle hospedaje tu mismo.
Algunas situaciones son más adecuadas para la nube que otros.
Preocupaciones de seguridad y el rendimiento son generalmente los
primeros elementos que surgen seguidos por el costo y la funcionalidad.

Linux juega un papel fundamental en el Cloud Computing. La mayoría de los


servidores virtuales se basa en algún tipo de kernel de Linux, y Linux se
suele utilizar para alojar las aplicaciones detrás de los servicios del Cloud
Computing.
3.7 Protegerte a tí Mismo

Cuando navegas por Internet, dejas una huella digital. Mucha de esta
información viene ignorada, pero alguna viene reunida para recopilar
estadísticas de publicidad y otra puede ser utilizada para propósitos
maliciosos.

Como regla general, no deberías confiar en los sitios con los que interactúas.
Usa contraseñas diferentes en cada sitio de Internet para que si tal sitio web
estuviera hackeado, la contraseña no podría utilizarse para obtener acceso a
otros sitios. Usando anteriormente mencionado KeePassX es la forma más
fácil de hacerlo. De la misma forma, limita la información que proporcionas a
los sitios, sólo lo imprescindible. Mientras que dar el nombre de tu madre y
fecha de nacimiento podría ayudarte a desbloquear tus credenciales para la
red social en caso de que pierdas tu contraseña, la misma información puede
utilizarse para suplantar la identidad de tu banco.

Las cookies son el mecanismo principal que los sitios web utilizan para darte
seguimiento. A veces este seguimiento es bueno, por ejemplo para dar
seguimiento de lo que está en tu cesta de compras o para mantenerte
conectado cuando regreses al sitio.

Cuando navegas por la web, un servidor web puede devolver la cookie que
es un pequeño trozo de texto junto con la página web. Tu navegador lo
almacena y envía con cada solicitud al mismo sitio. No envías cookies para
[Link] a sitios en [Link].

Sin embargo, muchos sitios han incrustado scripts que provienen de


terceros, como un mensaje emergente de anuncio o un píxel de analítica. Si
[Link] y [Link] tienen un píxel de analítica, por ejemplo de un
anunciante, entonces esa misma cookie se enviará al navegar por ambos
sitios. El anunciante se entera entonces que has visitado [Link] y
[Link].

Con un alcance suficientemente amplio, como los "Likes" y botones


parecidos, un sitio web puede obtener un entendimiento de cuáles sitios web
visitas y averiguar tus intereses y datos demográficos.

Existen diversas estrategias para tratar este asunto. Uno es ignorarlo. La otra
es limitar los píxeles de seguimiento que aceptas, ya sea por bloqueo
completo o vaciarlos periódicamente. A continuación abajo se muestra la
configuración de cookies para Firefox. En la parte superior, verás que el
usuario ha optado que Firefox no de permiso al sitio para el seguimiento.
Esta es una etiqueta voluntaria enviada en la petición que algunos sitios
distinguirán. A continuación, el navegador recibe una instrucción de no
recordar nunca las cookies de terceros y eliminar cookies regulares (por
ejemplo, desde el sitio navegando) después de haber cerrado el Firefox.

Afinando la configuración de privacidad puede hacerte más anónimo en


Internet, pero también puede causar problemas con algunos sitios que
dependen de cookies de terceros. Si esto sucede, probablemente tengas que
permitir explícitamente que se guarden algunas cookies.

Aquí también tendrás la posibilidad de olvidar el historial de búsqueda o no


seguirlo. Con el historial de búsqueda eliminado no habrá ningún registro en
el equipo local de los sitios que hayas visitado.

Si te preocupa mucho ser anónimo en Internet, puedes descargar y utilizar


el Navegador Tor. Tor es el nombre corto para "The Onion Router" que es
una red de servidores públicamente ejecutados que rebotan tu tráfico para
ocultar el origen. El navegador que viene con el paquete es una versión
básica que no ejecuta ni siquiera las secuencias de comandos, por lo que
algunos sitios probablemente no funcionarán correctamente. Sin embargo,
es la mejor manera de ocultar tu identidad si es lo que deseas hacer.
4.2 Interfaz de Línea de Comandos (CLI)

La Interfaz de Línea de Comandos (CLI), es una interfaz basada en texto para


la computadora, donde el usuario introduce un comando y la computadora lo
ejecuta. El entorno de la CLI es proporcionado por una aplicación en la
computadora conocida como un terminal.

El terminal acepta lo que el usuario escribe y lo pasa a un shell. El shell


interpreta lo que el usuario ha introducido en las instrucciones que se
pueden ejecutar con el sistema operativo. Si el comando produce una salida,
entonces se muestra este texto en el terminal. Si surgen problemas con el
comando, se muestra un mensaje de error.

4.3 Acceso a la Terminal

Hay muchas maneras de acceder a la ventana de la terminal. Algunos


sistemas arrancarán directamente a la terminal. Este suele ser el caso de los
servidores, ya que una interfaz gráfica de usuario (GUI) puede requerir
muchos recursos que no son necesarios para realizar operaciones basadas
en servidores.

Un buen ejemplo de un servidor que no requiere una GUI es un servidor web.


Los servidores web deben correr tan rápido como sea posible y una GUI sólo
haría lento el sistema.
En los sistemas que arrancan con una GUI, hay comúnmente dos formas de
acceder a una terminal, una terminal basado en GUI y un terminal virtual:

Una terminal de GUI es un programa dentro del entorno de una GUI que
emula la ventana de la terminal. Las terminales de la GUI pueden accederse
a través del sistema de menú. Por ejemplo, en una máquina CentOS, puedes
hacer clic en Applications (o «Aplicaciones» en español) en la barra de
menús, luego en System Tools > (o «Herramientas de Sistema») y,
finalmente, en Terminal:

Una terminal virtual puede ejecutarse al mismo tiempo que una GUI, pero
requiere que el usuario se conecte o inicie sesión a través de la terminal
virtual antes de que pueda ejecutar los comandos (como lo haría antes de
acceder a la interfaz GUI). La mayoría de los sistemas tienen múltiples
terminales virtuales que se pueden acceder pulsando una combinación de
teclas, por ejemplo: Ctrl-Alt-F1

Nota: En las máquinas virtuales puede que las terminales virtuales no estén
disponibles.

4.3.1 Prompt

Una ventana del terminal muestra un prompt (o «símbolo o aviso» en


español); el prompt aparece cuando no se ejecutan ningún comando y
cuando la salida completa del comando se ha desplegado en la pantalla. El
prompt está diseñado para decirle al usuario que introduzca un comando.

La estructura del prompt puede variar entre las distribuciones, pero por lo
general contiene información sobre el usuario y el sistema. A continuación te
mostramos una estructura común de un prompt:

sysadmin@localhost:~$

nombre del usuario registrado en (sysadmin)

el nombre del sistema (localhost)

y el directorio actual (~). El símbolo ~ se utiliza como abreviación para el


directorio principal del usuario (el directorio principal del usuario viene bajo
el directorio /home (o «inicio» en español) y con el nombre de la cuenta de
usuario, por ejemplo: /home/sysadmin).

4.3.2 El Shell

Un shell es el intérprete que traduce los comandos introducidos por un


usuario en acciones a realizar por el sistema operativo. El entorno Linux
proporciona muchos tipos diferentes de shells, algunos de los cuales han
existido por muchos años.

El shell más comúnmente utilizado para las distribuciones de Linux se llama


el BASH shell. Es un shell que ofrece muchas funciones avanzadas, tales
como el historial de comandos, que te permite fácilmente volver a ejecutar
comandos previamente ejecutados.

El BASH shell tiene también otras funciones populares:

Scripting: La capacidad de colocar los comandos en un archivo y ejecutar el


archivo, resultando en todos los comandos siendo ejecutados. Esta función
también tiene algunas características de programación, tales como las
instrucciones condicionales y la habilidad de crear funciones (AKA,
subrutinas).

Los Alias: La habilidad de crear "nicknames" (o «sobrenombres» en español)


cortos para más comandos más largos.

Las Variables: Las Variables se utilizan para almacenar información para el


BASH shell. Estas variables pueden utilizarse para modificar cómo las
funciones y los comandos trabajan y proporcionan información vital sobre el
sistema.

Nota: La lista anterior es sólo un breve resumen de algunas de las muchas


funciones proporcionadas por el BASH shell.

4.3.3 Los Comandos de Formato

Muchos comandos se pueden utilizar por sí mismos sin más entradas.


Algunos comandos requieren entradas adicionales para funcionar
correctamente. Esta entrada adicional viene en dos formas: opciones y
argumentos.

El formato típico de un comando es el siguiente:

comando [opciones] [argumentos]

Las opciones se utilizan para modificar el comportamiento básico de un


comando y los argumentos se utilizan para proporcionar información
adicional (tal como un nombre de archivo o un nombre de usuario). Cada
opción y argumento vienen normalmente separados por un espacio, aunque
las opciones pueden a menudo ser combinadas.
Recuerda que Linux es sensible a mayúsculas y minúsculas. Comandos,
opciones, argumentos, variables y nombres de archivos deben introducirse
exactamente como se muestra.

El comando ls proporciona ejemplos útiles. Por sí mismo, el comando ls


listará los archivos y directorios contenidos en el directorio de trabajo actual:

El propósito de introducir este comando ahora, es demostrar cómo los


argumentos y las opciones funcionan, centrarte en comprender en qué es un
argumento y una opción.

Un argumento lo puedes pasar también al comando ls para especificar


contenido de qué directorio hay que listar. Por ejemplo, el comando ls
/etc/ppp listará el contenido del directorio /etc/ppp en lugar del directorio
actual:

Puesto que el comando ls acepta múltiples argumentos, puede listar el


contenido de varios directorios a la vez, introduciendo el comando ls /etc/ppp
/etc/ssh:

4.3.4 Trabajando con las Opciones

Las opciones pueden utilizarse con comandos para ampliar o modificar el


comportamiento de un comando. Las opciones son a menudo de una letra;
sin embargo, a veces serán "palabras". Por lo general, los comandos viejos
utilizan una letra, mientras los comandos nuevos utilizan palabras completas
para las opciones. Opciones de una letra son precedidas por un único guión
-. Opciones de palabra completa son precedidas por dos guiones --.
Por ejemplo, puedes utilizar la opción -l con el comando ls para ver más
información sobre los archivos que se listan. El comando ls -l lista los
archivos contenidos dentro del directorio actual y proporciona información
adicional, tal como los permisos, el tamaño del archivo y otra información:

En la mayoría de los casos, las opciones pueden utilizarse conjuntamente


con otras opciones. Por ejemplo, los comandos ls -l -h o ls -lh listarán los
archivos con sus detalles, pero se mostrará el tamaño de los archivos en
formato de legibilidad humana en lugar del valor predeterminado (bytes)

Nota que el ejemplo anterior también demostró cómo se pueden combinar


opciones de una letra: -lh . El orden de las opciones combinadas no es
importante.

La opción -h también tiene la forma de una palabra completa: --human-


readable (--legibilidad-humana).

Las opciones a menudo pueden utilizarse con un argumento. De hecho,


algunas de las opciones requieren sus propios argumentos. Puedes utilizar
los argumentos y las opciones con el comando ls para listar el contenido de
otro directorio al ejecutar el comando ls -l/etc/ppp:
4.4 Historial de los Comandos

Al ejecutar un comando en una terminal, el comando se almacena en


"history list" mediante el comando history

Edición:

Si ves un comando que quieres ejecutar en la lista que haya generado el


comando history, puedes ejecutar este comando introduciendo el signo de
exclamación y luego el número al lado del comando, por ejemplo:

4.5 Introduciendo las variables del BASH Shell


Una variable del shell BASH es una función que te permite a ti o al shell
almacenar los datos. Esta información puede utilizarse para proporcionar
información crítica del sistema o para cambiar el comportamiento del
funcionamiento del shell BASH (u otros comandos).

Las variables reciben nombres y se almacenan temporalmente en la


memoria. Al cerrar una ventana de la terminal o shell, todas las variables se
pierden. Sin embargo, el sistema automáticamente recrea muchas de estas
variables cuando se abre un nuevo shell.

Para mostrar el valor de una variable, puedes utilizar el comando echo (o


«eco» en español). El comando echo se utiliza para mostrar la salida en la
terminal; en el ejemplo siguiente, el comando mostrará el valor de la
variable HISTSIZE:

La variable HISTSIZE define cuántos comandos anteriores se pueden


almacenar en la lista del historial. Para mostrar el valor de la variable debes
utilizar un carácter del signo de dólar $ antes del nombre de la variable. Para
modificar el valor de la variable, no se utiliza el carácter $:

4.6 La Variable PATH

Una de las variables del shell BASH más importante que hay que entender es
la variable PATH.

El término path (o «ruta» en español) se refiere a una lista que define en qué
directorios el shell buscará los comandos [es una lista de directorios
donde BASH busca ejecutables cuando escribes un comando.] [ NO
es “los directorios que contienen todo el sistema Linux”]. Si introduces un
comando y recibes el error "command not found" (o «comando no
encontrado» en español), es porque el shell BASH no pudo localizar un
comando por ese nombre en cualquiera de los directorios en la ruta. El
comando siguiente muestra la ruta del shell actual:

Basado en la anterior salida, cuando intentas ejecutar un comando, el shell


primero busca el comando en el directorio /home/sysadmin/bin. Si el
comando se encuentra en ese directorio, entonces se ejecuta. Si no es
encontrado, el shell buscará en el directorio /usr/local/sbin.

Si el comando no se encuentra en ningún directorio listado en la variable


PATH, entonces recibirás un error, command not found:

Si en tu sistema tienes instalado un software personalizado, puede que


necesites modificar la ruta PATH para que sea más fácil ejecutar estos
comandos. Por ejemplo, el siguiente comando agregará el directorio
/usr/bin/custom a la variable PATH:

4.7 Comando export

Hay dos tipos de variables utilizadas en el shell BASH, la local y la de


entorno. Las variables de entorno, como PATH y HOME, las utiliza el BASH al
interpretar los comandos y realizar las tareas. Las variables locales son a
menudo asociadas con las tareas del usuario y son minúsculas por
convención. Para crear una variable local, simplemente introduce:
4.8 Comando which

Puede haber situaciones donde diferentes versiones del mismo comando se


instalan en un sistema o donde los comandos son accesibles para algunos
usuarios y a otros no. Si un comando no se comporta como se esperaba o si
un comando no está accesible pero debería estarlo, puede ser beneficioso
saber donde el shell encuentra tal comando o que versión está utilizando.

Sería tedioso tener que buscar manualmente en cada directorio que se


muestra en la variable PATH. En su lugar, puedes utilizar el comando which
(o «cuál» en español) para mostrar la ruta completa del comando en
cuestión:

4.9 Comando type

El comando type puede utilizarse para determinar la información acerca de


varios comandos. Algunos comandos se originan de un archivo específico:

Esta salida sería similar a la salida del comando which (tal como se explica
en el apartado anterior, que muestra la ruta completa del comando):

El comando type también puede identificar comandos integrados en el bash


(u otro) shell:
4.10 Los Alias

Un alias puede utilizarse para asignar comandos más largos a secuencias


más cortas. Cuando el shell ve un alias ejecutado, sustituye la secuencia
más larga antes de proceder a interpretar los comandos.

Por ejemplo, el comando ls -l comúnmente tiene un alias l o ll. Ya que estos


comandos más pequeñas son más fáciles de introducir, también es más
rápido ejecutar la línea de comandos ls -l.

Puedes determinar qué alias se definen en el shell con el comando alias:


Los alias que emerjen de ~$ alias fueron creados por los archivos de
inicialización. Estos archivos están diseñados para hacer automático el
proceso de creación de los alias. Hablaremos sobre ellos con más detalle en
un capítulo posterior.

Los nuevos alias se pueden crear introduciendo alias name=command (o


«alias nombre=comando» en español), donde nombre es el nombre que
quieres dar a el alias y comando es el comando que quieres que se ejecute
cuando se ejecuta el alias.

Por ejemplo, puedes crear un alias de tal manera que lh muestre una lista
larga de archivos, ordenados por tamaño con un tamaño "human friendly" (o
«amigable para el usuario» en español) con el comando alias lh='ls -Shl'.
Introduciendo lh debe ahora dar lugar a la misma salida que introduciendo el
comando ls -Shl:

Los alias creados de esta manera sólo persistirán mientras el shell esté
abierto. Una vez que el shell es cerrado, los nuevos alias que hayas creado,
se perderán. Además, cada shell posee sus propios alias, así que si creas un
alias en un shell y luego lo abres en otro shell, no verás el alias en el nuevo
shell.

4.11 Globbing

Los caracteres de globbing se denominan a menudo como "comodines".


Estos son símbolos que tienen un significado especial para el shell.

A diferencia de los comandos que ejecutará el shell, u opciones y


argumentos que el shell pasará a los comandos, los comodines son
interpretados por el mismo shell antes de que intente ejecutar cualquier
comando. Esto significa que los comodines pueden utilizarse con cualquier
comando.

Los comodines son poderosos porque permiten especificar patrones que


coinciden con los nombres de archivo en un directorio, así que en lugar de
manipular un solo archivo a la vez, puedes fácilmente ejecutar comandos
que afectarán a muchos archivos. Por ejemplo, utilizando comodines es
posible manipular todos los archivos con una cierta extensión o con una
longitud de nombre de archivo determinado.

Ten en cuenta que estos comodines pueden utilizarse con cualquier


comando, ya que es el shell, no el comando que se expande con los
comodines a la coincidencia de nombres de archivo. Los ejemplos
proporcionados en este capítulo utilizan el comando echo para demostración.

4.11.1 Asterisco (*)

El asterisco se utiliza para representar cero o más de cualquier carácter en


un nombre de archivo. Por ejemplo, supongamos que quieres visualizar todos
los archivos en el directorio /etc que empiecen con la letra t:

El patrón t* significa "cualquier archivo que comienza con el carácter t y


tiene cero o más de cualquier carácter después de la letra t".

Puedes usar el asterisco en cualquier lugar dentro del patrón del nombre de
archivo. El siguiente ejemplo coincidirá con cualquier nombre de archivo en
el directorio /etc que termina con .d:

sysadmin@localhost:~$ echo /etc/*.d

/etc/apparmor.d /etc/bash_completion.d /etc/cron.d /etc/depmod.d


/etc/fstab.d /etc/init.d /etc/[Link].d /etc/[Link].d
/etc/logrotate.d /etc/modprobe.d /etc/pam.d /etc/profile.d /etc/rc0.d
/etc/rc1.d /etc/rc2.d /etc/rc3.d /etc/rc4.d /etc/rc5.d /etc/rc6.d
/etc/rcS.d /etc/rsyslog.d /etc/sudoers.d /etc/sysctl.d /etc/update-
En el ejemplo siguiente se mostrarán todos los archivos en el
directorio /etc que comienzan con la letra r y terminan con .conf:
4.11.3 Corchetes [ ]

Los corchetes se utilizan para coincidir con un carácter único representando


un intervalo de caracteres que pueden coincidir con los caracteres. Por
ejemplo, echo /etc/[gu]* imprimirá cualquier archivo que comienza con el
carácter g o u y contiene cero o más caracteres adicionales:
4.11.4 Signo de Exclamación (!)

El signo de exclamación se utiliza en conjunto con los corchetes para negar


un intervalo. Por ejemplo, el comando echo [!DP]* mostrará cualquier archivo
que no comienza con D o P.

4.12 Las Comillas

Hay tres tipos de comillas que tienen significado especial para el shell Bash:
comillas dobles ", comillas simples ' y comilla invertida `. Cada conjunto de
comillas indica al shell que debe tratar el texto dentro de las comillas de una
manera distinta a la normal.
4.13 Instrucciones de Control

Las instrucciones de control te permiten utilizar varios comandos a la vez o


ejecutar comandos adicionales, dependiendo del éxito de un comando
anterior. Normalmente estas instrucciones de control se utilizan en scripts o
secuencias de comandos, pero también pueden ser utilizadas en la línea de
comandos.

4.13.1 Punto y Coma

El punto y coma puede utilizarse para ejecutar varios comandos, uno tras
otro. Cada comando se ejecuta de forma independiente y consecutiva; no
importa el resultado del primer comando, el segundo comando se ejecutará
una vez que el primero haya terminado, luego el tercero y así
sucesivamente.

Por ejemplo, si quieres imprimir los meses de enero, febrero y marzo de


2015, puedes ejecutar cal 1 2015; cal 2 2015; cal 3 2015 en la línea de
comandos:
[SE IMPRIME CALENDARIO 1 2015; CALENDARIO 2 2015; CALENDARIO 3
2015]
5.2 Las Páginas man

ONIX→man

Las páginas man se utilizan para describir las características de los


comandos. Te proporcionarán una descripción básica de la finalidad del
comando, así como los detalles de las opciones del comando.

5.2.1 Visualizando las Páginas de Comando Man

Para ver una página man de un comando, ejecuta man + comando en la


ventana del terminal.

Por ejemplo, man + cal mostrará la página man para el comando cal:

5.2.2 Controlar la Visualización de la Página man

El comando man utiliza un «localizador» para mostrar documentos. Este


localizador es normalmente el comando less, pero en algunas distribuciones
puede ser el comando more. Ambos son muy similares en cómo se ejecutan
y los trataremos en más detalle en un capítulo posterior.

Si quieres ver los diferentes comandos de movimiento que están disponibles,


puedes introducir la letra h mientras visualizas una página man. Esto
mostrará una página de ayuda:
5.2.3 Las Secciones de la Página man

Las páginas man se dividen en secciones. Cada sección está diseñada para
proporcionar información específica acerca de un comando. Si bien hay
secciones comunes que verás en la mayoría de las páginas man, algunos
desarrolladores también crean secciones que sólo verás en una página man
específica.

La siguiente tabla describe algunas de las secciones más comunes que


encontrarás en las páginas del comando man:
5.2.4 La sección SYNOPSIS de la Página man

La sección de SYNOPSIS (o «SINOPSIS» en español) de una página man es


muy importante porque proporciona un ejemplo conciso de cómo utilizar el
comando. Por ejemplo, considera la SYNOPSIS de la página man para el
comando cal:

5.2.5 Buscando dentro de la Página man

Para buscar un término en la página man, pulsa / e introduce el término


seguido por la tecla Entrar. El programa buscará desde la ubicación actual
hacia el final de la página para tratar de localizar y resaltar el término.

Si el término no se encuentra, o has llegado al final de las coincidencias, el


programa reportará Pattern not found (press Return) (o «Patrón no
encontrado (presiona Regresar)» en español). Si se encuentra una
coincidencia y quieres pasar al siguiente término, pulsa n. Para volver al
término anterior pulsa N.

5.2.6 Las Páginas man Categorizadas por Secciones

Los archivos de configuración también tienen sus páginas man. Los archivos
de configuración (a veces llamados archivos de sistema) contienen datos
que se utilizan para almacenar información sobre el Sistema Operativo o
servicios.
Adicionalmente, existen varios tipos de comandos:

- comandos de usuario
- comandos del sistema
- comandos de administración
- así como otras funciones que requieren documentación, como las
librerías y los componentes del Kernel.

Como resultado, hay miles de páginas man en una distribución típica de


Linux.

Para organizarlas, las páginas se clasifican por secciones, al igual que cada
página man se divide en secciones.
[Link] Especificar una Sección

En algunos casos, necesitarás especificar la sección para visualizar la página


man correcta. Esto es necesario porque a veces habrá páginas man con el
mismo nombre en diferentes secciones.

Por ejemplo, hay un comando llamado passwd que permite cambiar tu


contraseña. También hay un archivo llamado passwd que almacena la
información de la cuenta. Ambos, el comando y el archivo tienen una página
man.

El comando passwd es un comando de "user" (o «usuario» en español), por


lo que el comando man passwd mostrará la página man para el
comando passwd por defecto:

[Link] Buscar las Secciones

A veces no es claro en qué sección se almacena una página man. En estos


casos, puedes buscar una página man por nombre.

La opción -f para el comando man mostrará páginas que coinciden, o


parcialmente coinciden, con un nombre específico y provee una breve
descripción de cada página man:

Ten en cuenta que en la mayoría de las distribuciones de Linux, el


comando whatis hace lo mismo que el comando man -f. En esas
distribuciones, ambos comandos producen la misma salida. Whatis= man -f
5.3 Comando info

Las páginas man son unas fuentes extensas de información, pero suelen
tener algunas desventajas. Un ejemplo de una desventaja es que cada
página man es un documento independiente y no está relacionado con
ninguna otra página man. Aunque algunas páginas man tienen una
sección SEE ALSO (o «Ver También» en español) que puede hacer referencia
a otras páginas man, en realidad tienden a ser relacionadas con las fuentes
de documentación.

El comando info también proporciona documentación sobre funciones y


comandos del sistema operativo. El objetivo de este comando es ligeramente
diferente de las páginas man: proporcionar un recurso de documentación
que proporciona una estructura lógica, facilitando la lectura de la
documentación.

En los documentos info la información se desglosa en categorías que


funcionan de una manera parecida que una tabla de contenido en un libro.
Se proporcionan hipervínculos hacia páginas con la información sobre los
temas individuales para un comando específico o función. De hecho, toda la
documentación se combina en un solo "book" (o «libro» en español) en el
que puedes ir a un nivel superior de la documentación y ver la tabla de
contenido que representa toda la documentación disponible.

Otra ventaja del comando info sobre las páginas man es que el estilo de
escritura de los documentos info es típicamente más propicio para aprender
un tema. Considera que las páginas man son un recurso de referencias y los
documentos info sirven más como una guía de aprendizaje.
5.3.2 Cambiando de Posición mientras se Visualiza un Documento
info

Igual que el comando man, puedes obtener un listado de comandos de


movimiento escribiendo la letra h al leer la documentación info:
Los elementos bajo el menú son hipervínculos que pueden llevarte a los
nodos que describen más del comando ls. Por ejemplo, si colocas tu cursor
en la línea «* Sorting the output::» (o «clasificando la salida» en español) y
presionas la tecla Entrar , pasarás al nodo que describe la clasificación de la
salida del comando ls:

Ten en cuenta que entrando al nodo de clasificación, prácticamente entras a


un subnodo del nodo del que originalmente partiste. Para regresar a tu nodo
anterior, puedes utilizar la tecla u. Mientras que u te llevará un nivel arriba
hasta el inicio del nodo, también puedes utilizar la tecla l para volver
exactamente a la ubicación anterior en la que te encontrabas antes de
entrar al nodo de clasificación.
5.4 Otras Fuentes de Ayuda

Cuando las páginas man o documentación info no te proporcionarán las


respuestas que necesitas. Puede que necesites buscar en otras ubicaciones.

5.4.1 Utilizar la opción --help

Muchos comandos te proporcionan información básica, muy similar a la


sección SYNOPSIS que aparece en las páginas man, al aplicar la opción --help
(o «ayuda» en español) al comando. Esto es útil para aprender el uso básico
de un comando:
5.4.2 Documentación Adicional del Sistema

En la mayoría de los sistemas, existe un directorio donde se encuentra la


documentación adicional. A menudo se trata de una ubicación donde los
proveedores que crean software adicional (de terceros) almacenan sus
archivos de documentación.

Por lo general, se trata de una ubicación donde los administradores del


sistema irán a aprender cómo configurar servicios de software más
complejos. Sin embargo, los usuarios regulares a veces también encuentran
esta documentación útil.

Estos archivos de documentación se suelen llamar archivos "readme" (o


«leeme» en español), ya que los archivos tienen nombres
como README o [Link]. La ubicación de estos archivos puede variar
según la distribución que estés utilizando. Ubicaciones típicas
incluyen /usr/share/doc y /usr/doc.

5.5 Búsqueda de los Comandos y la Documentación


Recuerda que el comando whatis (o man -f) te dirá en qué sección se
almacena la página man. Si utilizas este comando con suficiente frecuencia,
probablemente te topes con una salida inusual, como la siguiente:

Según esta salida, hay dos comandos que listan el contenido del directorio.
La respuesta simple a la pregunta por qué hay dos comandos ls es que UNIX
tuvo dos variantes principales, lo que dio lugar a que algunos comandos
fueran desarrollados «en paralelo». Por lo tanto, algunos comandos se
comportan diferentemente en diversas variantes de UNIX. Muchas
distribuciones modernas de Linux incluyen comandos de ambas variantes de
UNIX.

Esto, sin embargo, conlleva un pequeño problema: Cuando corres el


comando ls, ¿Cuál de los comandos se ejecuta? Las próximas secciones se
centrarán en responder esta pregunta, así como proporcionarte las
herramientas para encontrar donde residen estos archivos en el sistema.

5.5.1 ¿Dónde están ubicados estos comandos?

Para buscar la ubicación de un comando o de las páginas man para un


comando, utiliza el comando whereis (o «dónde está» en español). Este
comando busca los comandos, archivos de código fuente y las páginas man
en las ubicaciones específicas donde estos archivos se almacenan
normalmente:

Las páginas man se suelen distinguir fácilmente entre los comandos ya que
normalmente están comprimidos con un comando llamado gzip, dando por
resultado un nombre de archivo que termina en .gz.

Lo interesante es que verás que hay dos paginas man, pero sólo un comando
(/bin/ls). Esto es porque el comando ls puede utilizarse con las
opciones/funciones que se describen por cualquiera de las páginas man. Así
que, cuando estás aprendiendo lo que puedes hacer con el comando ls,
puedes explorar ambas páginas man. Afortunadamente, esto más bien es
una excepción ya que la mayoría de los comandos sólo tienen una página
man.

5.5.2 Encontrar Cualquier Archivo o Directorio

El comando whereis está diseñado para encontrar de manera específica las


páginas man y los comandos. Si bien esto es útil, hay veces en las que
quieras encontrar un archivo o directorio, no sólo archivos de comandos o
páginas mas.

Para encontrar cualquier archivo o directorio, puede utilizar el


comando locate (o «localizar» en español). Este comando buscará en una
base de datos de todos los archivos y directorios que estaban en el sistema
cuando se creó la base de datos. Por lo general, el comando que genera tal
base de datos se ejecuta por la noche.

Los archivos que creaste hoy normalmente no los vas a poder buscar con el
comando locate. Si tienes acceso al sistema como usuario root (con la
cuenta del administrador de sistema), puede actualizar manualmente la base
de datos locate ejecutando el comando updatedb. Los usuarios regulares no
pueden actualizar el archivo de base de datos.

También ten en cuenta que cuando utilizas el comando locate como un


usuario normal, tu salida puede ser limitada debido a los permisos. En
general, si no tienes acceso a un archivo o directorio en el sistema de
ficheros debido a los permisos, el comando locate no devolverá esos
nombres. Esta es una característica de seguridad diseñada para evitar que
los usuarios «exploren» el sistema de ficheros utilizando el comando locate.
El usuario root puede buscar cualquier archivo en la base de datos con el
comando locate.

Man y info te proporcionarán la información que necesites. Sin embargo, si


necesitas una información más en profundidad (algo que los administradores
de sistemas a veces necesitan), entonces puedes encontrar esta información
en los archivos que se encuentran en el directorio /usr/share/doc.

Nota: El comando locate hace uso de una base de datos que


tradicionalmente se actualiza una vez por día
(normalmente a medianoche). Esta base de datos contiene
una lista de todos los archivos que estaban en el sistema
cuando la base de datos fue actualizada por última vez.
Como resultado, los archivos que creaste hoy normalmente no los vas a
poder buscar con el comando locate. Si tienes acceso al
sistema como usuario root (con la cuenta del administrador
de sistema), puedes actualizar manualmente este archivo
ejecutando el comando updatedb. Los usuarios regulares
no pueden actualizar el archivo de base de datos.

Otra posible solución a la búsqueda de archivos "nuevos" es hacer uso del


comando find. Este comando busca en el sistema de
archivos en vivo en lugar de una base de datos estática. El
comando find no es parte de los objetivos de Linux
Essentials para esta práctica de laboratorio, por lo que sólo
se menciona aquí. Ejecuta man find si quieres explorar este
comando por tu cuenta o espera hasta que llegues al
laboratorio que explora el comando find.

6.2 Comprender los Archivos y los Directorios


 Los archivos se utilizan para almacenar datos:
o como texto
o gráficos
o programas.

 Los directorios (o «carpetas») se utilizan para proporcionar una estructura de organización


jerárquica.
La estructura de directorios de Linux tiene un nivel superior, sin embargo no
se llama Este
Equipo, sino directorio raíz y su símbolo es el carácter / . También, en Linux
no hay
unidades; cada dispositivo físico es accesible bajo un directorio, no una letra
de unidad.

6.2.1 El Directorio Path


Usando el gráfico en la sección anterior como un punto de referencia, verás
que hay un
directorio llamado sound bajo el directorio llamado etc, que se encuentra
bajo el directorio
/. Una manera más fácil de decir esto es refiriéndose a la ruta.

Para considerar:
El directorio /etc originalmente significaba "etcetera" en la documentación
temprana de
Bell Labs y solía contener archivos que no pertenecían a ninguna ubicación.
En las
distribuciones modernas de Linux, el directorio /etc por lo general contiene
los archivos de
configuración estática como lo define por el Estándar de Jerarquía de
Archivos (o «FHS»,
del inglés «Files Hierarchy Standard»).

Una ruta de acceso te permite especificar la ubicación exacta de un


directorio.
Para el directorio sound la ruta de acceso sería /etc/sound. El primer carácter
/ representa
El directorio root (o «raíz» en español), mientras que cada siguiente
carácter / se utiliza
para separar los nombres de directorio.

Este tipo de ruta se llama la ruta absoluta (o «aboslute path» en inglés). Con
una ruta
absoluta, siempre proporcionas direcciones a un directorio (o un archivo) a
partir de la
parte superior de la estructura de directorios, el directorio root.

Nota: Las estructuras de directorio que se muestran a continuación sirven


solamente como ejemplos. Estos directorios pueden no
estar presentes dentro del entorno de la máquina virtual
de este curso.
6.2.2 El Directorio Home
Bajo de este directorio /home hay un directorio para cada usuario del
sistema. El nombre
del directorio será el mismo que el nombre del usuario.
Cuando abres un shell automáticamente te ubicarás en tu directorio home.
El directorio home es uno de los pocos directorios donde tienes el control
total para crear y
eliminar los archivos adicionales.

También podría gustarte