0% encontró este documento útil (0 votos)
63 vistas96 páginas

Curso de Linux

1) Richard Stallman fundó el movimiento de software libre en los años 80 después de tener problemas obteniendo el código fuente de un controlador de impresora. 2) Esto lo llevó a definir cuatro libertades fundamentales del software libre: libertad de uso, aprender y adaptar el código, redistribuir copias y publicar mejoras. 3) Más tarde, creó la Free Software Foundation y las licencias GPL para garantizar que el software siempre sea libre.

Cargado por

Juan Camaney
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 PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
63 vistas96 páginas

Curso de Linux

1) Richard Stallman fundó el movimiento de software libre en los años 80 después de tener problemas obteniendo el código fuente de un controlador de impresora. 2) Esto lo llevó a definir cuatro libertades fundamentales del software libre: libertad de uso, aprender y adaptar el código, redistribuir copias y publicar mejoras. 3) Más tarde, creó la Free Software Foundation y las licencias GPL para garantizar que el software siempre sea libre.

Cargado por

Juan Camaney
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 PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 96

Linux - Historia y Filosofía

La filosofía del Software Libre nació a mediados de los años ochenta, abanderada por el
Hacker del MIT Richard Stallman. Esto se relata en un anécdota de la situación que lo lleva
a tomar dicha postura, RMS como se le conoce en listas de correo estaba trabajando en
solucionar un problema con una impresora que una importante compañía fabricante había
donado al MIT en calidad experimental. Esta impresora estaba dando muchos problemas
en red. Para no entrar en detalles Stallman abordo al fabricante para obtener el código
fuente del controlador de la impresora para poder solucionar los problemas que había
identificado, pero el fabricante lo evadió continuamente y nunca se los entrego.

Después se enteraría que la verdadera razón de esto fue que la compañía consideraba
esta información vital para su negocio.

Entonces Richard Stallman se vio en una encrucijada, seguir utilizando software el cual
nunca le iban a entregar el código fuente y nunca podría mejorar y aguantar la frustración
de los problemas que tuviera el mismo, o fundar su propio proyecto para cumplir cuatro
propiedades básicas que según él tiene el software.

Propiedades básicas del Software Libre

1
 La libertad de usar
Esta libertad de uso se refiere a poder usar con cualquier propósito, es decir, yo puedo
usar el software para llevar acabo determinada función y si este software puede ser
utilizado para otra función así no sea la más idónea, poderlo utilizarla en esta.

 Aprender a adaptar
Los programas se puede adaptar a las necesidades específicas de cada uno de los usuarios
esta es la segunda libertad.

 Redistribuir
Es decir software no debe considerado como un objeto del cual se tiene que quitar de un
lado para colocar en otro como lo exigen la mayoría de las licencias propietarias. El
software se puede redistribuir por que las copias digitales son exactas.

 Publicar las mejoras


Es decir si el software se puede Adaptar, mejorar, esas mejoras deberían ser publicadas
para el beneficio de la comunidad y esta a su vez ayudar al resto a alimentar su desarrollo.

En Free Software Foundation enumeran las libertades de 0 a 3, cualquier parecido con


las leyes de la robótica de Isaac Asimov es pura coincidencia.

Entonces estas son las 4 Libertades básicas que Richard Stallman defiende en su
postura de Software Libre.

¿Cómo funciona este negocio?


El software para mejorarlo necesita ser escrito en un código fuente que es un código
entendible a las personas ya que los procesadores de las computadoras solo
entienden unos y ceros. Entonces ese código fuente puede ser compilado para pasarlo
al lenguaje binario como en el caso de C y Java, o puede ser distribuido en el mismo
código fuente como en el caso de los lenguajes interpretados como Perl, PHP etc.

De esta manera los programas ya ejecutables hacen parte de un grupo de aplicaciones de


productividad como Herramientas de Oficina, Navegador Web, Modelador 3d, Editores de
Imagen, Vídeo y Sonido entre otras.

Este grupo permite la creación de distribuciones de software, ya sea bajo el núcleo


de Linux u otros núcleos de sistema operativo. Por eso contamos con todas las
herramientas para poder ser productivos con nuestros equipos informáticos llámense
computador de escritorio, Equipos móviles, Servidores de red, Procesamiento de datos o
control de producción industrial entre otras.

Estas aplicaciones deben respetar estándares abiertos, ¿para qué? Para que los
documentos que se produzcan no infrinjan patentes, y así no tengan problemas con los

2
propietarios de las mismas, siempre tratando de asegurar la libertad de los usuarios y de
los desarrolladores con respecto al uso de dichos estándares.

Entonces con el uso de estos estándares abiertos se producen contenidos abiertos para
la documentación de estos estándares permitiendo la difusión de los mismos con las
aplicaciones de las distribuciones ya mencionadas.

De esta manera en su forma filosófica, el software libre es una forma ética de


entender el software. En su desarrollo, comercialización, distribución y uso, para lo que
necesita una expresión legal en forma de licencias de software expresando pues valores
como, Ética, Creatividad, Eficiencia, Colaboración, No discriminación, Ciencia,
Transparencia, Seguridad, Competitividad, privacidad, Solidaridad y Sobre todo garantía de
la libertad.

Cómo funciona el Software libre en la práctica


En el mundo del Software libre por un lado están los desarrolladores por el otro los
usuarios, los usuarios colaboran con los desarrolladores y viceversa eligiendo que
proyectos para sus actividades diarias.

¿Cuáles son esos usuarios?


Son las ONG, Instituciones, Empresas, Países o regiones, Universidades y personas
particulares que vemos en las propuestas de software libre una opción para poder
implementar en algunas organizaciones.

Esto produce un conjunto de tecnologías que permiten una alternativa, solamente basada
en software libre.

¿Qué hay del Soporte?


Bueno el soporte es retro alimentado. El desarrollo de software, genera aplicaciones, las
aplicaciones cuentan con usuarios, estos se reúne en comunidades, Que crean foros, que
exponen necesidades y problemas, que retro alimenta a los desarrolladores, y estos
corrigen y mejoran las aplicaciones. Este es el ecosistema del software libre.

¿Qué es GNU?
GNU es un acrónimo Recursivo de GNU no es UNIX .

¿Por qué razón?


Bueno, en la época en la que Richard Stallman desarrollo su filosofía GNU el Unix era a
la plataforma más estable y más utilizada en el entorno corporativo, entonces el comenzó
a desarrollar herramientas como su compilador de C, un debbuger y un editor para
programación, además de comandos básicos con parámetros extendidos que los
de Unix no tenía.
3
Así el GNU fue creciendo y engordando bastante. Al año siguiente de manifestar su
filosofía de software libre, Stallman crea la Free Software Fundation (Fundación de
Software Libre) Para poder tener un marco legal y así Plasmar en licencias de uso de
software, para así poder garantizar que el software desarrollado por cualquier persona
bajo los lineamientos de la idea GNU siguieran conservando estos.

El producto entonces fue la creación de las licencias GPL, LGPL y AGPL. GPL siglas de
General Public License o Licencia publica general en español.

Conflicto con Open Source

Por un lado tenemos a nuestro auto proclamado profeta de software libre llamado Richard Stallman el cual posee
una distribución de software robusta que ha crecido con el tiempo pero que no tiene un núcleo de sistema operativo
para poder considerar un sistema completo, por otro lado a principios de los 90s aparece el señor Linus
Torvalds, ¿qué hace el?. Invita a la comunidad de desarrolladores a que le ayuden en la construcción de un núcleo de
sistema operativo para reemplazar Minix que era un sistema operativo usado para fines educativos pero que en ese
momento no era completamente libre

Entonces desde 1991 hasta 1994 logran desarrollar el núcleo, y ya en la segunda mitad
de 1994 ya logra algo decente al cual llamarlo Linux Kernel 1.0.

En ese momento es donde se acuña por primera vez el termino GNU/Linux, La


distribución GNU con el Núcleo Linux.

Aparece en escena otro Señor llamado Eric Raymond, Desarrollador de Software, Escritor
y conocido activista de uso de armas en estados unidos.

4
Eric no está de acuerdo con el planteamiento rígido de Stallman sobre el desarrollo de
software, y defiende una posición menos radical, porque él considera que el
desarrollador debe tener la LIBERTAD de Mantener abierto o no su código.

Entonces ahí es donde el concepto de Opensource y Software libre se separan. Ya


que todo el software libre es Opensource, pero según Stallman no todo el software
Opensource es Libre. Sin embargo la idea de colaboración, retroalimentación, uso y
mejora los une a la hora de brindar a la comunidad soluciones de Software exitosas.

¿Qué es un sistema operativo?


Los Sistemas Operativos constan de 2 partes principales. Un núcleo o kernel que permite
el funcionamiento básico del equipo de cómputo como por ejemplo, la pantalla, los discos
duros, el sonido, la aceleración gráfica, el teclado, el mouse y demás componentes y una
interfaz de usuario que permite al mismo su interacción con el computador. Esta interfaz
viene de 2 formas una llamada CLI, o interfaz de comandos que nos permite acceder al
computador de forma básica indicando ordenes en una línea de texto y la otra, la
interfaz grafía de usuario o GUI, por la cual podemos usar la computadora de una
forma más intuitiva, gráfica utilizando un dispositivo apuntador como el mouse, o en caso
de los dispositivos móviles nuestros dedos.

Bueno ahora podemos definir un poco de que consta el núcleo de Linux.

5
El núcleo de Linux provee la comunicación y el manejo básico que se necesita para que
la interfaz de usuario y las aplicaciones interaccionen con el mismo.

Linux es considerado un sistema operativo Monolítico ya que la mayoría de sus


componentes se mantienen en un solo paquete a pesar de que la mayoría de los
controladores no esenciales corren como módulos.

Esto difiere del concepto de Micronúcleo, que mantiene una visión simplista de kernel
que corre en modo protegido, es decir que la capa de las aplicaciones NO puede tocar y
el resto de controladores, interface de usuario y aplicaciones corren en modo usuario
es decir fuera del círculo protegido donde corre el kernel. Pero esto es tema a tratar en
otro momento.

¿A qué se refiere la gente cuando habla de distribuciones de Linux?


Una distribución de software es una colección de aplicaciones que hacen parte de un
sistema operativo, normalmente vienen acompañadas de un núcleo o kernel y en otros
casos simplemente se instalan sobre un sistema operativo ya existente.

El Primer caso puede aplicarse a una distribución basada en Linux, la otra es comparable a
GNU en sus inicios.

Las distribuciones de Linux entonces no son más que la puesta en práctica de la visión
de "como debe ser un sistema operativo" Según un concepto particular ya
sea personal o empresarial.

La empresa desarrolladora de la distribución simplemente toma el software ya


desarrollado, lo integra bajo herramientas normalmente desarrolladas por ellos mismos
y las libera a la comunidad de usuarios para su uso. Algunas son comerciales, otras
orientadas al hacking, las otras más conocidas orientada al usuario de escritorio o al
ambiente corporativo.

Entre las más importantes tenemos a las pioneras de Slackware y Debian.

6
Slackware tenía una visión hacker del sistema mientras que Debian fue la distribución
oficial FSF, luego se separaron para funcionar como una organización independiente.

Luego tenemos a Redhat, Tal vez la distribución Linux más conocida sobre todo en
el ambiente corporativo, ya que desde el principio se consolido como una empresa para
ofrecer soluciones integrales bajo esta plataforma. De igual manera SUSE nace
en Alemania para cubrir el mercado Europeo.

RedHat tiene un par de hijos. Uno reconocido llamado Fedora el cual es patrocinado por
Redhat mismo y uno Bastardo Llamado Centos que pretende llevar una compatibilidad
con Redhat ES, es el producto comercial de RedHat, Para ofrecer a la comunidad una
distribución no comercial en donde se puedan implementar soluciones homologadas solo
para Redhat ES.

Debian también tiene sus hijitos, el más afortunado es Ubuntu, que es la distribución
más sonada en los últimos años. Esta distribución tiene varias ramificaciones, de las cuales
destacamos a Kubuntu, Xubuntu y Edubuntu las cuales solo varían en su misión, ya
que Kubuntu mantiene un escritorio basado en KDE, Xubuntu un escritorio liviano
basado en XFCE y Edubuntu se orienta al sector educativo. Pero aun así todas hacen uso
de los repositorios principales de Ubuntu.
Y digo que Ubuntu es un hijo afortunado ya que su creador Mark Shuttleworth
desarrollador de Debian fue afortunado beneficiario del BUM de las .com, Convirtiéndose
en multimillonario de la noche a la mañana, y aprovecho su nueva fortuna en ir a la
estación espacial siendo el segundo turista espacial de la historia, Y crear una empresa
para el desarrollo de una versión propia de Debian para el beneficio de los usuarios de
escritorio.

Pero Slackware no se queda atrás, KATEOS es una distribución basada en el, por otro
lado hay iniciativas con una visión diferente a las originales como Gentoo y Archlinux.

Archlinux por su parte conserva la estructura de Unix, por el otro lado Gentoo pretende
distribuirse en código fuente el cual se compila directamente para la maquina en la cual se
corre.

¿Qué loco No? Pero funciona y tiene una comunidad muy grande. De hecho una
distribución de software como ya lo han deducido no necesita de LINUX para poder correr.

En Debian usan Linux, porque les toca. Paralelamente ellos están desarrollando desde
hace mucho tiempo un núcleo Microkernel llamado Hurd, con el cual no han tenido
mucho éxito ya que al parecer la comunidad está volcada en el desarrollo de Linux.
Además de esto han iniciado hace algunos años un proyecto llamado KfreeBSD, que no es
más que los paquetes de Debian instalables sobre el sistema operativo FreeBSD que hace
parte de los UNIX Libres junto con NETBSD y OpenBSD.

De hecho hasta Apple se ha beneficiado del software libre ya que su Núcleo, el


de MAC OSX, fue basado en la versión 4.2 de FreeBSD y el micro kernel match, se le
llamo Darwin. La comunidad de software libre trato de establecer un par de proyectos
7
llamados Open Darwin y GNUDarwin que pretendían utilizar el kernel Darwin para una
distribución de un sistema operativo libre, pero fallaron.

Incluso compañías comerciales que en temporadas han sido opositoras de los


proyectos libres como SCO han distribuido su sistema operativo Openserver acompañado
con Distribuciones opensource como es el caso de Skunkware y Aunque no lo crean hay
distribución de GNU para Windows, Se llama Cygwin, y provee las mismas herramientas
GNU completamente funcionales en el sistema operativo Windows.

No siendo suficiente en esta gran jungla de software libre y opensource. Existen


Ramificaciones que no son considerados distribuciones.

El núcleo Linux y parte de sus herramientas de sistema operativo son la base para el
sistema operativo Android, cuyas variaciones dan nacimiento a sabores o distribuciones
del mismo, siendo Cyanogenmod la más conocida.

Entonces vemos que Google toma el núcleo de Linux y de sus herramientas


básicas y las coloca como cimientos para desarrollar una interfaz, un escritorio para
dispositivos móviles, y libera un kit de desarrollo para el mismo. Creando así su sistema
operativo llamado Android.

Como Android hace parte de este gran ecosistema, se comporta de la misma forma y se
crean Distribuciones del mismo o sabores como se conoce en la comunidad de donde
surge que proveen a Android de funcionalidades que Google o los fabricantes de
dispositivos móviles no incluyen en sus dispositivos de forma predeterminada. Y esto les
acarrea mucho éxito en la comunidad de desarrollo para dispositivos móviles.

Siendo el Android significativamente simple en su estructura la proliferación de ROMs


personalizadas es extraordinariamente alta. Además actualmente los sistemas basados
en Linux son muy usados para el firmware de numerosos fabricantes de hardware
como la BIOS de servidores, Swiches, Routers, Dispositivos de comunicación y
hasta consolas de video juegos como el caso de ouya.

Finalizando, El uso de Linux y de Software Libre u OpenSource se ha masificado tanto


que hoy por hoy tiene una gran cuota del mercado, teniendo en cuenta que no solo
estamos hablando de escritorio y servidores, estamos hablando de todos los dispositivos
de comunicaciones y embebidos que hay en el mercado que usan el Kernel de Linux.
8
Núcleo, Shell, estructura de directorios y permisos
Esta segunda entrega del curso de Linux en Español, está desarrollada para que
puedas conocer y familiarizarte con el sistema operativo Linux, de esta forma Linux ya no será
un desconocido para ti, al contrario al conocer todas sus partes lograrás el dominio sobre este
gran sistema.

Para que puedas conocer a fondo el sistema Linux lo dividiré en sus partes básicas y explicaré que
función cumple cada una de ellas, estas son las siguientes:

 Núcleo de Linux.
 Shell de Linux.
 Directorios, estructuras de directorios.
 Sistemas de archivos.

Núcleo de Linux
Linux es un núcleo de sistema operativo cuyo desarrollo comenzó en 1991 en manos de Linux
Torvalds, tres años después y gracias a la ayuda de una gran comunidad de desarrolladores, se
liberó la versión 1 del código fuente. Esta versión 1 se liberó bajo la licencia GPL de free software
foundation la cual es la cuna del proyecto GNU, que es una distribución de software libre.

¿Qué se puede hacer con la licencia GPL?


Se puede usar el software como quieras, además lo puedes adaptar a tus propias necesidades,
además de eso lo puedes copiar sin restricción y lo puedes redistribuir, y cuando lo mejores
puedes compartir estos cambios con comunidad.

Después de 1995 lo único que ha hecho Linux en estos años ha sido ir para arriba. Ahora es uno
de los sistemas operativos preferidos para ambientes de red e Internet. Pero entonces tú dirás
“pero si la mayor base instalada es Windows”. Tienes razón... pero no caes en cuenta que
probablemente en tus bolsillos tengas un teléfono corriendo Linux, y que probablemente donde
tengas tu blog o tu página web este corriendo en un servidor Linux, y que tu router puede tener
Linux y no te lo pierdas hasta la BIOS de tu ordenador, si, puede que corra un Linux. “loco no?”
Pero por eso hay que replantear eso de la mayor base instalada.

Kernel monolítico
Como ya hemos visto el kernel de Linux es un sistema monolítico es decir que todos sus
componentes están en un solo paquete y este establece procedimiento de llamadas hacia el resto
de los procesos del sistema corriendo en un área restringida el cual estos no pueden acceder
directamente.

MicroKernel
El microkernel trabaja igual pero tiene sus diferencias. El microkernel minimiza la labor del
kernel y crea un sistema básico de llamadas de entrada y salida, de manejo de memoria y hace
que todos los demás componentes corran como procesos del sistema. La discusión entre cuál de
los dos es mejor pues..... eso lo podremos ver en otro momento porque ahora lo que queremos
es entender cuáles son las partes del núcleo de Linux.

9
¿Cómo se divide la arquitectura del núcleo de Linux?
El núcleo o Kernel de Linux lo dividiremos en las siguientes partes:

Gestíon de Procesos
La gestión de procesos está centrada en la ejecución de los procesos, en el kernel de linux son
llamados hilos y representan la visualización individual de cada procesador. Se suele utilizar el
término proceso aunque la implementación en linux no tiene concepto de hilos y procesos por
separado. El núcleo provee un API a través de la SCI, con la que puede crear nuevos procesos
con fork y con exec, matar o salir del proceso como en el caso de kill o exit. La gestión de
procesos es necesaria para poder compartir hilos en la CPU, en el kernel el planificar opera en un
tiempo constante sin tener en cuenta el número de procesos que compiten por la CPU por
eso decimos que opera bajo demanda, este se llama planificador 01, esto denota que el
lleva la misma cantidad de tiempo para la planificación de un solo hilo o de varios , en el
planificador 01 también se soporta el multiproceso. Ósea es simétrico y multiproceso.

