Modulo de ubuntu – linux . guia

Modulo GNU/Linux Electiva Libre II Universidad deCrdobaDepartamento de Ingeniera de Sistemas yTelecomunicaciones

ndice de contenido1. Instalacin de Paquetes en GNU/Linux Ubuntuy GNU/Linux Debian………………….4 1.1 Generalidades sobrela instalacin de paquetes enGNU/Linux………………………….4 1.2 Comandodpkg……………………………………………………………………………………………..51.3apt-get…………………………………………………………………………………………………………71.4aptitude………………………………………………………………………………………………………101.5 Gestor de paquetesSynaptic………………………………………………………………………..121.6 Instalaciones comunes para todos los sistemas GNU/Linux (.tgz o.tar.gz)………..13 1.7 Instalacin de PostgreSQL en Ubuntu8.4………………………………………………………151.8Actividades…………………………………………………………………………………………………182. Redireccionamiento y pipelines……………………………………………………………………..192.1 Generalidades sobre la salidaestndar…………………………………………………………192.2Redireccionamiento……………………………………………………………………………………..202.3Pipelines…………………………………………………………………………………………………….232.4Actividades…………………………………………………………………………………………………243. Creacin de enlaces aficheros………………………………………………………………………..253.1 Enlaces Simblicos y enlacesduros………………………………………………………………253.2 Ejemplos utilizandoenlaces………………………………………………………………………….263.3Actividades…………………………………………………………………………………………………284. Niveles de ejecucin(runlevel)………………………………………………………………………..294.1 Descripcin de los niveles deejecucin…………………………………………………………294.2Actividades…………………………………………………………………………………………………315. Introduccin a la ProgramacinShellScript…………………………………………………….325.1 Que es un ShellScript?………………………………………………………………………………325.2 Manejo deVariables…………………………………………………………………………………….355.3 Manejo de argumentos(parmetros)……………………………………………………………..375.4 Operadores decomparacin…………………………………………………………………………385.5 Manejo de condicionales(if)…………………………………………………………………………385.6 Trabajar con elcase…………………………………………………………………………………….415.7 Bucles (for ywhile)………………………………………………………………………………………435.7.1For………………………………………………………………………………………………………435.7.2While…………………………………………………………………………………………………..455.8Actividades…………………………………………………………………………………………………46Enlaces deInters………………………………………………………………………………………………47

IntroduccinEl presente modulo de Electiva Libe II (GNU/LinuxIntermedio), esta destinado para los estudiantes que tengan unnivel bsico de conocimientos sobre el uso del sistema GNU/Linux.Adems el modulo esta diseado con el propsito de brindarle alestudiante una gua o manual de referencia que permita encaminarlohacia labores administrativas avanzadas. El desarrollo de estemodulo esta conformado por cinco unidades que incluyen temas querequieren de conocimientos bsicos para realizar algunas laboresadministrativas y la ejecucin combinada de varios comandos delsistema. En la primera unidad se explican los conceptos y comandosbsicos para la instalacin de paquetes en las distribucionesGNU/Linux Ubuntu y Debian, as como la utilizacin de la herramientagrafica Synaptic para instalar paquetes. Al final de la unidad semuestra un ejemplo prctico sobre la instalacin del manejador debases de datos PostgreSQL en Ubuntu 8.4. La segunda unidad explicael uso de redireccionamiento y pipelines para controlar la salidaestndar del sistema hacia ficheros planos. De igual forma latercera unidad permite estudiar los comandos utilizados en lacreacin de enlaces simblicos y duros hacia ficheros. La cuartaunidad del modulo expone algunas generalidades sobre los diferentesniveles de ejecucin en los cuales puede iniciar un sistemaoperativo GNU/Linux y la carga de procesos durante el arranque delsistema. Por ultimo la quinta unidad presenta la sintaxis bsicapara que el estudiante se introduzca en la programacin shellscript.Aqu se hace nfasis en algunas tcnicas para el manejo de variables yprimitivas de programacin (if, for y while), que permitan alusuario realizar scripts que ejecuten mas de un comando a lavez.

1. Instalacin de Paquetes en GNU/Linux Ubuntu y GNU/LinuxDebian

Objetivos

Conocer las principales herramientas que ofrecen lasdistribuciones Ubuntu y/o Debian para la instalacin de paquetes enel sistema.

Aprender a realizar las labores administrativas de actualizacine instalacin de paquetes en nuestro sistema GNU/Linux Ubuntu y/oDebian.

1.1 Generalidades sobre la instalacin de paquetes enGNU/Linux

Como administradores de un sistema operativo GNU/Linux debemosactualizar e instalar los paquetes en nuestro sistema; para estepropsito las distribuciones Debian y Ubuntu ofrecen herramientasque facilitan la instalacin de software. En Debian y Ubuntu1, ascomo en otras distribuciones GNU/Linux el software viene enpaquetes, estos tienen un nombre y una versin. En Debian una nuevaversin de un mismo paquete remplaza a otra ya existente, adems unpaquete puede tener referencia a otros paquetes, es decir quedepende de estos. Cuando no esta instalado el paquete solo tiene suconfiguracin; si el paquete se instala y posteriormente se eliminaeste pasa al estado de inicial de configuracin. Si el usuario deseaeliminar del sistema todo el paquete y sus dependencias, entonceshay que purgarlo, borrando todo lo instalado por un paquete,incluyendo los ficheros de configuracin. Hay que tener en cuentaque no todas las distribuciones GNU/Linux tienen la misma extensinpara sus paquetes, en el caso especifico de Debian y Ubuntu laextensin de los paquetes es .deb, si por ejemplo se trabaja con RedHat la extensin de los paquetes seria .rpm y el comando a utilizarseria rpm en vez de dpkg.1http://www.reloco.com.ar/linux/debian/principiantes.html

Ejemplo de como seria la sintaxis del nombre de un paquete:NombrePaqute-NumeroVersion.deb

1.2 Comando dpkg Es una herramienta utilizada por lasdistribuciones Debian y Ubuntu para la instalacin o eliminacin depaquetes. dpkg2 es un comando relativamente complejo para usuariosnovatos, teniendo en cuenta que existen herramientas grficas fcilesde utilizar para la instalacin de paquetes, tales como el gestor depaquetes Synaptic y Aadir y quitar aplicaciones, las cuales sernanalizadas posteriormente. Entre los parmetros que podemos utilizarcon el comando dpkg encontramos: -i: Para instalar paquetes en elsistema. -r: Para desinstalar paquetes del sistema, sin borrar suconfiguracin. -P: Borrar un paquete, incluyendo dependencias yficheros de configuracin. -l: Muestra un listado de los paquetesinstalados, con su respectiva versin. -s: Muestra informacinreferente al estado de un paquete instalado en el sistema.

Si desea investigar mas a fondo sobre los parmetros y formas deuso del comando dpkg puede leer su pgina de manual. Ejemplo de comoinstalar paquetes utilizando en comando dpkg: El comando dpkgpermite la instalacin de paquetes en equipos que no tengan conexin3a Internet, pero para hacer esto primero tenemos que descargardesde un equipo que tenga Internet los paquetes y las dependencias,en Ubuntu podemos hacerlo con los siguientes comandos:

$ sudo aptitude clean $ sudo aptitude install -dnombre_paquete

2http://www.debian.org/international/spanish/contrib/paqifaz.html 3http://www.guia-ubuntu.org/index.php?title=A%C3%B1adir_aplicaciones#Paquetes_Deb

Luego nos desplazamos al directorio /var/cache/apt/archives,copiamos los archivos a un medio magntico y los llevamos al equiposin conexin, nos ubicamos en el directorio en donde se encuentre elpaquete y los instalamos con el comando: $ sudo dpkg -inombre_paquete.deb

