0% encontró este documento útil (0 votos)
151 vistas80 páginas

Linux 2

Este documento explora la evolución de Linux y los sistemas operativos populares. Describe el rol del kernel de Linux y las aplicaciones, así como el significado del código abierto y las diferentes distribuciones de Linux.

Cargado por

belen silva
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)
151 vistas80 páginas

Linux 2

Este documento explora la evolución de Linux y los sistemas operativos populares. Describe el rol del kernel de Linux y las aplicaciones, así como el significado del código abierto y las diferentes distribuciones de Linux.

Cargado por

belen silva
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
Está en la página 1/ 80

LINUX 2

En este capítulo vamos a explorar la evolución del Linux® y los sistemas operativos
populares. También vamos a hablar sobre las consideraciones para elegir un
sistema operativo.

Linux es de Código Abierto. ¿Qué significa eso? El código que impulsa a Linux
no es propiedad de una empresa. En cambio, lo desarrolla la comunidad que lo usa.
¿Por qué es esto bueno? Libera a los usuarios de los costos de licencia y permite
modificar el código según las necesidades cambiantes.

Linux® es una marca registrada de Linus Torvalds en los Estados Unidos y otros
países.

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.

1.2.4 Distribuciones de Linux


Toma las herramientas de GNU y Linux, añade algunas aplicaciones para el usuario
como un cliente de correo, y obtienes un sistema Linux completo. Se empezó a
empaquetar todo este software en una distribución casi tan pronto como Linux llegó
a ser utilizable. La distribución se encarga de configurar el almacenamiento de
información, instalar el kernel e instalar el resto del software. Las distribuciones
recomendadas completas también incluyen herramientas para administrar el
sistema y un administrador de paquetes para añadir y eliminar el software después
de la instalación.

Como en UNIX, hay muchos sabores diferentes de distribuciones. En estos días,


hay distribuciones que se centran en el funcionamiento en servidores,
computadoras de escritorio (desktop) o incluso herramientas específicas de la
industria como el diseño de la electrónica o la computación estadística. Los
principales actores en el mercado se remontan a Red Hat o Debian. La diferencia
más visible es el administrador de paquetes, aunque encontrarás otras diferencias
en todo, desde ubicaciones de archivos a filosofías de políticas.

Red Hat empezó como una simple distribución que introdujo el Administrador de
Paquetes Red Hat (RPM- Red Hat Package Manager). El desarrollador
eventualmente formó una compañía alrededor de éste, que intentó comercializar
una computadora de escritorio Linux para negocios. Con el tiempo, Red Hat
comenzó a centrarse más en las aplicaciones de servidor web y servicios de
archivos, y lanzó Red Hat Enterprise Linux, que era un servicio de pago en un ciclo
de liberación largo. El ciclo de liberación dicta con qué frecuencia se actualiza el
software. Una empresa puede valorar la estabilidad y quiere ciclos de liberación
largos, un aficionado o un principiante puede querer un software más reciente y
optar por un ciclo de liberación más corto. Para cumplir con este último grupo, Red
Hat patrocina el Proyecto Fedora que hace que el escritorio personal contenga el
software más reciente, pero aun construido sobre los mismos principios como la
versión para empresas.

Porque todo en Red Hat Enterprise Linux es de código abierto, un proyecto llamado
CentOS llegó a ser el que volvió a compilar todos los paquetes RHEL y los
proporcionó gratis. CentOS y otros proyectos similares (como Scientific Linux) son
en gran parte compatibles con RHEL e integran algún software más reciente, pero
no ofrecen el soporte pagado que Red Hat si ofrece.

Scientific Linux es un ejemplo de una distribución de uso específico basada en Red


Hat. El proyecto viene patrocinado por Fermilab siendo una distribución diseñada
para habilitar la computación científica. Entre sus muchas aplicaciones, Scientific
Linux se utiliza con aceleradores de partículas como el Gran Colisionador de
Hadrones en el CERN.

Open SUSE, originalmente derivado de Slackware, aun incorpora muchos aspectos


de Red Hat. La compañía original fue comprada por Novell en el año 2003, que
entonces fue adquirida por el Grupo Attachmate en 2011. El grupo Attachmate
luego se fusionó con Micro Focus Internacional. A través de todas las fusiones y
adquisiciones SUSE ha logrado continuar y crecer. Mientras que Open SUSE se
basa en escritorio y es disponible al público en general, SUSE Linux Enterprise
contiene código propietario y se vende como un producto de servidor.

Debian es más bien un esfuerzo de la comunidad y como tal, también promueve el


uso de software de código abierto y la adherencia a estándares. Debian desarrolló
su propio sistema de administración de paquetes basado en el formato del archivo
.deb. Mientras que Red Hat deja sin soporte las plataformas Intel y AMD para
proyectos derivados, Debian es compatible con muchas de estas plataformas
directamente.

Ubuntu es la distribución derivada de Debian más popular. Es la creación de


Canonical, una empresa que apoyó el crecimiento de Ubuntu ganando dinero
proporcionando soporte.

Linux Mint se inició como una bifurcación de Ubuntu Linux mientras sigue
dependiendo sobre los repositorios de Ubuntu. Existen varias versiones, todas
libres de costo, pero algunas incluyen códigos propietarios que no pueden ser
distribuidos sin restricciones de la licencia en algunos países. Linux Mint está
suplantando rápidamente Ubuntu como solución de Linux escritorio más popular del
mundo.
Hemos tratado el tema de las distribuciones mencionadas específicamente en los objetivos de
Linux Essentials. Debes saber que hay cientos, y hasta miles más que están disponibles. Es
importante entender que si bien hay muchas diferentes distribuciones de Linux, muchos de los
programas y comandos siguen siendo los mismos o muy similares.

1.2.4.1 ¿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.

Para considerar

Aunque los alias serán tratados en detalle en una sección posterior, este ejemplo breve puede ser
útil para entender el concepto de comandos.

Un alias es esencialmente un apodo para otro comando o una serie de comandos. Por ejemplo, el
comando de cal 2014 muestra el calendario para el año 2014. Supongamos que acabes
ejecutando este comando a menudo. En lugar de ejecutar el comando completo cada vez, puedes
crear un alias llamado mycal y ejecutar el alias como se muestra en el siguiente gráfico:

1.2.5 Plataformas de Hardware


Linux comenzó como algo que sólo funcionaría en un equipo como Linus': un 386
con un controlador de disco duro específico. El rango de soporte creció gracias a
que se empezó a implementar soporte para otros hardware. Finalmente, Linux
comenzó a apoyar a otros chips, incluido el hardware que se hizo para ejecutar
sistemas operativos competitivos!

Los tipos de hardware crecieron desde el simple chip de Intel hasta


supercomputadores. Más tarde se desarrollaron chips de menor tamaño
compatibles con Linux pensados para que quepan en dispositivos de consumo,
llamados dispositivos integrados. El soporte para Linux se hizo omnipresente de tal
manera que a menudo es más fácil construir hardware para soportar Linux y usar
Linux como un trampolín para su software personalizado, que construir el hardware
y el software personalizados desde cero.

Finalmente, teléfonos celulares y tabletas empezaron a funcionar con Linux. Una


empresa, más tarde comprada por Google, salió con la plataforma Android que es
un paquete de Linux y el software necesario para ejecutarse un teléfono o una
tableta. Esto significa que el esfuerzo para introducir un teléfono al mercado es
significativamente menor, y las empresas pueden pasar su tiempo innovando el
software orientado al usuario en lugar de reinventar la rueda cada vez. Android es
ahora uno de los líderes del mercado en el espacio.

Además de teléfonos y tabletas, muchos dispositivos de consumo llevan Linux. Los


enrutadores inalámbricos normalmente funcionan con Linux porque tiene un gran
conjunto de características de red. El TiVo es un grabador de vídeo digital para el
consumidor basado en Linux. A pesar de que estos dispositivos tienen Linux en el
kernel, los usuarios finales no tiene que saberlo. El software a la medida interactúa
con el usuario y Linux proporciona una plataforma estable.
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.1 Introducción
En este capítulo vamos a conocer varias herramientas y aplicaciones de código
abierto. También vamos a hablar del software y concesión de licencias de código
abierto.

¿Lo sabía? ¡Todas estas compañías ejecutan sobre Linux!