La memoria
Otro importante recurso que es controlado por el kernel es la memoria, debido a la eficiencia
como el hardware que maneja La Memoria Virtual esta es gestionada en páginas de 4 Kb en la
mayoría de las arquitecturas, Linux incluye definiciones para manejar la memoria disponible y los
mecanismos para hacer el mapeo en el hardware de la memoria física y en la memoria virtual.
Pero la gestión de la memoria es mucho más que búfer de 4Kb, Linux contiene abstracción de
búfer que permiten ir mas haya, este esquema maneja memoria de búfer de 4Kb, como base pero
además reserva estructura dentro de ellos y lleva la cuenta de las páginas que están completas,
parcialmente usadas o totalmente vacías para que el esquema pueda crecer o disminuir como se
necesite en el momento.

Cuando hay varios usuarios haciendo uso de la memoria existen ocasiones en las cuales esta se
agota entonces por esta razón las paginas pueden ser escritas en el disco
duro temporalmente y luego vueltas a cargar en la memoria esto se llama SWAP o
intercambio, ya que las paginas se mueven de un lado para otro cuando se necesite.

10
Sistema Virtual de Archivos o VFS
VFS es una capa de abstracción muy interesante que tiene el kernel y provee un interface para
el uso común de sistemas de archivos sin importar cuál sea. Se llama capa de atracción porque
no importa cuál sea la implementación de file system (Sistema de archivo) que estemos
utilizando él tiene las funciones básicas para poder acceder a cualquier sistema de archivos.
Entonces el VFS proporciona una capa de intercambio entre las SCI y los sistemas de
archivos soportados por el kernel.

En la parte más alta del Virtual File System se encuentra un API común con las funciones tales
como read , write, open, close y en la parte más baja están las abstracciones del
sistema para poder definir las atracciones más altas, estas son añadidas a cada uno de los
soportes de cada sistema de archivos en el kernel son más de 50, bajo la capa del sistema de
archivos está el cache del bufer que proporciona un conjunto de funciones a la capa de archivos
independientemente del sistema de archivos que se esté manejando, esa capa optimiza el acceso
a los dispositivos físicos manteniendo brevemente la información arriesgándose a que esta tenga
una lectura anticipada de los datos para poderla mantener cuando haga falta. Es por eso que en
la práctica cuando nosotros leemos un sistema de archivos la primera vez es más lento y cuando
volvemos a leerlo es más rápido.

Por debajo del cache del búfer ya están los controladores directamente, los dispositivos de
hardware que hacen interface con el sistema de archivos.

La pila de Red
La pila red o diseño sigue una arquitectura por capas modelada tras los protocolos en si,
recordemos que el IP que no es solamente una dirección o un numero sino que es el protocolo
principal de internet y a su vez el protocolo central bajo el que se sitúan el protocolo de
transporte TCP/IP y sobre el protocolo de transporte TCP/IP esta la capa de socket que a su
vez llama a las SCI. La capa de socket es un API estándar para el subsistema del trabajo en red
y proporciona una interface a varios protocolos. Desde el acceso a las frames crudas hasta
las unidades de datos de IP llamadas PDU lo que nosotros vulgarmente conocemos como
paquetes, el protocolo TCP/IP y el protocolo de datagrama de usuario UDP. La capa de socket
provee de esta manera una forma estandarizada para poder manejar conexiones y mover
datos de un lugar a otro.

Drivers de dispositivos
Lo siguiente en la lista son los controladores, la gran mayoría del código fuente de Linux son
controladores de dispositivos, ¿Porque? Bueno es natural, los controladores son los que nos
permite reconocer el hardware que nosotros queremos hacer funcionar con el sistema operativo
basado en Linux. El árbol de código fuente de Linux nos proporciona un subdirectorio llamado
Drivers el cual está dividido en los diferentes dispositivos que queremos reconocer, en este código
fuente vamos a encontrar directorios como Serial, Ethernet y todos los dispositivos para los
que se ha desarrollado soporte en Linux.

Arquitectura
Por ultimo está el código dependiente de la arquitectura, aunque Linux es independiente de la
arquitectura hay varios elementos que hay que tener en cuenta con las operaciones habituales
de eficiencia del sistema operativo, tenemos que Linux también en su árbol de desarrollo tiene

11
un apartado para lo que necesita específicamente cada una de las arquitecturas entonces
tenemos 386, Spark, ARM, MIPS, cualquiera otra que sea soportada por el núcleo de Linux.
Hay otras características básicas del sistema operativo que vale mencionar aparte de la estructura
que estamos estudiando en este momento.

Linux por ser un sistema operativo de producción y también de código abierto es un


excelente laboratorio para nuevas tecnologías en protocolos de red, por ejemplo las redes de
alta velocidad que superan al Eternet de 1/10Gb y también por ejemplo el TCP/IP, que nos
permiten características avanzadas de TCP/IP remplazándolo como capa de transporte.
Linux también es un kernel dinámico a pesar que es monolítico también es modular y
permite que los controladores que no son esenciales para el funcionamiento sean cargados
como módulos y se permite la carga y la descarga de los mismos sin tener que afectar el
funcionamiento o la estabilidad de la plataforma.

También está la parte de la virtualización, Linux desde hace unos años lleva soportando la
virtualización por medio de KVM Kernel-Based Virtual Machine, y esta modificación al kernel
permitió que se pudieran correr instancias por ejemplo del sistema operativo Windows y del
sistema operativo Linux al mismo tiempo, la única restricción es que la plataforma de hardware
que se esté utilizando tenga la opción de virtualización.
Con eso damos fin a la explicación de los que es el núcleo de Linux a grandes rasgos, Si
quisiéramos profundizar que es el núcleo de Linux pues nunca terminamos.

La Shell

La Shell es la interface de usuario tradicional en los sistemas operativos tipo Unix de allí que Linux
también cuenta con esta misma interface. La Shell cuyo nombre inglés significa Caparazón es la
interface con la que han contado los ordenadores desde antaño cuando se utilizaba únicamente
una interface donde se hacía uso únicamente de un teclado y una pantalla en un entorno
ambiente de línea de comando para poder acceder a este.

La Shell provee una interface para poder enviar y recibir el resultado de comandos o de
aplicaciones que muestran su resultado en la pantalla en forma de texto, además también
provee un lenguaje de programación básico para que los usuarios puedan utilizarlo,

12
automatizar tareas y procedimientos dentro del sistema y así poder facilitar su uso y
administración, a esto se le llama Shell Scripting.

Estructura de Directorios
El siguiente punto es la estructura de directorios o jerarquía, al igual que todos los otros sistemas
operativos Linux tiene una jerarquía de archivos para poder organizar la estructura y tiene la
siguiente organización Teniendo en cuenta que el / o barra diagonal que nosotros conocemos es
la base o raíz de toda la estructura entonces la vamos a llamar root (raíz en inglés), entonces de
ahí se derivan los siguientes directorios:

/bin es el que contiene los binarios indispensables para que el sistema operativo funcione en su
parte mínima como ls, rm, mkdir, ps.

/boot que contiene los archivos estáticos de arranque de Linux como el kernel y el initrd.

/dev contiene los archivos que representan los dispositivos tanto virtuales como de hardware
que hay en el sistema.

/etc que es el directorio que contiene los archivos de configuración de en formato de texto

/home el directorio que contiene los directorios donde están los usuarios ósea donde los
usuarios tienen sus datos por ejemplo /home/user1.

/lib que es las librerías esenciales también del sistema operativo y los módulos del kernel
también residen allí.

/media es la raíz del punto de montaje de los dispositivos de bloque o removibles.

/mnt es el punto de montaje de bloque temporal, que fue heredado de Unix es como media
pero pues ya no se utiliza tanto porque venía de Unix tradicional.
13
/opt que es donde reside el software de aplicación agregado o de terceros como ORACLE o como
cualquier otro fabricante.

/sbin que provee los binarios del sistema que no son esenciales para hacer que el sistema
operativo funcione pero que son necesarios para llevar a cabo funciones ya más complejas,
como por ejemplo la configuración de la red, del filtrado ip, la programación de tareas y toda las
demás cosa que hacen más completo el del sistema operativo.

/tmp que es donde residen los archivos temporales ya sean los que nosotros generamos o los
que general las aplicaciones y procesos que manejan el sistema.

/usr donde están los binarios y las aplicaciones, este es el directorio que suele tener la cantidad
de espacio ocupado más grande dentro del file system y provee una jerarquía también
secundaria donde hay un /bin, /etc, /lib, /sbin.

/var o archivos de tamaño variable como la cola de correo, las colas de impresión, las datas de
los motores de bases de datos.

/root es por así decirlo el home para el root, porque antiguamente en el unix, el home del root
estaba sobre la misma raíz y esto generaba problemas de seguridad y organización.

/proc que es un sistema de archivo virtual donde está el estado del sistema, las condiciones y
esto se indica en archivos de texto.

Permisos
Ahora está el asunto de los permisos, me imagino que alguna vez has oído algo como “no, no
tengo los privilegios en el sistema o no es que mi usuario no es privilegiado”, se trata de esto
mismo.

En Linux aunque no lo creas solo hay 2 tipos de usuarios esto debido a la forma en la que trabaja
el núcleo, existe un usuario 0 que es llamado root, dios, admin, odin, thor o como lo quieras
llamar y todos los demás usuarios.

¿Bueno cómo es esto?

Realmente lo que importa son los permisos del file system, y esto no es de extrañar porque ahí
es que residen los datos que nosotros queremos restringir.

¿Entonces cómo es esto de los privilegios?

La cosa va así, existen 3 roles distintos con 3 tipos de permisos cada uno, eso suena como tic tac
toe, triqui como nosotros lo llamamos y pues no es enredado pero el jueguito de triqui nos puede
ayudar a resolver un poquito cómo es esto de los permisos.

Entonces tenemos que en eje x está el usuario propietario representado por la upropietario del
archivo, está el grupo representado por la g al que pertenece el usuario y todos los
demás representados por la letra o. En el eje y tenemos la r para lectura en ingles que es
read, la w para write que es escribir en inglés y la x para execute en ingles quiere decir
ejecutar. Ahora los permisos se otorgan por medio de números, el permiso para ejecutar es 1, el
14
permiso para escribir es 2 y el permiso para leer es 4, estos se suman para obtener el permiso
que necesito para determinado archivo.

En este caso colocaremos 4+2+1 da 7 ósea todos los permisos, 4+0+1 ósea el permiso de
lectura y ejecución y el siguiente le vamos a colocar 0+0+0 que no nos da ningún permiso,
entonces tenemos que el usuario propietario tienen todos los permisos , el grupo donde se
encuentra el usuario propietario tiene permisos de lectura y ejecución y los demás usuarios en el
sistema no tiene permiso de hacer nada con el archivo al que le acabamos de colocar este
permisos. Entonces estos son los permisos de archivos y pues aquí hicimos la línea del tic tac toe.

Les voy a mostrar algunos ejemplos de permisos, teniendo en cuenta vamos a hacer unos
ejemplos de los permisos en Linux. Tenemos unos archivos de ejemplo vamos a ver la
aplicación de los bits de los permisos, tenemos que el primer tercio es el usuario, el segundo
tercio es el grupo y el tercer tercio es los otros, entonces vamos a hacer algunos ejemplos
vamos a hacer el ejemplo

Chmod 750 ejemplo 1

Allí vemos que quedo con permisos de lectura, escritura y ejecución para el usuario, lectura y
ejecución para el grupo y ninguno para los todos los otros, ahora vamos a dar lectura y escritura
a todos, recordemos lectura es 4, escritura es 2 entonces lectura y escritura vendrían a ser 6,
para otorgarle ese permiso a todos los usuarios vendría a ser 666. Ahí esta lectura y
escritura tanto para propietario, grupo y todos los demás, ahora solo queremos lectura para
todos entonces seria 444 ahí esta lectura para el propietario, el grupo y todos los otros, por
ejemplo queremos nada más lectura y ejecución para el propietario y el grupo para todos los
otros ninguno entonces sería que lectura y ejecución seria 4+1 seria 5.

Chmod 555 ejemplo 4

Entonces tenemos lectura y ejecución para el propietario y el grupo todos los otros no tienen
ningún permiso y queremos colocarle todos los permisos al archivo seria 4 del permiso de
lectura, 2 del permisos de escritura y 1 del permiso de ejecución seria 7, con esto nos damos
cuenta como se asigna los permisos de Linux. No olviden que esto se va a ampliar para los
comandos específicos más adelante solamente es para mostrar lo explicado anteriormente.

15
SGUI/ SUID y Sticky bit

También me parece importante explicarles lo siguiente, existen 2 permisos excepcionales está el


de SGUI/ SUID y esta STICKY BIT aquí es donde la cosa se pone buena.

Resulta que en Linux y en general en Unix hay un permiso de ejecución que se le puede
agregar a una aplicación, la cual hace que se ejecute como el usuario dueño y esto
también incluye al usuario root. Esto se llama SUID y se representa en el ejecutable con
una S, en el caso del grupo es lo mismo en el SGUI aparece también como una s en la parte de
permiso de ejecución, por otro lado está el STICKY BIT que es una medida de seguridad ya que
solo el usuario propietario de ese archivo puede modificarlo o eliminarlo, un ejemplo de esto es
cuando colocamos archivos en el /tmp.

El ejemplo consiste en lo siguiente, vamos a buscar una aplicación, un conejillo de indias que nos
sirva para nuestro propósito, se me ocurre que top por lo es interactiva nos puede servir,
entonces copiamos la aplicación para no modificar la del sistema a la carpeta donde estamos
trabajando, ahora vamos a asignarle el permiso de suid a esa aplicación, se la
aplicamos solamente al propietario ósea los permisos de U ósea de usuario y ahí ya vemos que
nuestra aplicación ha quedado con el bit s que nos dice que es suid, ahora vamos al otro usuario
el usuario fox, que está trabajando en la misma carpeta vemos la aplicación top y la
ejecutamos para comprobar que esta aplicación está corriendo como pedro hacemos ps xau
que nos va a mostrar todos los procesos de forma extendida junto con el usuario que los corre y
vamos a filtrarlo por cómo se llama el proceso, se llama top.

Ahí ya podemos apreciar que aunque es usuario1 el que inicio el proceso top, este está
corriendo a nombre de pedro gracias al bit de suid que lo permite.

Bueno el ejemplo de sticky bit va así:

Creamos una carpeta por ejemplo sticky, le agregamos todos los permisos ahí ya
comprobamos luego le agregamos el bit de sticky bit en el rol de otros con la t y ahí ya nos
queda el directorio con el sticky bit. Entramos, creamos un archivo le concedemos todos los
permisos, nos cercioramos de los permisos del archivo y que la carpeta efectivamente tenga el
sticky bit.

Cambiamos de usuario, este es el usuario fox, entramos en la carpeta sticky, observamos


que hay un archivo del usuario pedro llamado hola, como tiene todos los permisos procedemos a
borrarlo.

Pues no lo permite porque la carpeta que lo contiene que ese sticky tiene el sticky bit.

16
Comandos Básicos y Salida Estándar

Vamos a tratar los siguientes temas:

1. Interface de shell.
2. Comandos básicos para manejar la interface de Shell.
3. La entrada estándar.
4. La salida estándar.
5. El error estándar.
6. CLI Command Line Interfase (Interface de Línea de Comandos)

Interface de shell
Ahora vamos a entrar en materia, primero vamos a ver cómo entramos a la interface
básica de usuario "la CLI" (interface de comandos). Ahí vamos a ver los comandos básicos
para poder desenvolvernos, luego vamos a ver cómo se interactúa con la entrada y salida
del flujo de datos de shell, comencemos.

Primero que tenemos que hacer es ingresar en nuestro sistema.

Eso lo hacemos por medio de la consola de ingreso en el sistema operativo en este caso
vamos a utilizar el sistema operativo Linux Ubuntu nos da una pantalla que se
llama login esta es la consola por la que nosotros podemos ingresar al sistema operativo
de forma remota por SSH o por telnet.

Este login nos muestra la versión del sistema operativo que estamos corriendo, en qué
terminal la estamos corriendo y luego nos muestra el nombre de la máquina, (login:) a
eso le vamos a llamar prompt de login, porque es donde nosotros vamos a escribir
nuestro usuario y contraseña para poder ingresar. También vemos una raya titilante a
la que vamos a llamar cursor.

Una vez ingresamos nos vamos a la información como la última vez que ingresamos, la
versión del sistema operativo y algunos paquetes que tenemos que actualizar (eso es
diferente en las diferentes distribuciones de Linux), este caso estamos utilizando Ubuntu.

Comandos básicos para manejar la interface de Shell

¿Qué usuario estamos utilizando?


Lo primero que tenemos que hacer es saber quiénes somos, cuál es nuestro usuario, esto
lo hacemos con un comando llamado whoami entonces vemos que el usuario de este
ejemplo es: fox

¿Dónde Estamos?
Acto seguido queremos ver dónde estamos parados en el sistema, es decir en el sistema
de archivos del sistema operativo donde estamos ubicados eso lo podemos saber con el
17
comando pwd, aquí vemos que estamos parados en /home/fox dentro del sistema de
archivos de nuestro sistema operativo Linux.

¿Qué versión de Linux estamos usando?


Una vez sabemos dónde estamos parados queremos saber qué sistema operativo estamos
corriendo, para eso existe un comando llamado uname. El comando uname nos va a
mostrar el sistema operativo que corremos en este caso el sistema operativo es Linux.

Adicional a esto tenemos el parámetro -a, el parámetro -a nos permite ver el sistema
operativo en el que estamos corriendo con toda la información de él incluyendo, el
host donde está corriendo, la fecha de compilación y la plataforma de arquitectura de
hardware para la cual fue compilado en este caso es a AMD 64 por qué es un procesador
de 64 bits.

Este comando es estándar de Unix como los otros comandos que veremos sirven tanto en
Linux como en otras versiones de Unix, entonces nos provee una ventaja porque al
aprender el manejo básico del sistema operativo basado en Linux también estamos
aprendiendo otros sistemas operativos y su manejo básico.

Aquí tenemos por ejemplo el sistema operativo HURD qué es el sistema operativo
de GNU en el cual trabaja Debian esta es la versión 3.0.

Este por ejemplo es MINIX qué es el sistema operativo que inspiró a Linux Torvalds a
desarrollar el sistema operativo Linux.

Aquí tenemos OpenBSD que es un UNIX BSD libre, aquí tenemos un compañero de él
que es NetBSD es otro y UNIX BSD libre y tenemos el tercer hermano de esta familia que
es FreeBSD que también es un UNIX libre.

Acá tenemos al sistema operativo INDIANA que es un sistema operativo basado en el


antiguo Solaris 11 que su kernel es la versión 5.11.

18
Por último tenemos el sistema operativo MacOS X en su versión LION que corre como
vemos el kernel Darwin. Este kernel como ya habíamos visto en la primera entrega de este
curso, es el kernel del sistema operativo de Apple esta es su versión 11.4.2.

