Curso de Linux
Curso de Linux
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.
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.
Entonces estas son las 4 Libertades básicas que Richard Stallman defiende en su
postura de Software Libre.
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.
Esto produce un conjunto de tecnologías que permiten una alternativa, solamente basada
en software libre.
¿Qué es GNU?
GNU es un acrónimo Recursivo de GNU no es UNIX .
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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í.
/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.
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.
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
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.
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
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.
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.
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
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.
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.
¿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.
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.
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:
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.
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.
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.
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.
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.
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)
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.
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
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
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.
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.
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 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 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.
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.
Comando KILL
kill tiene las siguientes sintaxis:
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.
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.
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 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.
Bueno existen tres comandos básicos para esta misión que son:
1. cp para copiar
2. mv para mover
3. rm para borrar
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.
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.
El mv nos mueve un archivo de una ubicación del disco a otra o de una carpeta a otra.
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 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.
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.
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.
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.
Sintaxis de gunzip:
Ejemplo:
gunzip linux-2.6.0.tar.gz
36
Comprimir Archivos en Linux .tar.gz
Ahora lo volvemos a comprimir en el comando gzip
gzip linux-2.6.0.tar.gz
Volvemos a descomprimimos para seguir el ejemplo pero ahora con otro comando.
gunzip 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
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.
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.
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
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
Ejemplo:
tar zcvf linux-2.6.7.tar.gz
39
Parámetro z y cvf
Sintaxis:
tar zvxf + nombre de archivo
Ejemplo:
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:
ls -lh linux-2.6.7.tar.bz2
Ejemplo:
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:
Ejemplo
t para visualizar.
v para que nos saque al estándar output.
f que significa que es un archivo.
tar tvf + nombre del archivo origen > nombre de archivo destino
Ejemplo:
Ejemplo:
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:
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.
Ejemplo:
Ejemplo:
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
Ejemplo:
unzip -v linux-2.6.7.zip
Ejemplo:
a de agregar
Comprobamos con:
ls -lh Linux.2.6.7.rar
Sintaxis de find:
find [Ruta] -name [Cadena de búsqueda]
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.
44
Ejemplo:
Al no ser una búsqueda literal nos mostrara archivos con mayúscula y minúscula que
contenga la cadena linux.
Buscar archivos con permiso de lectura y escritura para los 3 los roles
find / -perm 0666
Buscar archivos con permiso de solo lectura para los 3 los roles
find / -perm 0444
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
-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
46
Ejemplo de búsqueda de archivos por usuario:
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.
Ahora el mismo ejemplo pero para archivos cuyo usuario sea root
find / -atime 30
find / -mtime 30
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:
Con -size 10M le estamos indicado que busque archivos de tamaño de 10MB
Otro ejemplo:
Con el operador + le estamos indicando que nos busque en este ejemplo los archivos que
tengan más de 10 Mb.
Con el operador - solicitamos que nos busque en este ejemplo los archivos que tengan
menos de 10 Mb.
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.
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.
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
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.
También podemos buscar por los últimos años, meses, semanas o dias:
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.
greep 80 /etc/*.conf
En el segundo ejemplo del uso de greep realizaremos una búsqueda de una cadena de
texto:
En el tercer ejemplo
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.
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.
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.
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.
54
Esta es la forma con la que se trabaja básicamente en el editor VI de Linux.
Editor de texto MC
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:
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:
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.
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:
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
Editamos el script pico script.sh y una línea abajo de "Hola mundo" escribimos:
echo $1
echo $2
echo $3
58
Como vemos el shell script nos arroga algo parecido a lo siguiente en la salida:
hola mundo
parametro1
parametro2
parametro3
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.
pico script.sh
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”
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.
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.
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.
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
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
62
Bash Script Básico II
Hoy vamos a ver la segunda parte de Shell Script básico, ya explicamos los siguientes
apartados
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.
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
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:
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.
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
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.
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
#!/bin/bash
if [ $1 -gt $2 ];
then
echo “hola”
fi
#!/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
#!/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
#!/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.
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.
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
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
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
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
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
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
#!/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 (:)
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}’
#!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.
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
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
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.
Comprobación:
uname –a.
cat /etc/issue.net.
89
El proceso es el mismo simplemente exportamos la variable e iniciamos el entorno:
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.
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.
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.
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
¿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.
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
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:
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.
¿Qué hace esto? a las 7:20 de la mañana del 13 de mayo del 2015 nos ejecuta el
comando date
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
96