2.1 Introducción
En este capítulo vamos a conocer varias herramientas y aplicaciones de código
abierto. También vamos a hablar del software y concesión de licencias de código
abierto.

¿Lo sabía? ¡Todas estas compañías ejecutan sobre Linux!


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

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 http://www.linux.com a una dirección IP como
192.168.100.100 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.

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 X.org 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 OpenOffice.org) 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.

2.2.3 Herramientas de Consola


La historia del desarrollo de UNIX muestra una considerable superposición entre las
habilidades de administración de sistemas y desarrollo de software. Las
herramientas que te permiten administrar el sistema tienen funciones de lenguajes
de programación tales como ciclos (loops), y algunos lenguajes de programación se
utilizan extensivamente en la automatización de las tareas de administración de
sistemas. Por lo tanto, uno debe considerar estas habilidades complementarias.

En el nivel básico, interactúan con un sistema Linux a través de un shell sin


importar si te conectas al sistema de forma remota o desde un teclado. El trabajo de
shell consiste en aceptar los comandos, como manipulación de archivos y
aplicaciones de inicio y pasarlos al kernel de Linux para su ejecución. A
continuación se muestra una interacción típica con la shell de Linux:

El usuario recibe un mensaje, que normalmente termina en un signo de dólar $ para


indicar una cuenta sin privilegios. Cualquier cosa antes del símbolo, en este caso
sysadmin@localhost:~, es un indicador configurable que proporciona información
extra al usuario. En la imagen anterior, sysadmin es el nombre del usuario actual,
localhost es el nombre del servidor, y ~ es el directorio actual (en UNIX, el símbolo
de tilde es una forma corta para el directorio home del usuario). Los comandos de
Linux los trataremos con más detalle más adelante, pero para terminar la
explicación, el primer comando muestra los archivos con el comando ls, recibe
información sobre el archivo y luego elimina ese archivo con el comando rm.

El shell de Linux proporciona un rico lenguaje para iterar sobre los archivos y
personalizar el entorno, todo sin salir del shell. Por ejemplo, es posible escribir una
sola línea de comando que encuentra archivos con un contenido que corresponda a
un cierto patrón, extrae la información del archivo, y luego copia la nueva
información en un archivo nuevo.

Linux ofrece una variedad de shells para elegir, en su mayoría difieren en cómo y
qué se puede modificar para requisitos particulares y la sintaxis del lenguaje “script”
incorporado. Las dos familias principales son Bourne shell y C shell. Bourne shell
recibió su nombre de su creador y C shell porque la sintaxis viene prestada del
lenguaje C. Como ambos de estos shells fueron inventados en la década de 1970
existen versiones más modernas, el Bourne Again Shell (Bash) y tcsh (tee-cee-
shell). Bash es el shell por defecto en la mayoría de los sistemas, aunque casi
puedes estar seguro de que tcsh es disponible si lo prefieres.

Otras personas tomaron sus características favoritas de Bash y tcsh y han creado
otros shells, como el Korn shell (ksh) y zsh. La elección de los shells es sobre todo
personal. Si estás cómodo con Bash entonces puedes operar eficazmente en la
mayoría de los sistemas Linux. Después de eso puedes buscar otras vías y probar
nuevos shells para ver si ayudan a tu productividad.

Aún más dividida que la selección de los shells son las alternativas de los editores
de texto. Un editor de texto se utiliza en la consola para editar archivos de
configuración. Los dos campos principales son vi (o vim más moderno) y emacs.
Ambos son herramientas extraordinariamente poderosas para editar archivos de
texto, que se diferencian en el formato de los comandos y manera de escribir
plugins para ellos. Los plugins podrían ser cualquier cosa desde el resaltado de
sintaxis de proyectos de software hasta los calendarios integrados.

Ambos vim y emacs son complejos y tienen una curva de aprendizaje extensa.
Esto no es útil si lo que necesitas es editar un pequeño archivo de texto simple. Por
lo tanto pico y nano están disponibles en la mayoría de los sistemas (el último es
un derivado del anterior) y ofrecen edición de texto muy básica.

Incluso si decides no usar vi, debes esforzarte a ganar cierta familiaridad básica
porque el vi básico está en todos los sistemas Linux. Si vas a restaurar un sistema
Linux dañado ejecutando el modo de recuperación de la distribución, seguramente
tendrás un vi disponible.

Si tienes un sistema Linux necesitarás agregar, quitar y actualizar el software. En


cierto momento esto significaba descargar el código fuente, configurarlo, construirlo
y copiar los archivos en cada sistema. Afortunadamente, las distribuciones crearon
paquetes, es decir copias comprimidas de la aplicación. Un administrador de
paquetes se encarga de hacer el seguimiento de que archivos que pertenecen a
que paquete, y aun descargando las actualizaciones desde un servidor remoto
llamado repositorio. En los sistemas Debian las herramientas incluyen dpkg, apt-
get y apt-cache. En los sistemas derivados de Red Hat utilizas rpm y yum.
Veremos más de los paquetes más adelante.
2.2.4 Herramientas de Desarrollo
No es una sorpresa que siendo un software construido sobre las contribuciones de
programadores, Linux tiene un soporte excelente para el desarrollo de software. Los
shells se construyen para ser programables y existen editores potentes incluidos en
cada sistema. También hay disponibles muchas herramientas de desarrollo y
muchos lenguajes modernos tratan a Linux como un ciudadano de primera clase.

Los lenguajes informáticos proporcionan una manera para que un programador


ingrese instrucciones en un formato más legible por el ser humano y que tales
instrucciones sean eventualmente traducidas en algo que la computadora entiende.
Los lenguajes pertenecen a uno de los dos campos: interpretado o compilado. Un
lenguaje interpretado traduce el código escrito en código de computación mientras
se ejecuta el programa, y el lenguaje compilado se traduce todo a la vez.

Linux fue escrito en un lenguaje compilado llamado C. El beneficio principal del


lenguaje C es que el lenguaje en sí es similar a al código de máquina generado, por
lo que un programador experto puede escribir un código que sea pequeño y
eficiente. Cuando la memoria del equipo se medía en Kilobytes, esto era muy
importante. Hoy, incluso con tamaños de memoria de gran capacidad, el C sigue
siendo útil para escribir código que debe ejecutarse rápidamente, como un sistema
operativo.

El C se ha ampliado durante los años. Existe el C++ que añade soporte de objetos
al C (un estilo diferente de programación) y Objective C que tomó otro rumbo y se
usa mucho en productos de Apple.

El lenguaje Java toma un rumbo diferente del enfoque compilado. En lugar de


compilar al código máquina, Java primero imagina un hipotético CPU llamado la
Máquina Virtual de Java (JVM-Java Virtual Machine) y compila todo el código para
ésta. Cada equipo host entonces corre el software JVM para traducir las
instrucciones de JVM (llamadas bytecode) en instrucciones nativas.

La traducción adicional con Java podría hacer pensar que sería lento. Sin embargo,
la JVM es bastante simple, por lo que se puede implementar de manera rápida y
confiable en cualquier cosa, desde un equipo potente hasta un dispositivo de baja
potencia que se conecta a un televisor. ¡Un archivo compilado de Java también se
puede ejecutar en cualquier equipo implementando la JVM!

Otra ventaja de la compilación frente a un objetivo intermedio, es que la JVM puede


proporcionar servicios a la aplicación que normalmente no estarían disponibles en
una CPU. Asignar memoria a un programa es un problema complejo, pero esto está
construido dentro de la JVM. Esto también significa que los fabricantes de la JVM
pueden enfocar sus mejoras en la JVM como un todo, así cualquier mejora está
inmediatamente disponible para las aplicaciones.

Por otra parte, los lenguajes interpretados se traducen a código máquina como se
van ejecutando. La potencia extra del equipo consumida para esta tarea a menudo
puede ser recuperada por el aumento de la productividad del programador, quien
gana por no tener que dejar de trabajar para compilar. Los lenguajes interpretados
también suelen ofrecer más funciones que los lenguajes compilados, lo que
significa que a menudo se necesita menos código. ¡El intérprete del lenguaje
generalmente está escrito en otro lenguaje tal como C y a veces incluso en Java!
Esto significa que un lenguaje interpretado se ejecuta en la JVM, que se traduce
durante el tiempo de ejecución al código máquina.

Perl es un lenguaje interpretado. Perl fue desarrollado originalmente para realizar la