Bueno volviendo a nuestro Linux ya sabemos, quiénes somos, en dónde estamos y en qué
sistema operativo estamos corriendo, pero ahora queremos saber lo siguiente:

¿Cuánto espacio hay en el disco duro?


Esto lo haremos con el comando df el comando, df, nos muestra cuánto espacio en
total tiene la partición, cuánto espacio ocupado y cuánto espacio libre posee, además de
eso nos muestra el porcentaje de ocupación y donde está montado. Entonces con ese
comando podemos darnos cuenta cuál es el estado de nuestro dispositivo de
almacenamiento montado.

El comando df tiene un parámetro menos llamado -h, el parámetro - h es muy importante


porque es utilizado en otros comandos de la implementación GNU porque no se muestra el
tamaño de la información en Byte, Kilobytes, Megabytes, Gigabytes y Terabyte.

Otro comando muy útil para saber los recursos de nuestra máquina es free nos permite
saber cuánta memoria tenemos, entonces en la primera columna nos va a mostrar el total
de la memoria, la memoria usada, la memoria libre, la memoria que se encuentra
en buffer y en caché. También nos muestra memoria de intercambio su total, la memoria
usada y la memoria libre, de la memoria de intercambio ya hablamos un poco en el
capítulo 2 de este curso. Aquí también funciona el parámetro -h nos muestra en Byte,
Kilobytes, Megabytes, Gigabytes y Terabyte.

El parámetro es -h por qué significa human-readable format, es decir formato legible al


humano. Entonces podemos ver que con el parámetro -h nos muestra la información en
un formato más entendible.

Comandos Echo y Cat


Otro comando importante es el comando echo. el comando echo nos regresa a la salida
estándar de la shell lo que nosotros le pasemos como parámetro, es algo que te puede
parecer algo tonto pero echo es uno de los comandos más usado dentro
del scripting cuando nosotros hacemos programas para automatizar cosas dentro de
nuestro sistema operativo.

También tenemos el comando cat qué significa concatenar este comando nos va a
mostrar de una forma cruda la salida estándar de un archivo hacia la shell el cual nosotros
especifiquemos como parámetro.
19
Bueno con esto tenemos lo mínimo para poder interactuar con nuestro sistema operativo,
ahora vamos a ver algo muy importante el flujo de datos de la entrada estándar, la salida
estándar y el error estándar.

Entrada, Salida y Error Estándar


Comprender el flujo de datos del shell es muy importante porque con esto podemos
comprender cómo la información entra a la shell y sale de la Shell esto nos permite
redirigir esa información para nuestro beneficio.

Tenemos como ejemplo el comando uname que de ahora y hasta que termine este tema
vamos a utilizarlo como ejemplo, entonces una vez nosotros digitamos nuestro comando y
damos enter, le estamos diciendo a la Shell que ejecute ese comando ese comando debe
decirnos cuál es el sistema operativo que estamos corriendo en este caso es Linux.

¿Cómo podemos re-direccionar esa salida que nos está mostrando en la shell en la
pantalla?

Bueno es muy sencillo lo hacemos con el símbolo > entonces colocamos: uname > y el
archivo al que lo queremos enviar, en este caso es so.txt. Vemos con cat cuál es el
contenido de so.txt y efectivamente nos muestra que redirigió la salida.

Esto es lo mismo hacerlo con 1> y el archivo, porque resulta que en la shell el flujo de
datos está determinado por tres valores la entrada estándar que es 0, la salida
estándar que es 1 y el error estándar que es 2 en este caso sería la salida estándar que se
representa por el 1 entonces por eso nos da lo mismo colocar 1> y el archivo.

20
Pero resulta que cada vez que lo hagamos vamos a reemplazar el contenido del archivo,
que hay si nosotros queremos acumular la información qué sacamos de la salida estándar,
eso es muy fácil podemos colocar 1>> y vemos cómo va acumular línea a línea cada una
de las salidas de los comandos que nosotros le hayamos indicado, si damos el parámetro -
a entonces vemos que nos acumuló los que hizo con uname y luego los que hizo
con uname -a.

La entrada estándar también puede ser redirigida por ejemplo al comando cat le
podemos indicar que su entrada estándar es el resultado del archivo so.txt, entonces en
ese caso nos muestra el contenido del archivo hacia la salida estándar.

El error estándar se comportan muy parecido cómo se comporta la salida estándar,


nosotros le podemos pasar un parámetro por ejemplo: uname -y que no existe, entonces
esto nos va a generar un error contrario. Tenemos el parámetro -a que sí existe qué es el
que nos muestra todos los datos del sistema operativo, entonces en este caso podemos
redirigir uname -y pero no con el 1 sino con el 2 porque esta salida que nos generó
el error no es salida estándar, no es presentada por el 1 es presentada por el 2 y esto
se verá reflejado en el archivo qué queremos indicarlo por ejemplo el archivo error.

Entonces vemos que si hacemos cat al archivo error nos va a mostrar el archivo que error
que acabamos de generar, de la misma forma también podemos acumular línea a línea
estos mensajes de error para que no los muestre log.

¿Cómo combinar la salida estándar y el error estándar en un solo archivo?


Bueno es muy fácil, colocamos uname -a > log 2>&1 esto nos va a redirigir la
salida de uname ya sea de error o salida estándar hacia el archivo log. Si nosotros
queremos acumular línea a línea tanto la salida estándar como el error estándar pues
hacemos lo mismo que los pasos anteriores simplemente colocamos >> quedando
así uname -a >> log 2>&1 y éste nos va a ir acumulando tanto el error
estándar como la salida estándar dentro del archivo indicado que en este caso es log.

La importancia a la que me refiero a la salida estándar no es solamente porque


podemos dirigir lo que sale en pantalla hacia archivos, también lo podemos dirigir
hacia dispositivos y desde dispositivos por ejemplo si yo quiero imprimir la salida de
21
comando y uname -a hacia una impresora pues lo hago diciéndole cuál es el dispositivo
de la impresora en la mayoría de los casos seria /dev/lp0.

También podemos redirigir la salida de la terminal hacia una terminal por ejemplo vamos a
redirigirla hacia la misma terminal que estamos usando entonces utilizamos nuestro
comando uname -a y lo redirigimos hacia la terminal que estamos corriendo en este
caso pts/9 cuya ruta es /dev/pts/9 entonces vemos que la redirección del comando es
efectiva hacia nuestra terminal, porque la redirigimos la salida estándar hacia esta
terminal.

También la podemos redirigir hacia otro terminal por ejemplo hacia la consola allí la
consola está corriendo en tty 1 entonces podemos redirigir uname –a y cambiar la
terminal por /dev/tty1 entonces vemos que efectivamente nuestro comando uname -
a su salida estándar fue redirigida no hacia la terminal que estamos utilizando sino hacia la
terminal de la consola del sistema operativo.

Podemos redirigir desde un dispositivo hacia un archivo es el caso por ejemplo


de /dev/zero qué es un generador de caracteres de Null.

Este se utiliza normalmente para limpiar dispositivos de bloque o para generar archivos
que van a ser utilizados como imágenes de dispositivo de bloque, entonces podemos
generar esos Null y redirigir hacia un archivo y hasta que le demos control c no va a
parar de mandar esta salida hacia el archivo que nosotros queremos llenar de caracteres
de Null.

En shell script es muy utilizado enviar la salida estándar y el error estándar hacia un lugar
donde no moleste, ósea donde no cree un archivo y lo llene de datos, este es el caso
de /dev/null entonces todo lo que nosotros enviamos ahi simplemente va desaparecer.

Como en el ejemplo.

Tuberia (Pipe)

Además de esto tenemos 2 herramientas adicionales para controlar el flujo de datos de la


salida estándar, primero tenemos el pipe o tubería está representado por el carácter que
es una raya (|) en inglés se llama pipe y éste nos permite tomar la salida estándar de un
comando y colocarla como parámetro de entrada a otro comando. Volvemos al ejemplo
nuestro comando uname -a y se lo pasamos como parámetro cat.

¿Cómo se lo estamos pasando?

Bueno la salida estándar del comando uname -a la estamos pasando a través del | al
comando cat y por eso no le está mostrando en la salida estándar además de esto
tenemos la utilidad xargs esta utilidad nos permite pasarle la salida estándar de un
comando como parámetro de otro comando entonces vamos a hacer lo siguiente.

22
Vamos a redirigir la cadena “-a” hacia un archivo llamado param, nos aseguramos de que
param contiene –a, luego damos cat param | xargs uname.

¿Qué quiere decir esto?

Esto significa que el comando cat va a leer el contenido del archivo param cuyo contenido
es -a y lo va a pasar por medio de | a uname

¿Cómo sucede esto?

Bueno cat lee el archivo param luego se lo pasa por medio del | a xargs, axrgs le dice a
uname que lo que viene por medio del | es su parámetro, por eso se ejecuta
como uname -a mostrándonos a la salida estándar lo que debería salir si solo se corriera
con uname.

23
Gestión de Procesos y Archivos

En esta ocasión trataremos la gestión de procesos y la gestión de archivos.

Comandos a utilizar en la terminal de Linux


Para poder realizar la Gestión de procesos y archivos debemos hacer uso de los siguientes
comandos.

 ps
 ls
 cp
 mv
 mkdir
 Entre otros.

Como ya vimos el primer paso que tenemos que dar es ingresar en Linux y luego a una
terminal, (consola de mando CLI o Shell) una vez dentro del terminal podrás trabajar e
ingresar comandos como date qué es para ver la fecha y la hora actual.

cal qué es para ver el calendario con el día actual.

Y el comando uptime donde podemos ver la carga actual de sistema, cuánto lleva nuestro
sistema arriba y cuántos usuarios han ingresado en el sistema.

De ahora en adelante y hasta que termine el curso sólo vamos a ver los parámetros
básicos y más frecuentes de cada uno de los comandos y servicios que veamos, porque si
profundizamos en cada uno de estos no terminamos nunca.

Más bien pueden realizar sus preguntas o sugerir los temas en los cuales desean que
profundicemos.

De todos modos Linux y Unix cuentan con algo que se llama man page (páginas de
manual) en las cuales se profundiza más en los parámetros adicionales que tienen los
24
comandos, éste man es muy fácil de utilizar, simplemente se teclea man espacio
el nombre del comando y te muestra una página del manual en la cual te explica más a
fondo cuáles son los parámetros adicionales qué tiene un comando específico.

Gestión de procesos
Ahora ya necesitamos comenzar a tener control de nuestro sistema, por lo menos a nivel
del usuario, lo primero que debemos aprender es que procesos están corriendo en nuestro
sistema.

¿Porque?

Bueno, porque los procesos son la razón de sistema computacional, del computador u
ordenador como queramos llamarlo.

El procesador de palabras es un proceso, la hoja de cálculo es un proceso, el navegador


de Internet es un proceso y también cuando nosotros administramos un servidor,
cualquier servicio que prestemos nosotros eso es un proceso dentro de la máquina,
entonces por eso necesitamos saber y manejar qué son los procesos.

Anteriormente estuvimos viendo qué son los procesos y como los manejan el núcleo de
Linux.

Comando PS
Ahora comencemos por poner este conocimiento en práctica el primer comando con el que
vamos a trabajar es ps este comando lo define la página del manual man page como una
captura o snapshot del estado de los procesos en el momento en el que se ejecutó el
comando, en pocas palabras nos muestran los procesos qué estaban corriendo un
momento atrás.

En su forma básica ps nos muestra los procesos que estamos corriendo en el


momento dado.

En este caso estamos corriendo en la terminal bash y el comando ps, para abrir un poco
nuestros ojos pues, podemos utilizar un parámetro qué es el parámetro x, el
parámetro x nos va a mostrar los procesos que no están corriendo en una terminal
específica, ósea, que están corriendo en background que no están corriendo en primer
plano sino que están corriendo atrás, entonces cuando ejecutamos ps con el
parámetro x nos va a mostrar nuestros procesos más los procesos de la máquina que
están corriendo en background.

25
Pero esto no es todo, si agregamos el parámetro a nos muestra los procesos de los
usuarios tenemos un panorama mucho más grande de lo que corre en nuestra máquina
sin embargo de qué nos sirve esto si no sabemos quién corre estos procesos bueno si le
agregamos a ps xa el parámetro u nos mostrará ahora el usuario que está corriendo cada
uno de los procesos.

¿Bueno y ahora qué?

Tenemos qué comprender el caudal de la información que se nos está presentando, la


información que nos está presentando en once columnas son:

1. USER qué es el usuario que está corriendo el proceso.


2. PID que es la identificación del proceso o process id, este es el identificador único
en el sistema.
3. Porcentaje CPU qué es el porcentaje de CPU que está consumiendo el proceso, es
decir, porcentaje del procesador que está consumiendo un proceso.
4. Porcentaje MEM qué es el porcentaje de memoria que está consumiendo este
proceso.
5. VSZ qué significa virtual memory Site es la cantidad de memoria virtual incluyendo
la paginación que un proceso está consumiendo.
6. RSS qué significa Residence Site que es la cantidad de memoria que un proceso
está consumiendo excluyendo la memoria virtual y la memoria compartida.
7. TTY, que es la terminal en la cual está corriendo un proceso, cuando sale un
interrogante es que está corriendo en background no hay una terminal que esté
gobernando ese proceso.
8. STAT qué es el estado de un proceso.
9. START qué es la hora en la que inició el proceso.
10. TIME qué es el tiempo de procesador que lleva consumiendo el proceso en
particular.
11. COMMAND qué es el nombre del proceso.

Bueno de estas 11 columnas, 9 son muy fáciles de entender pero hay dos que de pronto
son muy ambiguos y hay que aclararlos. Estos son el tiempo de procesamiento y el
estado de los procesos.

Tiempo de Procesamiento
El tiempo de proceso es el tiempo del procesador consumido por dicho proceso no se
refiere al tiempo que lleva activo desde que se ejecutó sino al tiempo de
procesador que ha consumido, ya que el proceso no se encuentra corriendo
constantemente consumiendo el procesador sino que la mayoría del tiempo permanece en
espera.
26
¿Porque?

En los sistemas multitarea no se ejecuta varias tareas al mismo tiempo aunque pareciera,
simplemente se alternan el uso del procesador entre los procesos para dedicarle cierta
cantidad de tiempo. El sistema operativo tiene un planificador, este planificador se
encarga de gestionar el tiempo de proceso.

Los estados no son más que las acciones que estos procesos llevan a cabo en su vida útil
aquí tenemos una tabla, dónde están los identificadores de cada uno de esos estados.

Entonces está que:

 D estado de dormido interrumpible normalmente son procesos que interactúan con


dispositivos de entrada y salida.
 R que es corriendo es decir, que el proceso está haciendo uso del procesador en ese
momento.
 S que está dormido interrumpible ósea que está esperando a que un evento se
complete.
 T que es parado ya sea por una señal de parada o por seguimiento como en el caso
de debug.
 W que es paginado (no es válido del kernel 2.6 para abajo)
 X que es muerto pero……no debería aparecer nunca en una tabla de procesos.
 Z que difunto o zombie que es cuando un proceso ya he terminado pero no ha sido
reportado al proceso padre es decir aparece en la tabla de los procesos pero el
proceso ya ha terminado.
 Ahora después del Estado del proceso vemos unos caracteres adicionales qué
son: < es alta prioridad no establecida por el usuario.
 N que es baja prioridad establecida por el usuario.
 L mayúscula qué significa que hay páginas bloqueadas por lo general también se
refiere a dispositivos de entrada y salida o tiempo real.
 s minúscula que es líder de sesión, es decir, que tiene procesos hijos.
 i que es multihilo en otras palabras que se ve como un solo proceso pero en realidad
tiene múltiples hilos.
 + que significa que es parte de un grupo de procesos.

27
Por último tenemos el comando ps acompañado del parámetro f.

Entonces podríamos colocar ps xauf y éste nos muestra la tabla de procesos en forma de
árbol cada padre con su hijo hasta llegar hasta el proceso final, acá tenemos un ejemplo
de nuestra Shell bash la cual tiene un hijo qué es el proceso ps.

Comando PSTREE
El comando pstree nos muestra el mismo árbol que nos muestra ps xauf pero de una
manera más simple sin detalles, también podemos mostrar el PID dentro de pstree esto
lo logramos con el parámetro -p, ahora con el parámetro –g podemos mostrar el grupo
del usuario que corre el proceso, con entonces podemos hacer pstree -p -g.

Algo muy importante de conocer el árbol de la tabla de procesos de nuestro sistema es


que podemos matar los procesos cuando sea necesario esto lo podemos hacer con el
comando kill el comando.

Comando KILL
kill tiene las siguientes sintaxis:

kill espacio y el PID del proceso que queremos matar.

28
Entonces tenemos aquí unos ejemplos:

Hacemos ps u para ver los procesos que estamos corriendo nosotros como usuario vemos
2 procesos llamados pico estos procesos los vamos a matar de dos formas una de una
forma sencilla ejecutando kill y el PID del proceso entonces nos termina el proceso.

El otro lo vamos a matar con kill -9 y el PID en este caso nos mata el proceso con la señal
Kill.

Recuerden que ya hemos hablamos de las señales. En el Primer caso enviamos la señal 15
lo que nos terminó el proceso, pero en algunos casos eso no es suficiente porque en el
proceso se queda atascado haciendo algo y nosotros necesitamos terminar el proceso
inmediatamente por eso utilizamos el parámetro -9 que envió la señal de kill y terminó el
proceso inmediatamente sin esperar nada.

Comando Killall
Tenemos otro comando que se llama killall hace lo mismo kill pero no mata por medio
del PID sino por medio del nombre del proceso que estamos ejecutando. Entonces
tenemos otra vez nuestro ps u y los dos los vamos a matar con un solo comando killall.

Aquí podemos ver como los dos mueren al mismo tiempo con killall pico y vamos a
repetir el mismo ejemplo con killall -9 pico y aquí vemos como los dos procesos muere con
la señal kill.

Esto de las señales lo veremos más adelante en detalle cuando estemos viendo la parte de
administración de sistema como usuarios root por ahora nos vamos a enfocar sólo en las
funcionalidades de usuario.

Bueno, hasta aquí dejamos el manejo de procesos por ahora y nos vamos a enfocar en el
manejo de archivos.

Como ya vimos, el sistema de archivos está organizado de forma jerárquica es decir


carpetas que contienen subcarpetas en forma de árbol y éstas contienen a su vez ficheros.

29
Comando ls
Para esto nos ayudaremos del comando el comando ls.

El comando ls nos muestra los archivos y los ficheros que tenemos en el punto donde
estamos parados, si ejecutamos ls con el parámetro -l nos enseña la misma información
pero con datos detallados primero permiso de archivos, luego la cantidad de Link
duros o literales que hace referencia a nuestro archivo, el usuario propietario, el
grupo propietario, el tamaño del archivo y en el caso de los directorios él toma un
valor en relación al tamaño de los bloques del sistema que en este caso son 4k. La
fecha y hora de la última modificación del archivo que son las tres columnas que
siguen y para finalizar el nombre del archivo.

Con el parámetro -a nos muestra los archivos ocultos y digo ocultos porque simplemente
son precedidos por un punto qué el ls predeterminadamente no lee pero son iguales que
otros archivos regulares del sistema, entonces podemos ejecutar el comando ls -a o ls -
la combinando los parámetros para ver estos archivos.