Lo descrito anteriormente es para instalar paquetes en equiposque no tengan conexin a internet, pero la realidad es que es muchomas fcil instalar o actualizar los paquetes en nuestra maquina sicontamos con una buena conexin a internet utilizando el gestor depaquetes Synaptic. En Debian y Ubuntu se pueden instalar paquetesya preparados en el sistema, los cuales tiene extensin .deb, usandoel comando dpkg es posible que se tengan que instalar manualmentealgunas dependencias del paquete, para esto podemos buscarfcilmente con gestor de paquetes Synaptic informacin sobre lasdependencias que requiere el paquete. A continuacin instalaremos elpaquete xmms esta aplicacin es un reproductor de msica mp3: Parainstalar un paquete con dpkg en Ubuntu y Debian es muy similar,podemos buscar la pgina oficial en donde estn todos los paquetescon sus respectivas dependencias. Para el caso de Ubuntu 8.04podemos buscar en este sitio (http://packages.ubuntu.com/), lospaquetes con sus dependencias o para el caso de Debian buscar enInternet los paquetes necesarios(http://www.debian.org/distrib/packages) y sus dependencias paradescargarlas en el disco local. Primero descargamos un paquete .debque sirva para ser instalado en nuestra maquina, desde Internetdescargo el paquete xmms_1.2.10+20070601-1_amd64.deb. Luego medesplazo a al directorio instaladores, en donde descargue elpaquete y ejecuto la siguiente orden:

[email protected]:~$ cd instaladores

[email protected]:~/instaladores$ sudo dpkg -ixmms_1.2.10+20070601-1_amd64.deb Puede que muestre problemas dedependencia y el paquete quede roto, por falta de algn paquete opor el uso de una dependencia similar pero con otra versin. Sivamos al men Aplicaciones — Sonido y vdeo reproductor xmms. Siquiere desinstalar el paquete y eliminar los ficheros deconfiguracin o dependencias se utiliza el siguiente comando:encontramos instalado el

[email protected]:~/instaladores$ sudo dpkg -P xmms

1.3 apt-get

Aunque se puede instalar programas de forma grfica como veremosmas adelante, este comando permite instalar cualquier programadesde la terminal, en los sistemas Debian y Ubuntu. La utilizacinde este comando se debe inicialmente a un sistema de gestin depaquetes llamado APT4 (Advanced Packaging Tool), creado en elproyecto Debian para facilitar la instalacin de paquetes conextensin .deb; en su sistema y en distribuciones derivadas, como esel caso de Ubuntu. apt-get requiere de la configuracin del ficheroplano /etc/apt/sources.list5 de donde toma la informacin sobre laubicacin (URL’s) de los paquetes y sus dependencias para serinstalados. De esta manera la herramienta APT administra el accesoa dichos paquetes, utilizando el fichero sources.list en lossistemas Debian y Ubuntu.

4 http://es.wikipedia.org/wiki/Advanced_Packaging_Tool 5http://es.wikipedia.org/wiki/Sources.listhttp://www.reloco.com.ar/linux/debian/principiantes.html

A continuacin se muestran los parmetros de uso del comandoapt-get: update: Actualiza la lista de paquetes del sistema con lasnuevas versiones. apt-get update install: Instala en el sistema unpaquete pasado como parametro. apt-get install remove: Desinstala oeliminar un paquete del sistema. apt-get remove Estructura delfichero /etc/apt/sources.list en Ubuntu 8.04: [email protected]:~$ sudogedit /etc/apt/sources.list# deb cdrom:[Ubuntu 8.04 _Hardy Heron_ -Release amd64 (20080423)]/ hardy main restricted # Seehttp://help.ubuntu.com/community/UpgradeNotes for how to upgrade to# newer versions of the distribution. debhttp://co.archive.ubuntu.com/ubuntu/ hardy main restricted deb-srchttp://co.archive.ubuntu.com/ubuntu/ hardy main restricted ## Majorbug fix updates produced after the final release of the ##distribution. deb http://co.archive.ubuntu.com/ubuntu/hardy-updates main restricted deb-srchttp://co.archive.ubuntu.com/ubuntu/ hardy-updates main restricted## N.B. software from this repository is ENTIRELY UNSUPPORTED bythe Ubuntu ## team, and may not be under a free licence. Pleasesatisfy yourself as to ## your rights to use the software. Also,please note that software in ## universe WILL NOT receive anyreview or updates from the Ubuntu security ## team. debhttp://co.archive.ubuntu.com/ubuntu/ hardy universe deb-srchttp://co.archive.ubuntu.com/ubuntu/ hardy universe debhttp://co.archive.ubuntu.com/ubuntu/ hardy-updates universe deb-srchttp://co.archive.ubuntu.com/ubuntu/ hardy-updates universe ## N.B.software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu## team, and may not be under a free licence. Please satisfyyourself as to ## your rights to use the software. Also, pleasenote that software in ## multiverse WILL NOT receive any review orupdates from the Ubuntu ## security team. debhttp://co.archive.ubuntu.com/ubuntu/ hardy multiverse deb-srchttp://co.archive.ubuntu.com/ubuntu/ hardy multiverse debhttp://co.archive.ubuntu.com/ubuntu/ hardy-updates multiversedeb-src http://co.archive.ubuntu.com/ubuntu/ hardy-updatesmultiverse

## Uncomment the following two lines to add software from the’backports’ ## repository. ## N.B. software from this repositorymay not have been tested as ## extensively as that contained in themain release, although it includes ## newer versions of someapplications which may provide useful features. ## Also, pleasenote that software in backports WILL NOT receive any review ## orupdates from the Ubuntu security team. debhttp://co.archive.ubuntu.com/ubuntu/ hardy-backports mainrestricted universe multiverse deb-srchttp://co.archive.ubuntu.com/ubuntu/ hardy-backports mainrestricted universe multiverse ## Uncomment the following two linesto add software from Canonical’s ## ‘partner’ repository. Thissoftware is not part of Ubuntu, but is ## offered by Canonical andthe respective vendors as a service to Ubuntu ## users. # debhttp://archive.canonical.com/ubuntu hardy partner # deb-srchttp://archive.canonical.com/ubuntu hardy partner debhttp://security.ubuntu.com/ubuntu hardy-security main restricteddeb-src http://security.ubuntu.com/ubuntu hardy-security mainrestricted deb http://security.ubuntu.com/ubuntu hardy-securityuniverse deb-src http://security.ubuntu.com/ubuntu hardy-securityuniverse deb http://security.ubuntu.com/ubuntu hardy-securitymultiverse deb-src http://security.ubuntu.com/ubuntu hardy-securitymultiverse

Estructura del fichero /etc/apt/sources.list en Debian etch:salasistema:/home/administrador# gedit /etc/apt/sources.list# # debcdrom:[Debian GNU/Linux 4.0 r3 _Etch_ – Official amd64 DVD Binary-120080217-12:13]/ etch contrib main deb cdrom:[Debian GNU/Linux 4.0r3 _Etch_ – Official amd64 DVD Binary-1 20080217-12:13]/ etchcontrib main # Line commented out by installer because it failed toverify: #deb http://security.debian.org/ etch/updates main contrib# Line commented out by installer because it failed to verify:#deb-src http://security.debian.org/ etch/updates main contrib

Los comandos anteriores editan estos ficheros para serconfigurados. Generalmente en la configuracin se quitan loscomentarios (#) de las URL’s en donde se encuentran losrepositorios para tener acceso a estos, o se agregan direccionescon nuevos repositorios. Por ejemplo: Ubuntu:

# deb http://archive.canonical.com/ubuntu hardy partner #deb-src http://archive.canonical.com/ubuntu hardy partner

deb http://archive.canonical.com/ubuntu hardy partner deb-srchttp://archive.canonical.com/ubuntu hardy partner

Debian

# Line commented out by installer because it failed to verify:#deb http://security.debian.org/ etch/updates main contrib # Linecommented out by installer because it failed to verify: #deb-srchttp://security.debian.org/ etch/updates main contrib

# Line commented out by installer because it failed to verify:deb http://security.debian.org/ etch/updates main contrib # Linecommented out by installer because it failed to verify: deb-srchttp://security.debian.org/ etch/updates main contrib

Para la Instalacin del editor eclipse, escribimos en la consolael siguiente comando:

# apt-get install eclipse

Luego accedemos a la aplicacin a travs del men Aplicaciones —Programacin para abrir el editor eclipse. Si queremos desinstalarla aplicacin ejecutamos en la consola el siguiente comando.

# apt-get remove eclipse

1.4 aptitude

Con el comando aptitude6 se pueden instalar aplicaciones, en ladistribucin GNU/Linux Ubuntu. Esta herramienta se utiliza de formasimilar al comando apt-get, pero ambas presentan una diferencia almomento de eliminar un paquete. Cuando se elimina un paquete conaptitude se borran todas las dependencias del paquete, siempre queestas no sean usadas por otros programas. Por el contrario apt-geto el gestor de paquetes Synaptic solo eliminara el paquete y no susdependencias.

6http://www.guia-ubuntu.org/index.php?title=A%C3%B1adir_aplicaciones#aptitude_y_apt-get

A continuacin se muestran los parmetros de uso del comandoaptitude:

install: Este parmetro permite la instalacin de paquetes en elsistema. $ sudo aptitude install remove: El parmetro permitedesinstalar los paquetes del sistema. $ sudo aptitude remove remove–purge: El parmetro permite desinstalar los paquetes del sistemajunto con la configuracin y sus dependencias. $ sudo aptituderemove –purge update: Actualiza la lista de paquetes disponiblesen los reposistorio. $ sudo aptitude update help: Para obtenerayuda adicional sobre la sintaxis de uso del comando. $ sudoaptitude help

Ejemplo de la instalacin del editor emacs: Ingresamos a laconsola y digitamos el siguiente comando para instalar el editoremacs: [email protected]:~$ sudo aptitude install emacs Luego paraacceder al editor instalado escribimos en la consola el nombre delmismo: [email protected]:~$ emacs Si deseamos desinstalar el paqueteemacs incluyendo sus archivos de configuracin escribimos en laconsola en siguiente comando. [email protected]:/home/pedro# aptituderemove –purge emacs

1.5 Gestor de paquetes Synaptic

Synaptic7 es una avanzada y potente herramienta grfica parainstalar o eliminar aplicaciones en las distribuciones Ubuntu yDebian de una manera sencilla. Para ingresar a la aplicacin tantoen Debian como en Ubuntu vamos al men: Sistema — Administracin— Gestor de paquetes Synaptic

Para instalar o desinstalar un paquete (programa), simplementese selecciona el paquete y se oprime el botn Aplicar. En elsiguiente enlace (http://www.vimeo.com/434596) pueden ver un videosobre la instalacin de aplicaciones utilizando Synaptic.

7http://www.guia-ubuntu.org/index.php?title=A%C3%B1adir_aplicaciones#Gestor_de_paquetes_Synaptichttp://www.configurarequipos.com/doc735.html

1.6 Instalaciones comunes para todos los sistemas GNU/Linux(.tgz o .tar.gz)

En los sistemas operativos GNU/Linux existen ficheros con losfuentes de cualquier aplicacin para ser compilados en nuestrosistema, estos archivos suelen tener las extensiones .tgz, .tar.gzy .tar.bz2.

Para la instalacin de la aplicacin amsn, a travs de los ficherosfuentes debemos seguir los siguientes pasos: Descargar los fuentesdel sitio (http://www.amsn-project.net/linux-downloads.php), parael programa amsn SOURCE. Ingresamos a una determinada terminal ynos ubicamos dentro del directorio donde se encuentra el ficherodescargado llamado amsn-0.97.2.tar.bz2. Descomprimir el ficherodescargado amsn-0.97.2.tar.bz2, mediante la siguiente instruccin: #tar -xvvjf amsn-0.97.2.tar.bz2 Una vez que descomprimimos ydesempaquetamos el fichero con el comando anterior, obtenemos unacarpeta con el nombre del fichero (amsn-0.97.2). La instalacin deun aplicativo a partir del cdigo fuente, requiere la configuracinde las fuentes para la distribucin, construccin de los ficheros conbase a la distribucin e instalacin del aplicativo. Cabe aclarar quees necesario disponer de las cabeceras (linux-headears) de ladistribucin instalada. Ingresamos al directorio amsn-0.97.2,mediante el comando: # cd amsn-0.97.2

Cabe aclarar que esta aplicacin posee ciertas dependencias. Paracada una de estas dependencias es til, instalar las ultimasversiones de las mismas: tcl-dev tk-dev libpng-dev libjpeg-dev

Ejecutamos el fichero configure, mediante la instruccin: #./configure, con el objetivo de identificar si faltan dependenciasque ocasionen la no instalacin del aplicativo. Al momento de laconfiguracin encontramos los siguientes errores:

checking tcl build dir… configure: error: Unable to find Tcldirectory or Tcl package is not tcl-dev. checking tk build dir…configure: error: Unable to find Tk directory or Tk package is nottk-dev configure: error: libpng is required configure: error:libjpeg is required

Al encontrar el error este, indica que debemos instalar lospaquetes tcl-dev, la ultima versin tcl8.5-dev, instalar el paquetetk-dev, la ultima versin tk8.5-dev, instalar el paquetelibpngxx-dev, instalar el paquete libjpegxx-dev, donde xx indica unnmero de versin para la librera. Despus de instalada cada una delas dependencias y la correcta configuracin de las fuentes,mediante la instruccin ./configure, debemos compilar los ficherosmediante la instruccin make, la cual permite la compilacin de losficheros fuentes para la distribucin sobre la cual se estatrabajando y una nueva versin del ejecutable del aplicativo.

[email protected]:~/Desktop/amsn-0.97.2$ make

Ahora para la instalacin del aplicativo, ya construido debemosejecutar en modo privilegiado el comando make install.

[email protected]:~/Desktop/amsn-0.97.2$ sudo make install rm -Rf/usr/share/amsn mkdir -p /usr/share/amsn mkdir -p /usr/bin mkdir -p/usr/share/applications/ mkdir -p /usr/share/pixmaps/ find/usr/share/amsn -name ‘.svn’ -print | xargs rm -Rf ln -sf/usr/share/amsn/amsn /usr/bin/amsn ln -sf/usr/share/amsn/amsn-remote /usr/bin/amsn-remote ln -sf/usr/share/amsn/amsn-remote-CLI /usr/bin/amsn-remote-CLI cp./amsn.desktop /usr/share/applications/ ln -sf/usr/share/amsn/desktop-icons/48×48/apps/amsn.png/usr/share/pixmaps/

Al ejecutar esta instruccin instalamos nuestro aplicativo,creamos directorios para el mismo, as como su acceso directo. Paraejecutar la aplicacin amsn debemos ejecutar en la terminal elsiguiente comando.

[email protected]:~/Desktop/amsn-0.97.2$ amsn

1.7 Instalacin de PostgreSQL en Ubuntu 8.4 Para la instalacindel gestor de bases de datos PostgreSQL, realizamos los siguientespasos :

1) Ingresamos al gestor de paquetes (Synaptic), para elloseguimos las siguientes opciones Sistemas — Administracin –Gestor de paquetes Synaptic. 2) Seleccionar el paquete llamadopostgresql y automticamente se selecciona los paquetes:postgresql-8.3, postgresql-client-8.3, postgresql-client-common ypostgresql-common. 3) Luego presionamos el botn aplicar para quelos paquetes se almacenaran localmente y sean instalados.

Realizado estos pasos, el sistema comenzara el proceso deinstalacin del gestor de bases de datos POSTGRESQL. Finalizada lainstalacin automticamente es creado un usuario dentro del sistemallamado postgres y asignado como servicio del sistema el gestor debases de datos POSTGRESQL. Ahora para iniciar correctamente sesindentro del servidor es necesario asignar un password al usuariopostgres. Para ello realizamos los siguientes pasos: 1) iniciamossesin dentro de una terminal (Aplicaciones — Accesorios –Terminal). 2) Asignamos al usuario postgres un password, mediantela utilizacin del comando passwd.

