unix basico

38
INTRODUCCION A UNIX SERVICIO DE INFORMATICA DE LA UNIVERSIDAD DE ALMERIA

Upload: papeleria

Post on 12-Jan-2016

40 views

Category:

Documents


0 download

DESCRIPTION

UNIX BASICO

TRANSCRIPT

Page 1: Unix Basico

INTRODUCCION A UNIX

SERVICIO DE INFORMATICA DE LA UNIVERSIDAD DE ALMERIA

Page 2: Unix Basico

Introduccion al UNIX. Servicio de Informática de la Universidad de Almería 2 ---------------------------------------------------------------------------------------------------------------------------------------------------------------

INDICE 1.- Introducción.................................................................................................. 3 2.- Visión conceptual..........................................................................................4 3.- Login y logout...............................................................................................6 4.- Comandos......................................................................................................7 5.- Ayuda.............................................................................................................9 6.- Organización de ficheros..............................................................................10 7.- La estructura de ficheros de UNIX...............................................................12 8.- Operaciones con directorios..........................................................................15 9.- Utilidades básicas para el manejo de ficheros...............................................17 10.- Introducción al vi........................................................................................20 11.- Impresión de ficheros..................................................................................23 12.- Comunicación entre usuarios......................................................................25 13.- Entrada y salida...........................................................................................26 14.- Pipes y filtros...............................................................................................28 15.- El entorno de shell.......................................................................................33 16.- Permisos de acceso......................................................................................36 17.- Control de procesos.....................................................................................38

Page 3: Unix Basico

Introduccion al UNIX. Servicio de Informática de la Universidad de Almería 3 ---------------------------------------------------------------------------------------------------------------------------------------------------------------

1. Introducción 1.1 ¿ Qué es UNIX ? El UNIX es un sistema operativo de propósito general, interactivo, multiusuario, multitatera, portable y flexible. Cada una de estas características hace que el UNIX sea un sistema que se adapta fácilmente a todo tipo de aplicaciones, pueda ejecutarse en muy diferentes entomos (desde un PC a un mainframe) y sea fácilmente integrable con otro tipo de plataformas. 1.2 Historia En 1964 el Massachusetts Institute of Technology (MIT) junto con los Laboratorios Bell y AT&T desarrollaron en conjunto un sistema operativo con la idea de manejar múltiples usuarios llamado Multics. Ken Thompson y Dennis Ritchie trabajaron en dicho proyecto. El sistema era muy costoso y complejo de operar por lo que los Laboratorios Bell se apartaron del proyecto. Ken Thompson por su cuenta comenzó a desarrollar en 1969 un sistema con la característica básica de un esquema jerárquico de archivos tipo árbol, monousuario. Como la idea ofrecía buenas posibilidades se fonnó un equipo de trabajo y se generó un sistema operativo al que llamaron UNIX (que es un juego de palabras del nombre de su "padre", el Multics). Se le agregaron los conceptos de redirección de Entrada/Salida y el control de multiproceso. Esta primera versión de UNIX estaba totalmente desarrollada en lenguaje Ensarnblador y por lo tanto era completamente dependiente del hardware. La idea era lograr la independencia del mismo. Ken Thompson en base al BCPL creó un lenguaje al que llamó "B", pero que aún dependía fuertemente del hardware. En 1971 Dennis Ritchie mejoró este lenguaje y lo independizó del hardware, creando en definitiva lo que sería el lenguaje "C". Junto con Ken Thompson reescribieron el UNIX en este lenguaje en 1973. De esta forma lograron obtener un sistema operativo totalmente portable e independiente del hardware. Paralelamente incorporaron nuevos conceptos, como los “pipes", y además escribieron varias utilidades en lenguaje "C". En 1974 Laboratorios Bell brinda el UNIX a la Universidad de Berkeley. En esta Universidad se desarrollaron numerosas utilidades, como los editores vi y ex, el intérprete de comandos "C-Shell", etc; que son una gran contribución al desarrollo del UNIX. Muchas de estas utilidades fueron incorporadas al UNIX estándar. Las versiones de UNIX desarrolladas por Berkeley son conocidas como BSD. Durante 1980 el sistema sale del mundo acadén-úco y de investigación para el que había sido pensado y aparecen las primeras versiones comerciales. Estas pasaron a llamarse "System" y en 1981 sale una nueva versión llamada "System HI" que ya incorporaba aplicaciones comerciales. En 1983 aparece la última versión de AT&T llamada "System V", en la cual aparece como una de las principales mejoras el uso de memoria virtual. Actualmente -la release 4.0 es la última comercializada por AT&T. La verión BSD equivalente es la versión 5.40. Las últimas releases han mejorado sobre todo la parte comunicación con el usuario final haciendo al UNIX más "amigable".

Page 4: Unix Basico

Introduccion al UNIX. Servicio de Informática de la Universidad de Almería 4 ---------------------------------------------------------------------------------------------------------------------------------------------------------------

2. Visión Conceptual 2.1.- Arquitectura La arquitectura del UNIX consiste en tres diferentes capas: 1 El kernel es el corazón del sistema operativo. Es el responsable de controlar el hardware y de asignar los diferentes recursos a los procesos. 2 El shell es el intérprete de comandos y es generalmente con quién interactúan los usuarios. 3 Utilidades y aplicaciones. 2.2 El Kernel El kernel es quién controla el ordenador y hace que los recursos del mismo estén disponibles a los procesos de los usuarios. Entre las diferentes tareas del Kernel están: controlar el hardware, manejar los dispositivos de Entrada/Salida, soportar comunicaciones, asignar recursos del sistema, asignar mecanismos de protección, mantener la estructura de ficheros, etc. Los distintos programas que se ejecutan en un entrono UNIX obtienen servicios del Kernel mediante comandos de bajo nivel llamados SYSTEM CALLS. 2.3 El Shell El shell o intérprete de comandos es el encargado de interactuar con el usuario y ejecutar los distintos comandos solicitados por este. Sus características principales son: entomo de ejecución configurable, que pernúte crear y modificar comandos, prompts y otras utilidades; flujo flexible de datos, que permite usar la salida de un comando como entrada de otro; lenguaje de comandos de alto nivel, que incluye un conjunto completo de estructuras de control (if, do, while, etc.) y permite la programación de la ejecución de los comandos; redirección de entrada/salida, permite guardar la salida de un comando a un fichero o utilizar un fichero como entrada de,un comando. 2.4 Intérpretes de Comandos Existen diferentes intérpretes de comandos o shells dentro del UNIX, cada uno orientado a diferente tipo de utilización o usuario: Bourne Shell (sh): es el estándar y tiene gran facilidad de uso sobre todo para programación. Job Sheli (dsh): es una versión ampliada del Boume Shell, que incluye facilidades para control de trabajos en background. C-Shell (csh): es similar al Bourne, pero tiene mayor flexibilidad para su uso interactivo. Provee mecanismos adicionales para guardar historia de comandos, reejecución y sustitución de comandos. Korn Shell (ksh): nuevo intérprete de comandos, se está convirtiendo en el nuevo estándar. Es totalmente compatible con el Boume Shell, pero incorpora, entre otras, facilidades del C-Shell y control de trabajos en background. Restricted Shell (rsh): versión restringida del Boume Shell. Sólo permite la ejecución de un lin-útado número de operaciones en el sistema y está diseñado para manejar más eficientemente la seguridad. Restricted C-Shell (rcsh): versión restringida del C-Shell. Restricted Korn Sheli (rksh): versión restringida del Kom Shell. 2.5 Manejo de Procesos

Page 5: Unix Basico

Introduccion al UNIX. Servicio de Informática de la Universidad de Almería 5 --------------------------------------------------------------------------------------------------------------------------------------------------------------- Los procesos son manejados por el Kernel. Este va asignando a cada proceso una cierta cantidad de tiempo de CPU (time slice), luego lo suspende y permite a otro proceso la utilización de la CPU. La prioridad de cada proceso puede ser manejada, asignándole mayor o menor prioridad dependiendo de la relevancia del proceso.

Page 6: Unix Basico

Introduccion al UNIX. Servicio de Informática de la Universidad de Almería 6 ---------------------------------------------------------------------------------------------------------------------------------------------------------------

3. Login y Logout 3.1 Login Para entrar al sistema el DGIUX presenta en la pantalla el mensaje de login. El usuario debe introducir el nombre de su cuenta y la palabra clave (password). Normalmente los caracteres son desplegados en la pantalla. La password es la excepción, los caracteres de la password no son mostrados en pantalla. Una vez que se introdujo el nombre de la cuenta y la password el sistema despliega el mensaje de bienvenida e iíunediatwnente aparece el prompt del intérprete de comandos. 3.2 El prompt Una vez que se ha hecho el login el shell muestra un prompt para indicar que está listo para ejecutar un comando. Este prompt es diferente de acuerdo a cada shell o a cada tipo de usuario. Además el usuario puede variar el prompt de acuerdo a su preferencias o necesidades. Los prompts más corrientes son: $ (usuario normal con Bourne Shell o Kom Shell) o % (usuario normal con C-Shell) # (para super-usuario root con cualquiera de los intérpretes de comandos) 3.3 Logout Para salir del sistema es necesario dar logout. Este depende también del shell que se está usando. Si se utiliza Boume Shell o Kom Shell se debe dar <Ctrl>+<D> o exit. En C-Sheli normalmente se introduce logout o exit.