Para aclarar cada vez que hacemos ls vamos a ver dos directorios en todas las carpetas
donde estemos, estos directorios son el punto (.) y el dos puntos (..) Estas carpetas
directorio son simbólicas y actúan como una brújula para nosotros ubicarnos en el
sistema.

El directorio (.) significado de la carpeta donde estamos actualmente, es decir, si nosotros


hacemos pwd vemos que estamos parados en /home/usuario eso es representado dentro
30
de directorio como (.) Entonces daría lo mismo referenciar (.) o referenciar /home/usuario
estando parados en este punto.

Lo mismo pasa con el directorio (..). El directorio(..) representa al directorio anterior al que
estamos parados en este caso sería /home por ende cualquier referencia que hagamos
estando parados en /home/usuario .. Estaríamos hablando a /home.

El ls también nos permite hacer un barrido de las carpetas y subcarpetas de forma


recursiva esto lo podemos hacer con el parámetro -R cuando queremos saber los detalles
de un archivo podemos hacer ls –lR y el nombre de archivo.

También lo podemos hacer en grupo de archivos utilizando el comodín asterisco


colocándolo en los archivos que preceden o anteceden determinada cadena de caracteres
como por ejemplo queremos listar todos los .jpg que tenemos en nuestro directorio lo
podemos hacer con * .jpg también queremos listar todos los archivos que comienzan por
ala, entonces ejecutamos ls ala* y nos va a mostrar todos los archivos que comiencen por
ala.

El ls soporta todos los comodines de expresión regular, pero esto lo vamos a ver cuando
estemos viendo Shell scrip más adelante. Esto de mirar los detalles de un archivo con
solo ls - l no funciona con los directorios ¿Por qué?, porque cuándo ejecutamos ls – l a un
directorio este nos muestra el contenido del directorio entonces para poder ver los detalles
de un directorio tenemos el parámetro –d que por ejemplo ls –ld, funcionaría de la misma
forma que como vimos con los archivos anteriormente, nos muestra los detalles.

Ahora para poder ver el tamaño de una mejor forma, de una forma más
entendible ls también soporta el parámetro -h qué significa formato legible al humano
ejecutando ls –lh nos permite ver los tamaños de los archivos en bites, Kb, Mb, Gb y Tb.

Como mera curiosidad, una versión resumida del ls –l qué es el comando ll que es
soportado por muchas versiones de UNIX.

Para terminar con el comando ls tenemos el parámetro --color este parámetro es muy
útil porque nos muestra en colores los archivos y directorios teniendo como base su
extensión y sus permisos, el parámetro --color en la mayoría de los distribuciones viene
como un alias de la Shell bash es decir cualquier ejecución del comando ls con cualquier
parámetro nos va a mostrar los archivos coloreados dependiendo de su extensión y sus
permisos.

Comando MKDIR
Bueno, lo primero es la organización y para eso es imprescindible la creación de carpetas
con el comando mkdir espacio y el nombre la carpeta, además de esto si queremos
31
borrar carpetas que no tengan ningún archivo o carpeta dentro lo hacemos con el
comando rmdir.

¿Cómo gestionamos los archivos que contienen estas carpetas?

Bueno existen tres comandos básicos para esta misión que son:

1. cp para copiar
2. mv para mover
3. rm para borrar

Los parámetros más importantes son -r que copia recursivamente un archivo o un


directorio no importando que tenga archivos o directorios adentro, la -f qué fuerza la copia
de una la copia de un archivo o directorio no importando que exista en el destino, -p
preserva los permisos que tenía ese archivo, es decir cuando se copia, la copia resultante
tiene los mismos permisos que tenía el origen y –v “verbose” que nos muestra todo lo que
se copia hacia la salida estándar, -v, no es muy recomendado cuando estás conectado
por ssh o una sección remota y haces copia de muchos archivos ya que como tiene que
mostrar a la salida estándar todo archivo que copia eso puede demorar el proceso.

El rm en su forma básica sólo borrar archivos que se le indiquen, no borra directorios.

Para poder hacer que borre directorios necesita el parámetros -r para que tome el borrado
de forma recursiva y así pueda borrar la carpeta con sus archivos y subcarpetas.

También se le puede indicar el parámetro -f para que fuerce el borrado de algunos


archivos.

Como en otros comandos el rm también funciona con comodines es decir puedes borrar
con rm -rf * en la carpeta donde te encuentras y borrar todo lo que hay allí para bajo de
forma recursiva pero cuidado con este comando porque no vas a querer hacer rm a la raíz
(rm –rf /) porque esto te va a causar un severo dolor de cabeza.

De estos 3 comandos nos queda mv.

El mv nos mueve un archivo de una ubicación del disco a otra o de una carpeta a otra.

El mv tiene una peculiaridad y es que cuando se mueve el archivo de un lugar a otro


dentro del mismo dispositivo de almacenamiento el no mueve físicamente la información
simplemente cambia el apuntador de un lado a otro dentro del índice de archivos del
sistema de archivos, pero su ubicación física no cambia.

Cuando movemos de un dispositivo de almacenamiento a otro dispositivo de


almacenamiento si se comporta haciendo una copia hacia el otro disco dispositivo y
borrando el origen.

32
Por eso es que cuando copiamos dentro de un mismo disco dispositivo de almacenamiento
es más lento que cuando simplemente lo movemos porque cuando movemos sólo cambia
el apuntador, mientras que cuando copiamos estamos generando una duplicación de los
datos qué tienen que ser escritos en otra ubicación del disco.

Comando FIND
Ahora tenemos las herramientas para gestionar nuestros archivos podemos ir más allá y
podemos efectuar búsquedas en otro sistema esto lo hacemos con el comando find.

La sintaxis del comando find.

La sintaxis básica es la siguiente find ruta –name y la expresión para buscar el archivo
que queremos encontrar por ejemplo find / - name uname que es un comando que ya
conocemos mucho, entonces él comando nos busca en la raíz el comando uname de
forma recursiva. En este caso estamos utilizando 2> /dev/null para que no nos muestre
los mensajes de error ya que como estamos como un usuario y estamos buscando en todo
el sistema desde la raíz entonces nos va a sacar algunos errores de permisos, no
queremos que salgan, entonces, por eso vamos a redirigir el error estándar
hacia /dev/null.

Con find también podemos hacer búsquedas con comodines como por ejemplo *. Un
ejemplo puede ser find /-name libe* y esto nos va a mostrar todos los archivos que
contengan al principio lib también podemos utilizar find /-name *lib y esto nos va a
mostrar todos los archivos que terminen en lib. Para terminar el ejemplo podemos
colocar find / -name lib y nos va a mostrar todos los archivos que encuentre donde
dentro de la cadena de caracteres se encuentre lib como en el caso de los comandos
anteriores. find también soporta expresiones regulares, pero este tema vamos a dejarlo
para una clase futura en la cual solamente vamos a dedicar el comando find.

33
MC | midnight commander

Para finalizar tenemos aquí una herramienta muy útil para la gestión de archivos y
dispositivos de almacenamiento se llama mc, dice el programa MC o midnight
commander, comandante de medianoche que es un clon de una utilidad
para DOS que se llama Norton Commander, desarrollada por el famoso hacker
de DOS Peter Norton.

MC por su lado fue desarrollado por ese entonces joven mexicano Miguel de
Icaza, conocido contribuidor del software libre en proyectos como GNOME y MONO de
quien es fundador, siendo MC su primer proyecto como contribución a GNU. Miguel de
Icaza elaboró una herramienta maravillosa que aun hasta hoy ha sido portada a la mayoría
de los sistemas operativos tipo Unix, de hecho también existe una versión de MC para
Windows.

Bueno cuando entramos al MC podemos observar que está dividido en 5 partes diferentes
un menú superior, un panel izquierdo, un panel derecho, un prompt de Shell para
ejecutar comandos y un menú de teclas de función.

La barra del menú nos muestra las opciones del panel izquierdo, las opciones del panel
derecho y las funciones de archivos, las utilidades y las opciones del programa cada panel
independiente nos muestra 2 vistas de 2 ubicaciones diferentes del sistema también nos
indica la utilización del dispositivo de almacenamiento en el que estamos parados en ese
momento con su utilización y el total del dispositivo de almacenamiento, el prompt nos
permite ejecutar cualquier comando de Shell.
Con la combinación de teclas CONTROL o desaparecemos la interface del mc lo que nos
muestra la salida estándar del shell y si queremos ver otra vez la interface
del MC volvemos con CONTROL o.

34
El menú de teclas de función es la parte más útil de este programa ya que nos permite
hacer las mismas funciones con los comandos que acabamos de ver pero en un ambiente
pseudografico, pseudografico porque utiliza las librerías ncurses y slang para dibujarnos en
la pantalla con caracteres, una interface.

Entonces las teclas de función son


 F1 para ayuda.
 F2 para el menú de usuario.
 F3 para ver.
 F4 para editar.
 F5 para copiar.
 F6 para mover o renombrar.
 F7 para crear un directorio.
 F8 para borrado singular o también recursivo.
 F9 para el menú de los paneles.
 F10 para salir de la aplicación.

Recuerden que lo que aprenden aquí no sólo se aplica al sistema operativo Linux, si no
que la mayoría también se aplica en todos los sistemas parecidos a UNIX o basados en
UNIX.

35
Compresión y empaquetamiento

En esta entrega del curso Linux vamos a ver formas de empaquetar y comprimir y
descomprimir archivos en Linux, y veremos varios comandos que nos darán distintos
niveles de compresión.

Comandos de Compresión y empaquetamiento


 TAR
 GZIP
 BZIP
 ZIP y RAR

Bueno lo primero que tenemos que hacer es obtener una fuente de archivos para
compresión de datos, me ha venido a la mente descargar las fuentes del kernel de
Linux que después las vamos a necesitar, porque ocupan bastante espacio y son
muchísimos archivos entonces nos puede ayudar a los ejemplos.

Descarga de las fuentes del Kernel de Linux


wget https://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.0.tar.gz

Entonces aquí vemos el archivo Linux 2.6.7.tar.gz vemos que mide 43 MB comprimido.

Entonces vamos a trabajar un poco con este archivo primero vamos a descomprimirlo
porque esta comprimido en gzip, lo descomprimimos con el comando gunzip.

Descomprimir archivos en Linux .tar.gz


Para descomprimir archivos en Linux cuando estos están en .tar.gz utilizamos el
comando gunzip.

Sintaxis de gunzip:

gunzip + el nombre del archivo

Ejemplo:
gunzip linux-2.6.0.tar.gz

Como vemos el archivo linux-2.6.0.tar.gz al descomprimirlo ocupa 189Mb.

36
Comprimir Archivos en Linux .tar.gz
Ahora lo volvemos a comprimir en el comando gzip
gzip linux-2.6.0.tar.gz

Y vuelve otra vez a los 43MB que tenía antes.

Volvemos a descomprimimos para seguir el ejemplo pero ahora con otro comando.
gunzip linux-2.6.0.tar.gz

Ahora vamos a utilizar otro comando de compresión que se llama BZIP2.

Comprimir Archivos en Linux con BZIP2


Entonces ahí tenemos nuestro archivo linux-2.6.0.tar.gz de 189M, ahora utilizamos el
comando bzip2 más el nombre del archivo, ejemplo:
bzip2 linux-2.6.0.tar.gz

Esperamos que comprima y ahora vamos a notar que el tamaño del archivo comprimido
con bzip2 es 10Mb menos que el comprimido con bzip. El bzip2 nos da una mayor
cantidad de compresión que el gzip

Descomprimir archivos en Linux con bunzip2


Para descomprimir utilizaremos el comando bunzip2 que es el comando para
descomprimir archivos comprimidos con bzip2
Sintaxis de bzip2:

bunzip2 + nombre del archivo

Ejemplo:
bunzip2 linux-2.6.0.tar.bz2

Entonces vemos que tenemos nuestro archivo .tar de 189Mb como lo teníamos antes.

Archivos TAR
¿que son los archivos tar? la palabra tar viene de Tape ARchiver que es el comando en
Unix que se utilizaba y que aún se utiliza para guardar la información en cintas, las cintas
de bakup donde se almacena mucha cantidad de información, para poder tener un
respaldo real en caso de emergencia, incendio y ese tipo de cosas entonces el tar es un
comando muy extenso, cuando estemos en la parte de administración vamos a verlo más
37
a fondo pero por ahora solo vamos a ver las funciones básicas. La primera que vamos a
ver es el desempaquetamiento.

¿Cómo descomprimir un archivo TAR?


Para el desempaquetamiento de archivos tar utilizaremos el siguiente comando:

tar xf + nombre de archivos

Ejemplo:

tar xf linux-2.6.7.tar
Al desempaquetar el archivo linux-2.6.7.tar vamos a ver que nos extrae el directorio de
nombre Linux-2.6.7 y dentro de este encontramos sub-directorios y archivos.

Parámetro vervox
Si al ejemplo anterior le agregamos el parámetro v que significa vervox nos va a mostrar
todos los archivos que son desempaquetados a la salida estándar de la Shell . Estamos
viendo la salida de los archivos que fueron desempaquetados.

Visualizar el tamaño de un directorio en Linux


En el ejemplo anterior descomprimimos un archivo tar que contenía un directorio y un
conjunto de archivos y directorios dentro del directorio principal, ahora nos interesa ver
cuál es el tamaño final que ocupa este directorio y lo haremos con el comando du

Sintaxis de du:
du -sh + nombre de archivo

Ejemplo:

du -sh linux-2.6.7.tar

38
 El parámetro -s nos permite globalizar todo el tamaño del directorio que queremos ver
 el parámetro -h que nosotros ya lo hemos visto es el formato legible al humano, que
nos muestra la información en un formato más entendible.

Para seguir con nuestro ejemplo vamos a borrar el archivo tar para volver a empaquetar
el directorio que creamos al desempaquetar el archivo linux-2.6.7.tar con el siguiente
comando:
rm -rf linux-2.6.7.tar

¿Cómo comprimir un archivo TAR?


Para comprimir un archivo tar utilizaremos el comando tar de la siguiente manera:
Sintaxis de tar:
tar cvf + archivo de destino .tar | origen de los datos

Ejemplo:
tar cvf linux-2.6.7.tar linux-2.6.7

Este comando tiene una particularidad y es que primero colocamos el archivo de destino
que es el paquete .tar y luego le decimos cual es el origen de los datos

 c es para copiar.
 v para que nos muestre vervox como vimos ahorita en la extracción
 f para file o sea que lo haga a un archivo.

Pasamos a comprobar que la operación fue todo un éxito con el siguiente comando
ls -lh linux-2.6.7.tar

Una vez más vamos a crear un paquete comprimido


Sintaxis:
tar zcvf + nombre de archivo

Ejemplo:
tar zcvf linux-2.6.7.tar.gz

39
Parámetro z y cvf

Vamos a crear el mismo paquete pero ya de una vez comprimido en gzip.

Descomprimir y desempaquetar en un solo paso.


Recordemos que esta empaquetado con tar y comprimido con zip entonces para extraerlo
es lo mismo que vimos al principio lo único que le agregamos la z al principio para que el
tar reconozca que es un archivo comprimido en zip

Sintaxis:
tar zvxf + nombre de archivo

Ejemplo:

tar zvxf linux-2.6.7.tar.gz

Comprobamos que el archivo fue creado con el siguiente comando: ls -lh linux-2.6.7.tar.gz

Ahora vamos a utilizar el tar pero con el otro algoritmo de compresión que es
el Bzip2 para esto vamos a utilizar el parámetro j
Sintaxis:
tar jvxf + nombre de destino nombre de archivo

Ejemplo:

tar jvxf linux-2.6.7.tar.bz2 linux-2.6.7.tar

Comprobamos que el archivo fue creado con el siguiente comando:

ls -lh linux-2.6.7.tar.bz2

Ahora para desempaquetarlo y descomprimirlo lo hacemos con:

tar jxvf + nombre del archivo

Ejemplo:

tar jxvf linux-2.6.7.tar.bz2

40
Visualizar contenido de archivos tar
Un parámetro muy importante que tiene el tar es poder visualizar el contenido ya que por
lo general los archivos hechos con tar son backup incluso de un sistema operativo
completo entonces es muy útil poder visualizar cuales son los archivos que contiene el
paquete, esto lo hacemos con el parámetro t.

Sintaxis:

tar tvf + nombre del archivo

Ejemplo

tar tvf linux-2.6.7.tar

 t para visualizar.
 v para que nos saque al estándar output.
 f que significa que es un archivo.

Redirigir la salida estándar de tar


Haciendo uso del comando cat nosotros podemos redireccionar esa salida. Al redirigir esa
salida podemos colocarla en un archivo que podemos explorar y visualizar con más calma.
Sintaxis:

tar tvf + nombre del archivo origen > nombre de archivo destino

Ejemplo:

tar tvf linux-2.6.7.tar > contenido.txt

La visualización también soporta los formatos comprimidos entonces vamos a comprimir


nuestro archivo tar para hacer un ejemplo.

Ahora vamos a hacer lo mismo que hacemos cuando empaquetamos y desempaquetamos


un tar comprimido:
Syntaxis:

tar ztvf + nombre del archivo destino

Ejemplo:

tar ztvf linux-2.6.7.tar.gz

41
Vemos como nos comienza a previsualizar el contenido, y de igual manera nos funciona
con el bzip2.

Sintaxis:
tar jtvf + nombre del archivo destino

Ejemplo:

tar jtvf linux-2.6.7.tar.bz2

Si nosotros tuviéramos un tape backup una cinta entonces podríamos omitir el


parámetro f y solamente utilizar el parámetro cd para poder hacer la copia hacia el
dispositivo y xv para poder extraer esa copia del dispositivo de cinta , en este caso sería
/dev/st0 que es el dispositivo en cinta de Linux más común.

Bueno estos son los comandos para empaquetamiento y compresión que vienen nativos
en linux por tradición porque vienen en la distribución de GNU, pero dentro del mundo de
la computación es muy útil aprender a manejar todos los algoritmos de compresión que
son muy usados en otras plataformas como lo es el zip y el rar.

Comprimir archivos ZIP en Linux


Una vez instalamos nosotros el zip y el rar en nuestra máquina, ya podes utilizar los
comandos para comprimir una carpeta recursivamente.
Sintaxis de zip:

zip -r + archivo destino + archivo origen

Ejemplo:

zip -r linux-2.6.7.zip linux-2.6.7

Comprobamos que el archivo se ha creado:


ls -lh linux-2.6.7.zip

Para comprimir un solo archivo simplemente damos el comando zip y el archivo de


destino,
Sintaxis:
zip + archivo destino + archivo origen

Ejemplo:

zip linux-2.6.7.zip linux-2.6.7.tar

42
Descomprimir archivos ZIP en Linux
Para descomprimir simplemente utilizamos el comando unzip de la siguiente manera:
Sintaxis de unzip:
unzip + el archivo de destino

Ejemplo:
unzip linux-2.6.7.zip

Visualizar el contenido de un archivo ZIP


Un parámetro también útil es también el parámetro –v que nos permite visualizar el
contenido de un archivo .zip
Sintaxis:

unzip -v + nombre de archivo

Ejemplo:

unzip -v linux-2.6.7.zip

Comprimir archivos RAR en Linux