Al ejecutar dentro de la terminal sudo passwd postgres, esnecesario en primera instancia especificar el password del usuarioen sesin, para dar privilegio temporal de root, a razn de utilizarel comando sudo, luego a trasvs de passwd postgres vamos haespecificar la nueva contrasea para el usuario postgres. Ahoradebemos iniciar sesin dentro de la terminal con el usuariopostgres, ejecutando el siguiente comando su postgres.

Ahora para iniciar sesin como usuario postgres dentro del gestorde bases de datos PostgreSQL. Ejecutamos el siguiente comando psql.Si todo ha salido correctamente obtenemos lo siguiente:

El comando psql permite conectarnos a la terminal interactiva dePOSTGRESQL, con el objetivo de manipular nuestras base dedatos.

1.8 Actividades

Elaborar un cuadro comparativo con las semejanzas y diferenciasentre las herramientas de instalacin de paquetes: dpkg, aptitude yapt-get. Realizar la instalacin de una aplicacin en Debian y Ubuntua partir de los

ficheros fuentes (tgz .tar.gz). Documentar los pasos de lainstalacin en la maquina de prueba y especificar las dependenciasde dicho paquete. Tomar tres paquetes diferentes y realizar lainstalacin con dpkg, apt-get y Synaptic, tanto en Debian como enUbuntu. Documentar los pasos de la instalacin en la maquina deprueba para cada paquete y especificar las dependencias de lospaquetes. Que diferencia hay entre un fichero con extensin .tar.gzy .tar con base a la informacin de estos ficheros.

2. Redireccionamiento y pipelines

Objetivos

Aprender a controlar la salida estndar, en la ejecucin de loscomandos, redireccionado la informacin hacia ficheros planos.Utilizar tuberas para la combinacin de varios comandos del sistemay realizar tareas especficas de forma simplificada.

2.1 Generalidades sobre la salida estndar A medida que unusuario inexperto aumenta sus conocimientos en el uso de comandos,este podr tener un mayor control de la entrada y la salida estndarcunado utiliza la consola de los sistemas GNU/Linux. Esto permiteque la ejecucin de un comando no se visualice directamente enpantalla, sino que su salida sea la entrada de otro comando ofichero, permitiendo ejecutar de varias rdenes en una sola lnea decomando. Descripcin para las entradas y las salidas en elsistema8:

Todas las ordenes que se digitadas por el teclado se conocencomo:

STDIN (STANDARDINPUT) stdin

Todas las salidas visualizadas o desplegadas en pantalla seconocen como:

STDOUT (STANDARDOUTPUT) stdout STDERR (STANDARDERROR) stderr