manipulación de texto. Con los años, se ganó su lugar entre los administradores de
sistemas y todavía sigue siendo mejorado y utilizado en todo, desde la
automatización hasta la construcción de aplicaciones web.

PHP es un lenguaje que fue construido originalmente para crear páginas web
dinámicas. Un archivo PHP es leído por un servidor web como Apache. Etiquetas
especiales en el archivo indican que partes del código deben ser interpretadas
como instrucciones. El servidor web reúne las diferentes partes del archivo y lo
envía al navegador web. Las ventajas principales del PHP son que es fácil de
aprender y está disponible en casi cualquier sistema. Debido a esto, muchos
proyectos populares se construyen en PHP. Los ejemplos notables incluyen
WordPress (blogging), cacti (para monitoreo) e incluso partes de Facebook.

Ruby es otro lenguaje que fue influenciado por Perl y Shell junto con muchos otros
lenguajes. Convierte tareas de programación complejas relativamente fáciles y con
la inclusión del marco de referencia (framework) Ruby on Rails, es una opción
popular para crear aplicaciones web complejas. Ruby es también el lenguaje que
potencia muchas de las principales herramientas de automatización como Chef y
Puppet, que hacen que la gestión de un gran número de sistemas Linux sea mucho
más fácil.

Python es otro lenguaje de desarrollo de uso común. Al igual que Ruby facilita las
tareas complejas y tiene un marco de referencia llamado Django que facilita la
construcción de las aplicaciones web. Python tiene capacidades de procesamiento
estadístico excelente y es una de las herramientas favoritas en el mundo
académico.

Un lenguaje es una herramienta que te ayuda a decirle al equipo lo que quieres


hacer. Una librería empaqueta las tareas comunes en un paquete distinto que
puede ser utilizado por el desarrollador. ImageMagick es una librería o biblioteca
que permite a los programadores manipular las imágenes en código. ImageMagick
también incluye algunas herramientas de línea de comandos que le permiten
procesar las imágenes desde un shell y aprovechan las capacidades de scripting.

OpenSSL es una librería criptográfica que se utiliza en todo, desde servidores web
hasta la línea de comandos. Proporciona un interfaz estándar para que puedas
agregar criptografía en tu programa de Perl, por ejemplo.
En un nivel mucho más bajo está la librería de C. Esto proporciona un conjunto
básico de funciones para leer y escribir a los archivos y pantallas que son utilizadas
por las aplicaciones y otros lenguajes por igual.

2.3 Entendiendo el Software de Código Abierto y el


Licenciamiento
Cuando nos referimos a la compra de un software hay tres componentes distintos:

Propiedad – ¿Quien es el dueño de la propiedad intelectual detrás del software?

Transferencia de dinero – ¿Cómo pasa el dinero por diferentes manos, si es que


pasa?

Concesión de licencias - ¿Que obtienes? ¿Qué puedes hacer con el software?


¿Puedes utilizarlo sólo en un equipo? ¿Puedes dárselo a otra persona?

En la mayoría de los casos la propiedad intelectual del software permanece con la


persona o empresa que lo creó. Los usuarios sólo obtienen una concesión de
licencia para utilizar el software. Se trata de una cuestión de derecho de autor. La
transferencia de dinero depende del modelo de negocio del creador. Es la
concesión de licencias lo que realmente distingue un software de código abierto de
un software de código cerrado.

Dos ejemplos contrastantes nos ayudarán a empezar.

Microsoft Corporation posee la propiedad intelectual de Microsoft Windows. La


licencia, el CLUF-Contrato de Licencia de Usuario Final (EULA-End User License
Agreement) es un documento legal personalizado que debes leer e indicando su
aceptación con un clic para que puedas instalar el software. Microsoft posee el
código fuente y distribuye sólo copias de binarios a través de canales autorizados.
La mayoría de los productos de consumo se les autoriza una instalación de
software en una computadora y no se permite hacer otras copias del disco que no
sea una copia de seguridad. No puedes revertir el software a código fuente
utilizando ingeniería inversa. Pagas por una copia del software con la que obtienes
actualizaciones menores, pero no las actualizaciones mayores.

Linux pertenece a Linus Torvalds. Él ha colocado el código bajo una licencia GNU
Public License versión 2 (GPLv2). Esta licencia, entre otras cosas, dice que el
código fuente debe hacerse disponible a quien lo pida y que puedes hacer cualquier
cambio que desees. Una salvedad a esto es que si haces cambios y los distribuyes,
debes poner tus cambios bajo la misma licencia para que otros puedan
beneficiarse. GPLv2 dice también que no puedes cobrar por distribuir el código
fuente a menos que sean tus costos reales de hacerlo (por ejemplo, copiar a
medios extraíbles).

En general, si creas algo también consigues el derecho a decidir cómo se utiliza y


distribuye. Software libre y de código abierto (FOSS- Free and Open Source
Software) se refiere a un tipo de software donde este derecho ha sido liberado y
tienes el permiso de ver el código fuente y redistribuirlo. Linus Torvalds ha hecho
eso con Linux, aunque creó Linux, no te puede decir que no lo puedes utilizar en tu
equipo porque liberó tal derecho a través de la licencia GPLv2.

La concesión de licencias de software es una cuestión política y no debería


sorprendernos que haya muchas opiniones diferentes. Las organizaciones han
salido con su propia licencia que incorpora su particular punto de vista por lo que es
más fácil escoger una licencia existente que idear la tuya propia. Por ejemplo, las
universidades como el Instituto Tecnológico de Massachusetts (MIT) y la
Universidad de California han sacado sus licencias, ya que tienen proyectos como
la Apache Foundation. Además, grupos como la Free Software Foundation han
creado sus propias licencias para promover su agenda.

2.3.1 La Free Software Foundation y el Open Source


Initiative
Existen dos grupos que son considerados con la mayor fuerza de influencia en el
mundo del código abierto: La Free Software Foundation (FSF) y el Open Source
Initiative (OSI).

La Free Software Foundation fue fundada en 1985 por Richard Stallman (RMS). El
objetivo de la FSF es promover el Software Libre. El software libre no se refiere al
precio, sino a la libertad de compartir, estudiar y modificar el código fuente
subyacente. La visión de la FSF es que el software propietario (software distribuido
bajo una licencia de código cerrado) es malo. FSF también defiende que las
licencias de software deben cumplir la apertura de las modificaciones. Es su punto
de vista, si modificas el software libre debes compartir tus cambios. Esta filosofía
específica se llama copyleft.

La FSF también lucha contra las patentes de software y actúa como un perro
guardián para las organizaciones de normativa, expresando cuando una norma
propuesta pudiera violar los principios del software libre mediante la inclusión de
elementos como la Administración de derechos digitales (DRM- Digital Rights
Management) que pudieran restringir lo que podrías hacer con el servicio.

La FSF ha desarrollado su propio sistema de licencias, como la GPLv2 y GPLv3 y


las versiones de licencias Lesser2 y 3 GPL (LGPLv2 y LGPLv3). Las licencias
menores (lesser) son muy similares a las licencias regulares excepto que tienen
disposiciones para enlazarlos contra un software no libre. Por ejemplo, bajo la
licencia GPLv2 no puedes redistribuir el software que utiliza una librería de código
cerrado (como un controlador de hardware) pero la variante menor permite tal
acción.

Los cambios entre las versiones 2 y 3 se centran en gran parte en el uso de


software libre en un dispositivo con hardware cerrado que ha sido acuñado como
Tivoización. TiVo es una empresa que construye un grabador de vídeo digital de
televisión en su propio hardware y utiliza Linux como base para su software.
Mientras que TiVo había liberado el código fuente para su versión de Linux como se
requiere bajo GPLv2, el hardware no ejecutaría cualquier binario modificado. A los
ojos de la FSF esto fue contra el espíritu de la GPLv2, pues añadió una cláusula
específica a la versión 3 de la licencia. Linus Torvalds está de acuerdo con TiVo en
este asunto y ha elegido quedarse con GPLv2.

La Open Source Initiative fue fundada en 1998 por Bruce Perens y Eric Raymond
(ESR). Creen que el software libre también fue políticamente acusado y que eran
necesarias licencias menos extremas, particularmente alrededor de los aspectos de
copyleft de las licencias de la FSF. OSI cree que no sólo la fuente debe ser
disponible libremente, pero también cero restricciones se deben aplicar sobre el uso
del software sin importar el uso previsto. A diferencia de la FSF, OSI no tiene su
propio conjunto de licencias. En cambio, la OSI tiene un conjunto de principios y
agrega otras licencias a esa lista si cumplen con tales principios, llamados licencias
de código abierto. El software que se ajusta bajo una licencia de Código Abierto es
por lo tanto un Software de Código Abierto.