Ahora el algoritmo de compresión rar lo podemos utilizar de forma muy sencilla para
copiar un directorio recursivamente:
Sintaxis de rar:

rar a nombre de destino + nombre de origen

Ejemplo:

rar a linux-2.6.7.rar linux-2.6.7.tar

a de agregar

Comprobamos con:
ls -lh Linux.2.6.7.rar

Descomprimir archivos RAR en Linux


Para descomprimir no es igual que en zip no podemos dar unrar y el archivo, tenemos que
dar unrar x para extraer y el archivo .rar de la siguiente manera.
Sintaxis de unrar:

unrar x Linux.2.6.7.rar Comprobamos: ls –lh


43
Búsquedas y Expresiones Regulares

La búsqueda en Linux sería una tarea compleja si no existiera el comando find


y greep estos nos dan la capacidad de poder encontrar cualquier cosas este donde este,
es aquí donde comenzamos a percibir el poder informático que nos otorga Linux.

Uso del comando find en Linux


Para realizar búsquedas dentro de Linux podemos hacer uso del comando find, ahora
¿cómo usaremos find? veamos su sintaxis.

Sintaxis de find:
find [Ruta] -name [Cadena de búsqueda]

Ejemplo de uso de find:

find / -name Linux

 Donde "/" es la ruta.


 "-name" nos permite realizar búsquedas literales sensibles a las mayúsculas y
minúsculas.
 y "linux" la cadena de texto que estamos buscando.

Uso de comodines en la búsqueda en Linux


En la búsqueda en Linux con el comando find también se puede hacer uso de comodines.

Ejemplo de uso de comodines en find:

find / -name linux*


find / -name *linux*

Hasta ahora las búsquedas realizadas con el parámetro -name realiza búsquedas literales o
sea búsquedas capaces de distinguir entre letras minúsculas y mayúsculas, así que nos
realiza una distinción entre por ejemplo un archivo de nombre Linux y otro de nombre
linux.

Realizar una búsqueda con find sin discriminación entre


mayúsculas y minúsculas
Para realizar una búsqueda que no nos va a discriminar la mayúscula y la minúscula, o
sea, que no va a ser sensible a la mayúscula y la minúscula y nos va a encontrar los
resultados no literales usaremos el parametro -iname

44
Ejemplo:

Find / -iname Linux

Al no ser una búsqueda literal nos mostrara archivos con mayúscula y minúscula que
contenga la cadena linux.

Búsqueda de archivos en Linux por extensión


El comando find junto a los comodines también lo podemos utilizar para buscar archivos
con determinada extensión.
Sintaxis:

find / -name *.c


(Realiza la búsqueda de todos los archivos con extensión .c
(Archivos de lenguaje C) )

find / -name *.h


(Realiza la búsqueda de todos los archivos con extensión .h
(Los archivos de cabecera de C) )

find / -name *.so


(Realiza la búsqueda de todos los archivos con extensión .so
(Los archivos de librerías dinámicas) )

Búsqueda de archivos en Linux por permisos


El comando find también nos permite hacer búsquedas por medio de permisos.

Buscar los permisos de lectura, escritura y ejecución en los 3 roles


find / -perm 0777

 Donde -perm es el operador para búsqueda de permisos.


 y 0777 los permisos que buscamos.

Buscar archivos con permiso de lectura y escritura para los 3 los roles
find / -perm 0666

 y 0666 los permisos que buscamos.

Buscar archivos con permiso de solo lectura para los 3 los roles
find / -perm 0444

 y 0444 los permisos que buscamos.


45
Búsqueda por sintaxis alternativa
También hay una forma qué es la forma de sintaxis alternativa en la cual nos permite
buscar por medio del rol y el permiso que estamos buscando.

En este caso en particular vamos a buscar el grupo que tenga el bit s que es el bit
de suit de ejecución como el usuario propietario
find / -perm /g+s

También podemos hacer otra búsqueda en este caso voy a buscar quien tenga el rol de
usuario que tenga bit s de suit.
find / -perm /u+s

Búsqueda masiva archivos y directorios en Linux


Otra opción que nos da el comando Find es la búsqueda de archivos y directorios
masivos.

find / -type f –empty

-empty que significa vacío, entonces esto nos va a buscar todos los archivos cuyo tamaño
es cero, o sea que están vacíos.

Lo mismo aplica para directorio exactamente la misma sintaxis pero reemplazamos f por d
find / -type d –empty

Y nos encuentra todos los directorios vacíos del sistema de archivos que estamos
buscando en este caso

Búsqueda de archivos ocultos


Otra búsqueda muy útil que podemos lograr con el find es buscar con el comodín los
archivos ocultos, como en Linux los archivos ocultos son precedidos por un punto
podemos realizar la siguiente búsqueda:

find / -name ".*"

Búsqueda de archivos por usuarios


Otra funcionalidad buena que tiene el find es buscar por usuario y por grupo.
Sintaxis:

find / -user [nombre del usuario]

46
Ejemplo de búsqueda de archivos por usuario:

find / -user root


find / -user fox

Búsqueda de archivos por grupos


Sintaxis:
find / -group [nombre del grupo]

Ejemplo de búsqueda de archivos por grupo:

find / -group root


find / -group colord

Combinando criterios de búsqueda


A este punto ya somos capaces de sumar lo aprendido y realizar criterios de búsqueda
mucho más específicos, vamos a ver cómo.

Para este ejemplo vamos a buscar los archivos cuyo propietario sea fox y que en su
hombre no importando si es mayúscula o minúscula tenga como extensión .c esto lo
lograremos utilizando el comodín.

find / -user fox -iname "*.c"

Ahora el mismo ejemplo pero para archivos cuyo usuario sea root

find / -user root -iname "*.c"

Búsquedas de archivos por tiempo de acceso


Con el operador -atime podemos realizar búsquedas de archivos accedidos hace cierto
tiempo, en el siguiente ejemplo hace 30 días.

find / -atime 30

Búsquedas de archivos por tiempo de modificación


La funcionalidad de find de buscar por tiempo de acceso y por el tiempo de modificación
es una parte muy importante de este comando tenemos por ejemplo la opción -atime y -
mtime que nos permite buscar por tiempo de modificación mtime y por tiempo de
acceso atime.
47
Con el operador -mtime podemos encontrar todos los archivos modificados hace cierto
tiempo, en el siguiente ejemplo vemos

find / -mtime 30

Búsquedas de find con un rango amplio


find / -mtime +30 -mtime -90

Esto nos daría los archivos que fueron accesados entre el día 30 y 90 o sea 60 días de
rango.

También tenemos el parámetro mmin y amin que nos permite buscar en vez de rango de
días rango de minutos esto nos permite movernos en el rango de un día no
como mtime que nos permiten movernos en el rango de varios días.
Ejemplo de uso de mmin:

find / -mmin -60

Búsquedas de archivos por tamaño


No menos importante es la búsqueda por tamaño del comando find nosotros podemos
con el parámetro -size encontrar archivos de un tamaño determinado.
Ejemplo:

find / -size 10M

Con -size 10M le estamos indicado que busque archivos de tamaño de 10MB
Otro ejemplo:

find / -size +10M

Con el operador + le estamos indicando que nos busque en este ejemplo los archivos que
tengan más de 10 Mb.

find / -size -10M

Con el operador - solicitamos que nos busque en este ejemplo los archivos que tengan
menos de 10 Mb.

Ahora ampliemos el rango de búsqueda de la siguiente forma


find / -size +10M -size -20M

48
Esta forma de búsqueda con un rango más amplio nos permite encontrar archivos que
tengan un tamaño de 10Mb a 20Mb, muy útil por cierto cuando no sabes el tamaño exacto
del archivo que estamos buscando.

Búsquedas con comandos que afecten las búsquedas


Borrar archivos de cierto tamaño

Ahora la búsqueda por tamaño o por cualquier otra búsqueda nos permite hacer algo que
es ejecutar un comando que afecte esa búsqueda eso lo hacemos con el comando -exec
entonces con –exec podríamos en el siguiente caso borrar todos los archivos que estaban
entre los 10 y los 20 megas de espacio.

find /home/fox -size +10M -size -20M -exec rm -f {} \;

Cambio de permisos en un rango de búsqueda

Teniendo en cuenta el ejemplo de exec pasamos al siguiente ejemplo, vamos a hacer una
búsqueda de permisos los cuales vamos a encontrar los permisos de lectura, escritura y
ejecución para el usuario, lectura y ejecución para el grupo y lectura y ejecución para todo
lo demás que es 755 y vamos a cambiarle los permisos, vamos a cambiárselos a 750 -exec
le vamos a dar chmod 750 y ahí vamos a cambiar todos los archivos que encuentre con el
parámetro que estamos buscando a esos permisos que le estamos indicando

find /home/fox -perm 0755 -exec chmon 750 {} \;

Búqueda de rango de fecha

Para terminar vamos a ver la búsqueda por rango de fechas y para este ejemplo
buscaremos entre enero y junio del 2014 entonces nos va a arrojar la búsqueda entre el
primero de enero del 2014 y el primero de junio del 2014 todos los archivos que fueron
modificados en ese lapso de tiempo.

find / -type f -newermt "2014-01-01" ! newermt "2014-06-01"

Búqueda de rango por año y mes

También podemos buscar por los últimos años, meses, semanas o dias:

find / -type f -newermt "2 year ago"


find / -type f -newermt "1 year ago"
find / -type f -newermt "1 month ago"
find / -type f -newermt "1 week ago"
find / -type f -newermt "1 day ago"
find / -type f -newermt "last friday"

49
Buscar dentro de un archivo con greep
Una vez controlada la búsqueda de archivos solo hace falta tener un mismo control en la
buscada de contenido dentro de los archivos, así no habrá nada que se te escape, y para
lograrlo utilizaremos grep.

Ejemplo de uso de greep:

greep 80 /etc/*.conf

 Donde 80 es la cadena a buscar


 /etc/ en la ruta en donde se realizara esa búsqueda
 y *.conf es para indicar que la busqueda se haga en todos los archivos .conf

En el segundo ejemplo del uso de greep realizaremos una búsqueda de una cadena de
texto:

greep "support" /etc/*.conf

En el tercer ejemplo

greep "P*22" /etc/*/*conf*

find / -name "*[aA]*" resultado entre a y A


find / -name "*[xX]*" resultados entre x y X
find / -name "*[0-9]*" resultados númericos
find / -name "*[L-M]*" resultados entre L y M

50
En las siguientes búsquedas ¿Podrías decirnos que resultado arrojara?

ls [a]*
ls [l]*
ls [!l]*
ls [!a]*
ls | grep "^[1]"
ls | grep "^[L]"
ls | grep "^[A-z]"
ls *[1]*
ls | grep "[l]$"
ls | grep "[a]$"
ls | grep "[^a]$"
ls | grep "[a-m]$"
ls | grep "[a-m$]"
ls | grep "^[a-m]$"

Por último tenemos una tabla en resumen de cada uno de los comodines para la búsqueda
tanto find como en greep tenemos y el uso de comodines.

51
Editores de texto

Hoy vamos a ver editores de texto pero no vamos a ver editores de texto en entorno
gráfico eso no tiene chiste, cualquiera puede manejar un editor de texto en modo gráfico
vamos a ver cuatro editores de texto en la terminal.

Ventajas de usar un editor de texto en la terminal Linux


1. Estos editores de texto que a continuación veremos son ligeros y potentes así
podremos trabajar más rápido, que si lo hiciéramos en un entorno gráfico.
2. Al ser ligeros, trabajaremos igual de rápido en remoto que en local.
3. Suelen ser multiplataforma.

Vamos a ver el editor nano también se le conoce como pico, vamos a ver el vi de Unix y
también vamos a ver dos editores alternativos qué es el MCedit que acompaña al MC qué
es un gestor de archivos y vamos a ver el editor Joe que es un editor de texto también
tradicional de Unix.

Editor de texto Nano

Bueno aquí vamos a llamar a nuestro editor de texto, lo podemos llamar de dos
formas pico o nano. Nano es su nombre real, entonces seria:
Sintaxis:
 nano + nombre del archivo.
 pico + nombre de archivo.

52
En la parte inferior de la pantalla veremos la guía de los comandos, que son:
 Control X: con Control X podemos salirnos del editor y si no hemos guardado él nos
va a preguntar si deseamos guardar los cambios.
 Control O: el Control O nos sirve para guardar los cambios que hemos hecho sin
salir o inclusive lo podemos guardar como otro archivo dándole Control O e
indicándole el nombre del archivo cómo lo queremos guardar.
 Control J: con control J podemos justificar el texto al ancho de la terminal.
 Control k: podemos cortar el texto o inclusive podemos cortar bloques.
 Control u: nos sirve para pegar texto, este se pegara en la posición actual del
cursor.
 Control c: nos situamos en una línea y nos va a decir qué línea es esa con la
información, la columna dónde estamos parados el carácter de texto completo donde
estamos parados con
 Control w: podemos realizar búsquedas de cualquier cadena de texto.
 y dentro de control w podemos usar con control t para buscar una línea específica
entonces
 Control v: para paginar hacia adelante.
 Control y: para repaginar ósea para ir al principio del documento.

Entonces tenemos que esté editor pico es muy versátil, es muy fácil de manejar, no tiene
ninguna restricción para moverse dentro del buffer de texto que es dónde uno trabaja y es
muy común en distribuciones como Ubuntu.

Editor de texto vi

Bueno, ahora pasamos al editor vi, el editor vi tiene dos modos: un modo de edición y un
modo de línea de comandos, él no tiene la edición ahí pura como lo tienen los otros
editores y podemos acceder a esta línea de comandos con:
53
En este caso estamos presionamos la tecla ESC y escribimos :w + el nombre del archivo
que vamos a grabar y él nos graba como otro archivo lo que tenemos en el bufer.

Navegación dentro del texto en vi


 Tenemos la letra h para ir hacia la derecha
 la letra l para ir hacia la izquierda
 la letra k para bajar de línea en línea en el documento
 y la letra j para ir hacia arriba del documento.

Modo de edición en vi
Entonces una vez tenemos la movilización básica dentro del Vi vamos a pasar a ver sus
características.

 la letra g que nos lleva desde el final del documento hasta el principio del
documento.
 La letra i nos permite pasar al modo de edición del editor vi, con la letra i
activamos el modo de edición y ya podemos escribir normalmente lo que queremos
manejar dentro de nuestro texto, de lo contrario nos tomaría los comandos de las
letras que escribiéramos.
 Ahora si nosotros queremos borrar una línea lo hacemos tecleando
rápidamente dd.
 Ahora si queremos borrar solamente una palabra lo hacemos con dw y nos va a
borrar una sola palabra.
 Para efectuar una búsqueda lo hacemos ESC ":/" sin comillas y la palabra que
queremos buscar y así nos va a llevar hacia dónde está la palabra que estamos
buscando.
 Ahora si lo que queremos es cortar y pegar una línea de texto en particular
entonces lo vamos a hacer tecleando rápidamente yy + P qué sería para pegar
entonces yy pp y nos pega rápidamente la línea que queremos pegar y así lo
podemos hacer sucesivamente para pegar la línea varias veces.

Modo línea de comando en vi


Ahora vamos a ver las opciones del modo línea de comando que son las siguientes:
 ESC :w es para grabar.
 ESC :w! + nombre de archivo, nos sobrescribe ya que con la admiración estamos
ignorando que el archivo existe.
 ESC :wq nos sirve para grabar y salirnos del documento.
 ESC :q nos permite editar otra vez el documento que habíamos grabado
anteriormente.
 ESC :q! podemos salir ignorando los cambios hechos al archivo así que
saldremos sin guardar las modificaciones.
 ESC :x es lo mismo qué ESC :q guardando los cambios y sale del archivo.
 ESC :x! en este caso sale sin guardar las modificaciones hechas al archivo.

54
Esta es la forma con la que se trabaja básicamente en el editor VI de Linux.

Editor de texto MC

Pasamos a nuestro editor MC el mc es un acompañante de gestor de comandos de mc


para entorno de texto pasamos al mcedit, el mcedit es un editor de texto un poco más
moderno en este editor vamos a encontrar que todos se controla básicamente por las
teclas de función que son las siguientes:

 F1 nos saca la ventana de ayuda.


 F2 nos da la opción para guardar no saca el cuadro de diálogo para guardar
nosotros escogemos sí o no queremos guardar.
 F3 es muy importante porque es la que marca el bloque entonces nosotros
tecleamos F3 para marcar y F3 para marcar el final del bloque que queremos.
 F5 podemos copiar el texto que tenemos señalado con los bloque que hemos
designado con F3 y también podemos hacer búsquedas para reemplazar por
ejemplo con la tecla F4 nos sale el diálogo para reemplazar, escribimos en nuestro
cuadro de diálogo el origen y el destino del texto y vamos remplazando con la cajita
de diálogo que nos va indicando si reemplazar cada una de las coincidencias o
hacerlo todo de una.
 F6 podemos mover los bloques que designamos con F3 los podemos mover de un
lado a otro del buffer de texto.
 F8 podemos borrar esos bloques entonces hundimos la tecla F8 y borramos el
bloque que habíamos acabado de mover.
 F7 nos sirve para buscar texto dentro del buffer del editor
 F9 como les decía esto es un editor un poco más moderno entonces este editor
tiene menú la tecla F9 nos sirve para sacar el menú de texto de la parte superior y
ahí hay muchas funciones como por ejemplo abrir un archivo, pero no solo eso
55
también tiene otras opciones en los otros menú desplegable qué podemos ver
como copiar, borrar, mover, etc tiene un menú para buscar, reemplazar ahí está
varias opciones que se pueden utilizar también tiene un menú de utilidades más
avanzadas tiene otro menú de formato del párrafo y tiene un menú para las
ventanas para manejar ventanas y otro menú que es para las opciones del mismo
editor para configurar el mismo editor.
 F10 podemos salir del editor él nos preguntará si queremos grabar o no
dependiendo si hemos hecho algún cambio.

Editor de texto JOE

El último editor que quiero enseñarles es el JOE que es tradicional también del entorno de
Unix. Este se maneja con control+k y una letra.

Control+k y h no saca la ayuda en pantalla para nosotros podernos mover dentro del
editor este también nos permite movernos libres borrar con la tecla back space,
movernos con la espaciadora sin ningún problema y bueno las funciones básicas de
editor son:

 Control+kf podemos buscar un texto en particular.


 Control+kb podemos marcar bloques.
 Control+kk para finalizar.
 Control+kc podemos copiar un bloque marcado.
 Control+kx salimos guardando las modificaciones del archivo editor.

Bueno esto es todo con respecto a los editores, obviamente de forma muy básica, para
que no nos vaya a enredar en la edición de archivos dentro de nuestro sistema operativo
Linux, y para que nos podamos defender en la consola si necesidad de un entorno gráfico.
56
Shell Script Básico I

Vamos a ver el Shell Script, el Shell Script lo vamos a ver en 4 partes, 2 básicas y 2
avanzadas. En la primera veremos lo siguiente:

1. ¿Qué es un Shell Script?


2. Las variables.
3. El entorno de variables.
4. Como se configuran las variables para nuestros Script de Shell.
5. Y las estructuras básicas.

Les adelanto que las estructuras básicas que usaremos son las mismas estructuras que se
usan en la programación, que son la condicional if, el case, el ciclo for, el ciclo while y el
ciclo until. Con estas herramientas vamos a comenzar la parte básica del Shell Script.