Cuando se inicia una sesin en la shell bash se habilitan tresprocesos correspondientes a los descriptores anteriores (stdin,stdout y stderr), los cuales son enumerados de la siguientemanera:8http://es.kioskea.net/faq/387-guia-de-uso-del-shell-para-principiantes#xxx-las-redirecciones-y-los-pipelines

El proceso 0 es la entrada estndar (stdin) y corresponde a lodigitado por el teclado. El proceso 1 es la salida estndar (stdout)y corresponde a lo mostrado en la pantalla. El proceso 2 es lasalida de errores (stderr) y corresponde a los mensajes de errorvisualizados en pantalla.

Teniendo en cuenta lo anterior cuando escribimos un comando enla consola para que sea ejecutado normalmente la entrada estndar dedicho comando viene del teclado y la salida estndar salida de errorson visualizados por pantalla pero ambos son ficherosindependientes. De esta manera podemos controlar que la salida deun proceso sea la entrada de otro y que a partir de una entrada sepueda modificar la salida.

2.2 Redireccionamiento

Cuando se redirecciona puede enviarse la salida de la ejecucinde un determinado comando a otro dispositivo diferente a lapantalla, en este caso puede ser a un fichero. Las formas mscomunes de redireccionar son: >: Comando > ArchivoRedirecciona la salida de la ejecucin del comando hacia un archivoexistente, si este no existe el archivo es creado. Si el archivoexiste su contenido ser modificado.

>>: Comando >> Archivo Esta es otra forma deredireccionar la salida de la ejecucin de un comando hacia unarchivo existente pero aadiendo o anexando, a la informacin que yaexiste en el archivo mencionado. Si este no existe el archivo sercreado.

misFicheros El comando ls -al permite listar el contenido deldirectorio de trabajo del usuario pedro en el cual me encuentro yredirecciona la salida almacenando la informacin en el archivo denombre misFicheros, luego si queremos ver su contenido simplementese digitan alguno de estos dos comandos comando: [email protected]:~$cat misFicheros [email protected]:~$ gedit misFicheros

Si quiero enviar el contenido del fichero que contiene lainformacin de los usuarios creados en el sistema a un fichero defcil acceso en mi directorio de trabajo utilizo el comando:[email protected]:~$ cat /etc/passwd > misUsuarios El comando cat/etc/passwd muestra la informacin de los usuarios del sistema y lasalida se almacena en el directorio de trabajo del usuario pedro,en un archivo llamado misUsuarios, luego si queremos ver sucontenido simplemente se digitan alguno de estos dos comandos:[email protected]:~$ cat misUsuarios [email protected]:~$ geditmisUsuarios

A continuacin se escribirla una cadena de texto la cual sealmacenara en un fichero llamado ingSistemas, como el fichero noexiste este se crea en el directorio en el que me encuentro:[email protected]:~$ echo «Ingeniera de Sistemas Linea Uno» >ingSistemas El comando echo permite mostrar por pantalla una cadenade texto, en este caso la cadena de texto se almacena en el ficheroingSistemas. Entonces el contenido del fichero ser:9ftp://ftp.uniovi.es/pub/linux/docs/LuCaS/DEBIAN/%257Ejfs/debian/doc/es/debian-guide-es/html/node171.html

[email protected]:~$ cat ingSistemas Ingeniera de Sistemas Linea Uno[email protected]:~$

Ahora si quiero anexar una nueva lnea al fichero ingSistemas sinperder la informacin ya almacenada utilizo el siguiente comando:[email protected]:~$ echo «Ingeniera de Sistemas Linea Dos» >>ingSistemas Entonces el contenido del fichero ser la informacinanterior mas la nueva informacin que se anexo o aadi, sin que seperdiera la informacin que exista en el fichero: [email protected]:~$cat ingSistemas Ingeniera de Sistemas Lnea Uno Ingeniera deSistemas Lnea Dos [email protected]:~$

Cuando se desea tener la informacin de un fichero en otro que yaexista sin que se borre la informacin del fichero hacia el cual seredirecciona la salida estndar, se utiliza el siguiente comando:Tenemos el fichero asignarMAC el cual contiene la siguienteinformacin: [email protected]:~$ cat asignarMAC ****** Asignar DireccinMAC ****** [email protected]:~$ sudo ifdown eth0 [email protected]:~$ sudoifconfig eth0 hw ether 00:13:8F:47:df:30 [email protected]:~$ sudo ifupeth0 [email protected]:~$ Entonces quiero agregarle a asignarMAC lainformacin del fichero asignarIP, entonces se utiliza el comando:[email protected]:~$ cat asignarIP >> asignarMAC Si observamos elcontenido del fichero asignarMAC se anexo el contenido del ficheroasignarIP: [email protected]:~$ cat asignarMAC ****** Asignar DireccinMAC ****** [email protected]:~$ sudo ifdown eth0 [email protected]:~$ sudoifconfig eth0 hw ether 00:13:8F:47:df:30 [email protected]:~$ sudo ifupeth0

****** Asignar Direccin IP Universidad****** SSistemas IP =172.16.9.250 Mascara = 255.255.254.0 Puerta de enlace = 172.16.8.1DNS = 172.16.14.12 [email protected]:~$

Para guardar la informacin de los usuarios del sistema en unfichero llamado usuarios, donde la entrada estndar del comando aejecutar, ser la informacin que contenga el fichero /etc/passwd:[email protected]:~$ tee usuarios < /etc/passwd El comando tee seutiliza para guardar la informacin que se toma del fichero/etc/passwd, en este caso la entrada del comando se toma delfichero.

2.3 Pipelines

Los pipelines tambin son conocidos como tuberas, las cualesproporcionan filtros que permiten redireccionar la salida de uncomando como la entrada de otro comando. El smbolo utilizado pararepresentar el pipe es el carcter |. Ejemplos utilizando tuberas:Para guardar la informacin de los grupos correspondiente a algnusuario especifico del sistema en un fichero, podemos usar elsiguiente comando: [email protected]:~$ cat /etc/group | grep «pedro» |tee grupoPedro El comando cat /etc/group despliega la informacin delos grupos creados en el sistema, luego el comando grep busca todaslas lneas del fichero donde aparece la palabra pedro el cual es elnombre del usuario y por ultimo con el comando tee guardamos lainformacin desplegada en el fichero grupoPedro. Si queremos ver lainformacin de dicho fichero ejecutamos el comando: [email protected]:~$cat grupoPedro [email protected]:~$ gedit grupoPedro

Si un usuario desea contar el nmero de lneas que contiene undeterminado fichero, que contiene la informacin de los ficheros conextensin .odt en su directorio de trabajo, puede utilizar elsiguiente comando:

[email protected]:~$ find /home/pedro -name «*.odt» | tee salidaODT| wc -l El comando find /home/pedro -name «*.odt» busca todos losficheros con extensin .odt existentes dentro del directorio/home/pedro o cualquiera de los sub-directorios, luego lainformacin de salida se almacena en el fichero salidaODT con elcomando tee salidaODT por ultimo el comando wc -l cuenta cuantaslneas hay en el fichero salidaODT.

2.4 Actividades

Utilizando la consola realizar y documentar dos ejemplosprcticos de redireccionamiento utilizando >& y>>&. Ejecutar un comando que liste el contenido deldirectorio de trabajo de un usuario, pero mostrando solamente loscampos correspondientes al tamao (KB, MB o GB) y nombrerespectivamente, de todos los ficheros que se encuentren en dichodirectorio, el listado debe ser almacenado en un fichero llamadolistadoUsuario.txt y mostrar el numero de lneas que tiene estefichero. Ejecutar un comando que almacene en un fichero llamadoprocesos.txt todos los procesos relacionados con el entorno gnome,solamente con la informacin correspondiente al ID del proceso y alnombre. Documentar que funcin realiza el siguiente comandoejecutado en la shell bash:[email protected]:~$ find /home/pedro -atime-2 -name «*.odt» > archivos.txt | gedit archivos.txt

3. Creacin de enlaces a ficherosObjetivos

Conocer la importancia y la utilidad de crear enlaces fuertes yenlaces simblicos en el sistema GNU/Linux. Aprender a crear enlacessimblicos y enlaces fuertes en el sistema GNU/Linux, utilizando elcomando y los parmetros necesarios.

3.1 Enlaces Simblicos y enlaces duros

Dentro de una distribucin GNU/Linux, son muchas las tareasrealizadas por parte del usuario administrador, tales comoinstalacin de paquetes, configuracin de red, creacin y eliminacinde usuarios, manipulacin de ficheros, etc. La creacin de ficherospor parte de los usuarios dentro de un distribucin GNU/Linux, esuna de las tareas realizadas con mayor cotidianidad. Sin embargo nosolo es posible la creacin tambin disponemos de opciones paraeliminacin, renombrado y por ultimo la creacin de enlaces haciaestos. Por tal motivo un enlace se define como un vnculo que puedeexistir hacia un fichero. Dentro de las distribuciones GNU/Linux(Redhat, Ubuntu, Debian, Suse, entre otras) se contemplan dos tiposde enlaces10:

Enlaces Simblicos Enlaces duros o fuertes

Enlaces Simblicos: Se define como la vinculacin que existe haciaun fichero, de tal forma que es posible acceder al contenido deeste desde una ubicacin diferente al mismo. Cabe aclarar que estetipo de vinculacin es dbil, a razn que si el fichero al10http://andalinux.wordpress.com/2008/09/02/manejo-de-enlaces-simbolicos-en-linux/

cual se le crea la vinculacin es eliminado por completo, sepierde el enlace. Un enlace simblico realiza el mismo objetivo queun acceso directo creado dentro de los sistemas operativos Windows.Enlaces duros o fuertes: Este tipo de enlace es llamado enlace duroo fuerte, a razn de la creacin de una copia en disco del ficherooriginal al cual se le crea el enlace. Este tipo de enlace adiferencia de un enlace simblico, no depende del fichero original.Es decir si el fichero al cual se le creo el enlace fuerte eseliminado, no se pierde la informacin hacia la cual apunta elenlace.

Para la creacin de un enlace a travs de una lnea de comando, esnecesario hacer uso del comando ln. La sintaxis general del comandoes la siguiente: ln parmetros: -s Indica la creacin de un enlace detipo simblico rutaDirectorio: Indica la ruta del fichero al cual secreara el enlace nombreElenlace: Indica el nombre que tendr elenlace ha crear

3.2 Ejemplos utilizando enlaces Para la creacin de un enlace, esnecesario ingresar a una determinada Terminal y en modoprivilegiado se realizan los siguientes pasos: En lasdistribuciones Ubuntu o Debian con entorno de escritorio Gnomeingresamos a la terminal as: Aplicaciones — Accesorios —Terminal Para la creacin de un enlace simblico empleamos el comandoln, de la siguiente forma (Ejemplo uno): [email protected]:~$ ln -s/home/pedro/clasesHerencia.odt enlaceherencia Como observamos elparmetro -s indica la creacin de un enlace simblico llamadoenlaceherencia hacia el fichero clasesHerencia.odt, paraidentificar que en realidad ha sido creado correctamente el enlace,ejecutamos el comando ls -l y obtenemos: [email protected]:~$ ls -l

total 616 drwx—— 2 pedro pedro 4096 2008-11-22 18:31amsn_received -rw-r–r– 1 pedro pedro 150 2009-01-29 09:09asignarIP -rw-r–r– 1 pedro pedro 149 2009-01-29 09:09 asignarIP~-rw-r–r– 1 pedro pedro 316 2009-01-29 09:12 asignarMAC -rw-r–r–1 pedro pedro 169 2009-01-29 09:04 asignarMAC~ drwxr-xr-x 5 pedropedro 4096 2009-01-28 14:47 Catedra -rw-r–r– 1 pedro pedro 1052132008-11-27 15:56 clasesHerencia.odt -rwxrwxrwx 1 pedro pedro 1228562008-11-26 10:27 Concepto_Clases.pdf -rw-r–r– 1 pedro pedro 2682008-11-27 21:21 correos -rw-r–r– 1 pedro pedro 245 2008-11-2721:20 correos~ drwxrwxrwx 6 pedro pedro 4096 2008-11-26 10:25Curso_SENA_Java_3 drwxr-xr-x 2 root root 4096 2009-01-29 09:43Desktop drwxr-xr-x 2 pedro pedro 4096 2009-01-08 09:53 Documentoslrwxrwxrwx 1 pedro pedro 30 2009-01-29 14:04 enlaceherencia ->/home/pedro/clasesHerencia.odt Como podemos apreciar al crear unenlace simblico, este se identifica con una letra l al inicio delos permisos correspondientes y observamos que el nombre del enlaceapunta hacia el fichero hacia el cual se ha creado el enlace.

Para la creacin de un enlace simblico empleamos el comando ln,de la siguiente forma (Ejemplo dos): [email protected]:~$ ln -s/home/pedro/Imgenes/ enlaceimagenes Como observamos el parmetro -sindica la creacin de un enlace simblico llamado enlaceimageneshacia el directorio Imgenes, para identificar que en realidad hasido creado correctamente el enlace, ejecutamos el comando ls -l yobtenemos: [email protected]:~$ ls -l total 636 drwx—— 2 pedropedro 4096 2008-11-22 18:31 amsn_received -rw-r–r– 1 pedro pedro150 2009-01-29 09:09 asignarIP -rw-r–r– 1 pedro pedro 1492009-01-29 09:09 asignarIP~ -rw-r–r– 1 pedro pedro 316 2009-01-2909:12 asignarMAC -rw-r–r– 1 pedro pedro 169 2009-01-29 09:04asignarMAC~ drwxr-xr-x 5 pedro pedro 4096 2009-01-28 14:47 Catedra-rw-r–r– 1 pedro pedro 105213 2008-11-27 15:56 clasesHerencia.odt-rwxrwxrwx 1 pedro pedro 122856 2008-11-26 10:27Concepto_Clases.pdf -rw-r–r– 1 pedro pedro 268 2008-11-27 21:21correos -rw-r–r– 1 pedro pedro 245 2008-11-27 21:20 correos~drwxrwxrwx 6 pedro pedro 4096 2008-11-26 10:25 Curso_SENA_Java_3drwxr-xr-x 2 root root 4096 2009-01-29 09:43 Desktop drwxr-xr-x 2pedro pedro 4096 2009-01-08 09:53 Documentos -rw-r–r– 1 pedropedro 18456 2009-01-29 14:11 ejemplos.odt lrwxrwxrwx 1 pedro pedro22 2009-01-29 14:12 enlaceimagenes -> /home/pedro/Imgenes/

Para la creacin de enlaces fuertes o duros empleamos el comandoln, de la siguiente forma: [email protected]:~$ ln/home/pedro/Concepto_Clases.pdf enlaceconcepto Como se observa parala creacin de este tipo de enlaces, no es necesario especificaralgn parmetro, por lo dems basta seguir la sintaxis bsica delcomando. Para identificar que en realidad ha sido creadocorrectamente el enlace, ejecutamos el comando ls -l y obtenemos:[email protected]:~$ ls -l total 764 drwx—— 2 pedro pedro 40962008-11-22 18:31 amsn_received -rw-r–r– 1 pedro pedro 1502009-01-29 09:09 asignarIP -rw-r–r– 1 pedro pedro 149 2009-01-2909:09 asignarIP~ -rw-r–r– 1 pedro pedro 316 2009-01-29 09:12asignarMAC -rw-r–r– 1 pedro pedro 169 2009-01-29 09:04asignarMAC~ drwxr-xr-x 5 pedro pedro 4096 2009-01-28 14:47 Catedra-rw-r–r– 1 pedro pedro 105213 2008-11-27 15:56 clasesHerencia.odt-rwxrwxrwx 2 pedro pedro 122856 2008-11-26 10:27Concepto_Clases.pdf -rw-r–r– 1 pedro pedro 268 2008-11-27 21:21correos -rw-r–r– 1 pedro pedro 245 2008-11-27 21:20 correos~drwxrwxrwx 6 pedro pedro 4096 2008-11-26 10:25 Curso_SENA_Java_3drwxr-xr-x 2 root root 4096 2009-01-29 09:43 Desktop drwxr-xr-x 2pedro pedro 4096 2009-01-08 09:53 Documentos -rw-r–r– 1 pedropedro 22544 2009-01-29 14:16 ejemplos.odt -rwxrwxrwx 2 pedro pedro122856 2008-11-26 10:27 enlaceconcepto Como observamos este tipo deenlace se diferencia del simblico, al no mostrar a donde estaapuntado el enlace creado.

3.3 Actividades

Explicar 2 ventajas y desventajas de la creacin de enlacessimblicos y duros. Tomar dos directorios cualesquierapertenecientes al usuario en sesin. Crear dos enlaces de tiposimblico con base a cada directorio, el nombre para cada enlacedebe estar compuesto por el nombre de cada directorio y la fecha decreacin del enlace. Ejemplo: nombredirectorio:imagenesnombredelenlace:imagenes-2009-03-01

Crear dos enlaces simblicos sobre el directorio personal delusuario en sesin.

4. Niveles de ejecucin (runlevel)Objetivos

Conocer los diferentes estados o niveles de ejecucin en los quepuede arrancar el sistema operativo GNU/Linux. Conocer eldirectorio del que dispone cada nivel de ejecucin para crearenlaces simblicos a ficheros ubicados dentro del directorio/etc/init.d.