Algunas de las licencias de código abierto pertenecen a la familia BSD de licencias,


que son mucho más simples que la GPL. Ellos simplemente dicen que puedes
redistribuir la fuente y los binarios mientras respetes los derechos de autor y no
impliques al creador original a que apruebe tu versión. En otras palabras "haz lo
que quieras con este software, pero no digas que lo escribiste tú." La licencia MIT
tiene mucho del mismo espíritu, con diferente redacción.

Las licencias de la FSF, como la GPLv2, también son licencias de código abierto.
Sin embargo, muchas licencias de software libre como BSD y la MIT no contienen
las disposiciones de copyleft y por lo tanto no son aceptables para la FSF. Estas
licencias se llaman licencias de software libre permisiva porque son permisivas en
cómo puedes redistribuir el software. Puedes tomar un software bajo la licencia
BSD e incluirla en un producto de software cerrado siempre que le des atribución
adecuada.

2.3.2 Más Términos para lo Mismo


En lugar de afligirse por puntos más sensibles del código abierto frente al Software
Libre, la comunidad ha comenzado a referirse a este concepto como Software Libre
y de Código Abierto (FOSS). La palabra "libre" puede significar "gratuito como un
almuerzo" (sin costo) o "libre como un discurso" (sin restricciones). Esta
ambigüedad ha llevado a la inclusión de la palabra libre para referirse a la
definición de este último concepto. De esta manera tenemos los términos de
software gratuito/libre/de código abierto (FLOSS- Free/Libre/Open Source
Software ).

Tales términos son convenientes, pero esconden las diferencias entre las dos
escuelas de pensamiento. Por lo menos, si utilizas software FOSS sabes que no
tienes que pagar por él y puedes redistribuirlo como quieres.
2.3.3 Otros Esquemas de Concesión de Licencias
Las licencias FOSS están relacionadas sobre todo con el software. Se han hecho
trabajos como dibujos y planos bajo las licencias FOSS pero esa no era la
intención.

Cuando se coloca un software en el dominio público, el autor abandona todos los


derechos, incluyendo los derechos de autor para la obra. En algunos países, esto
es un valor predeterminado si el trabajo lo ha realizado una agencia gubernamental.
En algunos países, el trabajo con derechos de autor se convierte en dominio
público después de que el autor haya muerto y haya transcurrido un largo periodo
de espera.

La organización de Creative Commons (CC) ha creado las Licencias de Creative


Commons que tratan de satisfacer las intenciones detrás de las licencias de
software libre para entidades no de software. Las licencias CC también pueden
utilizarse para restringir el uso comercial si tal es el deseo del titular de los derechos
de autor. Las licencias CC son:

 Attribution (CC BY) – al igual que la licencia BSD, puedes utilizar el


contenido de la CC para cualquier uso, pero debes acreditar al titular los
derechos de autor
 Attribution ShareAlike (CC BY-SA) – una versión copyleft de la licencia de
atribución. Los trabajos derivadas deben compartirse bajo la misma licencia,
mucho como en los ideales del Software Libre
 Attribution No-Derivs (CC BY-ND) – puedes redistribuir el contenido bajo las
mismas condiciones como CC-BY, pero no lo puedes cambiar
 Attribution-NonCommercial (CC BY-NC) – al igual que CC BY, pero no lo
puedes utilizar para los fines comerciales
 Attribution-NonCommercial-ShareAlike (CC-BY-NC-SA) – se basa en la
licencia CC BY-NC, pero requiere que los cambios se compartan bajo la
misma licencia.
 Attribution-NonCommercial-No-Derivs (CC-BY-NC-ND) – compartes el
contenido para que se utilice con fines no comerciales, pero la gente no
puede cambiar el contenido.
 No Rights Reservados (CC0) – esta es la versión de Creative Commons en
el dominio público.

Las licencias anteriores se pueden resumir como ShareAlike o sin restricciones, o si


se permite o no el uso comercial o las derivaciones.

2.3.4 Los Modelos del Negocio de Código Abierto


Si estás regalando tu software gratuitamente, ¿cómo puedes ganar dinero?

La forma más sencilla de ganar dinero es vender soporte o garantía para el


software. Puedes ganar dinero de la instalación del software para las personas,
ayudando a la gente cuando tienen problemas o corregir errores cobrando dinero.
En realidad, eres un consultor.

También puedes cobrar por un servicio o suscripción que mejora el software. El


proyecto de grabadora de vídeo digital MythTV de fuente abierta es un excelente
ejemplo. El software es gratuito, pero puedes pagar por conectarlo a un servicio de
TV para saber la hora concreta de algún programa de televisión.

Puedes empaquetar hardware o agregar un software de código cerrado extra para


su venta junto con el software libre. Los aparatos y sistemas integrados que utilizan
Linux pueden ser desarrollados y vendidos. Muchos firewalls para los consumidores
y los dispositivos de entretenimiento siguen este modelo.

También puedes desarrollar un software de código abierto como parte de tu trabajo.


Si creas una herramienta para hacer tu vida más fácil en tu trabajo regular, puedes
convencer a tu empleador a que te deje abrir la fuente. Puede haber una situación
en la que trabajas en un software cobrando, pero las licencias de código abierto
permitirían a que tu trabajo ayude, o incluso permita a otras personas contribuir a
resolver el mismo problema.

En la década de 1990, Gerald Combs estaba trabajando en un proveedor de


servicios de Internet y comenzó a escribir su propia herramienta de análisis de red
porque las herramientas similares eran muy caras en aquel entonces. Hasta hoy,
más de 600 personas han contribuido al proyecto llamado Wireshark. Ahora a
menudo se considera mejor que la oferta comercial y gracias a ello Gerald formó
una empresa para dar soporte a Wireshark y vender productos y apoyo que facilitan
su uso. Más adelante la empresa la compró un importante proveedor de red que
apoya su desarrollo.

Otras compañías obtienen valor tan inmenso del software de código abierto que se
consideran eficaz contratar a personas para trabajar en el software a tiempo
completo. El motor de búsqueda de Google contrató al creador del lenguaje Python,
e incluso Linus Torvalds fue contratado por la Linux Foundation para trabajar en
Linux. La compañía de teléfonos estadounidense AT&T obtiene tal valor de los
proyectos de Ruby y Rails para sus Páginas Amarillas, que tienen un empleado que
no hace nada sino trabajar en estos proyectos.

La última manera en la que la gente hace dinero indirectamente a través de código


abierto, es que es una forma abierta para calificar las habilidades propias. Una cosa
es decir que realizas ciertas tareas en tu trabajo, pero mostrar tu capacidad de
creación y compartirlo con el mundo permite a los empleadores potenciales ver la
calidad de tu trabajo. Del mismo modo, las empresas se han dado cuenta que
proporcionar concesiones de las partes no críticas de su código abierto de software
interno, atrae el interés de la gente de mayor calibre.
3.1 Introducción
Antes de que te puedas convertir en un administrador eficaz de los sistemas Linux,
debes saber utilizar Linux como tu escritorio y tener aptitudes con las habilidades
básicas de la Tecnología de Información y Comunicación (TIC). No sólo eso te
ayudará al tratar con usuarios, sino sumergiéndote en el Linux te ayudará a mejorar
tus habilidades más rápidamente. Además, la vida de un administrador de sistemas
es más que un trabajo en el servidor - ¡hay también correo electrónico y
documentación para hacer!

¿Cuál es la mejor posición de empleo de Linux que los Gerentes de Reclutamiento


de TI están buscando?

Administradores de Sistemas

- Reporte Laboral de Linux 2013, Linux Foundation & Dice

3.2 Modo Gráfico vs. No Gráfico