¿Qué es un Shell Script?


Antes de definir que es un Shell Script debemos entender que es una Shell. Recordemos
que Linux posee un corazón al que llamamos el Kernel de Linux, este corazón por decirlo
así está envuelto por una concha o en ingles Shell, la Shell de Linux es la que nos
permite comunicarnos con el núcleo del sistema y todas sus herramientas, mediante el uso
de comandos.

Ahora que sabemos que es una Shell definamos que es un Script. Normalmente
un Script en Linux es un archivo en texto plano que siempre en su encabezado debe
iniciar por #! seguido del programa a usar para interpretar el script, por ejemplo:

#!/bin/bash para script de bash

#!/bin/sh para script de Shell

#!/usr/bin/perl para script de perl

En resumidas cuentas un shell Script es un archivo de texto plano que inicia con #! y estos
Scripts suelen contener una secuencia de comandos que se pueden interpretar en la Shell
de Linux, pronto se darán cuenta de su potencial.

Las variables
Las variables nos dan la capacidad de poder asignar un contenido X a un nombre, y este
nombre ocupara un espacio en la memoria RAM de nuestro ordenador, no se preocupen
ya verán lo fácil que es.

Para definir una variable en la Shell de Linux utilizaremos el comando export, veamos su
sintaxis:
export VARIABLE="Contenido"
57
Ejemplo:
export VARIABLE="Hola Mundo"

Llamada de la variable:

echo $VARIABLE

¿Cómo crear un Script en Linux?


Para crear un Shell Script debemos iniciar el editor de texto de nuestra preferencia, para
este ejemplo utilizaremos el editor pico.

1. Estando en la Shell de Linux escribimos pico.


2. Y dentro del editor debemos iniciar con el encabezado propio de una Shell
Script en este caso para un script de bash que sería #!/bin/bash
3. Ahora escribiremos el primer Script de este curso, en la siguiente línea
escribimos echo "Hola mundo"; (no olvidar que al finalizar la línea debemos finalizar
con ";") y guardamos nuestro script con el nombre de script.sh.
4. Antes de ejecutar el Script necesitamos darle los permisos necesarios con el
comando chmod de la siguiente manera chmod u+x script.sh.
5. Una vez ejecutado vamos a ver que nos imprime el mensaje "hola mundo".

Argumentos o parámetros posicionales


Dentro de una Shell Script existen lo que se llaman argumentos o parámetros posicionales
que son variables reservadas que se definen de la siguiente manera $1, $2, $3 y
equivalen al parámetro 1, el parámetro 2 y el parámetro 3.

Sabiendo lo de los parámetros posicionales ahora realizaremos un ejemplo utilizando el


Script que anteriormente creamos. Entonces vamos a imprimir con echo estos 3
parámetros.

Editamos el script pico script.sh y una línea abajo de "Hola mundo" escribimos:
echo $1
echo $2
echo $3

Guardamos los cambios y salimos del editor de texto.

Una vez en la Shell ejecutamos el Script y le agregamos tres parámetros que


serán parámetro1, parámetro2, parámetro3.

./script.sh parametro1 parametro2 parametro3

58
Como vemos el shell script nos arroga algo parecido a lo siguiente en la salida:

hola mundo
parametro1
parametro2
parametro3

Recordemos que con echo indicamos que parámetro 1, 2 y 3 se imprimieran y como


nosotros en la Shell indicamos script + 3 parámetros entonces obtuvimos como salida el
hola mundo y los tres parámetros.

Estructura IF
La estructura condicional en un shell script se define por IF (en español Si o Cuando) y su
funcionamiento es muy sencilla. If evalúa si la condición se cumple o no se cumple, si es
verdadera ejecuta un código, si es falsa, ejecuta otro código o continúa con la ejecución
del shell script.

Realizamos un ejemplo práctico, volvamos a editar nuestra script:

pico script.sh

Y ahora modificamos el script de manera que quede de la siguiente manera:


#!/bin/bash
if [ $1 = 1 ];
then
echo "el valor de la variable es (1)"
fi

Importante entre corchete y corchete del if hay que dejar un espacio después de abrir el
corchete y dejar otro espacio antes de cerrar con corchete por ultimo no olvidar nunca el
";".

Vamos a ver otra cosa dentro de la estructura if hay un else, ósea, de lo contrario, que
pasa si no se cumple la condición entonces cuando esto pasa esta la estructura else que
esta anidada dentro de if, por así decirlo y vamos a colocar otro mensaje en este caso es
() error, el valor de la variable no es uno y ahí cerramos con el fi, grabamos y ejecutamos
if [ $1 = 1 ];
then
echo "el valor de la variable es (1)"
else
echo "error, el valor de la variable no es uno”;
fi

59
En este ejemplo donde al script le damos como parámetro 1 nos arrojara el texto "el valor
de la variable es (1)" y en caso contrario si le damos un valor que no sea 1 nos arrojara el
texto "error, el valor de la variable no es uno”

Estructura del CASE


Bueno ahora vamos al case, el case también es una condicional pero se da más en una
estructura de menú, este se abre con case seguido de la variable + in y en la siguiente
línea siempre tabulando una vez se coloca la condicional, que en el ejemplo de abajo, la
condicional en el primer caso es 1, en la siguiente fila y esta vez tabulando 2 veces se
escribe la acción que se realizara en ese caso, y por ultimo cerramos el caso tabulando
una vez y escribiendo ;;. Una vez terminado el primer caso ya podemos crear cuantos
casos necesitemos y al finalizar el último caso cerramos el case con esac.

Vamos a ver un ejemplo práctico.

case $1 in
1)
echo “el valor es 1”
;;
2)
echo “el valor es 2”
;;
*)
echo “el valor es otro número”
;;
esac

Entonces cuando ejecutamos nuestro script según el parámetro que le demos nos arrojara
diferentes resultados como en la siguiente imagen.

Como podemos observar nuestro script con la estructura case funciona a la perfección.

Los bucles o los ciclos el FOR


Ahora vamos a ver los bucles o los ciclos del for, for es un ciclo que nos permite hacer
repetición con base en un conteo predeterminado.

60
Para escribir nuestra estructura de FOR, debemos comenzar por for seguido de la
variable que va a hacer de contador, por ejemplo i, luego in y el conteo que deseamos
realizar, vamos a poner un ejemplo de 1 a 10 eso lo vamos a colocar entre comillas
simples, entonces, quedaría de esta manera 'seg 1 10' luego vamos a colocar ; y en una
línea más abajo do , en español hacer, y otra línea más abajo vamos a hacer un echo de
la variable contador que es la variable i, quedaría algo así: echo $i, cerramos nuestro ciclo
for con done, lo grabamos para luego ejecutarlo en la Shell.

Vamos al ejemplo práctico

Dentro del editor de nuestra preferencia creamos la estructura del for

for i in ‘seg 1 10’;

do

echo $i

done

Lo ejecutamos y ¿qué vamos a ver? Vamos a ver que el hizo el ciclo del 1 al 10
1
2
3
4
5
6
7
8
9
10

Ahora editamos el script y vamos a pasarle como parámetro 2 variables una de inicio y
otra de finalización del conteo que serán el $1 y $2. Cuando ejecutamos nuestro Shell
Script colocamos 1 10 y va a funcionar de la misma forma porque lo único que hicimos fue
remplazar las variables.

for i in ‘seg $1 $2’;


do
echo $i
done

Ahora si le colocamos de como primer parámetro 10 y segundo parámetro 20 nos va a


contar de 10 a 20, si le colocamos primer parámetro 1 y segundo parámetro 100 nos va a
contar del 1 hasta 100, si le colocamos como primer parámetro 1 y segundo parámetro
100000 pues él va a ir del 1 hasta 100000 se va a demorar un poco pero lo va a hacer.

61
El ciclo WHILE
Ahora vamos a ver el ciclo WHILE. El ciclo while se utiliza mucho para los menús ya que
el sigue operando mientras se cumple la condición, también puede funcionar como
el for entonces vamos a establecer una variable i que es igual a 5, una variable x que es
igual a 0 la palabra para iniciar la estructura es while, acuérdense que corchetes
separados por espacio a lado y lado y le vamos a decir que x es menor que i entonces
mientras x sea menor que i la condición se cumplirá, si es mayor que i se rompe el ciclo,
vamos a colocar un ; y una línea abajo do y luego echo "mayor que 5 para salir".

Entonces cuando sea mayor que 5 el ciclo se va a romper, mientras sea menor que 5 el
ciclo se va a cumplir, colocamos la función read, read nos va a leer la variable x que es
donde vamos a introducir el número para seguir el ciclo o romper el ciclo.

i=5
x=0

while [ $x -1e $i ];
do
echo "Mayor que 5 para salir"
read x

done

Ejecutamos el script y si colocamos 1, 2, 3 el ciclo no se rompe porque si colocamos 6 el


ciclo while se rompe porque el ciclo se mantiene mientras sea menor que 5.

El UNTIL
El UNTIL funciona al contrario, el until mantiene el ciclo mientras sea mayor que i, en el
ejemplo de abajo el ciclo se va a cumplir solamente si es mayor que 5. Ósea el ciclo until
funciona igual que el while pero al contrario.

i=5
x=0

until [ $x -le $i ];
do
echo "Menor que 5 para salir”
read x
done

Ejecutamos el script si colocamos un número mayor que 5 nuestro Script va a seguir


haciendo el ciclo pero si colocamos 5 entonces se va a romper.

62
Bash Script Básico II

Hoy vamos a ver la segunda parte de Shell Script básico, ya explicamos los siguientes
apartados

 Estructuras básicas en Shell Script


 Las condicionales
 los bucles
 El manejo de variables
 Y como pasarlas como parámetros
Esta vez vamos a hacer 2 ejemplos prácticos una en forma de menú y el otro en forma
de comando al cual le pasaremos parámetros para ver la utilización de estas estructuras.

Estructura del menú


Entonces comenzamos, vamos a hacer un archivo llamado menu.sh al cual le vamos a
escribir el encabezado del Shell Scrip en este caso vamos a colocar el intérprete que es la
Shell bash

1. !#/bin/bash.
2. luego vamos a colocar una variable x a la cual le vamos a asignar el valor 0.
3. Otra variable y a la cual le vamos a asignar el valor 4.
4. Ahora vamos a escribir nuestro ciclo while junto con la condicional [ $x –ls $y
]; recuerden que los corchetes debe ir separado por un espacio para que no nos de
error de sintaxis.
5. Colocamos clear para limpiar la pantalla.
6. Ahora vamos a pintar nuestro menú colocamos un echo para que nos muestre en la
primera procesos que hay en nuestro sistema.
7. En la segunda opción vamos a colocar que nos muestre el espacio en discoque
tenemos.
8. En la tercera opción vamos a ver los usuarios que tenemos activos en el sistema
o que están ingresados en el sistema en este momento.
9. En la cuarta opción vamos a colocar la carga que el sistema tiene en este
momento.
10. Y en la quinta opción vamos a colocar la opción de salir ósea la opción que rompe
con el ciclo que estamos haciendo.

Colocamos un read para leer la variable x para poder cumplir los casos que vamos a
colocar a continuación.

Entonces dentro del ciclo while abrimos los siguientes casos (case) pero antes que
nada un clear para limpia la pantalla:

En el primer caso e igualmente con los siguientes casos iniciamos con un clear para
limpiar la pantalla luego colocamos ps xa | wc -l que nos cuenta las líneas que nos
devuelve el ps mostrándonos la cantidad de procesos que hay, en la siguiente línea
63
un echo “pulse una tecla para continuar…….” y por ultimo un read, una línea abajo para
realizar la lectura en pantalla y cerramos el primer caso con ;;.
En el segundo caso colocamos df –ph seguido por el mismo mensaje del caso uno y
un read y cerramos el caso 2 con ;;

En el caso 3 vamos a colocar el comando w para ver los usuarios que están ingresados en
el sistema seguido por el mismo mensaje del caso uno y un read y cerramos el caso 3.

Abrimos el caso 4 que sería para la carga del sistema limpiamos la pantalla ahora
colocamos un uptime para que nos muestre tanto lo que lleva arriba el sistema como la
carga que tiene en el momento, pegamos lo que tienen los otros casos y cerramos.

En el último caso *) el caso donde no será ninguno de los anteriores colocamos clear para
que nos limpie la pantalla entonces aquí terminamos el caso lo cerramos y nos
disponemos a cerrar la estructura con esac que es case al revés.

Una vez terminado el Script quedaría de la siguiente forma:


!#/bin/bash
x=0
y=4
while [ $x –ls $y ];
do
clear
echo “1. Numero de procesos”
echo “2. Espacio en disco”
echo “3. Usuarios Activos”
echo “4. Carga del Sistema”
echo “5. Salir”
read x
case $x in
1)
clear
ps xa | wc -l
echo “pulse una tecla para continuar…….”
read
;;
2)
clear
df –ph
echo “pulse una tecla para continuar...”
read
;;
3)
clear
w
echo “pulse una tecla para continuar...”
read
;;
4)
clear
update
echo “pulse una tecla para continuar...”
read
;;
*)
clear
;;
esac
done

64
Ahora vamos a la línea de comando y ejecutamos nuestro comando menú (./menú.sh) y
nos va amostrar las opciones.

Estructura de comando
Ahora vamos a ver el caso del comando por parámetros, entonces vamos a crear un
archivo que se llame mostrar.sh al crear mostrar.sh obviamente le vamos a iniciar el
encabezado que le indica al interprete que es un bash script y vamos a utilizar la
estructura if de la siguiente forma.

if [ ];
then

Una vez tenemos muestro esqueleto de la estructura vamos a crear las condiciones

1. Primera condición será [ $1 == “-p” ]; seguido de then y ejecutará el comando ps


xa | wc –l esta condición nos mostrará la cantidad de procesos activos en el
sistema.
2. La segunda condición será [ $1 == “-e” ]; seguido de then y el comando df –
ph esta condición nos mostrará el espacio en disco.
3. En el tercer caso colocaremos el comando w y la condición será [ $1 == “-u” ]; esta
condición nos mostrara los usuarios activos actualmente en el sistema.
4. Por ultimo en la siguiente condición será [ $1 == “-c” ] para que nos muestre la
carga del sistema actualmente y le vamos a colocar el comando uptime que nos
muestran estos datos.

Luego vamos a hacer una pequeña ayuda como la tienen los comandos por lo general
vamos a colocar un –h que nos va a imprimir la ayuda y vamos a hacer una pequeña
ayuda a punta de echos, y quedará de la siguiente manera:

echo “Mostrar estadísticas del sistema Version 0.0.1”


echo “”
echo “Ayuda:”
echo “-p Cantidad de procesos ”
echo “-e Espacio en disco”
echo “-u Usuarios de sistema”
echo “-c Carga del Sistema ”
echo “-h Muestra esta ayuda”

65
Finalmente el script completo quedará de la siguiente manera:

!#/bin/bash
if [ $1 == “-p” ];
then
ps xa | wc -l
fi
if [ $1 == “-e” ];
then
df -ph
fi
if [ $1 == “-u” ];
then
w
fi
if [ $1 == “-c” ];
then
uptime
fi

if [ $1 == “-h” ];
then
echo “Mostrar estadísticas del sistema Version 0.0.1”
echo “”
echo “Ayuda:”
echo “-p Cantidad de procesos ”
echo “-e Espacio en disco”
echo “-u Usuarios de sistema”
echo “Carga del Sistema ”
echo “-h Muestra esta ayuda”
fi

Recordemos que siempre que terminemos de editar un script debemos de darle los
permisos de ejecución con chmod u+x y el archivo.

66
Ahora vamos a la línea de comando y ejecutamos nuestro comando menú (./mostrar.sh -
h) y nos va amostrar las opciones.

Con esto vemos la utilización de algunas de las estructuras que vimos en el capítulo Shell
Script Básico I y su utilización en la práctica, en las próximas 2 partes vamos a ver
funciones más avanzadas para Shell Script que van a hacer que nuestros Scripts sean más
potentes y vamos a ver más aplicaciones para poder sacarle jugo al sistema operativo
por medio de los Scrip de Shell.

 Vamos avanzando más en nuestro curso ya que: manejamos nuestro sistema


operativo de forma básica. Manejamos comando. Ya entendemos como es el
sistema operativo a nivel del intérprete de comandos. Y ahora estamos
potencializando ese conocimiento aprendiendo Shell Scrip para poder hacer
nuestras propias soluciones dentro de nuestro sistema operativo.

Esta es la potencia que tienen los sistemas operativos abiertos y los sistemas operativos
basados en UNIX y por ende en nuestro sistema operativo Linux.

67
Bash Script Avanzado I

Esta vez vamos a ver Bash Script avanzado lo vamos a ver en 2 etapas:

1. Operadores.
2. Arreglos o arrays.
3. Funciones.
4. La asignación de comandos.

La asignación del resultados de comandos a una variable y vamos a combinar eso con el
comando awk para hacer filtrado de salidas al estándar ouput y utilizar esos datos para
asignarlos a una variable. Entonces comencemos

OPERADORES NUMERICOS

 -eq Igual que.


 -ge Mayor o igual que.
 -gt Mayor que.
 -le Menor o igual que.
 -lt Menor que.
 -ne Distinto que.

Bueno vamos a comenzar por los operadores, los operadores que vamos a ver son
los matemáticos, creamos un archivo if.sh le colocamos el encabezado y vamos a utilizar
la estructura if porque es la que mejor nos puede ilustrar los operadores, vamos a pasarle
parámetros, vamos a utilizar $1 y $2 para comparar, el primero que vamos a utilizar es el:
Igual que, que es -eq entonces colocamos echo que nos muestre si se cumple y le
agregamos los permisos de ejecución , una vez le agregamos los permisos de ejecución
pues hacemos la comparación si es igual coloca el mensaje, si no es igual pues no coloca
el mensaje y el código será el siguiente.

EJEMPLO IGUAL QUE


#!/bin/bash
if [ $1 -eq $2 ];
then
echo “hola”
fi

68
EJEMPLO mayor o igual que
Entonces ahora vamos a modificar nuestro script para ver el operador mayor o igual
que, que es –ge comparamos si es igual nos da, si es mayor que nos da y si no es
igual o mayor que, no nos da, ejemplo:

#!/bin/bash
if [ $1 -ge $2 ];
then
echo “hola”
fi

EJEMPLO mayor que


Ahora vamos con el mayor que modificamos la condición y ahora agregamos –gt, así
que, si es mayor que nos da, si es menor que, no nos da y si es igual tampoco nos da.

#!/bin/bash
if [ $1 -gt $2 ];
then
echo “hola”
fi

EJEMPLO menor o igual que


Vamos a seguir con el menor o igual que, es -le entonces vemos si es igual, nos da, si
es menor, nos da, pero si es mayor que no nos da.
#!/bin/bash
if [ $1 –le $2 ];
then
echo “hola”
fi

EJEMPLO menor que


Entonces seguimos con el ejemplo menor que es -lt y aquí vemos en los ejemplos que si
es igual no nos da, si es mayor no nos da, pero si es menor si nos da.

#!/bin/bash
if [ $1 –lt $2 ];
then
echo “hola”
fi

69
EJEMPLO distinto que
Vamos a ver el distinto que es –ne entonces si es igual, no nos da, pero si es distinto
nos imprime hola, no importa que sea mayor o menor, lo que importa es que sea distinto.