Page 7: Unix Basico

Introduccion al UNIX. Servicio de Informática de la Universidad de Almería 7 ---------------------------------------------------------------------------------------------------------------------------------------------------------------

4. Comandos 4.1 Comandos del UNIX El sistema operativo UNIX tiene más de 200 comandos. El adnúnistrador y cada uno de los usuarios puede crear sus propios comandos escribiéndolos en algún lenguaje de programación (C, Cobol, etc.) o combinando los ya existentes dentro del UNIX con programas de shell. Normalmente después del prompt se introduce un comando. Cada comando realiza una tarea específica, como ejecutar una aplicación, imprimir un fichero, etc. 4.2 Introducir Comandos Los comandos se introducen a continuación del prompt seguidos de la tecla <.J> Por Ej:. $ ls filea f leb filec xfile zfile El UNIX diferencia entre las letras mayúsculas y minúsculas, de tal forma que ls es diferente de ls y de LS. 4.3 Sintaxis, argumentos y opciones La sintaxis de los comandos de UNIX está normalizada y debe cumplir ciertas normas. La sintaxis es: comando [opciones] [argl] [arg2] [arg3] ... [argnl Se componen normalmente de tres partes: El comando propiamente dicho o sea su nombre. Las opciones (también llamadas flags), que definen diferentes modos o formas en que va a trabajar el comando. De acuerdo a las normas de UNIX las opciones deberían ser una letra precedida de un guión (-), aunque hay algunos comandos que no respetan estanorma.. Para las opciones vale también la distinción que hace DG/UX entre mayúsculas y minúsculas. Si se quiere poner más de una opción para la ejecución de un comando se pueden poner todas juntas después de un solo guión . Los argumentos, que determinan los distintos datos que va a utilizar el comando, como ser el nombre de un fichero o un directorio. Las opciones y argumentos pueden no ser necesarios, de hecho hay comando que sólo utilizan opciones o argumentos e incluso ninguno de ellos. Ejemplos: Is comando sin argumentos ni opciones ls -la comando con opciones ls *.dat I.bak comando con argumentos Is -ri *.dat comando con opciones y argumentos 4.4 Cancelar comandos Normalmente los comandos se cancelan presionando la tecla <Del> o <Supr>. Esto puede variar dependiendo de la terminal y la configuración del sistema. En algunos sistemas la tecla puede ser <Ctrl>+<C>. Para identificar cuál es la tecla para cancelar programas se puede utilizar el

Page 8: Unix Basico

Introduccion al UNIX. Servicio de Informática de la Universidad de Almería 8 --------------------------------------------------------------------------------------------------------------------------------------------------------------- comando stty: $ stty intr=DEL Este comando indica la configuración de la terminal que estarnos utilizando y entre otras cosas nos muestra cuál es la tecla de interrupción de comandos. (N TA: si la tecla es <CTRL> y alguna letra viene indicada como 'Letra) 4.5 Algunos comandos básicos Algunos comandos básicos de UNIX son: passwd cambia la password de] usuario date muestra la fecha y la hora cal muestra un calendario who muestra quienes están en el sistema ls muestra el contenido de un directorio lp imprimee un fichero Cada uno de estos comandos tiene sus propias opciones y argumentos, dependiendo de] resultado que el usuario quiera obtener.

Page 9: Unix Basico

Introduccion al UNIX. Servicio de Informática de la Universidad de Almería 9 ---------------------------------------------------------------------------------------------------------------------------------------------------------------

5. Ayuda 5.1 Mensajes de ayuda Cuando un comando es invocado incorrectamente en algunos casos despliega una breve pero muy útd información de sus funciones, opciones y argumentos: Por ejemplo: $ who -x *i who: illegar option x Usage: who [-rbtpludAasHTq] [am i] [utmp like file] r run level b boot time t time changes SS other than getty or users p proce 1 login processes u useful information d dead processes A accounting information a all (rbtpluda options) S short form of who (no time since last output or pid) H print header T status of tty (+ writable, - not writable, x exclusiva open, ? hung) q quick who $ 5.2 Manual "on line” UNIX dispone de un manual "on line" que contiene las páginas de los distintos manuales del sistema operativo (sólo los de referencia, no las guías). Para acceder al mismo usar el comando man seguido del nombre del comando del que deseamos obtener información (Por Ej.: man cat).

Page 10: Unix Basico

Introduccion al UNIX. Servicio de Informática de la Universidad de Almería 10 ---------------------------------------------------------------------------------------------------------------------------------------------------------------

6. Organización de Ficheros 6.1 Tipos de Ficheros UNIX tiene tres tipos diferentes de ficheros (más algunos otros que no son de tan clara identificación). Cada uno de ellos son nombrados de acuerdo a la misma convención, pero son manejados internamente de muy diferente manera. Los distintos tipos son: Ficheros regulares, normales o comunes: son aquellos donde se guarda la información. UNIX no distingue especialmente a estos ficheros entre sí, salvo por el uso que se le vaya a dar. Dentro de ellos podemos encontrar programas ejecutables, bibliotecas de programas objeto, bases de datos, ficheros de texto, etc. Directorios: los directorios son ficheros que contienen la tabla de contenido o lista de los ficheros de un Filesystem de UNIX. Asociado a cada entrada en esta tabla está el nombre del fichero, permisos de acceso, tamaño, fecha de creación, identificación del dueño, etc. Ficheros Especiales: identifican dispositivos de hardware y drivers de software. 6.2 Nombres En UNIX los nombres de los ficheros pueden tener hasta 256 caracteres de largo, pero es recomendable utilizar 14 que es el estándar de UNIX System V. Se puede utilizar cualquier combinación de caracteres ASCII, aunque normalmente se utilizan letras, números y algunos símbolos especiales (. , - _). Hay que poner especial cuidado en la utilización de símbolos especiales ya que a pesar de ser válidos algunos de ellos tienen un significado especial para el shell y puede resultar muy engorrosa su utilización. UNIX distingue entre letras mayúsculas y minúsculas de tal forma que un fichero llamado pepe es distinto que uno llamado PEPE. Algunos ejemplos de nombres de ficheros son: fichero 1 Tabla. dat comando.v prog. c lib$.a prog-a.o texto5 A 6comm 6.3 Listar Ficheros Para saber qué ficheros tenemos se usa el comando ls. En su forma más simple este comando nos lista sólo los nombres de los ficheros, pero indicándole ciertas opciones nos dará mayor información acerca de los mismos. Ejemplo: $ Is FileA FileB Filea ciudad.tab pais.tab progl.c progl.o 6.4 Visualizar de Ficheros Existen varios comandos para poder ver el contenido de un fichero, dependiendo de que tipo de fichero se trate y del resultado que deseamos obtener. Los más usados son: cat: muestra el contenido de un fichero en forma continua. more pg y pr: muestran un fichero por páginas, parando cada vez que una pantalla se llena. Depende del resultado deseado se usará uno u otro. od: muestra un volcado en octal del contenido de un fichero. Es especialmente

Page 11: Unix Basico

Introduccion al UNIX. Servicio de Informática de la Universidad de Almería 11 --------------------------------------------------------------------------------------------------------------------------------------------------------------- úfil para ficheros que no son de texto.

Page 12: Unix Basico

Introduccion al UNIX. Servicio de Informática de la Universidad de Almería 12 ---------------------------------------------------------------------------------------------------------------------------------------------------------------

7. La estructura de ficheros de UNIX 7.1 El directorio de trabajo Cuando se está trabajando en UNIX el usuario siempre está posicionado en un directorio llamado "Directorio de Trabajo". Es sobre el cuál se realizarán todas las operaciones salvo que expresamente se le indique otra cosa. Para saber cual es el Working Directory en cualquier momento se usa el comando pwd: $ pwd /u/usrl 7.2 Directorios La forma de organizar ficheros en UNIX es por medio de directorios. Un directorio es una lista de ficheros, donde cada uno de ellos tiene un nombre único. Los directorios se utilizan para clasificar los ficheros de acuerdo a diferentes tipos o categorías. Aunque no hay reglas a este respecto, a efectos de tener la información bien organizada y en forma clara se recomienda agrupar los diferentes tipos de fichero en directorios distintos (por ejemplo los programas fuentes en uno, los ejecutables en otro, los datos en un tercer directorio, etc.). Un directorio puede contener otros directorios. Las reglas para el nombre de los directorios son las mismas que para ficheros. Los directorios son manejados por comandos especiales. 7.3 Listar contenido de¡ directorio Para listar el contenido de un directorio se utiliza el comando ls. Con diferentes opciones mostrará de distinta forma el contenido del directorio dándonos mayor o menor información sobre los ficheros que contiene. Las opciones más utilizados son: ls: lista los nombres del contenido de un directorio. ls -C: lista los nombres del contenido de un directorio en columnas. Normalmente el comando ls hace esto en forma automática cuando la salida se hace por pantalla. Si se está redirigiendo el resultado a un fichero esta opción hace que la salida se en columnas, si no la salida se hace con una línea por fichero. ls -I: lista información completa del contenido del directorio (nombre, permisos, dueño, fecha de última modificación, tamañoo, etc). Is -F: lista los nombres y adiciona una "/" si es un directorio, un "*" si es un fichero con permiso de ejecución y una "@" si es una figadura simbólica. ls -a: normalmente el comando ls no lista los nombres de ficheros que comienzan con un punto. La opción -a es para que muestre todos los nombres de ficheros incluso los que conúenzan con punto. Estas opciones se pueden combinar para que, por ejemplo, nos muestre el contenido de un directorio en forma completa y liste todos los ficheros incluyendo los que comienzan con punto (con ls -la). El comando ls adnúte como argumento el nombre de un directorio, de tal forma de poder listar el contenido del mismo sin que este sea nuestro Home Directory. 7.4 El comando file Hay un comando UNIX que analiza el contenido de los ficheros y nos indica de acuerdo a él de que tipo de fichero se trata.

Page 13: Unix Basico

Introduccion al UNIX. Servicio de Informática de la Universidad de Almería 13 --------------------------------------------------------------------------------------------------------------------------------------------------------------- Este comando, llamado file, lee unos pocos caracteres de los ficheros que se le indican como argumento y por cada uno de ellos nos informa de que tipo se trata. Algunos de los tipos infonnados son: ascii/English text ejecutable commands text empty directory 7.5 Estructura Jerárquica La estructura del sistema de ficheros de UNIX puede ser definida como una estructura jerárquica con forma de árbol invertido. En el tope superior de ese árbol está el directorio raíz (o root directory). A partir de él se van abriendo otros directorios. 7.6 El directorio HOME (directorio de inicio) Cada usuario tiene un "home directory" que es el directorio donde el sistema lo posiciona cuando hace el login. Los directorios "home" de los usuarios están generalmente localizados bajo el directorio /u o /usr. Si bien esto no es obligatorio es una práctica extendida. También es comente que el nombre del home directory sea igual o contenga el nombre del login del usuario. El administrador del sistema es el que define al dar de alta a un nuevo usuario cual va a ser su home directory. 7.7 Estructura típica de directorios en UNIX Si bien no hay una estructura de directorios fija en UNIX, en general en todos los sistemas se conserva una estructura típica y muy semejante una parte. Hay determinados directorios que siempre existen y son utilizados por los distintos comandos para buscar información necesaria para su ejecución. Estos son: /etc /bin /dev /lib /usr/lib /usr/bin 7.8 Pathnames Cada vez que se quiere usar un fichero hay que indicar cuál es su localización dentro del árbol de directorios. Para ello se utilizan los llamados pathnames (o paths) que indican el camino a seguir para encontrar su ubicación. El path se construye poniendo el carácter "/" separando el nombre de cada directorio hasta llegar el fichero deseado. Por ejemplo, si se quiere usar el fichero "datos", dentro del directorio "usrl " que a su vez está dentro del directorio ROOT el path para el mismo será: /usrl/datos. Los pathnames pueden ser relativos o absolutos o "full pathname". Un pathname es relativo cuando no comienza por el carácter "/" y está referido al working directory donde el usuario esté trabajando. Un pathnarne es absoluto cuando con-úenza con el carácter '/" y se da todo el camino dentro del árbol hasta llegar al fichero. 7.9 Dot Directories Cada directorio tiene asociado dos nombres especiales llamados "." (punto o dot) y

Page 14: Unix Basico

Introduccion al UNIX. Servicio de Informática de la Universidad de Almería 14 --------------------------------------------------------------------------------------------------------------------------------------------------------------- (punto punto o dot dot). Cada vez que se crea un directorio automáticamente se le incluyen estos dos. El "." es el nombre del propio directorio. Así tomando el ejemplo anterior datos/paises es equivalente a ./datos/paises. El es el nombre del directorio irnnediatarnente superior. Siguiendo con nuestro ejemplo si el working directory es /u/usrl/datos, entonces ..Iprogs/proga.c se refiere al fichero que tiene como path absoluto /ulusrl/progs/proga.c.

Page 15: Unix Basico

Introduccion al UNIX. Servicio de Informática de la Universidad de Almería 15 ---------------------------------------------------------------------------------------------------------------------------------------------------------------

8. Operaciones con Directorios Las operaciones que podemos realizar con directorios son: crearlos, borrarlos, ver cuál es el working directory y cambiar de working directory. 8.1 Crear directorios: mkdir Para crear directorios se debe utilizar el comando: mkdir [-p] nombre_directorio Este comando creará el directorio indicado con nombre_directorio. La opción -p creará además todos los directorios necesarios que estén en el pathnarne indicado si no existen. Ejemplo: $ mkdir dir1 En este ejemplo se crea el directorio dir1 en el working directory. $ mkdir -p dirl/aplicacion/datos Se crea el directorio dir1/aplicacion/datos. Si no existen los directorios dir y/o dir1/aplicacion al utilizar la opción -p también serán creados. 8.2 Borrar directorios: rmdir Para borrar directorios se debe utilizar el siguiente comando: rmdir [-p] nombre directorio El directorio indicado por nombre_directorio será borrado si está vacio. La opción -p nos permite borrar además todos los directorios que integren el pathname del directorio a borrar, siempre que estén vacios. Si se usa esta opción el comando indicará si pudo borrar todo o no. Ejemplo: $ rmdir dirl En este ejemplo se borra el directorio dir en el working directory. 8.3 Conocer el working directory: pwd Para conocer el directorio actual o working directory usamos el comando: pwd Ejemplo: $ pwd /users/usuariol/datos 8.4 Cambiar de directorio: cd Para cambiar el directorio actual se debe usar el comando: cd [nombre_directorio] Si se omite nombre_directorio se cambia al directorio "home". Ejemplo: $ cd /tmp $pwd /tmp

Page 16: Unix Basico

Introduccion al UNIX. Servicio de Informática de la Universidad de Almería 16 ---------------------------------------------------------------------------------------------------------------------------------------------------------------

9. Utilidades básicas para el manejo de ficheros 9.1 Renombrar ficheros: mv En UNIX no existe un comando para renombrar ficheros, sino que en realidad lo que se hace es mover un fichero o directorio de un path a otro. El comando para hacer esta operación es: mv [-i] path_anterior path_nuevo donde path_anterior es el pathname del fichero o directorio al cual le queremos cambiar el nombre y path_nuevo es el pathname que le queremos poner. No es necesario que el nuevo path esté en el mismo directorio, de tal forma que no sólo podemos cambiar de nombre a un fichero o directorio sino que al mismo tiempo podemos cambiarlo de directorio sin necesidad de hacer una copia del mismo. La opción -i se utiliza para indicar al comando mv que si el pathnuevo ya existe nos dé un aviso antes de cambiar el nombre del fichero. Si no se usa esta opción el comando mv destruye el fichero ya existente sin dar ningún tipo de aviso. Si se quiere mover varios ficheros a un directorio se puede usar una variación del comando: mv [-i] file1 file2 ... filen directorio donde filel fiIe2 ... filen es el path de los ficheros que queremos mover y directorio es el path del directorio a donde los queremos mover. No es necesario que los ficheros estén en el mismo directorio, o sea que se puede mover varios ficheros de diferentes directorios y ponerlos todos en uno solo. La opción -i tiene el núsmo significado que en el formato anterior. 9.2 Copiar ficheros: cp Para copiar ficheros se utiliza el comando cp, en cualquiera de sus dos formatos: cp [-i] file_origen file_copia o cp [-i] file1 file2 ... filen directorio En el primer formato file_origen es el pathname del fichero que queremos copiar y file_destino es el path donde lo queremos copiar. En el segundo formato file1 fiIe2 ... filen es una lista de ficheros que queremos copiar y directorio es el path del directorio a donde los vamos a copiar. Como en el caso del comando mv, al copiar ficheros no se produce aviso si el nuevo path ya existe (en cuyo caso se destruirá con la copia) a menos que se utilice la opción -i. Para el segundo formato los ficheros pueden estar en diferentes directorios. 9.3 Eliminar ficheros: rm Para eliminar ficheros se usa el siguiente comando: rm [-f] [-i] file1 file2 ... filen Este comando borra los ficheros filel fiIe2 ... filen. Si se da la opción -f no da ningún mensaje de error si el fichero no existe, es especialmente útil cuando se ejecuta dentro de un programa de shell. La opción -i se usa para confirmar en forma interactiva si se desea eliminar cada fichero de la Esta. En este caso el comando va mostrando uno a uno los nombres de los ficheros y espera una respuesta. Si se responde <y> el fichero se borra, si se responde cualquier otra cosa el fichero no se borra. 9.4 Ligar nombres: ln El sistema operativo UNIX permite poner a un mismo fichero o directorio diferentes nombres por medio de ligaduras o links. El comando que realiza esta operación es el ln cuya sintaxis es:

Page 17: Unix Basico

Introduccion al UNIX. Servicio de Informática de la Universidad de Almería 17 --------------------------------------------------------------------------------------------------------------------------------------------------------------- In [-sl fichero nuevo o In [-s] {fichero ... /directorio} directorio El primer formato permite poner a un fichero otro nombre, es decir que a partir de la ejecución del comando ln el fichero también se llamará nuevo. Toda modificación que se realice sobre uno se verá reflejada en el otro, ya que en realidad el contenido del fichero es uno solo, pero tiene dos nombres. Al tener un fichero varios nombres se podrá borrar cualquiera de ellos sin perder los datos, ya que el fichero seguirá existiendo con los otros nombres. Sólo cuando se borre el último nombre se borrará el contenido del fichero. El segundo formato permite ligar varios ficheros a la vez a un directorio o ligar un directorio con otro nombre. El comando ln sin opciones no permite establecer ligaduras de un fichero a otro filesystem. La opción -s establece una ligadura simbólica y permite hacerlo con ficheros o directorios en diferentes filesystems. Al contrario de las ligaduras normales si se borra el fichero o directorio original no se podrá usar la ligadura simbólica ya que al no existir el original se producirá un error. Ejemplos: $ ls -CF d1/ dir2/ filel file2 $ ln file1 datosl $ ls -CF datosl dl/ dir2/ filel file2 $ ln file file2 dir2 $ ls -C dir2 filel file2 $ ln -s /acct/usr1/d1/usr $ Is -ld /usr/d1 drwxr-x--- 1 u1 gral 12 Jan 1 19:11 /usr/d1 -> /acct/usrl/d1 $ 9.5 Comodines o wildeards Cuando un comando UNIX espera como argumentos uno o más pathnames se pueden utilizar comodines o wildeards para nombrarlos. Los wildeards permite seleccionar varios ficheros usando unos pocos símbolos. Son especialmente útiles cuando tenemos nombres de ficheros que tienen caracteres en común. Los símbolos que se utilizan son: * encuentra un string de cero o más caracteres cualquiera ? encuentra un carácter cualquiera [caracteres] encuentra cualquiera de los caracteres encerrado entre los corchetes se puede poner un rango ASCII usando un guión (P.Ej: a-z) Cuando a un comando se le da como argumento un wildcard este se expande a cada uno de los nombres que cumplen con el mismo antes de ejecutarse el comando, es decir que el comando recibe tantos argumentos como nombres de ficheros concuerden con el wildcard. Ejemplo 1: Se muestra a continuación algunos wildcards: file? todos los paths que empiecen con el string file y tengan un carácter cualquiera a continuación datos.* todos los paths que empiecen con el string datos. seguidos de un string de cero o más caracteres cualquiera tabla[123]a todos los paths que empiecen por tabla seguidos de 1, 2 6 3 y luego por la letra a ??base[A-Z][5-9]* busca los paths que comiencen con dos caracteres cualquiera seguidos del string base, a continuación una letra cualquiera de la A a la Z (mayúscula), seguida de un número del 5 al 9 y por último un string de cero o más caracteres cualquiera

Page 18: Unix Basico

Introduccion al UNIX. Servicio de Informática de la Universidad de Almería 18 --------------------------------------------------------------------------------------------------------------------------------------------------------------- Ejemplo 2: Si al ejecutar el comando ls para ver el contenido de un directorio se obtiene: $ ls -FR bases.dat/ filea bases.prog fileb datos.per section2 datos.prov section3 file1 bases.dat: albaseA5x prog2xc a2baseB2 xxbasez9 prog1.c zzbaseC6.bak bases1prog: progl.c prog3.c progl.o prog3.o prog2.c los siguientes wildeards obtendrán: $ ls -FR file? fllel filea fileb $ ls -FR datos.* datos.per datos.prov $ ls -FR bases.prog/prog[l-3].c bases.prog/prog1.c bases.prog/prog2.c $ ls -FR bases.dat/.??base[A.Z][56]* bases.dat/a1baseA5x bases.dat/zzbaseC6.bak $ ls -FR */prog?.c bases.dat/prog1.c bases.prog/prog2.c bases.dat/prog2.c bases.prog/prog3.c bases. prog/prog1.c Hay que prestar especial atención cuando se usan wildcards con algunos comandos ya que la expansión se produce antes de ejecutar el comando. Por ejemplo si en un directorio tenemos los siguientes ficheros: file1a file1b file2a file2b el comando cp file1? file2? se expande a cp file1a file1b file2a file2b produciendo un error o una ejecución incorrecta del mismo.

Page 19: Unix Basico

Introduccion al UNIX. Servicio de Informática de la Universidad de Almería 19 ---------------------------------------------------------------------------------------------------------------------------------------------------------------

10 Introducción al vi El editor vi está disponible en todas las versiones UNIX , y aunque no lo parezca es uno de los editores de ficheros ASCII más potentes que existen. Podemos llamar a vi con y sin parámetros. Sin parámetros, nos sale una pantalla casi vacía en la que únicamente se puede ver un carácter ~ por cada línea vacía que existe en el fichero que estamos creando, y al final, nos da el mensaje: "[NO FILE]" 1 line, 1 char que indica que no hemos dado ningún nombre de fichero y que estamos en la primera línea, primera columna. Para editar un fichero ya existente, tecleamos: vi nombre_fichero La filosofía de funcionamiento de vi es algo peculiar, sobre todo si estamos acostumbrados a usar otros editores de ficheros más intuitivos. vi tiene dos modos de funcionamiento: modo de entrada de texto y modo de comandos. El primero sirve para alterar el texto del fichero que estamos editando y el segundo para movernos por el texto, reemplazar cadenas, etc. Para conmutar de un modo a otro, se usa la tecla Esc. Introducción de texto: Estando en el modo de comandos, para crear o modificar el contenido del fichero que estamos editando se pueden pulsar una de las siguientes teclas:

Tecla Acción

i a o O R

Insertar texto antes del cursor Insertar texto después del cursor Insertar texto al final de la línea actual Insertar texto al comienzo de la línea actual Reemplazar texto a partir de donde está el cursor

En la mayoría de las versiones de vi, no se pueden usar los cursores para moverse por el texto, ya que los interpreta como caracteres ASCII regulares. En la versión de vi para LINUX si se puede hacer. Modo de comandos: Para activar el modo de comandos, se pulsa la tecla escape. Si estando en dicho modo, pulsamos esta tecla, escucharemos un sonido que nos indica que ya estamos en modo de comandos. En éste modo, podemos realizar lo siguiente: - Movimiento del cursor: Si estamos utilizando una versión de vi que no permite el uso de las fechas para el movimiento del cursor, no tendremos más remedio que usar las siguientes teclas:

Tecla Acción

k j l h ^ $ b w ^d ^f ^u ^b

Subir una línea Bajar una línea Un carácter a la derecha Un carácter a la izquierda Ir al comienzo de la línea actual Ir al final de la línea actual Retroceder una palabra Avanzar una palabra Avanzar media pantalla Avanzar una pantalla Retroceder media pantalla Retroceder una pantalla

Page 20: Unix Basico

Introduccion al UNIX. Servicio de Informática de la Universidad de Almería 20 ---------------------------------------------------------------------------------------------------------------------------------------------------------------

:nn enter Ir a la línea nn

Nota: Las letras precedidas por el carácter ^ indican que hay que pulsar la tecla CTRL. Por ejemplo, para avanzar una pantalla habrá que pulsar la convinación de teclas CTRL-f. - Borrado de texto:

Tecla Acción

x dw dd D :rango d enter

Borrar el carácter que hay debajo del cursor Posiciona el cursor al inicio de la palabra y la borra Borra la línea sobre la que está el cursor Borra a partir del cursor el resto de la línea Borra un bloque de líneas

De todo lo anterior, lo que puede parecer más extraño es el borrado de un bloque especificando el rango. A continuación, se dan algunos ejemplos: :3d enter ------> Borra la línea número 3. :1,3d enter -----> Borra las líneas 1,2 y 3. :1,$d enter -----> Borra todas las líneas del fichero. :.d enter -------> Borra la línea actual. :.,$d enter -----> Borra todas las líneas desde la posición actual. :.-2d enter -----> Borra la línea situada dos líneas por encima. :.,.+2d enter ---> Borra la línea actual y las dos siguientes. - Reemplazar texto:

Tecla Acción

r cw cc

Sustituiremos a partir del carácter que hay debajo del cursor Posiciona el cursor al principio de la palabra y reemplaza Posiciona el cursor al principio de la línea y reemplaza

- Pegar texto: vi posee un buffer (zona de memoria) dedicado al copiado y movimientos entre áreas del fichero. Este buffer lo podemos utilizar mediante los siguientes comandos:

Tecla Acción

:rango enter :pu enter :nn pu enter

Copia el rango indicado en el buffer Copia el buffer tras la línea actual Copia el buffer tras la línea nn

- Insertar texto: Para insertar el contenido de un fichero externo al que estamos editando, haremos :r nombre_fichero enter. (Se copia a partir de la línea actual). - Buscar texto: vi permite buscar cadenas de caracteres hacia adelante o hacia atrás a partir de la línea en que nos encontramos. Las acciones posibles son:

Tecla Acción

/cadena enter ?cadena enter n

Busca la cadena hacia adelante Busca la cadena hacia detrás Repite la última búsqueda

- Buscar y reemplazar texto:

Tecla Acción

:rangoss/cad1/cad2/ enter :rangoss/cad1/cad2/g enter

Reemplaza la primera ocurrencia de cad1 por cad2 Reemplaza cada ocurrencia de cad1 por cad2

Page 21: Unix Basico

Introduccion al UNIX. Servicio de Informática de la Universidad de Almería 21 --------------------------------------------------------------------------------------------------------------------------------------------------------------- - Salvar y leer ficheros: Una vez que hemos modificado el texto y deseamos salir o modificar otro ya existente, debemos de usar uno de los siguientes comandos:

Tecla Acción

:w nombre_fichero enter :w enter :e nombre fichero enter :n enter :r nombre_fichero enter

Salva el contenido del fichero editado con el indicado Salva el contenido con el nombre que lo creamos Edita un nuevo fichero Edita el siguiente fichero indicado en la línea de comandos de la llamada al vi Inserta un fichero en la línea actual

- Otros comandos de interés:

Tecla Acción

^L :q comando enter :q enter :q! :wq :x :set number enter

Redibuja la pantalla (también se puede hacer en el modo de edición Ejecuta un comando de UNIX Salimos del editor si ya hemos salvado el fichero Salimos del editor sin salvar el fichero editado Salimos del editor salvando el fichero Igual que el anterior comando Enumera "virtualmente" las líneas del fichero

Page 22: Unix Basico

Introduccion al UNIX. Servicio de Informática de la Universidad de Almería 22 ---------------------------------------------------------------------------------------------------------------------------------------------------------------

11. Impresión de ficheros 11.1 El comando lp Para imprimir ficheros en UNIX se usa el comando lp. La sintaxis de este comando es: lp [opciones] [file1 file2...filenl Algunas de las opciones del lp se describirán a lo largo del este capítulo. file1,flIe2...filen son los paths de los ficheros que se quieren imprimir. Si no se indica ningún fichero el lp toma los datos del standard input. (La entrada standard, la que introducimos por el teclado) El comando lp(1) sin opciones envía el fichero a imprimir a la impresora default del sistema. Esta es definida por el administrador. Algunas de las opciones que se pueden dar al comando lp son: -dnombre envía a imprimir a la impresora indicada por nombre -w manda un mensaje a la termina] cuando finaliza de imprimir el fichero -nx imprime x copias del fichero -qn se fija la prioridad del requerimiento en n (de 0 a 39) 11.2 Idenitificación del requerimiento Cada vez que se envía a imprinúr un fichero o grupo de ficheros se le asigna una identificación al requerimiento. El comando lp indica en la pantalla cuál es esa identificación. Por ejemplo: $ lp texto* request id is lpl-324 (2 files) En este caso la identificación del requerimiento es lpl-324. El lp además nos informa cuantos ficheros se han enviado a imprimir. La identificación siempre contiene el nombre de la impresora destino. 11.3 Información sobre la impresión El comando lpstat nos permite obtener información acerca de los requerimientos de impresión que hayamos realizado y del status de las diferentes impresoras del sistema. Ejemplo: $ lpstat lpl-324 samp 4327 Jul 5 13:40 Introduciendo lpstat sin opciones nos desplegará información acerca de los requerimientos de impresión realizados por nosotros. Nos mostrará la identificación de los requerimientos, el tamaño en bytes y la fecha y hora en que se realizó el requerimiento. Para obtener información acerca del estado de las impresoras: $ lpstat -p print laserl dísabled since Jul 4 20:00 printer laser2 is idle. enabled since May 10 08:05 printer lpl now printing lpl-324, enabled since Jan 14 10:23 En este caso la información que nos da es acerca del estado de cada impresora, si está habilitada o no y desde que fecha y si está imprimiendo algo o está a la espera de un requerimiento. 11.4 Cancelar requerimientos Para cancelar un requerimiento se usa el comando cancel. Para poder cancelar un requerimiento es necesario saber la identificación del mismo. Se puede con una sola invocación al comando cancelar múltiples requerimientos. Es una buena práctica verificar con el comando lpstat la idenfificación de los requerimientos. Un usuario sólo podrá cancelar sus propios requerimientos. El único que puede cancelar requerimientos de cualquier usuario es el administrador del sistema. La sintaxis del comando es:

Page 23: Unix Basico

Introduccion al UNIX. Servicio de Informática de la Universidad de Almería 23 --------------------------------------------------------------------------------------------------------------------------------------------------------------- cancel requestid# ... El requestid# es el que nos informa el comando lp cada vez que hacemos un requerimiento.

Page 24: Unix Basico

Introduccion al UNIX. Servicio de Informática de la Universidad de Almería 24 ---------------------------------------------------------------------------------------------------------------------------------------------------------------

12. Comunicación entre usuarios En este capítulo se explican los diferentes comandos que permiten la comunicación entre los usuarios de un sistema UNIX. UNIX permite el envío de mensajes a través de un sistema de correo que se maneja con los comandos mail y mailx y además permite "conversar" en forma interactiva entre dos usuarios que estén conectados al sistema con el comando talk Los comandos mail y mailx son incómodos de usar. Por esto, se utilizan otros programas para el correo electrónico: pine, pegasus, eudora y netscape. La sintaxis de talk es: talk usuario Para establecer una conversación entre más de dos usuarios, se usa el comando ytalk.

Page 25: Unix Basico

Introduccion al UNIX. Servicio de Informática de la Universidad de Almería 25 ---------------------------------------------------------------------------------------------------------------------------------------------------------------

13. Entrada y salida 13.1 Ficheros estándar de E/S Una de las tareas más importantes del shell es la asignación de la dirección de la entrada y salida de los comandos que se van ejecutando. Esta asignación se realiza a través de los llamados ficheros estandard de entrada y salida. Los ficheros estandard de entrada y salida son tres: standard input, standard output y standard error. El standard input es el fichero de entrada, el standard output es el fichero de salida y el standard error es donde se muestran los mensajes de error. Cuando un usuario hace login el shell asigna como ficheros estandard la terminal en la que está trabajando. De esta forma el standard input será el teclado de la terminal y los ficheros standard output y standard error serán la pantalla de la misma. Muchos comandos de UNIX están diseñados para utilizar los ficheros estándard. Esto quiere decir que las entradas, salidas y mensajes de error de esos comandos se realizan sobre los ficheros estándar. 14.2 Redireccionamiento El shell permite que los ficheros estándar sean redireccionados a ficheros comunes en lugar de utilizar la terminal como localización de los mismos. Es decir que la entrada o salida de un comando será tomada o enviada a un fichero en lugar de hacerlo a la terminal. Los comandos se ejecutan independientemente de adonde apunten estos ficheros, la lectura o escritura se hace sobre el standard input, output o error, el shell se encarga de redireccionarlo al fichero correspondiente. Para redireccionar la entrada se pone el carácter "<" entre el comando y el nombre del fichero que se va a utilizar como entrada. Por ejemplo: el comando cat utiliza como entrada el standard input si no se le da como argumento el nombre de ningún fichero: $ mail juan < fichero El comando mail al no tener argumento lee el standard input, que en este caso fue redireccionado para que use el contenido de richero. El redireccionanúento de la salida se hace poniendo el carácter ">" entre el comando y el fichero donde se va a guardar la salida. Si el fichero no existe el shell lo crea, pero si ya existe el contenido se destruye y se graba la nueva información; por lo tanto hay que prestar especial atención cuando se redirecciona la salida para no destruir ficheros con información útil. Al usar el símbolo ">" se redirecciona solamente el standard output, más adelante se explica como redireccionar el standard error. Por ejemplo: $ ls > lista $ cat lista datosl datos2 filea $ El comando ls manda su salida a standard output. Como este fue rediremionado al fichero lista la salida del comando se guarda en ese fichero. Si se quiere redireccionar la salida de un comando sin borrar el contenido del fichero sobre el que se hace el redireccionamiento se utiliza ">>" Por ejemplo: $ cat file1 Este es el contenido del fichero file1 $ ls » file1 $ cat file1 Este es el contenido del fichero file1 datosa datosb filel

Page 26: Unix Basico

Introduccion al UNIX. Servicio de Informática de la Universidad de Almería 26 --------------------------------------------------------------------------------------------------------------------------------------------------------------- file2 El redireccionamiento del standard error se hace de forma similar al del standard output. Se usan los mismos símbolos pero se pone un "2" antes del ">" o del "»". Los comandos normalmente envían la salida o resultado al standard output y los mensajes de error al standard error. $ ls 1.dat *.xxx 2> errores tabla.dat xfile.dat $ cat errores *.xxx not found En el ejemplo que se muestra a continuación se puede ver varios redireccionaráentos diferentes y como se puede ir acumulando las distintas salidas: $ ls *.dat ../*.dat > lista 2> errores $ ls *.tab ../*.tab »lista 2» errores $ cat lista ejemplo.dat texto.dat ../paises,tab ../xxxx.tab $ cat errores ../*.dat not found *.tab not found

Page 27: Unix Basico

Introduccion al UNIX. Servicio de Informática de la Universidad de Almería 27 ---------------------------------------------------------------------------------------------------------------------------------------------------------------

14. Pipes y filtros 14.1 Pipes Los pipes permiten redireccionar el standard output de un comando para que sea utilizado como standard input por otro comando sin tener que redireccionar la salida y/o entrada a un fichero. La sintaxis de los pipes es: comando | comando | comando Se puede encadenar tantos comandos como se necesite o desee, de forma de que en una sola línea se ejecuten varios comandos y que la salida de uno sea la entrada del siguiente, El control de la entrada y salida es manejado por el shell, de la misma manera que lo hace con el redireccionamiento. Se puede decir que los pipes es otra forma de redireccionamiento. A continuación se muestran algunos ejemplos de pipes: who | lp Envía la salida del comando who a la impresora por medio del comando lp. Este último comando al no tener argumentos toma su standard input como fichero a imprimir que en este caso está redireccionado por medio del pipe a la salida producida por el comando who. cal 1997 | more Despliega la salida del comando cal (en este caso el calendario completo del año 1997) en formato more, es decir página a página en la pantalla. 14.2 Filtros Los filtros son diferentes comandos DGí" que combinados con otros comandos por medio de pipes permiten manejar y modificar la salida de un comando para variar el resultado obtenido. La sintaxis de los filtros es: comando | filtro | comando Cualquier comando que lea el standard input y escriba sobre el standard output se puede usar como filtro. El primer comando de una línea con pipes debe siempre escribir sobre el standard output y el último debe leer de standard input. 14.2.1 Contar líneas, palabras y caracteres: wc El comando wc cuenta líneas, palabras (separadas por espacio, tabulador o nueva línea) y caracteres de los ficheros indicados o de standard input sí no se pone ninguno y muestra el resultado sobre standard output. La sintaxis es: wc [-lwc] [fichero ...] Si se usa cualquiera de las opciones mostrará la cantidad de líneas (l), palabras (w) y/o caracteres (c) solamente. Por defecto wc usa -lwc. Ejemplos: $ wc textol texto2 texto1 20 120 532 texto2 10 92 443 total 30 212 975 $ who | wc -l 6 $ 14.2.2 Extraer partes de las líneas de ficheros: cut El comando cut selecciona partes de las líneas de uno o varios ficheros y las muestra por standard output. La sintaxis es: cut -clista [fichero ... ] cut -flista [-dcarácter] [-s] [fichero ... ] Las diferentes opciones significan lo siguiente: lista Lista de números enteros separados por comas que indican los campos o caracteres a extraer de cada línea. Se puede usar el guión

Page 28: Unix Basico

Introduccion al UNIX. Servicio de Informática de la Universidad de Almería 28 --------------------------------------------------------------------------------------------------------------------------------------------------------------- (-) para indicar un rango. Por ejemplo: 2,5,10-12; -4 (desde el 1 hasta el 4); 10- (desde el 10 al final). -clista La lista indica posiciones de caracteres de cada línea. Por ejemplo: 5-45 indica desde el carácter 5 al 45. -flista La lista indica campos separados por el carácter que los delimita (tabulador, a menos que se especifique -d). Las líneas que no contengan el carácter delimitador son mostradas completas a menos que se especifique -s. -dcarácter Usar carácter como delimitador de campos en lugar del tabulador. Los caracteres especiales o el espacio en blanco deben ser escapados del shell. -s Eliminar las líneas que no contengan ningún carácter delimitador. Si no se especifica esta opción las líneas sin delimitadores son mostradas intactas. fichero Fichero de texto al cual se le aplica la selección. Si no se pone nombre de fichero toma la entrada de standard input. Ejemplos: $ who | cut -c1-11 root jpc agc frm $ cut -d: -f1,5 /etc/passwd root:Super-User ... jpc:juan Perez Campos agc:Ana García Cano frm:Francisco Rodríguez Martín mos:María Obregón Sanchez 14.2.3 Clasíficar ficheros: sort El comando sort tiene la siguiente sintaxis: sort [opciones] ficheros El comando sort lee los ficheros que se indican como argumento y de acuerdo a las opciones lo clasifica en forma alfabética o numérica. El resultado es enviado al standard output. Si no se indica ningún fichero como argumento el sort lee el standard input. Ejemplos: sort +1 -2 richero Se clasifica fichero comenzando el ordenamiento saltando el primer campo de cada línea y finalizando la clasificación después del segundo campo de cada línea. Al no especificar cuál es el carácter de separación entre campos el sort asume el carácter <espacio>. sort -b +2 fichero Se ordena saltando los dos primeros campos de cada línea y se ignoran los espacios en blanco que hubiera al conmienzo de cada una de ellas. sort +2n -3 +1 -2 fichero Se clasifica por el tercer campo en forma numérica y para todas las líneas que tengan idéntico este campo se clasifican por el segundo campo. 14.2.4 Buscar expresiones regulares: fgrep, grep y egrep Hay en UNIX un grupo de comandos que permiten la selección de líneas de un fichero de acuerdo a una expresión dada. Los comandos son tres: fgrep, grep y egrep. Los tres tienen funciones sinúlares, permitiendo la selección de acuerdo a expresiones más o menos complejas. Todos ellos toman un fichero o el standard input si no se especfflca ninguno, seleccionan líneas de acuerdo a la expresión y las muestran en el standard output. La sintaxis es: {fgrep / grep / egrep} [opciones] [expresión] [fichero(s)] fgrep permite la búsqueda de expresiones que son strings fijos. grep permite la búsqueda de expresiones regulares de] estilo del comando cd. egrep pemute la búsqueda de expresiones regulares completas con excepto de las del tipo \( y \) y permite además: 1 . Una expresión regular seguida de un signo + encuentra una o más ocurrencias de la expresión regular. 2. Una expresión regular seguida de un ? encuentra 0 ó 1 ocurrencia de la expresión regular.

Page 29: Unix Basico

Introduccion al UNIX. Servicio de Informática de la Universidad de Almería 29 --------------------------------------------------------------------------------------------------------------------------------------------------------------- 3. Dos expresiones regulares separadas por 1 o por carácter de nueva línea encuentra una u otra expresión regular. 4. Una expresión regular puede ser encerrada entre paréntesis para agruparla. Las opciones pueden ser: -v No muestra las líneas que contengan la expresión -x Muestra sólo las líneas que concuerden completas con la expresión (fgrep solamente) -e Muestra la cantidad de líneas que contenían la expresión Muestra solamente los nombres (una vez) de los ficheros cuyas líneas contenían la expresión -n Cada línea es precedida por su número de línea relativo dentro del fichero -s Se suprimes los mensajes de error para ficheros inexistentes o que no se puedan leer. -eexpresión Idéntico a poner expresión sola, útil cuando la expresión empieza con el carácter - (no funciona con grep) -Tfichero El fichero contiene las expresiones a buscar -i No diferencia mayúsculas de minúsculas La expresión debe ir prácticamente siempre encerrada entre comillas simples ya que algunos caracteres que se utilizan en las expresiones tienen un significado especial para el shell y de esta forma se evita que el shell los interprete. Si no se pone ninguna expresión en la línea de comando se debe usar una opción que permite tomar las expresiones de un fichero. Las expresiones son muy sinúlares a las que se usan con el comando vi. Ejemplos: $ ls -l | grep '^d' | lp El comando Is -l nos da una lista completa del contenido del directorio, su salida es tomada por el comando grep que selecciona todas las líneas que convenzan con el carácter d y las líneas seleccionadas son enviadas a imprimir por el comando lp $ grep '[Pp]erez' emple1 emple2 emplel: Juan Perez Administracion emplel: Manuel perez Finanzas emple2:Secretaria Mercedes Perez En este caso el comando grep lee los ficheros emple1 y emple2 y busca las líneas que contengan las palabras Perez o perez. La salida es enviada a standard output. Delante de cada línea nos pone el nombre del fichero del cual fue seleccionada. 14.2.5 Edición por lotes: sed El comando sed lee líneas de un fichero (standard input por defecto) y las muestra sobre standard output, editándolas de acuerdo a las órdenes indicadas en un script. La sintaxis es- sed [-n] [-e 'script'] [fichero(s) ...] La opción -n suprime la salida por defecto al standard output, o sea que solo se mostrarán las líneas cuando se dé la orden correspondiente. El script consiste en una o más líneas con comandos de edición con el siguiente formato: [dirección [,dirección]] función [argumento] La dirección puede consistir en lo siguiente: # La línea número # del fichero. El comando sed numera las líneas leídas desde el número 1 en adelante, si se pone más de un fichero de entrada el número de línea es acumulativo a lo largo de los ficheros $ La última línea del fichero . La línea actual /exp reg/ La línea que contenga la expresión regular exp_reg al estilo

Page 30: Unix Basico

Introduccion al UNIX. Servicio de Informática de la Universidad de Almería 30 --------------------------------------------------------------------------------------------------------------------------------------------------------------- del comando ed Un comando sin dirección se ejecuta para todas las líneas leídas de] fichero; con una sola dirección se ejecuta para la línea que coincida con esa dirección (se puede hacer coincidir una dirección con diferentes líneas usando expresiones regulares); si se usa el formato dirección/dirección el comando se ejecuta para todas las líneas dentro del rango de direcciones indicado. Algunos de los comandos que puede ejecutar sed son los siguientes: a\ Agrega el texto antes de leer la siguiente línea, en texto texto \n significa nueva línea y \t tabulador d Elimina la línea i\ Pone el texto en standard output, en texto \n significa texto poner una nueva línea y \t un tabulador n Muestra la línea en standard output y lee la siguiente p Muestra la línea en standard output q Finaliza la ejecución rfichero Lee el contenido de fichero y lo pone antes de leer la siguiente línea s/exp_reg/texto/[g] Sustituye el texto de la línea que coincide con la expresión regular exp_reg (del tipo de ed por texto, en texto \n significa nueva línea y \t tabulador. La opción g hace el reemplazo todas las veces que exp_reg aparezca en la línea, sino la efectúa sólo en la primera vez. Si en lugar de texto se pone &, se indica que se quiere poner el texto hallado por la expresión regular Ejemplos: $ cat datos finanzas gerente Carlos Perez finanzas secretaria Ana Garcia ventas gerente Jose Campos $ sed -e '1i\Sector\t\tCargo\t\tNombre s/finanzas /finanzas\t/ s/gerente /director\t/ s/ventas /comercial\t/' datos Sector Cargo Nombre finanzas director Carlos Perez finanzas secretaria Ana Garcia comercial director Jose Campos $ sed -n -e '/ventas/s/ventas/comercial/p' datos comercial director Jose Campos 14.2.6 El comando tee Un comando que se usa con mucha frecuencia es el comando tee. Este toma su standard input lo graba en un fichero y también lo envía al standard output. Es especialmente útil cuando se están usando otros filtros y se quiere obtener una copia de la salida de uno de ellos para su análisis posterior. La sintaxis es: comando | tee [-a]fichero | comando Si el fichero no existe el comando tee lo crea, si es un fichero existente graba sobre él a menos que se use la opción -a que agrega al fichero en lugar de grabar sobre él. Ejemplos: $ fgrep 'finanzas' emple1 | sort +2 -1 | tee lista | lp $ cat lista emple1:finanzas Abel Garcia emple1:finanzas Ana Perez emple1:finanzas Carlos Sanchez emple1:finanzas Juan Sanchez El comando fgrep selecciona todas las líneas del fichero emple1 que contengan

Page 31: Unix Basico

Introduccion al UNIX. Servicio de Informática de la Universidad de Almería 31 --------------------------------------------------------------------------------------------------------------------------------------------------------------- la palabra finanzas, el sort las clasifica por el tercer campo (el apellido) y a igualdad en éste lo clasifica por el segundo (el nombre), el comando tee(1) toma las Uneas clasificadas y las graba en el fichero lista y al mismo tiempo las envía al comando lp(1) para que sean impresas. El comando cat lista nos muestra qué es lo que se envió a imprinúr. Ejemplos: $ cat datos finanzas gerente Carlos Perez finanzas secretaria Ana Garcia ventas gerente Jose Campos $ sed -e 'li\Sector\t\tCargo\t\tNombre s/finanzas /finanzas\t/ s/gerente /director\t/ slventas /comercial\tf' datos Sector Cargo Nombre finanzas director Carlos Perez finanzas secretaria Ana Garcia comercial director Jose Campos $ sed -n -e '/ventas/s/ventas/comercial/p' datos J comercial director Jose campos

Page 32: Unix Basico

Introduccion al UNIX. Servicio de Informática de la Universidad de Almería 32 --------------------------------------------------------------------------------------------------------------------------------------------------------------- 15. El entorno del shell 15.1 El entorno UNIX El entorno controla la forma de ejecutarse de los comandos y aplicaciones. El entorno está determinado por un conjunto de variable cuyos valores iniciales se determinan en el momento que el usuario hace login al sistema. Estas variables se pueden modificar en forma interactiva en cualquier momento de tal forma que los resultados de los comandos y aplicaciones varíen de acuerdo a ellas. 15.2 Las variables del shell El shell tiene una serie de variables que, como se explicó en el punto anterior, son utilizadas por él para controlar su propia ejecución y la de los comandos que el usuario va introduciendo. Se puede crear nuevas variables de acuerdo a las necesidades que vayan surgiendo en los diferentes procesos. La forma de crear una variable es la siguiente: nombre=valor nombre es como vamos a nombrar la variable de aquí en más y valor es el valor que le asignamos. Este valor es una cadena cualquiera de caracteres y debe ser encerrada entre comillas simples si va a contener espacios en blanco, tabuladores o retomos de carro. Para acceder al valor de una variable se pone su nombre precedida por el símbolo $. Por ejemplo: $ cat file1 Este es el contenido de file1 $ FILE=file1 $ cat $FILE Este es el contenido del filel Cuando el shell encuentra en una línea de comandos el símbolo "$" toma los caracteres que están a continuación hasta el primer carácter con significado especial <space>, <tab>, etc.) como nombre de una variable y reemplaza todo esto por el valor de la variable. En nuestro ejemplo al encontrar SFILE reemplaza todo esto por su valor que en este caso es file1. El shell tiene algunas variables que se definen en el momento del login que son de gran importancia para su manejo y proceso. Además hay otras variables que definen la forma de trabajo de diferentes comandos: PATH global lista de directorios donde se buscan los comandos, separados por ":" HOME global path del directorio inicial al hacer login PS1 local prompt primario para la línea de comandos PS2 local prompt secundario, cuando una línea de comandos sigue después de un retorno de carro TERM global tipo de terminal MAILCHECK local tiempo en segundos para verificar si llegó un nuevo mensaje de correo. Si se pone 0 (cero) verifica antes de cada prompt LPDEST global nombre de la impresora por defecto EXINIT global opciones por defecto para los comandos ex y vi PAGER global nombre del comando que utilizará el man para mostrar por pantalla la página del manual solicitada Las variables se pueden visualizar por medio de los comandos env y set $ env HOME=/u/user1 PATH=:/bin:/usr/bin:/u/user1/progs TERM=wy6O LOGNAME=user1 $ La diferencia entre lo que muestra el comando env y el comando set es que el

Page 33: Unix Basico

Introduccion al UNIX. Servicio de Informática de la Universidad de Almería 33 --------------------------------------------------------------------------------------------------------------------------------------------------------------- primero muestra las variable conocidas por todos los programas que ejecute el usuario (variables globales), y el comando set sólo muestra las variables que son conocidas por el shell (variables locales). Cuando se define una variable sólo es conocida por el shell. Para que otros programas la conozca es necesario "exportarla", por medio del comando export. Es importante destacar que las variables que se van a exportar si usan letras en su nombre estas deben ser maysculas. No es necesario exportar una variable ya exportada durante la misma sesión. Un ejemplo de comando que utiliza variables del entomo para controlar su ejecución es el comando lp. Este comando toma como destino la impresora default que definió el administrador, pero si está definida una variable llamada LPDEST tomará el contenido de esta como impresora destino. $ lp fichero request id is impl-567 (1 file) Imprime el fichero en la impresora por defecto, en este caso impl. $ LPDEST=Iaser2 $ export LPDEST $ lp fichero request id is laser2-477 (1 file) Al existir la variable LPDEST el comando lp envía el fichero a la impresora indicada por esta variable que en este ejemplo es laser2. 15.3 El fíchero .profile Las variables del entorno son inicializadas cada vez que un usuario hace login al sistema. Las instrucciones para realizar esta tarea se encuentran en los ficheros /etc/profile y .profide localizado en el home directory del usuario. El primer fichero contiene las instrucciones comunes a todos los usuarios y el único que tiene acceso al mismo es el administrador y los usuarios por él autorizados. El fichero .profile localizado en el directorio home del usuario puede ser modificado por el usuario y adaptado a sus necesidades. Ambos ficheros contienen una lista de comandos que se ejecutarán secuencialmente cuando el usuario hace login, primero los comandos de /etc/profile y luego los del fichero .profile del usuario. El siguiente es un ejemplo de un fichero .profile: # Fichero $HOME/.profile - comandos ejecutados al hacer login PATH=:/bin:/usr/bin:$HOME/bin MAIL=/usr/mail/'logname' umask 077 export PATH MAIL En este fichero podemos ver como se inicializan las variables PATH y MAIL y se exportan para que sean conocidas por otros comandos. El resto de los comandos que contiene el fichero son para diferentes manejos como puede ser permisos de acceso a ficheros, definir la terminal, etc. Las líneas que convenzan con el símbolo # son comentarios. Todo lo que está después de un # no es interpretado por el shell. Podemos ver también que hay determinadas variables que no aparecen en este fichero pero sin embargo si pedimos el contenido del entomo (con el comando env) aparecen como seteadas. Esto se debe a que las mismas son cargadas en un paso previo antes de ejecutar las líneas de nuestro .profile. El fichero profíle permite la ejecución de cualquier comando UNIX, de tal forma que al momento de hacer login el usuario si ha modificado su .profile puede hacer que se automaticen determinadas tareas o cargar la aplicación que normalmente usa. 15.4 Metacaracteres del shell A lo largo de los capítulos precedentes hemos mencionado determinados caracteres que tienen un significado especial para el shell. A continuación se da una lista de los mismos y algunos otros y su significado: ; separador de comandos & ejecución en background | pipe ? comodin de un carácter cualquiera

Page 34: Unix Basico

Introduccion al UNIX. Servicio de Informática de la Universidad de Almería 34 --------------------------------------------------------------------------------------------------------------------------------------------------------------- * comodin de un string cualquiera > redireccionamiento de standard output >> redireccionamiento de standard output (adiciona) < redireccionamiento de standard input $ referencia a una variable \c cancelar el significado especial del metacaracter c

Page 35: Unix Basico

Introduccion al UNIX. Servicio de Informática de la Universidad de Almería 35 ---------------------------------------------------------------------------------------------------------------------------------------------------------------

16. Permisos de acceso 16.1 Acceso a directorio y ficheros Usando el comando ls -l se puede desplegar la información completa del contenido de un directorio. Ejemplo: $ ls -l file1 -rw-r----- user1 group 96 May 4 21:30 file1 El primer carácter nos indica de qué tipo de fichero se trata: - fichero regular u ordinario d directorio l enlace simbólico simbólico c dispositivo de caracteres b dispositivo de bloques p fichero fifo Los ficheros manejados por los usuarios son normalmente los dos primeros, los otros tres son de uso especial y generalmente los usuarios no los manejan en forma directa. El siguiente grupo de 9 caracteres nos indica los permisos de acceso que tiene el fichero. Los primeros tres son los permisos para el dueño del fichero, los tres siguientes los permisos para el grupo dueño del fichero y los últimos tres los permisos para el resto de los usuarios. Los símbolos que aparecen en cada grupo tienen diferente significado dependiendo si se trata de un fichero ordinario o de un directorio. Para los fichero ordinarios el significado es: r lectura w escritura x ejecucion - cuando aparece en lugar de r, w o x el permiso está denegado Para los directorios el significado es: r listar el contenido w agregar o borrar entradas al directorio x búsqueda - cuando aparece en lugar de r, w o x el permiso está denegado Cuando se crea un fichero o un directorio se establecen sus permisos: para ficheros: rw-r--r-- para directorios: rwxr-xr-x 16.2 Cambiar los permisos Los permisos de acceso a los ficheros y directorios se pueden cambiar con el comando chmod. Sólo el dueño del directorio o fichero puede modificar sus permisos. La sintaxis de este comando es: chmod permisos ficheros ... Los permisos se dividen en tres partes: 1. A quien afectan: u para el dueño, g para el grupo y o para otros 2. La acción que se va a realizar: + para agregar el permiso y - para eliminarlo 3. El acceso que se modifica: r de lectura, w de escritura y x de ejecución Los ficheros son aquellos a los cuales se les va a modificar los permisos. La forma de especificar los permisos es la siguiente: se pone a quién o quienes va a afectar el cambio, cuál es la acción que se va a hacer y qué permisos serán afectados. Todos los caracteres van uno a continuación del otro sin espacios en blanco. Ejemplos: chmod o-r file*

Page 36: Unix Basico

Introduccion al UNIX. Servicio de Informática de la Universidad de Almería 36 --------------------------------------------------------------------------------------------------------------------------------------------------------------- Se retira el permiso de lectura para otros usuarios (que no sean el dueño o el grupo dueño) de todos los ficheros llamados file*. chmod go-rwx fichero Se retiran todos los permisos al grupo dueño y resto de usuarios para acceder a fichero. En este caso el único que tiene acceso a fichero es el dueño del mismo. chmod go+r * Se agrega permiso de lectura para todos los usuarios a todos los ficheros del directorio de trabajo. El comando chmod tiene una sintaxis alternativa. En esta a cada símbolo de acceso le es asignado un número: r=4, w=2 y x=l. Para cada categoría (dueño, grupo y otros) los números de cada permiso seteado se suman, de tal forma que obtendremos un número de 3 dígitos que debe ser usado en el lugar de permisos. Por ejemplo: r w - r - - - - - 4 2 1 4 2 1 4 2 1 6 4 0 Esto quiere decir que si queremos modificar los permisos de acceso a un fichero para que el dueño pueda leer y escribir, el grupo dueño pueda leer y el resto de los usuarios no tengan acceso a él deberemos usar el número 640 con el comando chmod: chmod 640 file Se puede usar cualquier versión de chmod indistintamente de acuerdo a las necesidades o comodidad del usuario. 16.3 Dueños Cada vez que un usuario crea un fichero o un directorio se asigna su UID (User Id, identificación del usuario) y su GID (Group Id, identificación del grupo del usuario) al fichero o directorio creado como usuario y grupo dueños del mismo. Estos pueden ser cambiados por el usuario dueño del fichero o directorio por medio de los comandos chown y chgrp. Los dos comandos tienen idéntica sintaxis: chown nuevo_dueño ficheros chgrp nuevo_grupo ficheros El primero sirve para modificar la identificación del dueño de un grupo de ficheros y/o directorios y el segundo para modificar el grupo dueño. El nuevo-dueño es la identificación del usuario que va a ser el nuevo dueño del fichero y el nuevo_grupo la del grupo que va a pasar a ser el grupo dueño. Hay que prestar especial atención al cambiar el dueño de un fichero o directorio ya que al hacerlo podremos dejar de tener acceso al fichero o directorio.

Page 37: Unix Basico

Introduccion al UNIX. Servicio de Informática de la Universidad de Almería 37 ---------------------------------------------------------------------------------------------------------------------------------------------------------------

17. Control de procesos 17.1 Procesos en UNIX Todo programa que se está ejecutando es un proceso dentro de UNIX. El UNIX mantiene una lista de todos los procesos que se están corriendo en un momento dado en el sistema. Los procesos compiten por el tiempo de la CPU hasta que su ejecución finaliza. El Kernel va asignando tiempos de CPU a los procesos en base a diferentes parámetros. El login shell es un proceso, el primero que se ejecuta para cada usuario cada vez que hace login al sistema, El shell crea un nuevo proceso por cada comando que se ejecuta. 17.2 El comando ps Para conocer los procesos que está corriendo un usuario en un determinado momento se utiliza el comando ps (process status), cuya sintaxis es: ps [opciones] La ejecución del comando ps sin opciones nos da la lista de procesos que actualmente estamos corriendo (sólo los procesos ejecutados por el usuario que pide la lista): $ ps PID TTY TIME COMMAND 123 01 0:10 -sh 586 01 0:01 ps El PID (Process ED Number) es un número único que el UNIX asigna a cada proceso que se está ejecutando por medio del cual realiza el control y seguimiento del mismo. El comando ps muestra además el número de termina] desde la que se lanzó la ejecución del proceso (TTY), el tiempo de CPU utilizado hasta el momento por el proceso (TIME) y el nombre del comando que se está corriendo. Algunas de las opciones que tiene el comando ps son: -e muestra la lista de todos los procesos que se están ejecutando en el sistema -f muestra un lista detallada de los procesos Si no se pone la opción -e sólo se muestran los procesos en ejecución por el usuario que pide la lista. La opción -f da información adicional sobre los procesos: qué usuario lo lanzó, la línea de comandos completa que inició el proceso, etc. 17.3 Procesamiento background Cuando a un comando se le agrega el símbolo "&" al final el shell corre el programa en background y permite la ejecución de otros comandos.: comando & El shell muestra en pantalla en número de PID del proceso que se ejecuta en background y devuelve el prompt. Por ejemplo: $ sort fichero > salida & 3867 Por medio de] PID y utilizando el comando ps podemos controlar la ejecución del comando. El procesamiento background es especialmente útil para programas que requieren una gran cantidad de tiempo para su ejecución y no trabajan en forma interactiva. Por ejemplo es muy útil para procesos de filtrado de ficheros pero no es de utilidad para usar con comandos como el vi Normalmente la salida de los procesos background se redirecciona a ficheros. Si no se hace el redireccionamiento la salida se producirá sobre la pantalla de la termina].

Page 38: Unix Basico

Introduccion al UNIX. Servicio de Informática de la Universidad de Almería 38 --------------------------------------------------------------------------------------------------------------------------------------------------------------- 17.4 Terminar un proceso Los procesos interactivos (no aquellos que se corren en background) se pueden terminar presionando la tecla <Del> (en algunos sistemas se la conoce como <Supr>, en otros se usa la tecla <Ctrl>+<C>. Al presionar esta tecla el programa recibe una señal que lo hace cancelar y el shell muestra el prompt para continuar con la ejecución de otros comandos. Los procesos que se corren en background no son afectados por <Del>. También es posible que algunos comandos interactivos no sean afectados por ninguna de las teclas. Eso se debe a que el programador "inhibió" la posibilidad de cancelarlos. 17.5 Matar un proceso Todos los procesos se pueden "matar", incluso los que se están corriendo en background. El comando que realiza esta tarea es el kill, cuya sintaxis es: kill [-9] pid# ... El pid# es el número de PID del proceso que queremos matar. Normalmente se usa el comando sin opciones, pero en el caso de que el proceso no finalice se puede usar la opción -9. El comando kill envía una señal al proceso indicado para que este finalice. Con la opción -9 envía una señal "más" fuerte. Sólo se pueden matar procesos de los cuales uno es dueño. En una misma línea de comandos se pueden matar varios procesos. He aquí un ejemplo: $ grep 'nota' ficherol > salida1 & 2245 $ sort fichero2 > salida2 & 2246 $ ps PID TTY TIME COMMAND 123 01 0:10 sh 2245 01 0:01 grep 2246 01 0:03 sort 2248 01 0:01 ps $ kill 2245 2245 terminated $ 17.6 El comando nohup Cuando un usuario hace logout todos sus procesos que estén corriendo en background reciben una señal y son cancelados. Para evitar esto y que un comando no cancele hasta haber finalizado se utiliza el comando nohup. La sintaxis es: nohup comando [ >fichero] & El comando nohup controla la ejecución del proceso background inhibiendo la señal de cancelación por logout del usuario. Si no se redirecciona la salida el nohup hace un redireccionamiento al fichero nohup.out en el directorio de trabajo. Si no puede escribir en éste, graba en el fichero $HOME/nohup.out.