4.1 Descripcin de los niveles de ejecucin El proceso de arranquepara un sistema operativo GNU/Linux, se desarrolla con base a laconsecucin de diversas fases o etapas, tales como bsqueda del MBR(sector de arranque), cargar del kernel y por ultimo iniciacin deservicios. Este ultimo proceso es realizado por un programa llamadoinit, cuyo objetivo es dar inicio a un determinado nivel deejecucin (runlevel) sobre el cual trabajara la maquina o equipo.Los niveles de ejecucin o runlevels11 son distintos estados en loscuales puede iniciar un sistema operativo GNU/Linux. En laactualidad existen 7 niveles de ejecucin sobre los que puede operaro trabajar un sistema operativo GNU/Linux. La siguiente tablapresenta cada nivel de ejecucin y descripcin del mismo: Nivel deejecucin 0 Descripcin Nivel de ejecucin conocido como halt seencarga de detener todos los procesos activos en el sistema, con elobjetivo del correcto apagado del equipo. Nivel de ejecucinconocido como monousuario o single user, a razn de permitir lasesin de un nico usuario por defecto inicia como usuarios root.Este nivel de ejecucin es empleado para tareas de mantenimientosdel sistema. Nivel de ejecucin multiusuario, sin soporte para red.Nivel de ejecucin multiusuario, con soporte para red. Indefinido osin uso. Nivel de ejecucin multiusuario, con capacidad grfica (Xwindow). Nivel de ejecucin de reinicio del sistema.

1

2 3 4 5 6

11http://www.linuxparatodos.net/portal/staticpages/index.php?page=niveles-ejecucion

Cabe aclarar que cada uno de estos niveles de ejecucin, disponede un directorio especfico. Dichos niveles de ejecucin se puedenencontrar dentro del directorio /etc. La siguiente tabla muestra elnivel de ejecucin y su respectivo directorio de trabajo. Nivelejecucin 0 1 2 3 4 5 6 Directorio /etc/rc0.d /etc/rc1.d /etc/rc2.d/etc/rc3.d /etc/rc4.d /etc/rc5.d /etc/rc6.d

Cada directorio perteneciente a los distintos niveles deejecucin poseen distintos enlaces simblicos a ficheros, utilizadospara el inicio y parada de cada uno de los procesos ha ejecutar odetener al ingresar ha un nivel de ejecucin. La creacin de estetipo de enlace se realiza a partir de ficheros creados dentro deldirectorio /etc/init.d, es decir cada proceso o servicio ha iniciaro detener dentro de un nivel de ejecucin debe poseer su ficherocorrespondiente dentro de este directorio. Por ejemplo:[email protected]:~$ cd /etc/rc0.d/ [email protected]:/etc/rc0.d$ ls -ltotal 4 lrwxrwxrwx 1 root root 13 2008-11-13 05:34 K01gdm ->../init.d/gdm lrwxrwxrwx 1 root root 17 2008-11-13 05:34 K01usplash-> ../init.d/usplash lrwxrwxrwx 1 root root 16 2008-11-13 05:34K16dhcdbd -> ../init.d/dhcdbd lrwxrwxrwx 1 root root 162008-11-13 05:34 K20apport -> ../init.d/apport lrwxrwxrwx 1 rootroot 20 2008-11-13 06:17 K20atieventsd -> ../init.d/atieventsdlrwxrwxrwx 1 root root 22 2008-11-13 05:34 K20avahi-daemon ->../init.d/avahi-daemon lrwxrwxrwx 1 root root 20 2008-11-13 05:34K25hwclock.sh -> ../init.d/hwclock.sh lrwxrwxrwx 1 root root 132008-11-13 05:34 K39ufw -> ../init.d/ufw lrwxrwxrwx 1 root root20 2008-11-13 05:34 K50alsa-utils -> ../init.d/alsa-utilslrwxrwxrwx 1 root root 26 2008-11-13 05:34 K59mountoverflowtmp-> ../init.d/mountoverflowtmp lrwxrwxrwx 1 root root 212008-11-13 05:34 K99laptop-mode -> ../init.d/laptop-mode-rw-r–r– 1 root root 355 2008-04-19 00:05 README lrwxrwxrwx 1root root 41 2008-11-13 05:34 S01linux-restricted-modules-common-> ../init.d/linux-restricted-modules-common Como apreciamos enel ejemplo anterior, dentro del directorio /etc/rc0.d, observamosdistintos enlaces simblicos a ficheros ubicados dentro deldirectorio /etc/init.d. K01gdm, S01linux-restricted-modules-commonson ejemplos de estos enlaces.

Para la creacin de este tipo de enlace dentro de un determinadonivel de ejecucin se debe seguir ciertas convenciones al momento deestipular el nombre del enlace. Si deseamos definir el inicio de unservicio o proceso para un nivel de ejecucin debemos comenzar elnombre del enlace con la letra S, seguido de un valor numricoentero que indica el nivel de prioridad para ejecutar el serviciocuyo valor oscila de -20 a 20 y por ultimo el nombre relativo alservicio. Cabe aclarar que los valores de -20 a 0 para el nivel deprioridad son exclusivos para los procesos pertenecientes alsuperusuario (root). Ahora si el nombre del enlace inicia con laletra K, indica que el servicio ser detenido. Ejemplo: lrwxrwxrwx 1root root 41 2008-11-13 05:34 S01linux-restricted-modules-common-> ../init.d/linux-restricted-modules-common En la creacin deeste enlace, apreciamos que el nombre del enlaceS01linux-restrictedmodules-common cumple con la especificacin parainiciar un servicio llamado linuxrestricted-modules-common cuyaprioridad es 01. lrwxrwxrwx 1 root root 13 2008-11-13 05:34 K01gdm-> ../init.d/gdm En la creacin de este enlace, apreciamos que elnombre del enlace K01gdm cumple con la especificacin para detenerun servicio llamado gdm cuya prioridad es 01.

4.2 Actividades

Explicar con sus palabras como se controla, qu servicios sedeben iniciar al pasar el sistema a un determinado nivel deejecucin o runlevel? Que fichero es necesario configurar en unsistema operativo GNU/Linux, con el objetivo de definir un nivel deejecucin predeterminado? Explicar 3 formas de iniciar GNU/Linux enel runlevel single-user?

5. Introduccin a la Programacin ShellScript

Objetivos

Conocer para que sirve un Shell Script, cual es su funcionalidady como se crea un primer script en GNU/Linux.

Aprender a asignarle valores a las variables y utilizarlas endiferentes operaciones, adems de distinguir las variables descritaspor el sistema.

Estudiar los operadores de comparacin y manejo del condicionalif, para evaluar condiciones en la programacin shellscript (shellbash).

Aprender a ejecutar una secuencia de comandos e instruccionesutilizando el ciclo for y while en la programacin shellscript(shell bash).

5.1 Que es un Shell Script?

Cada vez que el usuario del sistema GNU/Linux afianza susconocimientos en el uso de la shell bash, observara que se puedenrealizar varias operaciones al mismo tiempo pero existir lanecesidad de introducir varios comandos a la vez para lograr dichoobjetivo. La programacin Shell Script permite almacenar variasordenes en un fichero para que sean interpretadas una a una, adems,es apropiada para la administracin de nuestro sistema. Un ShellScript12 es un archivo de texto que contiene una serie deinstrucciones, las cuales son un conjunto de comandos que ejecutala shell bash de manera ordenada. Los Scripts no necesitan sercompilados, para esto existe un programa ayudante o interprete(shell bash), para su ejecucin.

12 http://www12.brinkster.com/hugo4295/shellscripting.pdf

En conclusin un Script es un archivo plano que contiene comandose instrucciones para evaluar algunas condiciones. Si queremosescribir un programa Shell Script solo se requiere contar con uneditor de textos como: vi, emacs, gedit, vim o cualquier otro. Acontinuacin un ejemplo sencillo para crear nuestro primer Script,con el objetivo de entender mejor su utilidad. Primero que todoaclararemos que en GNU/Linux los ficheros no necesitan tener unaextensin, pero por convenio general, si queremos utilizaremos laextensin .sh para identificar nuestros Scripts entre el resto dearchivos. Este primer programa o ShellScript, ser un sencillosaludo de bienvenida utilizando el comando echo. Primero que todoabrimos el editor gedit, del entorno de escritorio Gnome ejecutandoel siguiente comando:

[email protected]:~$ gedit saludo.sh Tambin podemos acceder aleditor a travs del men Aplicaciones — Accesorios –Editor detextos y escribimos las lneas de cdigo que tendr nuestro Script,como se ve en el siguiente grfico.

Para ejecutarlo utilizo primeramente el comando bash, esta es laaplicacin ayudante que interpreta los comandos del archivo, de estamanera reviso que el shellscript funciona correctamente:

[email protected]:~$ bash saludo.sh

Ahora modifico los permisos de acceso y le asigno los permisosde ejecucin al fichero:

[email protected]:~$ chmod +x saludo.sh

Una vez agregado el permiso de ejecucin, puedo ejecutarlo comoun programa normal, gracias a la aplicacin ayudante, que defino enla primera lnea del script:

[email protected]:~$ ./saludo.sh

Para ejecutarlo como un programa normal del sistema, escribiendonicamente su nombre. Puedo copiarlo en el directorio /usr/local/bino /bin. [email protected]:/home/pedro# cp saludo.sh /usr/local/bin

Una vez realizados todos los pasos anteriores puedo ejecutar elscript como si se tratara de un comando normal del sistema,simplemente escribiendo su nombre en la consola:

[email protected]:~$ saludo.sh ****** UNIVERSIDAD DE CRDOBA ******Cordial Saludo! Estudiantes Electiva Libre II….[email protected]:~$

5.2 Manejo de Variables

Una variable es un nombre al cual le asignamos un determinadovalor, dicho valor puede ser numrico o una cadena de caracteres ypueden ser utilizadas en la programacin ShellScript. A continuacinveremos ejemplos que nos enseen a utilizar las variables ennuestros scripts. Creamos un script que se llame varuno, que tendrel siguiente cdigo:

#!/bin/bash num1=20 num2=5 num3=10 resul=$[(num1+num3)/num2]echo «El resultado es: $resul» echo » » exit 0

La primera lnea define la aplicacin ayudante, la cual ejecutaralas instrucciones del script. Las siguientes tres lneas muestrancomo se asigna el valor a las variables (num1, num2 y num3). Sedebe tener en cuenta que no se pueden dejar espacios entre elnombre de la variable y el valor asignado (nomVar=valor). En laprxima lnea se usa la expresin $[ ] para realizar la operacinaritmtica, la cual se asigna a la variable resul. Escribimos elresultado con la instruccin (echo «El resultado es: $resul»). Hayque tener en cuenta que para referirnos al nombre de una variablehay que colocar el signo $ delante de su nombre($nombreVariable).

A continuacin probaremos con otro script al que llamaremosvardos, para asignar una cadena de texto a una variable:

#!/bin/bash fraseUno=»El nombre que escribi es: » fraseDos=»Elusuario que esta usando la shell es: » usuario=$(whoami) echo»Escriba su nombre:» read nom echo » » echo $fraseUno $nom echo$fraseDos $usuario echo » » exit 0

La primera lnea como se dijo anteriormente define la aplicacinayudante, la cual ejecutara las instrucciones del script. En lasegunda y tercera lnea se asigna una cadena de texto a lasvariables (fraseUno y fraseDos). La cuarta lnea asigna a lavariable usuario, el nombre del usuario que esta usando la shell.En las prximas dos lneas se pide que se escriba una cadena de textoy con el comando read podemos capturar la entrada del usuario enuna variable llamada nom. Finalmente mandamos a mostrar elcontenido de cada una de las variables con los comandos: echo$fraseUno $nom y echo $fraseDos $usuario.

Existen una serie de variables descritas por el sistema y sernutilizadas para trabajar con parmetros13:

$$: Es el nmero que identifica ala proceso que se estaejecutando. $?: Resultado de la ejecucin del comando. Cuando unprograma termina su ejecucin retorna un valor, si este es ceroquiere decir que el programa termino de ejecutarse con con xito.$0: Permite obtener el nombre del script que se ha ejecutado en laconsola.

13 http://www.e-ghost.deusto.es/docs/shellScriptin.html#complexhttp://xinfo.sourceforge.net/documentos/bash-scripting/bash-script-2.0.html#uso_de_variables

$1 hasta $9: Corresponde desde el primer argumento hasta elnoveno, que se pueden pasar cuando se ejecuta el comando. $#: Paratener el nmero de argumentos pasados como parmetros.

5.3 Manejo de argumentos (parmetros)

Los comandos que se ejecutan en una consola suelen tenerargumentos o parmetros, tal como se muestra en el siguienteejemplo: [email protected]:~$ rm -R /home/pedro/prueba

Si observamos rm es el comando para borrar ficheros, -R es unaopcin del comando y la ruta del directorio /home/pedro/prueba es unargumento de dicho comando. A continuacin veremos como puedennuestros scripts tener opciones y argumentos igual a los demscomandos del sistema. Escribimos un pequeo script con lassiguientes lneas de cdigo, al cual llamaremos argumentos:#!/bin/bash echo «Pasar argumentos para ser procesados…» echo » «echo «El nombre del Script es: $0» echo «El primer argumento es:$1» echo «El segundo argumento es: $2» echo «El No. de argumentoses: $#» exit 0

Despus de probar el script, darle permisos de ejecucin yguardarlo en el directorio /bin /usr/local/bin, miremos la salida:[email protected]:~$ argumentos pedro juan Pasar argumentos para serprocesados… El nombre del Script es: /usr/local/bin/argumentos Elprimer argumento es: pedro El segundo argumento es: juan El No. deargumentos es: 2 [email protected]:~$

Podramos decir que los argumentos son variables que ingresamosjunto con el comando y estas pueden ser procesadas durante laejecucin del script. Por esta razn la variable $0 corresponde alnombre del script, la variable $1 al primer argumento que se pasa yla variable $2 al segundo y as sucesivamente tal como se mencionoen el apartado anterior. La variable $# corresponde al numero deargumentos seguidos despus del comando. De esta manera podemosmanipular cada argumento como si fuera una variable in dependiente,sea $1, $2 … $n.

5.4 Operadores de comparacin

Cuando escribamos un script ser necesario evaluar algn tipo decondicin para que este realice la operacin que deseamos. Por talmotivo tenemos la siguiente tabla de operadores14 para compararnmeros y cadenas de caracteres en cualquier instruccin de nuestroscript:

-eq: Igual -ne: Diferente -lt: Menor que -gt: Mayor que -le:Menor o igual -ge: Mayor o igual

5.5 Manejo de condicionales (if)

Con la ayuda del condicional if podemos hacer que los scriptsevalen condiciones y se comporten de acuerdo a las necesidades decualquier problema. La estructura es la siguiente:14http://www.e-ghost.deusto.es/docs/shellScriptin.htmlhttp://xinfo.sourceforge.net/documentos/bash-scripting/bash-script-2.0.html

if [ Expresin ]; then instruccin 1 instruccin 2 instruccin 3instruccin N fi if [ Expresin ]; then instruccin else instruccin fiif [ Expresin_Uno ]; then instruccin instruccin elif [ Expresin_Dos]; then instruccin instruccin else instruccin instruccin fi

Para entender mejor el uso de los condicionales escribiremos unscript que determine cual de los dos nmeros pasados como argumentosde nuestro comando es mayor que el otro. Para este propsito creamosun script que llamaremos comparar: #!/bin/bash echo «******COMPARAR DOS NUMEROS ******» num1=$1 num2=$2 if [ $num1 -gt $num2]; then echo «$num1 es mayor que $num2» elif [ $num2 -gt $num1 ];then echo «$num2 es mayor que $num1» elif [ $num1 -eq $num2 ]; thenecho «$num1 es igual que $num2» else echo «No escribi ningn numero»fi exit

En las lneas 3 y 4 estamos asignando los valores de los dosargumentos que

introduzcamos a las variables num1 y num2 respectivamente. En lalnea 5 validamos si el primer argumento es mayor que el segundo yescribimos el respectivo mensaje en la lnea 6. En la lnea 7validamos si el segundo argumento es mayor que el primero yescribimos el respectivo mensaje en la lnea 8. En la lnea 9validamos si el primer argumento es igual que el segundo yescribimos el respectivo mensaje en la lnea 10. Luego ejecutamos elscript para probarlo: [email protected]:~$ bash comparar 22 11 ******COMPARAR DOS NUMEROS ****** 22 es mayor que 11 [email protected]:~$

Realicemos otro ejemplo para listar los ficheros de undirectorio del sistema, siempre que este exista, debemos pasar comomnimo un argumento (el directorio), entonces escribimos losiguiente en nuestro script llamado listar: #!/bin/bashdirectorio=$1 if [ $# -ne 1 ]; then echo «Se necesita el parmetro «echo «Uso: $0 » exit fi if [ ! -e $directorio ]; then echo «Eldirectorio $directorio No existe» else echo «Estos son los ficherosdel directorio $directorio:» ls -l $directorio echo » » fi exit0

La lnea 2 captura el argumento que se pasa, correspondiente aldirectorio a listar en la variable directorio.

En la lnea 3 se valida si el comando que se escribe (listar),esta acompaado del argumento que se requiere (directorio), de locontrario en las lneas 4 y 5 se escribe el modo de uso correctopara el comando o script. La lnea 8 valida si el directorio pasadocomo parmetro no existe, si esto es verdad en la lnea 9 se escribeque el directorio no existe. Si ocurre lo contrario a lo descritoen el punto anterior lnea 10 (else), entonces se escribe uncomentario en la lnea 11 y se lista el contenido del directorio conel comando ls -l como se muestra en la lnea 12.