#!/bin/bash
if [ $1 -ne $2 ];
then
echo “hola”
fi

OPERADORES DE CADENA

 = Iguales
 != Diferentes
 -n Con longitud mayor que 0
 -z Con longitud igual a 0 o vacío

EJEMPLO igual que


Los operadores de cadena, ya no vamos a comparar números, si no que vamos a
comparar cadenas, el primero operador es igual =, vamos a ejecutar nuestro comando le
vamos a dar abc como primer parámetro y abc como segundo parámetro, como son
iguales nos imprime hola, pero si no son iguales no imprimirá en pantalla hola.

#!/bin/bash
if [ $1 = $2 ];
then
echo “hola”
fi

EJEMPLO diferentes
La diferencia != es lo inverso a, igual que si damos como parámetros abc y xyz nos da,
porque es diferente, pero si damos abc abc no imprimirá hola porque es igual.
#!/bin/bash
if [ $1 != $2 ];
then
echo “hola”
fi

70
EJEMPLO con longitud mayor que 0
Vamos a medir si la cadena viene vacía o no entonces primero con –n vamos a ver que
la cadena tenga un contenido entonces colocamos una variable que se llama cadena con
un contenido y vamos a decirle al operador que nos verifique si esa cadena tiene un
contenido, ejecutamos nuestro script y automáticamente nos muestra el mensaje hola

#!/bin/bash
cadena=’j’
if [ -n $cadena ];
then
echo “hola”
fi

EJEMPLO con longitud igual a 0 o vacío


También hay un operador para que venga vacío que es -z con -z vamos a ver que ahora
que la variable cadena está vacía se nos va a cumplir porque la variable viene vacía.

#!/bin/bash
cadena=’’
if [ -z $cadena ];
then
echo “hola”
fi

OPERADORES DE ARCHIVO
 -d es un directorio
 -e existe el fichero
 -f es un fichero ordinario
 -r es leíble
 -s es no vacío
 -w es escribible
 -x es ejecutable
 -o eres el dueño del fichero
 -G el grupo del fichero es igual al tuyo
 -nt fichero1 es más reciente que fichero2
 -ot fichero1 es más antiguo que fichero2

Ahora vamos a ver los operadores de archivo primero vamos a verificar si un archivo es
directorio, vemos que al correrlo nos muestra que es un directorio vamos a borrar esta
partecita que nos sobraba (cadena=’ ’) y vamos a verificar si no es un directorio entonces
como este es un archivo regular como vamos a ver aquí en el ls primero vamos a ver
prueba_if que es un directorio y prueba_if2 es un archivo regular, por eso en la primera

71
prueba nos dio que era un directorio y en la segunda no nos dio porque era un archivo
regular.

EJEMPLO es un directorio (prueba1)


#!/bin/bash
if [ -d ./prueba_if ];
then
echo “hola”
fi

EJEMPLO es un directorio (prueba2)


#!/bin/bash
if [ -d ./prueba_if2 ];
then
echo “hola”
fi

Ahora vamos a ver si el archivo existe vamos a hacerlo sobre prueba_if2 que es un archivo
que existe, por eso se cumple la condicional.

EJEMPLO existe el fichero


#!/bin/bash
if [ -e ./prueba_if2 ];
then
echo “hola”
fi

Pero vamos a colocarle digamos if que es un directorio que también existe, ifd que no
existe porque no es un archivo dentro del sistema de archivos.

Luego está el parámetro –f es si es un archivo ordinario entonces esto nos ayuda a ver si
es un archivo o un directorio ósea a diferencia del directorio que vimos primero, a ver si es
un archivo regular esto lo hacemos con el operador -f

EJEMPLO es un fichero ordinario


#!/bin/bash
if [ -f ./prueba_if2 ];
then
echo “hola”
fi

72
Ahora vamos a ver otro operador que es –r que es si el archivo se puede leer entonces lo
colocamos

EJEMPLO es leible
#!/bin/bash
if [ -r ./prueba ];
then
echo “hola”
fi

Lo ejecutamos y el archivo prueba nos dice que no se puede leer, ¿Porque no se puede
leer? Porque es de root y no tiene absolutamente ningún permiso, estamos como el
usuario fox pero entonces si le colocamos prueba_if2 si nos lo va poder leer entonces si se
cumple la condicional.

#!/bin/bash
if [ -r./prueba_if2 ];
then
echo “hola”
fi
Con w vemos que el archivo es escribible entonces verificamos los permisos y vemos que
se cumple la variable porque el archivo es escribible

EJEMPLO es escribible
#!/bin/bash
if [ -w./prueba_if2 ];
then
echo “hola”
fi

Luego vamos a ver si el archivo es ejecutable y efectivamente se cumple cuando es


ejecutable

EJEMPLO es ejecutable
#!/bin/bash
if [ -x./prueba_if2 ];
then
echo “hola”
fi
Y si lo hacemos con ./prueba_if3 pues que no es ejecutable pues no se cumple la
condicional.

73
Ahora vamos a verificar si el archivo pertenece a quien está ejecutando el scrip con el
operador –o, aquí vemos que se cumple porque el usuario es fox, si nosotros ejecutamos
por ejemplo sobre ./prueba que pertenece a root pues entonces no se va a cumplir la
condicional porque ./prueba no pertenece a fox que es el usuario que lo está ejecutando

EJEMPLO Eres el dueño del fichero


#!/bin/bash
if [ -o./prueba_if3 ];
then
echo “hola”
fi

Después vamos a verificar el grupo con –G (mayúscula) sobre ./prueba no es nuestro


grupo porque es el grupo root pero si lo colocamos sobre ./prueba_if3 vamos a poder
validarlo porque si pertenece al grupo fox que es nuestro usuario

EJEMPLO el grupo del fichero es igual al tuyo


#!/bin/bash
if [ -G./prueba_if3 ];
then
echo “hola”
fi

Ahora vamos a utilizar el operador –nt que es para ver si el fichero es más reciente que
otro fichero, entonces vamos a comparar si ./prueba_if3 es más reciente que ./prueba_if2
entonces le colocamos el archivo –nt y el otro archivo con el que vamos a comparar,
cuando hacemos la comparación se cumple porque ./prueba_if3 es más nueva que
./prueba_if2

EJEMPLO fichero1 es más reciente que fichero 2


#!/bin/bash
if [ ./prueba_if3 –nt ./prueba_if2 ];
then
echo “hola”
fi

Con –ot hacemos lo contrario entonces no se cumple porque es más antiguo pero si
invertimos el orden de los archivos pues nos va a dar porque ./prueba_if2 es más antiguo
que ./prueba_if3

74
EJEMPLO fichero1 es más antiguo que fichero 2
#!/bin/bash
if [ ./prueba_if2–ot ./prueba_if3 ];
then
echo “hola”
fi

OPERADORES BOLEANOS
! Negacion
-a and
-o or

Los operadores boléanos funcional de la siguiente forma vamos a crear 4 parámetros con
$1 $2 $3 $4 y a ellos le vamos a colocar la comparación de equivalencia numérica
entonces primero vamos a ver el operador and (-a), ósea él y para que se cumpla la
equivalencia del $1 $2 y el $3 $4

EJEMPLO and
#!/bin/bash
if [ $1 -eq $2 -a $3 -eq $4 ];
then
echo “hola”
fi

Entonces grabamos nuestro Scrip y lo ejecútanos como lo vamos a ejecutar? Pues


teniendo 2 igualdades, entonces vamos a colocar 1 1 como parámetros $1 $2 y luego 2 2
como parámetros $3 $4 y se nos cumple cuando cambiamos un parámetro pues entonces
no se nos cumple porque and (-a) obliga a que las 2 condicionales se cumplan para poder
cumplir la otra condicional.

Ya cuando pasamos al or (-o) se puede cumplir o una o la otra si nosotros volvemos y


hacemos el ejemplo y pasamos 1 1 2 2 se cumple una o la otra porque las 2 son iguales,
luego 1 1 2 3 se cumple una de ellas por eso también se cumple la condicional pero si
colocamos 1 3 2 3 no se cumple ninguna de las 2 igualdades entonces no nos muestra el
aviso hola

75
EJEMPLO or
#!/bin/bash
if [ $1 -eq $2 -o $3 -eq $4 ];
then
echo “hola”
fi

OPERADORES ARITMETICOS
+ Suma
-Resta
\* Multiplicación
/ División

Después siguen los operadores aritméticos son con los que podemos hacer operaciones
para esto se utiliza el comando expr y vamos a hace primero una suma 20+30

EJEMPLO suma
#!/bin/bash
expr 20 + 30

Ejecutamos nuestro Scrip obviamente nos da 50. Luego vamos a hacer una resta entonces
le restamos a 30 20

EJEMPLO suma
#!/bin/bash
expr 30 - 20

Guardamos nuestro Scrip , lo ejecutamos nos va dar 10. Vamos con la multiplicación el de
la multiplicación es el * colocamos 30*20 guardamos pero aquí hay una cosa si nosotros
ejecutamos nuestro Scrip va a presentar un error de sintaxis porque se tiene que colocar
una contra barra, contra slash para que para que el asterisco funcione

EJEMPLO multiplicación
#!/bin/bash
expr 30 \* 20

Así ya nos da la multiplicación bien. Ahorita vamos a ser la división se hace con la barra
normal ósea el slash si dividimos 30 entre 20

76
EJEMPLO División
#!/bin/bash
expr 30 / 20

Pues nos va a dar 1.25 pero el sistema redondea a 1 si tiene alguna duda pues entonces
colocan 40 /20

EJEMPLO Division 2
#!/bin/bash
expr 40 / 20

Esto nos va a dar 2. Con esto terminamos la parte de los operadores y entramos en la
parte de los arreglos.

ARREGLOS
Los arreglos son variables que tienen varios datos dentro, no solo tienen un dato sino que
tienen varios datos. Entonces comenzamos nuestro Scrip con el encabezado que ya
sabemos al intérprete de la bash vamos a declarar nuestra variable que va a ser una
variable llamada frutas y dentro va tener varios datos como en una especie de casilleros,
eso se llama arreglo vamos a colocar en la posición 1 la fruta limón luego vamos a copiar
idéntico la sintaxis de la array vamos a replicarla otros 4 espacios más y vamos a poner las
demás frutas manzana, plátano, naranja y pera, luego vamos a nombrar cada una de las
casillitas le vamos a colocar el número que sigue

#!/bin/bash
frutas [0] =’limon’
frutas [1] =’manzana ’
frutas [2] =’platano’
frutas [3] =’naranja’
frutas [4] =’pera’

Aquí ya tenemos nuestro arreglo completo y podemos pasar ahora como se imprime, con
un echo si nosotros queremos imprimir una casilla en particular pues colocamos el símbolo
de pesos llaves luego el nombre de la variable y entre corchetes la posición en el arreglo
#!/bin/bash
frutas [0] =’limon’
frutas [1] =’manzana ’
frutas [2] =’platano’
frutas [3] =’naranja’
frutas [4] =’pera’
echo ${frutas[1]}

77
Entonces grabamos nuestro Scrip, le colocamos los permisos de ejecución lo ejecutamos y
nos va amostrar la posición donde esta fruta manzana si nosotros cambiamos el numero
digamos por el numero 4 entonces nos va a imprimir pera.

Qué pasa si queremos verlos todos entonces colocamos @ dentro de la casilla y nos va a
mostrar todo el contenido del arreglo
#!/bin/bash
frutas [0] =’limon’
frutas [1] =’manzana ’
frutas [2] =’platano’
frutas [3] =’naranja’
frutas [4] =’pera’
echo ${frutas[@]}

Entonces ya queda un poquito claro que es una variable tipo arreglo, pero hay otra forma
de declarar las variables tipo arreglo con declare –a abre paréntesis y cada uno de los
datos que están relacionados al arreglo se colocan entre comillas separadas por espacio,
comilla simples entonces hacemos lo mismo limón manzana, plátano, pera, naranja vez
tenemos colocados nuestros datos del arreglo procedemos a asignarle la variable frutas
#!/bin/bash
declare –a frutas=(‘limon’ ‘manzana’ ‘platano’ ‘pera’);
echo ${frutas[@]}

Ahora grabamos y ejecutamos nuestro arreglo que nos muestra limón manzana bueno
todos los miembros del arreglo si nosotros otra vez colocamos la posición del arreglo
entonces nos va amostrar cada uno de los diferentes datos en las diferentes posiciones del
arreglo ,como habíamos echo en la primera forma.

FUNCIONES
Una vez terminamos con los arreglos vamos a hablar de las funciones, las funciones son
pedazos de código que se pueden reutilizar dentro de nuestro código entonces como lo
hacemos? Lo hacemos con function damos el nombre de la función abrimos llaves
colocamos lo que va hacer esa función y luego cerramos llaves, en este caso vamos a
colocar el comando crear,

#!/bin/bash
function limpiar {
clear
}

78
Vamos a declarar otra función que se llama n_procesos y dentro de n_procesos vamos a
colocar ps xa | wc que es Word count -l que es cuenta el número de líneas y así vamos a
saber la cantidad de procesos que están corriendo en el momento

function n_procesos {
ps xa | wc -l
}

De la misma forma que lo hicimos arriba, vamos a declarar otra función que se va a llamar
suma con la cual vamos a sumar 2 números como hicimos con en la parte de los
operadores aritméticos entonces vamos a poner expr 10 + 10

function suma {
expr 10+10
}

Entonces ahora vamos a llamar la primera función que es limpiar ejecutamos enteste caso
no pasamos parámetro y nos limpió la pantalla

#!/bin/bash
function limpiar {
clear
}

function n_procesos {
ps xa | wc -l
}
function suma {
expr 10+10
}

79
Limpiar

Ahora vamos a quitar este limpiar y colocamos n_procesos, cuando ejecutamos


n_procesos nos va a mostrar el número de procesos que están corriendo que es 183

#!/bin/bash
function limpiar {
clear
}
function n_procesos {
ps xa | wc -l
}
function suma {
expr 10+10
}
n_procesos

Luego vamos a borrar n_procesos y colocamos suma, cuando colocamos suma guardamos
y ejecutamos el scrip nos trajo la suma 10+10 que teníamos en función
#!/bin/bash
function limpiar {
clear
}
function n_procesos {
ps xa | wc -l
}

function suma {
expr 10+10
}
suma

80
Si queremos las podemos llamar todas, entonces colocamos la función limpiar como la
función n_procesos y la función suma una debajo de la otra y cuando lo ejecutemos
vamos a ver que las 3 funciones se ejecutaron una detrás de la otra
#!/bin/bash
function limpiar {
clear
}
function n_procesos {
ps xa | wc -l
}
function suma {
expr 10+10
}
limpiar
n_procesos
suma
Entonces guardamos nuestro archivo, ejecutamos y limpio, 183 procesos y 20 que es la
suma de 10+10

ASIGNACIÓN
Ahora vamos a ver la asignación, nosotros podemos ejecutar comandos y el resultado de
esa ejecución la podemos asignar a una variable, entonces vamos a ver el ejemplo que
hemos echo durante todas estas clases que es la de contar los procesos con ps xa | wc –
l entonces el número se lo vamos a agregar a la variable procesos, entonces el comando
se ejecuta y el resultado se le asigna a procesos y echo mostrará el contenido de la
variable que va a ser el número de procesos que están en ejecución actualmente.
#!bin/bash
procesos=$(ps xa | wc -l)
echo $procesos

Entonces guardamos, vamos a darle los permisos de ejecución, siempre se le debe dar los
permisos de ejecución para que funcione el scrip (chmod u+x asignacion.sh) y
ejecutamos el Scrip asignación y nos va a dar como resultado 184 procesos que están
corriendo.

También lo podemos hacer con otros comandos digamos que vamos a contar el número
de archivos que hay donde estamos parados con ls –l
#!bin/bash
procesos=$(ls -l | wc -l)
echo $procesos

81
Ejecutamos el script y nos dará el número de archivos que hay en la ubicación actual. Esto
es muy potente si nosotros lo combinamos con otro comandito. Entonces primero vamos a
ver un archivo que es el archivo donde están los usuarios (root@ubuntu-virtual:~# cat
/etc/passwd) del sistema linux , vemos que es un archivo que está separado por carácter :
entonces vamos a tratarlo, vemos que esta el usuario una x y el id del usuario, vamos a
utilizar el comando awk. El comando awk con el parámetro menos –F (mayúscula) nos va
diferenciar cual es el separador que va a ir entre comillas dobles entonces colocamos el :
que es nuestro separador , luego dentro de comillas simples y dentro de llaves vamos a
colocar la palabra print y una variable, él va comenzar a contar las columnas 1 2 3 4
entonces la primera columna seria la columna 1 que sería la del usuario, entonces vamos a
darle cat /etc/passwd y por medio de la tubería vamos a pasarle la salida a la awk para
que nos filtre y nos separe por los 2 puntos (:)

root@ubuntu-virtual:~#awk -F “:” ‘{print $1}’


^c
root@ubuntu-virtual:~# cat /etc/passwd | awk -F “:” ‘{print $1}’

Entonces aquí ya tenemos que la primera columna que es el $1 es la columna del usuario,
si le ponemos $2 es donde estaba la x y si le colocamos $3 ya nos da el id de los usuarios
que están en el passwd entonces esto lo vamos a meter dentro de un scrip se lo vamos a
metre dentro a una variable para utilizarlo
root@ubuntu-virtual:~# cat /etc/passwd | awk -F “:” ‘{print $3}’

Entonces editamos nuestro scrip asignacion.sh colocamos nuestro comando luego


colocamos un filtro adicional con el grep que ya habíamos visto en las clases pasadas y
vamos a buscar el usuario fox para que nos dé únicamente el id del usuario fox porque ya
nos había mostrado los de todos los usuarios, con esto vamos a ver el usuario fox le
vamos a cambiar el nombre de las variables que se llame foxid

#!bin/bash
foxid=$’( cat /etc/passwd | grep fox | awk -F “:” ‘{print $3}’)’
echo $foxid

con esto vamos a grabar nuestro scrip y ejecutarlo y ahí no da el id de nuestro usuario
fox, si nosotros por ejemplo editamos el archivo y le colocamos el usuario root entonces
cuando ejecutemos nuestro scrip pues nos va a dar el id 0 que es el id del root.

Para resumir vimos operadores tanto numéricos, como de carácter, operadores lógicos,
operadores de archivo y también vimos operadores aritméticos, vimos cómo se declaran
las variables de tipo arreglo, vimos también como crear una función también vimos como
asignar el resultado de un comando a una variable y hacerlo también con el filtrado por
medio de awk.

82
Bash Script Avanzado II
En esta sección tendrás la oportunidad de aplicar el conocimiento adquirido en las
lecciones anteriores de Bash Script. Veras las estructuras básicas de:

1. El if.
2. El for.
3. El while.
4. El case.
5. La asignación de comandos a variables.
6. Los arreglos.
7. Y la aplicación de varios arreglos.

En este ejercicio crearas un Bash Script con las siguientes partes:

1. Crearas una función de nombre userContainer que contenga un arreglo con los
usuarios del sistema.
2. Una segunda función de nombre putColors que te permita imprimir el contenido en
un determinado color.
3. Un menú con el comando case que te permita mostrar lo siguiente:
1. Usuarios del sistema.
2. Porcentaje del Disco Duro.
3. Tamaño utilizado de tu /home.
4. Cantidad de procesos que están corriendo en actualmente en el
sistema.
5. y una opción que te permita salir del Script.