Linux puede usarse de dos maneras: en modo gráfico y modo no gráfico. En modo
gráfico las aplicaciones corren en las ventanas que puedes cambiar el tamaño y
mover. Tienes menús y herramientas que te ayudan a encontrar lo que buscas.
Aquí es donde vas a usar un navegador web, tus herramientas de edición de
gráficos y tu correo electrónico. Aquí vemos un ejemplo del escritorio gráfico, con
una barra de menús de aplicaciones populares en la izquierda y un documento de
LibreOffice editado con un navegador web en el fondo.
En modo gráfico puedes tener varios shells abiertos, que resulta muy útil cuando se
están realizando tareas en múltiples equipos remotos. Incluso puedes iniciar la
sesión con tu usuario y contraseña a través de una interfaz gráfica. En la siguiente
figura se muestra un ejemplo de un inicio de sesión gráfico.

Después de iniciar la sesión pasarás al escritorio donde puedes cargar las


aplicaciones. El modo no gráfico comienza con una sesión basada en texto que se
muestra a continuación. Simplemente se te pedirá tu nombre de usuario y luego tu
contraseña. Si el inicio de sesión tiene éxito pasarás directamente al shell.

En el modo no gráfico no hay ventanas para navegar. A pesar de esto tienes


editores de texto, navegadores web y clientes de correo electrónico, pero son sólo
de texto. De este modo UNIX empezó antes que los entornos gráficos fueran la
norma. La mayoría de los servidores también se ejecutarán en este modo, ya que la
gente no entra en ellos directamente, lo que hace que una interfaz gráfica sea un
desperdicio de recursos. Aquí hay un ejemplo de la pantalla que se puede ver
después de iniciar la sesión.

Puedes ver el mensaje original para entrar en la parte superior con el texto más
reciente añadido a continuación. Durante el inicio de sesión podrías ver algunos
mensajes, llamados el mensaje del día (MOTD), que es una oportunidad para que
el administrador de sistemas para pasar información a los usuarios. El MOTD es el
símbolo del sistema. En el ejemplo anterior, el usuario introdujo el comando w que
muestra quién está conectado. De manera que son introducidos y procesados los
comandos nuevos, la ventana se desplaza hacia arriba y el texto más antiguo se
pierde en la parte superior. La terminal es responsable de mantener cualquier
historia, tal como para permitir al usuario desplazarse hacia arriba y ver los
comandos introducidos. En cuanto a Linux, lo que está en la pantalla es todo lo que
hay. No hay nada para navegar.

3.3 Línea de Comandos


La línea de comandos es una entrada de texto simple, que te permite ingresar
cualquier cosa, desde un comando de una sola palabra hasta scripts complicados.
Si inicias la sesión a través de modo de texto te encuentras inmediatamente en la
consola. Si inicias la sesión de forma gráfica, entonces necesitarás iniciar un shell
gráfico, que es solo una consola de texto con una ventana a su alrededor para que
puedas cambiar su tamaño y posición.

Cada escritorio de Linux es diferente, por lo que tienes que buscar en tu menú una
opción llamada terminal o x-term. Las dos son shells gráficos, diferenciadas sobre
todo en aspectos más que funcionalidad. Si tienes una herramienta de búsqueda
como Ubuntu Dash, puedes buscar un terminal como se muestra aquí.

Estas herramientas te permiten buscar rápidamente en tu sistema exactamente lo


que quieres ejecutar en lugar de perderte en los menús.

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.5 Utilizar Linux para el Trabajo
Las herramientas básicas utilizadas en la mayoría de las oficinas son:

 Procesador de textos
 Hoja de cálculo
 Paquete de presentación
 Navegador web

OpenOffice, o el más activo, LibreOffice, se encarga de las tres primeras


funciones. El procesador de texto se utiliza para editar documentos, tales como
informes y memos. Las Hojas de cálculo son útiles para trabajar con números, por
ejemplo para resumir datos de ventas y hacer predicciones futuras. El paquete de
presentación se utiliza para crear diapositivas con las características tales como
texto, gráficos y vídeo insertado. Las diapositivas pueden ser impresas o mostradas
en una pantalla o un proyector para compartir con una audiencia.

A continuación abajo puedes ver la hoja de cálculo y editor de documentos de


LibreOffice. Nota cómo la hoja de cálculo, LibreOffice Calc, no se limita a filas y
columnas de números. Los números pueden ser la fuente de un gráfico, y puedes
escribir fórmulas para calcular valores basados en la información, por ejemplo
reunir las tasas de interés y cantidades para ayudar a comparar las diferentes
opciones de préstamo.

Utilizando el Writer de LibreOffice, un documento puede contener texto, gráficos,


tablas de datos y mucho más. Puedes vincular documentos y hojas de cálculo, por
ejemplo, para que puedas resumir los datos en forma escrita y saber que cualquier
cambio en la hoja de cálculo se reflejará en el documento.
LibreOffice también puede trabajar con otros formatos de archivo, como Microsoft
Office o Adobe Portable Document Format (PDF). Además, mediante el uso de
extensiones, se puede integrar LibreOffice con el software Wiki para ofrecerle una
poderosa solución de intranet.

Linux es un ciudadano de primera clase para los navegadores Firefox y Google


Chrome. Como tal, puede esperar tener el software más reciente disponible para su
plataforma y el acceso oportuno a correcciones de errores y nuevas características.
Algunos complementos, como Adobe Flash, no siempre funcionan correctamente
ya que dependen de otra compañía con prioridades diferentes.

3.6 Proteger tu Equipo Linux


A Linux no le importa si estás en el teclado de un equipo o conectado a través de
Internet, por lo que querrás tomar algunas precauciones básicas para asegurarte de
que tus datos están a salvo.

Lo más fácil es utilizar una buena y única contraseña donde quiera que vayas,
sobre todo en tu máquina local. Una buena contraseña tiene al menos 10
caracteres y contiene una mezcla de números y letras (tanto mayúsculas y
minúsculas) y símbolos especiales. Utiliza un paquete como KeePassX para
generar contraseñas, ya que luego sólo necesitas tener una contraseña de inicio de
sesión a tu equipo y una contraseña para abrir el archivo de KeePassX.

Después de eso, crea periódicamente un punto de comprobación de


actualizaciones. A continuación, te mostraremos la configuración de actualización
de software Ubuntu, que está disponible en el menú de Configuración.
En la parte superior, se puede ver que el sistema está configurado para buscar
actualizaciones de forma diaria. Si hay actualizaciones relacionadas con la
seguridad, entonces se te pedirá que las instales inmediatamente. De lo contrario,
recibirás las actualizaciones en lotes cada semana. En la parte inferior de la
pantalla puedes ver el cuadro de diálogo que aparece cuando hay actualizaciones
disponibles. Todo lo que tienes que hacer es hacer clic en Instalar ahora y tu
equipo se actualizará!

Por último, tienes que proteger tu equipo de aceptar conexiones entrantes. Firewall
es un dispositivo que filtra el tráfico de red y Linux tiene uno integrado. Si usas
Ubuntu, gufw es una interfaz gráfica para "Uncomplicated firewall" de Ubuntu.

Simplemente cambiando el estado a "on" se bloquea todo el tráfico que llega a tu


equipo, a menos que lo hayas iniciado tú mismo. De manera selectiva puedes
permitir que entren algunas cosas haciendo clic en el signo más.

Bajo el capó estás usando iptables que es el sistema firewall integrado. En lugar de
introducir comandos iptables complicados, usas un GUI. Mientras que este GUI te
permite construir una política efectiva de un escritorio, éste apenas araña la
superficie de lo que se puede hacer con iptables.
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 ejemplo.com a sitios en
ejemplo.org.

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 ejemplo.com y
ejemplo.org 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 ejemplo.com y ejemplo.org.

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.1 Introducción
Si eres como la mayoría de las personas, probablemente estés familiarizado con el
uso de la Interfaz Gráfica de Usuario (o GUI «Graphical User Interface») para
controlar tu computadora. Fue introducida a las masas por Apple en la computadora
Macintosh y popularizado por Microsoft. La GUI proporciona una forma fácil de
descubrir y administrar tu sistema. Sin una GUI, algunas herramientas para gráficos
y video no serían prácticas.

Antes de la popularidad de la GUI, la Interfaz de Línea de Comandos (o CLI


«Command Line Interface») era la forma preferida para controlar una computadora.
La CLI se basa únicamente en la entrada por teclado. Todo lo que quieres que tu
computadora haga, se retransmite escribiendo comandos en lugar de ir haciendo
clics en los iconos.