5.6 Trabajar con el case

En programacin muchas veces es necesario comprobar el valor deuna variable con case15 y validar si coincide con algn valoringresado. Esto es posible solucionarlo con el if pero cuando sonmuchas las posibles opciones a evaluar es mejor la ayuda de case,evitando escribir tantos if. Su estructura de uso es la siguiente:#!/bin/bash case $nombre_variable in valor_uno) instruccininstruccin ;; valor_dos) instruccin instruccin ;; valor_tres)instruccin instruccin ;; *) instruccin instruccin ;; esac

15 http://www.elviajero.org/antoniux/tutos/shell_intro.pdfhttp://www12.brinkster.com/hugo4295/shellscripting.pdf

Para entender el funcionamiento del case escribiremos un scriptllamado menuop que contiene una lista de opciones y dependiendo laopcin escogida el programa ejecutara las instrucciones especificas.El cdigo del script es el siguiente: #!/bin/bash echo»********************************************» echo «* MEN DEOPCIONES *» echo «*********************************************»echo «1. Abrir el editor de textos» echo «2. Listar los fichero deldirectorio actual» echo «3. Mostrar saludo de Bienvenida» echo «4.Salir del Programa» echo»____________________________________________» echo » » echo»Seleccione una opcin:» read op case $op in 1) gedit exit 0 ;; 2)ls -l exit 0 ;; 3) saludo.sh exit 0 ;; 4) exit 0 ;; *) echo «Noselecciono ninguna opcin» exit 1 ;; esac

Desde la lnea 2 hasta la 11 son comentarios que mostraran laapariencia de nuestro programa cuando se ejecute. La lnea 12 (readop), permite capturar el valor de la opcin a evaluar en el case. Enla lnea 13 (case $op in), se evala dicha opcin y dependiendo cualsea el caso, ejecutara las instrucciones necesarias.

Si toma la opcin 1 se ejecutan las lneas 14 a la 17 y se abre eleditor de textos del entorno gnome. Si toma la opcin 2 se ejecutanlas lneas 18 a la 21 y se listan los ficheros del directorioactual. Si toma la opcin 3 se ejecutan las lneas 22 a la 25 y seabre el programa saludo.sh (este fue el primer script que se hizo).Si toma la opcin 4 se ejecutan las lneas 26 a la 28 y se sale delprograma. Si no escogi ninguna opcin valida se ejecutan las lneas29 a la 32.

5.7 Bucles (for y while)

Adems de la sintaxis estudiada hasta ahora existen en laprogramacin shellscript bloques de programa conocidos como buclesque permiten ejecutar ciclos de comandos siempre que se cumpla unacondicin. Los bucles tienen una funcin similar a la de cualquierotro lenguaje de programacin, pero permiten que un script ejecuteciertas rdenes si se cumple una condicin, permitiendo que el scripthaga lo que el programador desea. Los bucles mas utilizados son elfor y el while.

5.7.1 For

for nombre_variable in lista_elementos; do comandos comandosdone

nombre_variable es el nombre que tendr la variable quecontrolara el ciclo. lista_elementos contiene la lista de elementosa recorrer, esta lista puede ser una variable que contenga dichoselementos y estar precedida de $.

Los comandos se ejecutaran tantas veces dependiendo del nmero deelementos de la lista.

A continuacin escribiremos un shellscript que recorre eldirectorio de trabajo del usuario y muestra en pantalla el listadode ficheros con extensin odt.

#!/bin/bash echo «Ejemplo ciclo for…» for i in $HOME/*.odt; doecho $i done

El siguiente script borra los archivos de texto de undeterminado directorio, el cual ser pasado como parmetro por elusuario. Los ficheros se borraran si el usuario lo desea:#!/bin/bash echo «Ejemplo 2 ciclo for…» directorio=$1 if [ $# -ne1 ]; then echo «Se necesita el parmetro » echo «Uso: » exit fi fori in $directorio/*.txt; do rm -i $i done exit 0

La lnea 3 captura el directorio dentro del cual se recorrer lalista de ficheros. En la lnea 4 se verifica que el directorio endonde se borraran los ficheros haya sido pasado como argumento. Lalnea 9 recorre (for i in $directorio/*.txt; do) todos los ficheroscon extensin .txt que hay dentro del directorio. La lnea 10eliminara cada uno de estos ficheros, siempre que el usuarioconfirme su eliminacin.

5.7.2 While

Otro bucle utilizado en la programacin shellscript es el ciclowhile, este se utiliza para que se ejecuten una serie de comandos oinstrucciones si se cumple una determinada condicin. Su estructurade uso es la siguiente: while [ Expresin ]; do comandos comandosdone

Para entender mejor el funcionamiento del while realizaremos unpequeo script que repita varias veces un mensaje pasado comoparmetro. La cantidad de veces que se repetir el mensaje tambin seapasada como argumento. #!/bin/bash cantidad=$1 mensaje=$2contador=1 if [ $# -ne 2 ]; then echo «Se necesita los parmetros «echo «Uso: $0 » exit fi while [ $contador -le $cantidad ]; do echo$mensaje contador=`expr $contador + 1` done

En las lneas 2 y 3 se capturan los valores de los argumentos:cantidad de veces a repetir y el mensaje respectivamente. La lnea 4se inicia una variable contador en uno, para controlar el ciclowhile. En la lnea 5 se valida que se pasen los dos parmetrosrequeridos (la cantidad y el mensaje), de lo contrario en las lneas6 y 7 se muestra la forma de uso del comando. La lnea 10 evala deque el contador sea menor o igual que la cantidad de veces arepetir el mensaje.

Si se cumple la condicin anterior la lnea 11 manda a escribir elmensaje tantas veces sea necesario. La lnea 12 incrementa elcontador en uno cada vez que se entra al ciclo.

5.8 Actividades

Investigar sobre el uso del comando test, realizar variosejemplos (mnimo 5) y documentarlos. Investigar sobre otrasexpresiones para evaluar condicionales, diferentes a las expuestasen el modulo (Tipos de comprobaciones entre ficheros ydirectorios). Estudiar el uso de funciones en la programacinshellscript, realizar des ejemplos prcticos y documentarlos.Estudiar el ciclo until realizar dos ejemplos prcticos ydocumentarlos. Elaborar un pequeo shell script, que permita sabercuales son los servicios ejecutados dentro de un determinadorunlevel. Realizar un script que liste la informacin de losarchivos contenidos en los directorios de trabajo de cada uno delos usuarios normales creados en le sistema. Escribir unshellscript que almacn en un fichero plano la informacin referentea todos los paquetes instalados en tu sistema.

Enlaces de IntersUnidad Uno:http://www.debian.org/international/spanish/contrib/paqifaz.htmlhttp://www.reloco.com.ar/linux/debian/principiantes.htmlhttp://www.guia-ubuntu.org/index.php?title=A%C3%B1adir_aplicacioneshttp://www.configurarequipos.com/doc735.htmlhttp://es.wikipedia.org/wiki/Advanced_Packaging_Toolhttp://es.wikipedia.org/wiki/Sources.listhttp://portallinux.wordpress.com/2008/05/28/instalar-xmms-en-ubuntu-804/Unidad Dos:http://es.tldp.org/DEBIAN/%257Ejfs/debian/doc/es/debian-guide-es/html/node171.htmlftp://ftp.uniovi.es/pub/linux/docs/LuCaS/DEBIAN/%257Ejfs/debian/doc/es/debian-guidees/html/node171.htmlhttp://es.kioskea.net/faq/sujet-387-guia-de-uso-del-shell-para-principiantes#xxx-lasredirecciones-y-los-pipelineshttp://www.inaoep.mx/~moises/S.O./cunx12.html Unidad tres:http://bioinformatiquillo.wordpress.com/2007/12/30/enlaces-en-linux/http://andalinux.wordpress.com/2008/09/02/manejo-de-enlaces-simbolicos-en-linux/http://www.ant.org.ar/cursos/curso_intro/x1811.html Unidad cuatro:http://www.linuxparatodos.net/portal/staticpages/index.php?page=niveles-ejecucionhttp://www.linuxparasereshumanos.com/2007/09/20/los-runlevels-de-linux/Unidad cinco: http://www.elviajero.org/antoniux/http://xinfo.sourceforge.net/documentos/bash-scripting/bash-script-2.0.htmlhttp://www.e-ghost.deusto.es/docs/shellScriptin.htmlhttp://www.monografias.com/trabajos50/ejercicios-shell-script/ejercicios-shell-script2.shtml

http://www.elviajero.org/antoniux/tutos/shell_intro.pdfhttp://www12.brinkster.com/hugo4295/shellscripting.pdf

Publicaciones Similares