Anterior mente ya explicamos que todo Shell Script debe tener un encabezado ¿te
acuerdas cual es el encabezado de todo Bash Script? exacto es: #!/bin/bash.

Bueno entonces vamos a crear un documento con nano de nombre programa.sh y vamos
a comenzar por elaborar el encabezado de nuestro archivo de Shell Script como siempre
colocamos #!/bin/bash

83
Crea tu primer Script
A fin de que comprendas mejor el material te animamos a que escribas el Bash Script
desde cero, recuerda que hay que respetar la tabulación y las mayúsculas y minúsculas a
fin de que tu Script funcione correctamente.

#
# declara la función userContainer
#
function userContainer()
{vari=$ |cat /etc/passwd | awk -F ":" '{print $1}';
counter=0
for t in $vari;
do
users[$counter]=$t
counter=$(expr $counter + 1);
done
putColor red ${users[$1]}
}
#
# declara la función putColors
#
function putColors() {
if [ $1 = “red” ];
then
red='\33[0;31m'
noc='\33[0m'
echo –e ${red} $2 ${noc}
fi
if [ $1 = “blue” ];
then
blue='\33[0;34m'
noc='\33[0m'
echo –e ${blue} $2 ${noc}
fi
if [ $1 = “yellow” ];
then
yellow='\33[0;33m'
noc='\33[0m'
echo –e ${yellow} $2 ${noc}
fi
if [ $1 = “green” ];
then
green='\33[0;32m'
noc='\33[0m'
echo –e ${green} $2 ${noc}
fi
if [ $1 = “cyan” ];
then
cyan='\33[0;36m'
noc='\33[0m'
echo –e ${cyan} $2 ${noc}
fi
if [ $1 = “magenta” ];
then
magenta='\33[0;35m'
noc='\33[0m'
echo –e ${magenta} $2 ${noc}
fi
}
readVar=0
clear

84
#
# dentro del ciclo while anida el menú a mostrar en pantalla.
#
while [ $readVar –le 4 ];
do
echo "Introduzca un numero"
putColors red "1. Línea del usuario"
putColors green "2. Porcentaje de disco"
putColors magenta "3. Tamaño de tu home"
putColors yellow "4. Cantidad de procesos"
putColors cyan "5. Salir"
echo –n "Introduzca un valor: "
readVar"
clear"

#
# Mediante case le indicas al Script que hacer en cada caso.
#
case $readVar in
1)
clear
putColors cyan "Introduzca la posición del arreglo"
read linea
clear
echo –n "El usuario en esa posición es: "
userContainer $linea
putColors cyan "Presiones una tecla para continuar ..."
read
clear
;;
2)
clear
porcen=$(df –Ph | grep sda1 | awk –F " " '{print $5}');
putColors green $porcen
putColors cyan "Presiones una tecla para continuar ..."
read
clear
;;
3)
clear
espacio=$(du –sh $HOME);
putColors yellow $espacio
putColors cyan "Presiones una tecla para continuar ..."
read
clear
;;
4)
clear
procesos=$(pa xau | grep #USER | wc -l);
putColors magenta $procesos
putColors cyan “Presiones una tecla para continuar ...”
read
clear
;;
*)
exit
;;
esac

85
Una vez tengas listo tu script lo guardas y lo ejecutas, no sin antes colocarle los permisos
de ejecución:

chmod +x programa.sh

Ahora con ./ lo ejecutas:


./programa.sh

Si todo ha salido bien veras un menú como el siguiente:

86
Xwindows y Entorno Gráfico

Vamos a ver el funcionamiento del Xwindows que proporciona la base para el entorno
gráfico y los escritorios de nuestro sistema operativo Linux.

El entorno gráfico que puedes disfrutar en Linux tiene una base en un protocolo
de terminales gráficas de red llamada Xwindows, el Xwindows fue creado entre el año 83
a 84 como el proyecto Athena, luego fue evolucionando porque lo que se quería era tener
lo mismo que se tiene como las terminales de texto, la Shell que se puede obtener o que
se puede visualizar por medio de una terminal remota como por telnet o como por ssh, o
por la misma salida del monitor o conexión serial, se quería tener pero en gráfica, es
decir mientras que un cliente ligero visualiza las aplicaciones como el navegador web o el
procesador de texto, toda la carga y las aplicaciones están corriendo del lado del servidor.

El protocolo Xwindows provee esa facilidad para cualquier sistema operativo, el sistema
Xwindows se maneja en un esquema cliente-servidor pero de forma inversa, ¿Porque de
forma inversa? normalmente el esquema cliente-servidor se basa en un cliente que es
parte del programa, que es una parte visual con la cual interactúa el usuario, ingresa y
consulta y recibe datos. Por ejemplo muchos vídeo juegos online son cliente-servidor
porque ellos simplemente tienen un cliente donde está toda la estructura del juego y se
conectan a un servidor que simplemente le envía datos y guarda los datos de lo que se
está haciendo, el sistema xwindows funciona de la misma forma pero a la inversa.
¿Porque? Porque en tu ordenador, el software de Xwindows corre como servidor, de hecho
corre como un servicio en el puerto TCP/IP 6000

¿Qué servicio provee?


El servicio que provee es:
 Tamaño de display o visualización.
 Resolución de pantalla
 Profundidad de colores
 8bits que son 256 colores
 24 y 32 bits que son 16 millones de colores
 Entradas básicas de teclado y el mouse.

Como vemos el servicio que ofrece el servidor X es de proveer visualmente a la maquina


cliente de un entorno gráfico.

El servidor de aplicaciones (ósea el que contiene las aplicaciones que nosotros vamos a
ver en el servidor gráfico) El cliente no es más que la aplicación que nosotros queremos
visualizar al lado de la maquina cliente que es la que está corriendo el software del
servidor.

87
Este esquema podría confundir pero es tan fácil como el esquema cliente-servidor pero a
la inversa, donde el servidor es la parte o entorno visual y las aplicaciones se encuentran
en la parte del cliente.

Vamos a ver unos ejemplos de varios sistemas operativos que funcionan cliente-servidor
con el sistema servidor gráfico llamado Xwindows System.

¿Cómo Configurar Xwindows en Ubuntu?


Con Ubuntu Linux lo primero es habilitar la opción del protocolo X porque está limitada por
seguridad a solo la misma máquina, entonces vamos a habilitarle la conexión por TCP/IP
para eso vamos a:

1. Edita el archivo con: pico /usr/share/lightdm/lightdm.conf.d/50-xserver-


command.conf y agregar la siguiente línea: xserver-allow-tcp=true.
2. Reinicia el ordenador para que reinicie también todo el sistema Xwindows.
3. por ultimo habilita el sistema de control para permitir la conexión al servicio, esto se
hace con: xhost + y la IP o simplemente xhost+ y permitira la conexión desde
cualquir IP.
4. Ahora desde el cliente exportamos con el comando export DISPLAY 192.168.2.121:0
(la IP cambia de-acuerdo a tu configuración).
5. desde el mismo cliente envía una terminal con el comando xterm

Con esos pasos ya tendrías una xterm de tu cliente hacia el servidor.


88
Con el siguiente comando puedes comprobar en que estas corriendo las aplicaciones
cliente:

 cat /etc /issue.net y el uname –a

¿Cómo Configurar Xwindows en MAC OS X?


1. En MAC OS X viene instalado un servidor X al cual hay que configurar para que permita
todas las conexiones por red.

2. Una vez realizado este paso reinicia el MAC.


3. dentro de la terminal xhost + 192.168.2.124:0 (IP del PC cliente)
4. desde la maquina cliente: export DISPLAY 192.168.2.117:0 (IP del servidor de
aplicaciones)
5. Enviamos la Gnome terminal con el comando: gnome-terminal (Veras como aparece la
terminal de ubuntu en tu MAC OS X)

Comprobación:

 uname –a.
 cat /etc/issue.net.

¿Cómo Configurar Xwindows en Android?


Igualmente en Android tenemos el Xserver XSDL y este xserver nos permite hacer el
mismo proceso, primero que todo levantamos el xserver, luego vamos hacia nuestro
sistema operativo Ubuntu, exportamos hacia la ip .124 y enviamos una gnome terminal,
cuando enviamos esa gnome terminal va a pasar que nuestro sistema operativo Android
nos va a sacar la gnome terminal que va a ocupar todo el espacio disponible en pantalla.

89
El proceso es el mismo simplemente exportamos la variable e iniciamos el entorno:

1. Iniciar Xserver XSDL


2. Desde Ubuntu exportamos:
1. Comando export DISPLAY=192.168.2.124:0
2. Enviamos una entorno Gnome con el comando gnome-terminal
3. xfce4-sessionR

Si abres una terminal puedes comprobar sobre qué sistema estas corriendo, puedes
ejecutar los siguientes comandos

 cat etc/issue.net
 uname -a

Vemos como realmente nuestro Xserver está sirviendo de plataforma gráfica para traer
nuestro escritorio desde el sistema operativo Ubuntu.

¿Cómo Configurar Xwindows en Windows?

En Windows es lo mismo, en Windows hay un xserver libre que se llama Xming y


el Xming nos permite hacer exactamente lo mismo que hemos venido haciendo durante
todo el artículo.

Después de instalar Xming:

1. Elige one Windows, siguiente.


2. Start no client, siguiente.
3. no access control, siguiente y finalizar.
4. export DISPLAY=192.168.2.110:0
5. xfce4-sessionR

Entonces vemos que el Xserver no es solamente el entorno gráfico sino un entorno que
nos permite a través de una red tener una consola remota gráfica con aplicaciones para
nosotros poderla aprovechar en red o localmente como lo hacemos con el Linux.

Gestores de ventanas
Después de ver el Xwindows ahora vamos a ver los gestores de ventanas y los
escritorios.

Inicialmente los gestores de ventanas eran aplicaciones que nos permitían mover las
ventanas, y visualizarlas nada más y poderlas mover hacia atrás y hacia adelante, esto fue
en la época de UNIX y fue progresando hacia la época de Linux, entonces Linux contaba
con este entorno gráfico que se llama TWM, que es bastante arcaico por decirlo así.
90
Otros Gestores de ventanas

 FVWM.
 Black Box de as400.
 Window Maker.
 Enlightenment.

KDE
lamentablemente estos entornos de ventanas no tuvieron el progreso que se debía porque
el usuario estaba buscando entornos de escritorio similares a los que ya tenían mac y
Windows entonces estos entornos de ventana se quedaron rezagados, y aunque algunos
todavía se están trabajando no tienen el impacto hoy en día como lo tuvieron en su época.

Paralelo a los anteriores gestores de ventanas se desarrolló el primer


escritorio Opensource que hubo para Linux y para UNIX en general pero desarrollado por
la comunidad Opensource que venía arrastrada por Linux, este es el common desktop
environment o KDE.

Lo que tenía de malo KDE es que al principio se basaba en unas librerías gráficas llamadas
QT, las librerías QT no eran completamente gratuitas de echo para todas las plataformas
costaban dinero menos para Linux que eran gratuitas pero no eran libres,
finalmente trolltech la empresa que desarrollaba las QT tuvo que liberar las QT bajo una
licencia libre y KDE paso a ser un proyecto completamente Opensource y completamente
libre, por las razones que mencione anteriormente KDE no era completamente libre en un
principio free software foundation animo al desarrollo de un sistema de escritorio que

91
fuera totalmente libre y totalmente Opensource que fuera compatible con GNU, para eso
se desarrolló y comenzó el proyecto el mexicano Miguel de Icaza el proyecto Gnome.

Gnome
Gnome pretendía ser lo que KDE era; un sistema de escritorio completo para los sistemas
operativos tipo UNIX y Linux en particular, entonces tenemos que Gnome ha tenido una
evolución también de un sistema arcaico, un sistema que nada más proveía un botón de
inicio con un menú y una barra de tareas a ser todo un sistema interconectado de
aplicaciones para facilitar un entorno de escritorio en un sistema operativo tipo UNIX.

XFCE
Finalmente y como jugadores suplementarios por decirlo así están los otros sistemas de
escritorio, esta XFCE que viene del entorno de Solaris, de hecho es un clon del escritorio
de Solaris.

Unity
El escritorio Unity partió de Gnome. Se separó y muchos alegan que es una copia del
entorno gráfico de MAC OS X ya que tiene los menús independientes a la ventana del
programa y una barra de dock donde se encuentran los accesos directos a los programas
que más utilizas o a los programas que se están ejecutando en el momento, sin embargo,
este sistema Unity no es como muy bienvenido dentro de muchos de los usuarios de Linux
a pesar de que Ubuntu es una de las distribuciones más utilizadas.

LXDE
Esta el LXDE que es una evolución del FWM y el icewm y esta el cinnamon. Este es todo el
ecosistema del entorno grafico que tenemos actualmente en Linux.

Conclusión
Entonces recapitulemos tenemos el Xwindows que es el que nos provee el display, que
nos permite la resolución, el tamaño, la profundidad de colores y la entrada principal del
teclado y el mouse. Preparando la parte visual para lo que son los gestores de ventanas
como ya lo vimos o los sistemas de escritorio que hoy por hoy son manejados por Gnome,
como ser el clon de Gnome que se llama MATE, porque a mucha gente no le gusto el
Gnome 3 y quiere seguir conservando el Gnome 2 por eso usan el escritorio de MATE, el
KDE que también es un jugador muy fuerte.

El entorno gráfico de Linux no es solo un entorno gráfico es todo un sistema de protocolos


de red para terminales remotas que se puede utilizar y que se puede explotar no
solamente como entorno gráfico del sistema operativo.

92
Automatización de Tareas | cron y at

Vamos a ver la automatización y la programación de tareas por medio del comando cron
y at.

Antes de explicar que es cron y como funciona, primero debemos ver un par de
comandos, que son:

 date que nos permite ver y cambiar la hora actual del sistema.
 Para averiguar el día de ayer: date -d "yesterday"
 Para averiguar el día de hoy: date
 Para averiguar el día de mañana: date -d "tomorrow"
 Para especificar el formato deseado: date +%d/%h/%y
 cal nos muestra el mes actual y nos marca el día de hoy.
 Muestra el mes actual: cal
 Muestra el mes pasado, presente y siguiente: cal -3
 Muestra el calendario de este año: cal -y

Teniendo presentes date y cal pasemos a ver que es cron.

¿Qué es cron?
Su nombre cron proviene del griego chronos que significa “tiempo”. Es el equivalente al
administrador de tareas en Windows, es una herramienta de cronograma que ejecuta
procesos a intervalos regulares (cada minuto, día, semana o mes). Los procesos que
deben ejecutarse y la hora en la que deben hacerlo se especifican en el fichero crontab.

¿Cómo funciona cron?


Cron se maneja a través de comando crontab -e este nos lleva a un tabulador que nos
indica un formato para poder programar las tareas en nuestro computador.

.---------------- Minuto (0 - 59)


| .-------------- Hora (0 - 23)
| | .------------ Día del mes (1 - 31)
| | | .---------- Mes (1 - 12) O jan, feb, mar, apr ... (los meses en inglés)
| | | | .-------- Día de la semana (0-7) O sun, mon, tue, wed, thu, fri, sat (días en inglés)
| ||| |
* * * * * comando para ser ejecutado

93
Ejemplo practico
En la línea de asteriscos vamos a sustituir el primer asterisco por el 5 y luego le indicamos
el comando Date >> ejemplo1.txt

5 * * * * Date >> ejemplo1.txt

¿Qué va a hacer esto? se va a ejecutar cada 5 minutos, porque se va a ejecutar en cada


minuto, en cada hora, en cada día del mes, en cada mes, y creará el archivo ejemplo1.txt
que registrara la salida de date de manera acumulativa. 46

46 * * * * Date >> ejemplo2.txt

Se ejecute en el minuto 46 de todas las horas, de todos los días

50 6 * * * Date >> ejemplo3.txt

Se ejecuta todos los días a las 6:50


57 6 3 * * Date >> ejemplo4.txt

Se ejecutará cada día 3 a las 6:57


5 7 13 5 * tar zcvf Linux-4.0.1.tar.gz lunix-4.0.1

Se ejecutará cada mes de Mayo el día 13 a las 7:5 y realizara el backup de las fuentes del
kernel Linux 4.0.1
15 7 13 5 4 tar zcvf Linux-4.0.1.tar.gz lunix-4.0.1

Se ejecutara solamente los días miércoles de Mayo cuando estos caigan en 13 a las 7:15

Resumen de cron
No olvidemos que:

 El primer parámetro es el minuto.


 El segundo parámetro es la hora.
 El tercer parámetro es el día del mes.
 El cuarto parámetro es el mes.
 Y el quinto parámetro es el día de la semana.
 En números el sexto parámetro es el comando que nosotros queremos ejecutar.

94
Comando at
Ahora pasamos a otro servicio que nos permite programar las tareas que es el at.

El at funciona de forma diferente funciona más como una cola/spooler que nos permite
especificarle tanto la fecha como la hora de lo que vamos a ejecutar, en el formato hora
fecha habitual.

Sintaxis
at 7:20 05/13/2015 formato (MM/DD/YY)

Una vez colocamos at y la fecha nos va a dar un prompt en el cual podemos escribir el
comando que queremos ejecutar.

Ejemplo de comando a ejecutar: date >> ejemplo5.txt

Una vez escrito el comando guardamos la tarea con Control + d

¿Qué hace esto? a las 7:20 de la mañana del 13 de mayo del 2015 nos ejecuta el
comando date

Ver los trabajos programados de at

Ahora para ver los trabajos en la cola de at usaremos el comando atq

95
Formas de usar el comando at
1. Programa una tarea a las 11:00 de la mañana.
1. at 11:00 AM
2. Programa una tarea a las 11:00 de la mañana del próximo domingo.
0. at 11:00 AM Sun
3. Programa una tarea a las 11:00 de la mañana del 25 de Julio
0. at 11:00 AM July 25
4. Programa una tarea a las 11:00 de la mañana del 22 de Junio del 2015
0. at 11:00 AM 6/22/2015
1. at 11:00 AM 6.22.2015
5. Programa una tarea a las 11:00 de la mañana de la misma fecha pero del próximo mes.
0. # at 11:00 AM next month
6. Programa una tarea a las 11:00 de la mañana de mañana.
0. at 11:00 AM tomorrow
7. Programa una tarea a ejecutar después de 1 hora.
0. at now + 1 hour
8. Programa una tarea a ejecutar después de 30 minutos.
0. at now + 30 minutes
9. Programa una tarea a ejecutar después de 1 y 2 semanas.
0. at now + 1 week
1. at now + 2 weeks
10. Programa una tarea a ejecutar después de 1 y 2 años.
0. at now + 1 year
1. at now + 2 years
11. Programa una tarea a ejecutar a la media noche.
0. at midnight
12. Programa una tarea a ejecutar al medio día(a las 12:00 horas).
0. at noon

Instalación y estado del servicio de at


 Para instalar at usar el siguiente comando: apt-get install at
 Para verificar si el servicio de at está activo: service atq status
 si es necesario iniciar el servicio: atd start/running, process 1010

Bueno y con esto terminamos esta parte de automatización y programación de


tareas.

96

También podría gustarte