Si nunca has usado una CLI, al principio puede resultar difícil porque requiere de
memorizar comandos y sus opciones. Sin embargo, la CLI proporciona un control
más preciso, una mayor velocidad y capacidad para automatizar fácilmente las
tareas a través del scripting (ver barra lateral). Aunque Linux tiene muchos entornos
GUI, podrás controlar Linux mucho más eficazmente mediante la Interfaz de Línea
de Comandos.
¿Por qué conocer la línea de comando es importante? ¡Flexibilidad y
Movilidad! Mediante la comprensión de los fundamentos de Linux , tienes la
capacidad de trabajar en CUALQUIER distribución de Linux. Esto podría significar
una compañía con ambiente mixto o una nueva empresa con una distribución Linux
diferente.

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:

El prompt anterior proporciona el 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:


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:

Sobre el comando ls hablaremos en detalle en un capítulo posterior. El propósito


de introducir este comando ahora, es demostrar cómo los argumentos y las
opciones funcionan. En este punto no te debes preocupar de lo que es la salida del
comando, más bien 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" (o
«lista de historial» en español). Esto está diseñado para que más adelante puedas
ejecutar el mismo comando más fácilmente puesto que no necesitarás volver a
introducir el comando entero.

Para ver la lista de historial de una terminal, utiliza el comando history (o «historial»
en español):

Pulsando la tecla de Flecha Hacia Arriba ↑ se mostrará el comando anterior en tu


línea de prompt. Puedes presionar arriba repetidas veces para moverte a través del
historial de comandos que hayas ejecutado. Presionando la tecla Entrar se
ejecutará de nuevo el comando visualizado.

Cuando encuentres el comando que quieres ejecutar, puedes utilizar las teclas de
Flecha Hacia Izquierda ← y Flecha Hacia Derecha → para colocar el cursor para
edición. Otras teclas útiles para edición incluyen Inicio, Fin, Retroceso y Suprimir.

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:

.
Algunos ejemplos adicionales del history:

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 $:

Hay muchas variables del shell que están disponibles para el shell BASH, así como las variables que
afectarán a los diferentes comandos de Linux. No todas las variables del shell están cubiertas por este
capítulo, sin embargo, conforme vaya avanzando este curso hablaremos de más variables del shell.

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

Para ver el contenido de la variable, te puedes referir a ella iniciando con el signo
de $:

Para ver las variables de entorno, utiliza el comando env (la búsqueda a través de
la salida usando grep, tal como se muestra aquí, se tratará en los capítulos
posteriores). En este caso, la búsqueda para variable1 en las variables de
entorno resultará en una salida nula:

Después de exportar variable1 llegará a ser una variable de entorno. Observa


que esta vez, se encuentra en la búsqueda a través de las variables de entorno:
El comando export también puede utilizarse para hacer una variable de entorno
en el momento de su creación:

Para cambiar el valor de una variable de entorno, simplemente omite el $ al hacer


referencia a tal valor:

Las variables exportadas pueden eliminarse con el comando unset:

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:

El comando which busca la ubicación de un comando buscando en la variable


PATH..
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:

En este caso, la salida es significativamente diferente de la salida del comando


which:

Usando la opción -a, el comando type también puede revelar la ruta de otro
comando:

La salida de estos comandos indica que ll es un alias para ls - alF, incluso ls es


un alias para ls --color=auto. Una vez más, la salida es significativamente
diferente del comando which:
El comando type soporta otras opciones y puede buscar varios comandos al
mismo tiempo. Para mostrar sólo una sola palabra que describe al echo, ll, y a los
comandos which, utiliza la opción -t:

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:


sysadmin@localhost:~$ alias
alias alert='notify-send —urgency=low -i "$([ $? = 0 ] &&
echo terminal || echo error)" "$(history|tail -n1|sed -e
'\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'
alias ls='ls --color=auto'

Los alias que ves en los ejemplos anteriores 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/insserv.conf.d
/etc/ld.so.conf.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-motd.d

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:
sysadmin@localhost:~$ echo /etc/[gu]*
/etc/gai.conf /etc/groff /etc/group /etc/group-
/etc/gshadow /etc/gshadow- /etc/ucf.conf /etc/udev
/etc/ufw /etc/update-motd.d /etc/updatedb.conf
sysadmin@localhost:~$
Los corchetes también pueden ser utilizados para representar un intervalo de caracteres.
Por ejemplo, el comando echo /etc/[a-d]* mostrará todos los archivos que
comiencen con cualquier letra entre e incluyendo a y d:

sysadmin@localhost:~$ echo /etc/[a-d]*


/etc/adduser.conf /etc/adjtime /etc/alternatives /etc/apparmor.d
/etc/apt /etc/bash.bashrc /etc/bash_completion.d /etc/bind
/etc/bindresvport.blacklist /etc/blkid.conf /etc/blkid.tab /etc/ca-
certificates /etc/ca-certificates.conf /etc/calendar /etc/cron.d
/etc/cron.daily /etc/cron.hourly /etc/cron.monthly
/etc/cron.weekly /etc/crontab /etc/dbus-1 /etc/debconf.conf
/etc/debian_version /etc/default
/etc/deluser.conf /etc/depmod.d /etc/dpkg
sysadmin@localhost:~$
El comando echo /etc/*[0-9]* mostrará todos los archivos que contienen al menos
un número:

El intervalo se basa en el cuadro de texto de ASCII. Esta tabla define una lista de caracteres
disponiéndolos en un orden estándar específico. Si proporcionas un orden inválido, no se
registrará ninguna coincidencia:

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.12.1 Comillas Dobles


Las comillas dobles detendrán al shell de la interpretación de algunos metacaracteres,
incluyendo los comodines. Dentro de las comillas dobles, el asterisco es sólo un asterisco, un
signo de interrogación es sólo un signo de interrogación y así sucesivamente. Esto significa
que cuando se utiliza el segundo comando echo más abajo, el shell BASH no convierte el
patrón de globbing en nombres de archivos que coinciden con el patrón:

Esto es útil cuando quieres mostrar algo en la pantalla, lo que suele ser un carácter especial para el shell:

Las comillas dobles todavía permiten la sustitución de comando (se tratará más adelante en
este capítulo), sustitución de variable y permiten algunos metacaracteres de shell sobre los
que aún no hemos hablado. Por ejemplo, en la siguiente demostración, notarás que el valor
de la variable PATH es desplegada:

sysadmin@localhost:~$ echo "The path is


$PATH"
The path is
/usr/bin/custom:/home/sysadmin/bin:/usr/local/sbin:/
usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
sysadmin@localhost:~$
4.12.2 Comillas Simples
Las comillas simples evitan que el shell interprete algunos caracteres especiales. Esto incluye
comodines, variables, sustitución de comando y otro metacarácter que aún no hemos visto.

Por ejemplo, si quieres que el carácter $ simplemente signifique un $, en lugar de actuar


como un indicador del shell para buscar el valor de una variable, puedes ejecutar el segundo
comando que se muestra a continuación:

4.12.3 Barra Diagonal Inversa (\)


Puedes utilizar una técnica alternativa para citar un carácter con comillas simples.
Por ejemplo, supón que quieres imprimir lo siguiente: “The services costs $100 and
the path is $PATH". Si pones esto entre las comillas dobles, $1 y $PATH se
consideran variables. Si pones esto entre las comillas simples, $1 y $PATH no son
variables. Pero ¿qué pasa si quieres tener $PATH tratado como una variable y no a
$1?

Si colocas una barra diagonal invertida \ antes del otro carácter, tratará al otro
carácter como un carácter de "comillas simples". El tercer comando más abajo
muestra cómo utilizar el carácter \, mientras que los otros dos muestran cómo las
variables serían tratadas si las pones entre las comillas dobles y simples:
sysadmin@localhost:~$ echo "The service costs $100 and the path is
$PATH"
The service costs 00 and the path is
/usr/bin/custom:/home/sysadmin/bin:/usr/local/sbin:/usr/local/bin:/usr/sb
in:/usr/bin:/sbin:/bin:/usr/games
sysadmin@localhost:~$ echo 'The service costs $100 and the path is
$PATH'
The service costs $100 and the path is $PATH
sysadmin@localhost:~$ echo The service costs \$100 and the path is
$PATH
The service costs $100 and the path is
/usr/bin/custom:/home/sysadmin/bin:/usr/local/sbin:/usr/local/bin:/usr/sb
in:/usr/bin:/sbin:/bin:/usr/games
sysadmin@localhost:~$
4.12.4 Comilla Invertida
Las comillas invertidas se utilizan para especificar un comando dentro de un comando, un
proceso de sustitución del comando. Esto permite un uso muy potente y sofisticado de los
comandos.

Aunque puede sonar confuso, un ejemplo debe hacer las cosas más claras. Para empezar,
fíjate en la salida del comando date:

Ahora fíjate en la salida de la línea de comandos echo Today is date (o «eco La


fecha de hoy es» en español):

En el comando anterior la palabra date (o «fecha» en español) es tratada como texto


normal y el shell simplemente pasa date al comando echo. Pero, probablemente quieras
ejecutar el comando date y tener la salida de ese comando enviado al comando echo.
Para lograr esto, deberás ejecutar la línea de comandos echo Today is `date`:

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:

4.13.2 Ampersand Doble (&&)


El símbolo de ampersand doble && actúa como un operador "y" lógico. Si el primer
comando tiene éxito, entonces el segundo comando (a la derecha de la &&) también se
ejecutará. Si el primer comando falla, entonces el segundo comando no se ejecutará.

Para entender mejor como funciona esto, consideremos primero el concepto de fracaso y
éxito para los comandos. Los comandos tienen éxito cuando algo funciona bien y fallan
cuando algo sale mal. Por ejemplo, considera la línea de comandos ls /etc/xml. El
comando tendrá éxito si el directorio /etc/xml es accesible y fallará cuando no es
accesible.

Por ejemplo, el primer comando tendrá éxito porque el directorio /etc/xml existe y es
accesible mientras que el segundo comando fallará porque no hay un directorio /junk:
La manera en que usarías el éxito o fracaso del comando ls junto con && sería ejecutando
una línea de comandos como la siguiente:

En el primer ejemplo arriba, el comando echo fue ejecutado, porque tuvo éxito el
comando ls. En el segundo ejemplo, el comando echo no fue ejecutado debido a que el
comando ls falló.

4.13.3 Línea Vertical Doble


La línea vertical doble || es un operador lógico "o". Funciona de manera similar a &&;
dependiendo del resultado del primer comando, el segundo comando se ejecutará o será
omitido.

Con la línea vertical doble, si el primer comando se ejecuta con éxito, el segundo comando
es omitido. Si el primer comando falla, entonces se ejecutará el segundo comando. En otras
palabras, esencialmente estás diciendo al shell, "O bien ejecuta este primer comando o bien
el segundo".

En el ejemplo siguiente, el comando echo se ejecutará sólo si falla el comando ls:


5.1 Introducción
Si le preguntas a los usuarios qué característica del Sistema Operativo Linux disfrutan más, muchos
responderán «el poder proporcionado por el entorno de la línea de comandos». Esto es porque hay
literalmente miles de comandos disponibles con muchas opciones, resultando en herramientas poderosas.

Sin embargo, con este poder viene la complejidad. La complejidad, a su vez, puede crear confusión. Como
resultado, saber encontrar ayuda cuando trabajas en Linux es una habilidad esencial para cualquier usuario.
Referirte a la ayuda te permite recordar cómo funciona un comando, además de ser un recurso de
información al aprender nuevos comandos.

«93% de los directores de recursos humano planea contratar a un profesional de Linux en los próximos seis meses. Y
casi 90% mencionó que es difícil encontrar profesionales experimentados en Linux. Esto significa muchas
oportunidades de trabajo para aquellos con habilidades de Linux.»

5.2 Las Páginas man


Como se mencionó anteriormente, UNIX era el sistema operativo desde el cual se construyó la base de
Linux. Los desarrolladores de UNIX crearon los documentos de ayuda llamados páginas man (man significa
manual).

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.
CAL(1) BSD General Commands Manual CAL(1)

NAME
cal, ncal -- displays a calendar and the date of Easter

SYNOPSIS
cal [-3hjy] [-A number] [-B number] [[month] year]
cal [-3hj] [-A number] [-B number] -m month [year]
ncal [-3bhjJpwySM] [-A number] [-B number] [-s country_code] [[month]
year]
ncal [-3bhJeoSM] [-A number] [-B number] [year]
ncal [-CN] [-H yyyy-mm-dd] [-d yyyy-mm]

DESCRIPTION
The cal utility displays a simple calendar in traditional format and ncal offers an
alternative layout, more options and the date of Easter. The new format is a little
cramped but it makes a year fit on a 25x80 terminal. If arguments are not specified, the
current month is displayed.
comando man cal mostrará la página man para el comando cal:

The options are as follows:


-h Turns off highlighting of today.

Manual page cal(1) line 1 (press h for help or q to quit)


5.2.1 Visualizando las Páginas de Comando Man
Para ver una página man de un comando, ejecuta el man comando en la ventana del terminal. Por ejemplo, el
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:

Nota: Si estás trabajando en una distribución Linux que utiliza el comando more como un
localizador, su salida será diferente que el ejemplo que se muestra aquí.

Si tu distribución usa el comando less, podría estar un poco abrumado por la gran
cantidad de «comandos» que están disponibles. La tabla siguiente proporciona un resumen
de los comandos más útiles:
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 puede ser difícil
de entender, pero 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:
Los corchetes [ ] se utilizan para indicar que esta característica no es necesaria para
ejecutar el comando. Por ejemplo, [-3hjy] significa que puedes usar las opciones -h, -j,
-y, 1 o 3, pero ninguna de estas opciones son necesarias para el correcto funcionamiento del
comando cal.

El segundo conjunto de corchetes en la SYNOPSIS del comandocal ([[[day] month]


year]) muestra otra característica. Esto significa que puedes especificar un año por sí
mismo, pero si se especifica un mes también se debe especificar un año. Además, si
especificas un día entonces también necesitarás especificar un mes y un año.

Otro componente de SYNOPSIS que puede causar cierta confusión puede verse en
SYNOPSIS del comando date:

En estaSYNOPSIS hay dos sintaxis para el comando date. El primero de ellos se utiliza
para mostrar la fecha en el sistema mientras que el segundo se utiliza para fijar la fecha.

Las elipses siguientes a [OPTION], ..., indican que uno o más ítems antes de la opción
pueden usarse.

Además, la notación [-u|--utc|--universal] significa que puedes utilizar la opción


-u , la opción --utc o la opción --universal . Normalmente esto significa que las tres
opciones hacen lo mismo, pero a veces este formato (uso del carácter |) sirve para indicar
que no se utilicen las opciones combinadas, tal como un operador lógico «o».

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
Hasta ahora, hemos estado visualizando las páginas man de comandos. Sin embargo, a veces 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 y 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 organizar todas estas
páginas, las páginas se clasifican por secciones, al igual que cada página man se divide en secciones.

Para considerar:

Por defecto, hay nueve secciones de las páginas man:

 Programas ejecutables o comandos del shell


 Llamadas del sistema (funciones proporcionados por el kernel)
 Llamadas de la librería (funciones dentro de las librerías de los programas)
 Archivos especiales (generalmente se encuentran en /dev)
 Formatos de archivo y convenciones, por ejemplo /etc/passwd
 Juegos
 Otros (incluyendo paquetes macro y convenciones), por ejemplo, man(7), groff(7)
 Comandos de administración de sistema (generalmente sólo para el root)
 Rutinas del kernel [No estándar]

Cuando utilizas el comando man, éste busca cada una de estas secciones por orden hasta que encuentra al
primer "match" (o «coincidencia» en español). Por ejemplo, si ejecutas el comando man cal, en la primera
sección (programas ejecutables o comandos del shell) se buscará la página man llamada cal. Si no lo
encuentra, entonces se busca en la segunda sección. Si no se encuentra ninguna página man tras buscar en
todas las secciones, recibirás un mensaje de error:

5.2.6.1 Determinar la Sección


Para determinar a qué sección pertenece una página man específica tienes que ver el valor numérico de la
primera línea de la salida de la página man. Por ejemplo, si ejecutas el comando man cal, verás que el
comando cal pertenece a la primera sección de las páginas man:

5.2.6.2 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

Para especificar una sección diferente, proporciona el número de la sección como el primer
argumento del comando man. Por ejemplo, el comando man 5 passwd buscará la
página man de passwd sólo en la sección 5:
5.2.6.3 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.

5.2.7 Buscar Páginas man por una Palabra Clave


Desafortunadamente, no siempre te acordarás del nombre exacto de la página man que
quieres ver. En estos casos puedes buscar páginas man que coincidan con una palabra clave
mediante el uso de la opción -k del comando man.

Por ejemplo, ¿qué pasa si quieres ver una página que muestra cómo cambiar la contraseña,
pero no recuerdas el nombre exacto? Puedes ejecutar el comando man -k password:

Al utilizar esta opción puedes recibir una gran cantidad de salidas. El comando anterior, por
ejemplo, dió salida a 60 resultados.
Recuerda que hay miles de páginas man, así que cuando buscas por una palabra clave, sé tan
específico como sea posible. Usando una palabra genérica, como "the" (o «el/la» en
español), podría resultar en cientos o incluso miles de resultados.

Ten en cuenta que en la mayoría de las distribuciones de Linux, el comando apropos hace
lo mismo que el comando man -k. En esas distribuciones, ambas producen la misma salida.

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.1 Visualizar la Documentación Info para un Comando


Para visualizar la documentación info de un comando, ejecuta el comando info command
(reemplaza command con el nombre del comando sobre cuál buscas la información). Por
ejemplo, la siguiente pantalla muestra la salida del comando info ls:
Observa que la primera línea proporciona información que te indica dónde dentro de la
documentación info estás ubicado. Esta documentación se divide en nodes (o «nodos» en
español) y en el ejemplo anterior estás actualmente en el nodo ls invocation. Si
pasaras al siguiente nodo (tal como ir al siguiente capítulo en un libro), estarías en el nodo
dir invocation. Si te pasaras un nivel hacia arriba estarías en el nodo Directory
listing.

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:
Ten en cuenta que si quieres cerrar la pantalla de ayuda, debes introducir la letra l. Esto te
regresa a tu documento y te permite a continuar leyendo. Para salir completamente, introduce
la letra q.

La tabla siguiente proporciona un resumen de los comandos útiles:

Si te desplazas en el documento, verás el menú para el comando ls:


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.3.3 Explorar la Documentación info


En lugar de utilizar la documentación info para buscar la información sobre un comando
específico o función, puedes considerar la posibilidad de explorar las capacidades de Linux
mediante la lectura a través de la documentación info. Si ejecutas el comando info sin
ningún argumento, pasarás a un nivel superior de la documentación. Desde allí puedes
explorar muchas características:
5.4 Otras Fuentes de Ayuda
En muchos casos verás que las páginas man o documentación info te proporcionarán las
respuestas que necesitas. Sin embargo, en algunos casos, 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 readme.txt. 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.
5.5.3 Contar el Número de Archivos
La salida del comando locate puede ser bastante grande. Cuando buscas un nombre de
archivo, como passwd, el comando locate producirá cada archivo que contiene la cadena
passwd, no sólo los archivos passwd.

En muchos casos, puede que quieras empezar listando cuántos archivos coincidirán. Lo
puedes hacer mediante la opción -c del comando locate:

5.5.4 Limitando la Salida


Puedes limitar la salida producida por el comando locate mediante la opción -b. Esta
opción sólo incluye los listados que contienen el término de búsqueda en basename del
archivo. El basename es la parte del nombre de archivo que no incluye los nombres de
directorio.

Como puedes ver en la salida anterior, todavía habrá muchos resultados cuando utilices la
opción -b. Para limitar la salida aún más, coloca un carácter \ delante del término de
búsqueda. Este carácter limita la salida a los nombres de archivo que coincidan
exactamente con el término:
6.1 Introducción
Cuando trabajes en un sistema operativo Linux, necesitarás saber cómo manipular los
archivos y los directorios. Algunas distribuciones de Linux tienen aplicaciones basadas en
GUI que permiten gestionar los archivos, pero es importante saber cómo realizar estas
operaciones a través de la línea de comandos.

La línea de comandos dispone de una amplia colección de comandos que permiten


administrar los archivos. En este capítulo aprenderás cómo listar los archivos en un
directorio, así como, cómo copiar, mover y eliminar los archivos.

Los conceptos básicos enseñados en este capítulo se ampliarán en los capítulos posteriores al
ir cubriendo más comandos de manipulación de archivos, tales como los comandos para ver
archivos, comprimir archivos y establecer permisos de archivo.

«¿Quién más usa Linux en sus productos y servicios?»


6.2 Comprender los Archivos y los Directorios
Los archivos se utilizan para almacenar datos tales como texto, gráficos y programas. Los
directorios (También conocidos como «carpetas») se utilizan para proporcionar una
estructura de organización jerárquica. Esta estructura es algo diferente a la que puedes estar
acostumbrado si previamente trabajaste en los sistemas de Microsoft Windows.

En un sistema Windows, el nivel superior de la estructura de directorios se llama Este


Equipo. Cada dispositivo físico (disco duro, unidad de DVD, unidad USB, unidad de red,
etc.) aparece en Este Equipo, cada uno asignado a una letra de unidad como C: o D:. Una
representación visual de esta estructura:

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.

Igual que Windows, 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. Una representación visual de una estructura de directorios típica de
Linux:

La mayoría de los usuarios de Linux denominan esta estructura de directorios el sistema de


archivos.
Para ver el sistema de archivos raíz, introduce ls /:

Observa que hay muchos directorios descriptivos incluyendo /boot, que contiene los
archivos para arrancar la computadora.

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. Más adelante en este capítulo
cubriremos un tipo diferente de la ruta llamada la ruta relativa (o «relative path» en inglés).

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.

La siguiente gráfica muestra tres rutas absolutas adicionales:


6.2.2 El Directorio Home
El término home directory (o «directorio de inicio» en español) a menudo causa confusión a
los usuarios principiantes de Linux. Para empezar, en la mayoría de las distribuciones de
Linux hay un directorio llamado home bajo el directorio root: /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, por lo que un usuario llamado «bob»
tendría un directorio home llamado /home/bob.

Tu directorio home es un directorio muy importante. Para empezar, cuando abres un shell
automáticamente te ubicarás en tu directorio home, en donde harás la mayor parte de tu
trabajo.

Además, el directorio home es uno de los pocos directorios donde tienes el control total para
crear y eliminar los archivos adicionales. La mayor parte de otros directorios en un sistema
de archivos de Linux están protegidos con file permissions (o «permisos de archivos» en
español), un tema que se tratará a detalle en un capítulo posterior.

En la mayoría de las distribuciones de Linux, los únicos usuarios que pueden acceder a los
archivos en tu directorio home eres tú y el administrador del sistema (el usuario root). Esto
se puede cambiar utilizando los permisos de archivo.
Tu directorio tiene incluso un símbolo especial que puedes usar para representarlo: ~. Si tu
directorio home es /home/sysadmin, puedes simplemente introducir ~ en la línea de
comandos en lugar de /home/sysadmin. También puedes referirte al directorio home de
otro usuario usando la notación ~usuario, donde usuario es el nombre de la cuenta de
usuario cuyo directorio home quieres consultar. Por ejemplo, ~bob sería igual a
/home/bob. Aquí, vamos a cambiar al directorio home del usuario:

Ten en cuenta que una lista revela los subdirectorios contenidos en el directorio home.
Cambiar directorios requiere atención al detalle:

¿Por qué el anterior comando resultó en un error? Eso es porque los entornos de Linux son
sensibles a mayúsculas y minúsculas. Cambiarnos al directorio Downloads requiere que la
ortografía sea correcta - incluyendo la letra D mayúscula:

6.2.3 Directorio Actual


Tu directorio actual es el directorio donde estás trabajando actualmente en una terminal.
Cuando primero abres una terminal, el directorio actual debe ser tu directorio home, pero
esto puede cambiar mientras vas explorando el sistema de archivos y cambias a otros
directorios.

Mientras estás en un entorno de línea de comandos, puedes determinar el directorio actual


mediante el comando pwd:
Adicionalmente, la mayoría de los sistemas tiene el prompt que visualiza el directorio actual
del usuario por defecto:

En el gráfico anterior, el carácter ~ indica el directorio actual. Como se mencionó


anteriormente, el carácter ~ representa el directorio home.

Normalmente el sistema sólo muestra el nombre del directorio actual, no la ruta completa del
directorio raíz hacia abajo. En otras palabras, si estuvieras en el directorio
/usr/share/doc , tu prompt probablemente te proporcionará solamente el nombre doc
el directorio actual. Si quieres la ruta completa, utiliza el comando pwd.

También podría gustarte