Sistema operativo Unix

Informática. Evolución histórica. Características. Procesos. Ficheros. Shell. Comandos. Programas editores. Programación. Comunicación. Usuarios

0 downloads 165 Views 184KB Size

Recommend Stories


1. Sistema Operativo Unix
1. Sistema Operativo Unix 1.1 Introducción al S.O. Unix y su entorno 1.2 Subsistema de Archivos 1.3 Subsistema de Procesos 1.4 Políticas de Gestión de

TEMA 23: El Sistema Operativo UNIX
Tema 23 – El Sistema Operativo UNIX TEMA 23: El Sistema Operativo UNIX. Índice 1 INTRODUCCIÓN________________________________________________________

TEMA 5. Introducción al Sistema Operativo UNIX. Contenido
TEMA 5 Introducción al Sistema Operativo UNIX Contenido 5.1. Introducción 5.1.1. Historia 5.1.2. Arbol genealógico de Unix 5.1.3. Principios de diseñ

Sistema operativo
Software. Programas. Concepto. Clases sistemas operativos. Comandos en {MSDOS}

Story Transcript

SISTEMA OPERATIVO UNIX Convenciones: El texto del manual está escrito en el tipo de fuente Times New Roman. La información expuesta en los ejemplos y que es producto de la ejecución de un comando está en fuente Arial. El comando ejecutado por el usuario vendrá en negrita. Significa que hay que presionar una o varias teclas. En este caso serian la tecla Ctrl y la tecla d. CAPITULO 1 EVOLUCIÓN HISTÓRICA Y CARACTERÍSTICAS Evolución histórica.− El antecedente histórico del Unix fue el sistema operativo MULTICS desarrollado en el MIT a finales de los años 60 por un grupo de personas representantes de AT&T. En aquellos tiempos, los sistemas operativos trabajaban por lotes, es decir, los trabajos se procesaban secuencialmente de uno en uno. MULTICS fue uno de los primeros sistemas de tiempo compartido que proporcionaba un entorno multiproceso y multiusuario pero era lento y complejo por lo que AT&T abandonó el proyecto. De este grupo de personas nace la idea de crear un sistema operativo a partir de la experiencia adquirida en MULTICS, en el Sistema de Múltiple Acceso de Cambridge (The Cambridge Multiple Acces System) y del Sistema de Tiempo Compartido Compatible. Ken Thompson y Dennis Ritchie diseñan el sistema y junto a un grupo de personas adquieren un ordenador DEC PDP−7 de deshecho. Se inicia el proyecto con la creación de un juego de viaje espacial. Posteriormente le fueron añadiendo la estructura del sistema de ficheros, la planificación de procesos, etc. El sistema estuvo disponible a comienzo de 1970 pero estaba codificado en lenguaje ensamblador. El lenguaje ensamblador es el más cercano al código máquina y por tanto es dependiente de él, o sea, un programa escrito en ensamblador no es portable a una máquina con diferente tipo de procesador. Ken Thompson había desarrollado anteriormente un lenguaje de programación denominado B, el cual no dependía de la máquina. Dennis Ritchie lo modifica y le denomina lenguaje C y con él, junto a Thompson, reescriben todo el sistema operativo Unix dejando tan solo unas pocas subrutinas de alto rendimiento del núcleo en lenguaje ensamblador. El Unix se convierte así, en el primer sistema operativo codificado en un lenguaje de alto nivel y portable a diferentes tipos de máquinas. A mediado de la década de los 70, el Unix demuestra su adaptación total a la gama de ordenadores PDP−11. Los laboratorios Bell de AT&T fueron los primeros clientes reales del sistema operativo Unix y si en un principio se adquirió para procesar textos con el programa troff, al final vendían los ordenadores PDP−11 bajo sistema operativo Unix como un producto llave en mano del negocio telefónico. AT&T distribuyó desde 1975 multitud de copias de Unix a un precio simbólico a universidades y escuelas superiores. Una generación de estudiantes se formó bajo este sistema operativo que, una vez graduados, lo utilizaron en sus puestos de trabajo. De esta forma, el Unix fue captando cuotas de mercado dentro de la 1

industria. Mientras que AT&T potenciaba el sistema operativo Unix en el mundo comercial, las implementaciones desarrolladas por el Departamento de Ciencias de la Computación de la Universidad de California de Berkeley y denominado BSD (Berkeley Software Distribution), se utilizaron masivamente en el entorno universitario y técnico. Aparece así dos sistemas operativos (AT&T y BSD) incompatibles entre sí. Esta situación conlleva a dos entornos informáticos diferentes pero cualquier innovación lo suficientemente eficiente desarrollada que aparece en uno, el otro trata de asumirlo inmediatamente. El Unix de AT&T ha tenido diferentes sistemas de denominación. En un principio se les etiquetaba dependiendo del número de revisión siendo la Revisión Sexta y Revisión Séptima muy populares. AT&T cambió la denominación apareciendo el System III y System V, el System IV fue un sistema de transición que nunca salió de los Laboratorios Bell. A finales de los ochenta, lo vuelve a cambiar dejando la denominación System V y añadiéndole el número de versión: System V, Revisión 3; System V, Revisión 4; a menudo se citan como SVR3 y SVR4 respectivamente. En el transcurso de la década de los ochenta, el Unix sigue evolucionando tanto en la línea Berkeley como en la AT&T, destacando estos factores: 1/ Instalación del Unix en los ordenadores de arquitectura RISC. 2/ Adopción del las X−Windows como interface gráfica en la que se consigue un interacción total entre el hombre y la máquina a través del ratón. 3/ Desarrollo de las comunicaciones con la aparición del protocolo UUCP(Unix to Unix Copy Program) que permite transmitir información independientemente de tipo de Unix y marca de ordenador que lo soporte. 4/ Aparición de la estructura cliente/servidor con la implementación del NFS (Network File System) de Sun Microsystems. 5/ Instalación del Unix sobre el PC cuando este adquiere la suficiente potencia. Esto ocurre con el microprocesador 80286. Aparece el Xenix, nueva rama independiente del Unix, desarrollada por Santa Cruz Operations, empresa controlada por Microsoft al ser propietaria de parte de sus acciones. Como se podrá observar, conforme el Unix va adquiriendo importancia, se va diversificando y haciéndose incompatible. Con la aparición del microprocesador i80386, AT&T e Intel deciden implementar el SVR3 sobre esta plataforma, esto supondría la muerte del Xenix ya que es un Unix con muchas limitaciones debido a la escasa potencia del microprocesador 80286. Ante esta perspectiva, Microsoft se incorpora al proyecto ya que si no lo hace, habría perdido una parcela donde hasta entonces mandaba él exclusivamente. De esta manera, se reabsorbe en el núcleo original, la variante Xenix del Unix. Como el segmento Unix del mercado informático estaba dando ya los suficientes beneficios y se esperaba, como así ha ocurrido, que seria el de mayor crecimiento de ventas, las grandes empresas de informática (IBM, DEC, HP, etc.) se alían para no depender de AT&T y Sun, las cuales dominaban el sistema operativo Unix y el de las estaciones de trabajo respectivamente. Se crea una asociación denominada OSF(Open Software Foundation) cuya finalidad es la creación de un sistema operativo abierto y no propietario. Como contrarrespuesta, AT&T y Sun crean Unix Internacional 2

cuyos objetivos son idénticos a los de OSF. El resto de las empresas informáticas alinean en uno u otro bando dependiendo de sus intereses y perspectivas de futuro. OSF selecciona AIX, sistema operativo de IBM, como base para el desarrollo de su futuro sistema operativo que se llamará OSF/1. Tras 17 meses de trabajo y debido a las continuas desconfianzas de los participantes y a las criticas hechas al sistema por su falta de seguridad y de cálculo multisimétrico, OSF decide reemplazarlo por el Mach Unix, sistema desarrollado por la Universidad Carnegie Mellon de Pittsburg (Pennsylvania) y se llega al acuerdo de instalarlos en los ordenadores de las empresas asociadas en 1993. La realidad ha sido diferente, solo Digital ha cumplido instalando OSF/1 en sus estaciones de trabajo Alpha de 64 bits. Las dos realizaciones más importante de esta asociación ha sido el sistema operativo OSF/1 y el interface gráfico de usuario OSF/Motif, el cual, basándose en la normativa X11, ofrece una interface más fácil tanto para los desarrolladores de software como para los usuarios finales. Una vez visto donde había llegado OSF, Unix Internacional se disuelve y su aportación máxima es la creación del Unix System V donde se integra las extensiones BSD 4.X y por lo tanto confluyen las dos ramas originales del UNIX. Además, se llega a un acuerdo con la Universidad de Berkeley para que no saque más versiones al mercado por lo que se cierra la posibilidad de una nueva escisión. Si la finalidad de las multinacionales informáticas es adquirir las mayores cuotas de mercado, la de los desarrolladores de software y usuarios es la de tener un entorno lo más independiente posible de un sistema propietario y el asegurar sus inversiones a largo plazo. Durante la década de los ochenta aparecen una serie de organizaciones que adaptándose a la realidad del mercado, redactan una serie de normas de estandarización, que al final se convierten de obligado cumplimiento para las empresas multinacionales del sector debido al fuerte apoyo por parte de diversos gobiernos de las naciones más desarrolladas, principales compradores de equipos informáticos. La estandarización del Unix se basa en tres puntos: 1/ X11.− Conjunto de normas redactadas en el MIT y adoptadas por todos los fabricantes por lo que se establece una interface gráfica única. Basándose en este software de dominio público, Sun desarrolla una interface gráfica denominada Open Look y OSF crea OSF/Motif que se convierte en el estándar de facto del mercado. 2/ Posix − Su finalidad es crear una interface única entre los diferentes Unix. Posix parte inicialmente de las especificaciones FIPS (Federal Information Processing Specification) para establecer un Unix estándar oficialmente reconocido por el Gobierno de los EE.UU. Posix es una definición independiente de cualquier marca y a la que los vendedores pueden adherirse sin tener que obtener codificación bajo licencia de AT&T pero su contenido se deriva de Unix System V Interface Definition (SVID). 3/ X Open .− Es una institución independiente que establece una serie de normas para que los sistemas dejen de ser propietarios y se conviertan en abiertos. X/Open acepta los estándares de facto y los incorpora a un Entorno Común de Aplicaciones (Common Aplications Enviroment CAE) que aparece detallado en su guía de portabilidad denominada XPG seguido del número de versión XPG3, XPG4. Esta institución influye sobre los Gobiernos (por ejemplo todos los Estados miembros de la CEE) ya que son los más importantes compradores de sistemas informáticos, para que no compren sistemas que no sean abiertos. Características.−

3

1/ Herramientas software.− Bajo el concepto de divide y vencerás, el Unix permite desarrollar grandes proyectos basándose en la interconexión de subrutinas empaquetadas formadas por una secuencia de ordenes simple. Estas subrutinas se pueden reutilizar en múltiples proyectos lo que proporciona al Unix una gran productividad en el desarrollo de software. 2/ Portabilidad.− Solo una pequeña parte del Sistema operativo es dependiente de la máquina por lo que la portabilidad de las aplicaciones desarrolladas en un tipo de máquina esta asegurada. 3/ Flexibilidad.− Bajo el Sistema operativo Unix se han desarrollado todo tipo de aplicaciones: automatización de fábricas, conmutación telefónica, química computacional, juegos, etc. 4/ Potencia.− La sintaxis clara y concisa permite a los usuarios alcanzar sus objetivos de una forma rápida y sencilla, por lo que este sistema operativo se convierte en el más potente para cualquier plataforma hardware. 5/ Multiusuario y Multitarea.− Multitarea significa que un usuario puede desencadenar más de un proceso al mismo tiempo, como por ejemplo editar un texto, imprimir otro y ejecutar un programa. El concepto multiusuario implica que el sistema operativo Unix puede soportar las actividades de más de una persona a la vez. 6/ Orientación a red.− El S. O. Unix lleva incorporado variado software de comunicación como demuestra la existencia del protocolo propio UUCP (Unix to Unix Copy Program) que sirve para comunicar maquinas de diferentes marcas bajo sistema operativo Unix y que actualmente aún se utiliza para el correo electrónico en algunas redes como por ejemplo USENET y BITNET. Actualmente incorpora TCP/IP, protocolo de comunicación adoptado por Internet. CAPITULO 2 PROCESOS Y FICHEROS Procesos.− Un proceso es una tarea que se esta ejecutando hasta que termina. Si un usuario ejecuta un comando del sistema operativo, por ejemplo: ls, esta orden genera un proceso que subsiste hasta que la operación termina. Debido a que una de las características del Unix es la multitarea, existirán mas de un proceso simultáneamente. Como la Unidad Central de Proceso (UCP) del ordenador tan solo puede ejecutar un solo proceso en un momento determinado, sería el Kernel (parte del Unix que maneja el sistema globalmente) quien controle el acceso a la UCP, concediéndoselo durante un breve intervalo de tiempo y pasando el control a otro proceso. Por esto, a los sistemas operativos multitarea se les denomina sistemas de tiempo compartido. Al usuario le parece que tan solo él está trabajando con el ordenador. Si el ordenador se sobrecarga con demasiados procesos, el tiempo de respuesta aumentara llegándose a perderse la interactividad hombre−maquina. Si el tiempo de respuesta aumenta mucho, el sistema llega a degradarse ya que está gastando más recursos en la gestión de acceso de los procesos a la UCP que en la ejecución de dichos procesos. Los procesos nacen y mueren y su duración es variable. Unos nacen cuando arranca el sistema y mueren cuando se apaga, son especiales y se les denominan daemons (demonios). El sistema proporciona una respuesta a través de ellos cuando se les requiere para una acción determinada, por eso, existen diferentes daemons con fines precisos: comunicación , impresión, reloj, etc. 4

Cuando un usuario accede al sistema, se crea un proceso shell para que este lo utilice y el proceso muere cuando el usuario se despide. Luego siempre existe al menos un proceso asociado a cada sesión de trabajo. Los procesos pueden desencadenar el nacimiento de otros procesos produciéndose una jerarquización en el sistema de procesos. El proceso más antiguo es el proceso padre que puede engendrar (spawn) múltiples hijos y estos a su vez crear sus propios hijos y así sucesivamente. Un proceso tan solo puede tener un padre y si este se muere, el proceso hijo generalmente también muere aunque se puede salvar si se desea, pasándole el control al padre del proceso muerto (en términos familiares al abuelo). Cuando un proceso hijo muere, puede pasar cierto tiempo hasta que el padre se entere, mientras tanto el kernel mantiene este proceso es un estado especial denominado defunct en unos unix y zombies en otros. Ficheros.− El sistema de ficheros en Unix se basa en una jerarquización formada por directorios, de los cuales cuelgan ficheros y subdirectorios , y así sucesivamente. Un directorio es un tipo de fichero. Tipos de ficheros.− En unix existen ficheros especiales como los fifo (pipes) en el System V y los links (enlaces simbólicos) y sockets (receptáculos) en Berkeley. Ficheros convencionales Los ficheros convencionales que contienen información generada por el usuario son de dos tipos: texto y binario. Un fichero texto es un fichero ASCII. La unidad mínima de información con la que trabajan los ordenadores es el octeto. Cada octeto está compuesto de 8 bits en el que cada uno de ellos puede contener un 0 o un 1, luego los posibles valores que puede contener un octeto es 28 = 256. El código ASCII utiliza 7 bits, o sea 27 = 128 caracteres que contiene todos los caracteres alfabéticos, numéricos y especiales visualizables o imprimibles. Un fichero binario almacena cualquiera de los posibles valores que puede contener un octeto. Normas para la creación de ficheros: 1/ No puede haber dos nombres idénticos de ficheros en un mismo directorio. 2/ Los nombres de los ficheros pueden tener una longitud de 255 caracteres pudiéndose emplear cualquier tipo de carácter excepto espacios, tabuladores y metacaracteres de la shell. 3/ No existe ninguna norma sobre la extensión de los caracteres pudiendo un nombre de fichero contener varias extensiones, por ejemplo nombre_de_fichero.tar.Z Existen ciertas extensiones que suponen contienen un tipo de información: .sh ==> Programas de la shell .c ==> Programas fuente en lenguaje C 5

.f ==> Programa fuente en lenguaje Fortran .tar ==> Fichero en formato tar .Z ==> Fichero comprimido ¡ATENCION! El Sistema operativo Unix es sensible a las mayúsculas, esto supone que los siguientes ficheros sean diferentes: FICHERO_1, Fichero_1, fichero_1 Directorios Es un tipo de fichero que contiene listas de ficheros y subdirectorios. Cuando se crea un directorio, se generan dos ficheros . y el .. y sirven para mantener la jerarquía de archivos. El fichero . es un seudónimo del nombre del directorio en curso y el ..del directorio padre del directorio en curso. Cada usuario tiene un directorio personal (home directory) al que se accede directamente al comenzar la sesión de trabajo pinar2.csic.es> cd pinar2.csic.es> pwd Directorios que contienen el sistema operativo Unix. La jerarquización de ficheros no solo afecta a los usuarios sino es una forma intrínseca del sistema operativo Unix. La cuna de la jerarquía es el directorio raíz (root directory) del cual cuelgan de forma arborescente una serie de subdirectorios que contienen diferentes programas del sistema operativo. DIRECTORIO / dev etc sbin tmp usr var sys

DESCRIPCIÓN Directorio raíz de la jerarquía. Contiene ficheros y directorios necesarios para arrancar e inicializar el sistema operativo. Ficheros y directorios para operaciones de entradas y salidas sobre dispositivos físicos y seudodispositivos. Ficheros y bases de datos para la administración de sistemas. Comandos para arrancar e inicializar el sistema en modo single−user. Ficheros temporales. Comandos locales, manuales online, librerias, colas, etc.. Ficheros variables, temporales, colas, log multiproposito. Ficheros de configuración del sistema.

Nombres de camino Un nombre de camino especifica la ruta a seguir a través del sistema de ficheros para acceder al archivo deseado. Los ficheros que no estén en el directorio en curso, se deben referenciar utilizando un nombre de camino (pathname). Todo camino que empiece por una barra `/' es un camino absoluto ya que comienza en el directorio raíz. El resto de los caminos comienzan en el directorio en curso. Un camino esta compuesto por una lista de nombres de directorios separados por unas barras o por un nombre 6

solo. Los primeros nombres de la lista son directorios. El último nombre de la lista es el fichero de destino. No se permiten espacios en blanco dentro de un nombre de camino. Ejemplo: pinar2.csic.es> pwd /usr/users/usuario_1 pinar2.csic.es> vi /usr/users/usuario_1/dir_1/fich_1 (camino absoluto) pinar2.csic.es> vi dir_1/fich_1 (camino relativo) Se asciende por la jerarquía del sistema de archivos haciendo referencia al fichero .. Ejemplo: pinar2.csic.es> pwd /usr/users/usuario_1/dir_1/dir_2/dir_3 pinar2.csic.es> cd ../.. pinar2.csic.es> pwd /usr/users/usuario_1/dir_1 Tipo de ficheros, modo de acceso y protección. Cada fichero creado en Unix contiene una serie de atributos que los definen: tipo de ficheros, permiso de acceso, número de enlaces, nombre del propietario, tamaño, fecha y hora de la última modificación. Existen los siguientes tipos de archivos: − Ficheros ordinarios − Directorios − Enlaces (links) − Socket − Character − Bloque Los dos primeros tipos serían como ejemplo un fichero o un directorio creado por el usuario. El tipo enlace es un apuntador a un archivo que aparece en el directorio que se desee con el mismo u otro nombre. No es una copia ya que cualquier modificación hecha en cualquiera de ellos, queda reflejada en el otro. En una copia, cuando se modifica uno, los dos ficheros son diferentes. Posteriormente veremos el comando para generarlos. Los tipos socket y character son ficheros especiales del sistema operativo y no se estudiaran en este curso.

7

Sobre cada fichero se pueden realizar tres operaciones: leer, escribir y ejecutar. La lectura permite/impide que se pueda visualizar la información de un fichero pero esta no se puede modificar. Si se tiene permiso de escritura, se puede modificar la información o borrar el fichero. La ejecución supone que es un fichero con comandos de la shell o un binario ejecutable, se ejecuta dándole el nombre de camino. Estos tres tipos de acceso actúan sobre los tres tipos de usuarios que tiene un fichero: Propietario: El usuario que lo creó. Sólo el o el superusuario (administrador de sistemas) pueden cambiar la propiedad. Grupo: El concepto de grupo viene determinado por el concepto de multiusuario y a la necesidad de que ciertos usuarios que trabajan en un proyecto común tengan que compartir la información. Un usuario puede pertenecer a más de un grupo. Público: Todos los demás usuarios del sistema. La información sobre el tipo, el modo de acceso y la protección de los ficheros la proporciona el comando ls −l que posteriormente explicaremos. Ejemplo: pinar2.csic.es> ls −l total 259 drwxr−xr−x 2 curso00 users 512 Jul 7 1994 bin −rw−r−−r−− 1 curso00 users 168 Sep 5 10:01 fich_1 −rw−r−−r−− 1 curso00 users 168 Sep 5 10:01 fich_2 −rw−r−−r−− 1 curso00 users 168 Sep 5 10:01 fich_3 −rw−r−−r−− 1 curso00 users 168 Sep 5 10:01 fich_4 −rw−r−−r−− 1 curso00 users 168 Sep 5 10:01 fich_5 −rw−r−−r−− 1 curso00 users 168 Sep 5 10:01 fich_6 −rw−r−−r−− 1 curso00 users 168 Sep 5 10:01 fich_7 −rw−r−−r−− 1 curso00 users 266 Sep 5 10:01 fich_8 −rw−r−−r−− 1 curso00 users 168 Sep 5 10:01 fichero_curso −rwxr−xr−x 1 curso00 users 89 Sep 5 10:01 lsdir drwxr−xr−x 2 curso00 users 512 Sep 5 10:01 metacaracteres El concepto de lectura, escritura y ejecución se interpreta de forma diferente si es un directorio

8

El permiso de lectura proporciona qué ficheros están contenidos en dicho directorio si le damos el comando ls. Si no se tiene permiso, no se obtendrá la lista pero eso no significa que no se pueda leer un fichero que cuelgue de él ya que eso dependerá del tipo de acceso del propio fichero. El permiso de escritura proporciona que el usuario puede crear o eliminar ficheros dentro de un directorio. Una vez creado el fichero, si se deniega el permiso de escritura al directorio y se tiene en el fichero, éste podrá ser modificado. El permiso de ejecución permite que los ficheros que cuelgan del directorio sean ejecutados cuando se especifica un nombre de camino. Si algún directorio de orden jerárquico superior no tiene permiso de ejecución, el fichero seleccionado no se ejecutará. CAPITULO 3 LA SHELL La shell es una interface que traduce las ordenes dadas por el usuario a un formato interno inteligible por el sistema operativo. Shell significa concha, caparazón; y como su nombre indica, es una capa que se sitúa por encima del núcleo del sistema proporcionando un número externo de funciones que permiten sacar el máximo de potencia al sistema operativo. Entrada al Sistema Debido a que el sistema operativo Unix es multiusuario, se debe verificar una serie de características como el derecho de un usuario a acceder al sistema para proteger la privacidad de la información, evitar que dicho usuario ocupe todos los recursos del sistema en detrimento de los demás usuarios, facturar los recursos consumidos: tiempo de CPU, espacio en disco, número de líneas impresas, etc. Cuando se entra al sistema, el futuro usuario debe solicitar que el superusuario le cree una cuenta. El nombre de la cuenta es variable siendo elegido por el propio usuario si no existe una norma establecida de asignación de nombres o no existe ya otra cuenta con el mismo nombre. El nombre de usuario debe ser único en todo el sistema. El nombre de la cuenta del superusuario es fijo y se denomina root. Junto al nombre, el superusuario asigna porque lo impone algunos sistemas, una palabra clave de acceso (password). Una vez que el usuario ha accedido al sistema, la debe cambiar con el comando passwd que en el capitulo 5 veremos. En caso de olvido de dicha palabra clave, ni el superusuario la puede descifrar. Lo que si puede, y de hecho hace, es asignar una palabra clave nueva. Inicio de la Sesión Debido a que este curso se imparte desde ordenadores personales que no pueden soportar el sistema operativo ya que la configuración mínima del Unix es en torno a 80 Mb. Estos ordenadores se convierten en terminales tontos y acceden al nodo pinar2.csic.es que trabaja bajo el sistema operativo OSF/1. Para establecer la comunicación entre los ordenadores personales y la estación de trabajo hay que utilizar el programa telnet de los protocolos de comunicaciones TCP/IP (Transfer Control Protocol/ Internet Protocol). Para ello ejecutaremos C: CD TCPIP

9

C: TELNET PINAR2 Una vez que se establece la comunicación con el ordenador aparecerá la siguiente presentación login: El sistema operativo requiere el nombre de usuario. Se vuelve a recordar que el Unix es sensible a las mayúsculas y minúsculas. Se teclea el nombre de usuario login: alberto password: El sistema requiere la palabra clave a acceso que no se visualizará mientras se teclea, así se protege el acceso si existe una persona que esté presente en ese momento. Si se introduce incorrectamente el login, el password o el usuario no tiene autorización para acceder, el sistema responderá: login: alberto password: ******** login incorrect login: Cuando se accede al sistema, existe una carátula de bienvenida donde el nodo se identifica. Cuando termina, el sistema devuelve el control mediante el inductor pinar2.csic.es>. En este momento se esta bajo la shell y se puede ejecutar comandos o crear programas que se denominan shell−scripts. El inductor varia dependiendo de la shell que se utilice y de las variables de entorno que se definan. Generalmente el inductor bajo sh y ksh es el carácter $ y para la csh, el %. Tipos de shell A los largo de la historia del Unix han existido varios tipos de shell siendo las más importantes: 1) Bourne shell (sh).− Es el primero que tuvo una amplia aceptación. Fue escrito por Steven Bourne y existen muchos programas de administración del sistema operativo en dicho lenguaje. 2) C shell (csh).− Fue desarrollado por Bell Joy, es muy parecido al lenguaje C y tiene mas capacidad para el tratamiento interactivo de la información. Fue inicialmente distribuido por el Unix BSD. 3) Korn shell (ksh).− Escrito por Dave Korn, es compatible con la Bourne shell pero es mucho mas potente, supera en capacidades interactivas a la C shell. 4/ tcsh.− Es la csh pero potenciada su interactividad mediante el reconocimiento automático de nombres de archivo, de tipo de terminales, aumento de la capacidad y tratamiento de los últimos comandos ejecutados (mecanismo history), edición de la línea de comando en estilo Emacs, etc. Su distribución es gratuita y se está convirtiendo en estándar. Bajo esta shell se desarrollará el curso.

10

5/ bash.− GNU Bourne−Again Shell. Bash es un interprete de comandos compatible con la Bourne Shell (sh) y que ejecuta comandos leidos desde la entrada estandar o desde un fichero. Bash también incorpora características de la Korn y C shells. Capas del sistema operativo Unix Estructura de los comandos Los comandos en el sistema operativo Unix están formados por una palabra o secuencia de palabras separadas por espacios en blanco en donde , la primera es el propio comando y el resto son argumentos del comando. Si por necesidad hay que utilizar un argumento que contenga un espacio en blanco, esta debe estar delimitado por dobles comillas( ) o por apóstrofos('), no se debe utilizar el acento grave(`). Formato: comando [argumento(s)] Los argumentos de los comandos pueden ser una: Opción.− Literal normalmente precedido por un signo − y que modifica la acción del comando. Existen opciones que van precedidas por el signo + y otras que no llevan signo. Expresión.− Cadena de caracteres que se va a utilizar como entrada para el comando. Nombre de fichero.− Cualquier nombre de fichero permitido por el Unix. Se admite para el tratamiento de grupos de ficheros la utilización de metacaracteres o caracteres comodines que posteriormente se estudiaran. Ejemplos: ls ls −l ls −la fich* grep sistema operativo unix fich_8 grep sistema operativo Unix fich_8 grep −v sistema operativo Unix fich_8 date date + %r %d %h %y (%a) Procesos en Foreground y Background Los comandos que se ejecutan interactivamente por el usuario están en foreground. ya que hasta que no se acaba su ejecución no se puede desencadenar otra. Este es el modo en que operan los sistemas operativos que no soportan la multitarea, en los cuales, una vez que se ejecuta un proceso , el usuario está inactivo ya que no puede acceder al sistema hasta que el proceso no termine. La shell de unix permite arrancar un proceso y dejarlo desatendido y mientras, el usuario seguir introduciendo comandos. A esta forma de proceso desatendido se le denomina background. 11

Para ejecutar un proceso en background tan solo hay que poner su nombre seguido del carácter ampersand (&). El programa en background no debe requerir datos desde el terminal ya que se produciría una coincidencia de requerimientos tanto por parte del programa en background como de la shell. Si se envían datos al terminal, estos se confundirán con los proporcionados por los comandos ejecutados en foreground. Para observar esta forma de proceso, se ejecutará el programa background.bin , el cual genera un fichero de resultados denominado background_sal pinar2.csic.es> background.bin & [1] 30476 El número proporcionado por la shell es el de identificación de proceso (pid− process id number). Cada proceso tiene un pid único. Para ver el estado de los proceso existe el comando ps pinar2.csic.es> ps u USER PID %CPU %MEM VSZ RSS TTY S STARTED TIME COMMAND curso00 30476 95.0 0.1 2.92M 272K ttyp7 R 16:33:51 0:09.08 background.bin curso00 5955 0.0 0.2 1.98M 488K ttyp7 S 16:10:23 0:01.64 −tcsh (tcsh) [1] + Done background.bin Entrada, salida y error estándar. La información de salida generada por la ejecución de un programa se debe dirigir hacia un lugar, este puede ser un fichero, una impresora o un terminal. Al entrar en el sistema, la shell dirige tanto la entrada como la salida hacia un terminal y se le denomina entrada/salida estándar. El comando cat copia un fichero en la salida estándar. Si se ejecuta: pinar2.csic.es> cat fich_1 ***************************************** * SISTEMA OPERATIVO UNIX * ***************************************** Esta información esta almacenada en el fichero fich_1 como la salida estándar está dirigida al terminal, el contenido del fichero fich_1 se visualizará sobre este. 12

Si se ejecuta el comando cat sin argumentos, copia la entrada estándar en la salida estándar. pinar2.csic.es> cat Estamos dirigiendo Estamos dirigiendo la entrada estandar la entrada estandar a la salida estandar a la salida estandar Este proceso se rompe con a principio de linea Este proceso se rompe con a principio de linea La shell, cada vez que ejecuta un comando, abre tres ficheros para su proceso. El primer fichero abierto es asignado como fichero número 0 y se le denomina STDIN (standard input file). Este fichero está conectado por omisión al dispositivo de entrada del usuario. El segundo fichero abierto es asignado como fichero número 1 y es denominado como STDOUT (standard output file). El tercer fichero es el STDERR (standard error file) y es asignado al fichero número 2. STDOUT y STDERR están conectados por omisión al dispositivo de salida del usuario y cada uno contiene respectivamente la salida si es correcta o el error si es incorrecta la ejecución. STDIN STDOUT STDERR Los dispositivos de entrada/salida estándar es el terminal del usuario. Redireccionamiento de la entrada , salida y error estándar. La shell dispone de dos metacaracteres (<,>) que permiten al usuario desviar la conexión de los ficheros STDIN, STDOUT y STDERR desde los dispositivos de entrada/salida del usuario que son los definidos por omisión, a un dispositivo o fichero determinado. Cuando la redirección de un fichero de salida es requerida, se utiliza el metacaracter >, y para redireccionar un fichero de entrada se usa el <. Ejemplo: pinar2.csic.es> cat fich_1 ***************************************** * SISTEMA OPERATIVO UNIX * ***************************************** 13

Esta información esta almacenada en el fichero fich_1 pinar2.csic.es> cat > fich_1 Vamos a destruir el contenido del fichero fich_1 y se va a grabar esta información. La shell lo que verdaderamente hace es cat 1> fich_1, es decir, coge el contenido del fichero numerado 1(STDIN) y lo graba en el fichero denominado fich_1, en el directorio en curso. Si el fichero fich_1 no existe, lo crea y si existe, destruye la información almacenada reemplazándola por la que se introduzca con la ejecución del comando. pinar2.csic.es> cat > fich_nuevo Hay que hacer notar que la shell es sensible a los espacios en blanco. Por ejemplo, el comando cat 1 > fich_1 lo que hace es grabar el contenido del fichero llamado 1 y que debe existir en el directorio actual, en el fichero fich_1. Lo más usual es que no exista dicho fichero y se produzca un error por lo que dicha información se volcará en el fichero numerado 2 y denominado STDERR. La salida se producirá sobre el terminal a no ser que se redirija mediante: cat 1 2> fich_1 Hay que volver a citar por la peligrosidad que supone para la conservación de la información, que la redirección de la salida destruye la información en ella contenida. Obsérvese este mecanismo con los siguientes comandos: cat fich_1 ls −l > fich_1 cat fich_1 Como ejercicio, se debe crear un fichero denominado fich_1csh y que contenga las siguientes líneas de información: who ps who am i hostname logname Recuerde que para terminar de introducir información hay que presionar las teclas a principio de línea. Similarmente a STDOUT y STDERR, STDIN puede ser redirigido a cualquier fichero o dispositivo utilizando el metacaracter <.

14

Ejemplo: cat fich_1csh csh < fich_1csh Lo que se hace en este ejemplo es invocar a la shell csh y ejecutar los comandos introducidos en el paso anterior. Esto provoca que existan dos shells, la shell de entrada al sistema que como se ha indicado anteriormente es la tcsh y una subshell que en este caso es la csh. La salida estándar está direccionada al terminal, ahora se direccionará a un fichero y utilizaremos otra shell para observar que las salidas obtenidas son similares: ksh < fich_1csh > salida_csh cat salida_csh Cualquiera de los ficheros estándar pueden ser redireccionados entre sí. Por ejemplo, el comando: ls −l 2>&1 redirecciona el fichero STDERR hacia el fichero STDOUT. El símbolo & informa a la shell que redirecciona un fichero numerado 1, no un fichero denominado 1. Este último caso sería: ls −l 2> 1 Adición de la salida estándar a un fichero.− El símbolo >> añade el contenido de la entrada estándar al final del fichero seleccionado. Ejemplo: pinar2.csic.es> date>salida_date pinar2.csic.es> cat salida_date Tue Sep 12 16:51:06 MET DST 1995 pinar2.csic.es> who>>salida_date pinar2.csic.es> cat salida_date Tue Sep 12 16:51:06 MET DST 1995 curso01 ttyp1 Sep 12 16:29 curso02 ttyp2 Sep 12 15:43 curso01 ttyp3 Sep 12 15:45 curso05 ttyp4 Sep 12 13:18 Concatenación de ficheros.− Se realiza con el comando cat y es de la siguiente manera:

15

pinar2.csic.es> cat fich_2 ***************************************** * SISTEMA OPERATIVO UNIX * ***************************************** Esta informacion esta almacenada en el fichero fich_2 pinar2.csic.es> cat fich_3 ***************************************** * SISTEMA OPERATIVO UNIX * ***************************************** Esta informacion esta almacenada en el fichero fich_3 pinar2.csic.es> cat fich_4 ***************************************** * SISTEMA OPERATIVO UNIX * ***************************************** Esta informacion esta almacenada en el fichero fich_4 pinar2.csic.es> cat fich_2 fich_3 fich_4 > fich_234 pinar2.csic.es> cat fich_234 ***************************************** * SISTEMA OPERATIVO UNIX * ***************************************** Esta informacion esta almacenada en el fichero fich_2 ***************************************** * SISTEMA OPERATIVO UNIX * ***************************************** Esta informacion esta almacenada en el fichero fich_3 *****************************************

16

* SISTEMA OPERATIVO UNIX * ***************************************** Esta informacion esta almacenada en el fichero fich_4 Conductos (Pipes) Un pipe (|) conecta la salida estándar de un programa a la entrada estándar de otro, es decir, es un mecanismo que redirige los ficheros STDIN y STDOUT de un proceso hacia el STDOUT y STDIN de otro. La utilización de los pipes permiten ejecutar en una sola línea varias acciones sin tener que generar un fichero temporal que al final tendría que borrarse. Mediante el redireccionamiento de la entrada/salida estándar, el formato sería: comando_a argumentos > fich_temp comando_b argumentos < fich_temp rm fich_temp El comando rm borra ficheros y directorios. Si se emplea un conducto, su formato sería: comando_a argumentos | comando_b argumentos Ejemplo: who>fichero_temporal sort fichero_temporal rm fichero_temporal empleando un pipe sería: who|sort El comando sort clasifica la salida por orden alfabético. Su flujo sería el siguiente: (A)(B) (C)(D)(E) (F) ( A ) STDIN de who ( B ) STDERR de who

17

( C ) STDOUT de who ( D ) STDIN de sort ( E ) STDERR de sort ( F ) STDOUT de sort Filtros Es un comando que procesa una cadena de datos de entrada, le hace un filtrado (por ejemplo, quitar las líneas en blanco) y genera una salida. Los comandos que son filtros pueden utilizarse como operaciones intermedias en un pipe. Por ejemplo: who | sort | lpr su diagrama sería: STDERR STDIN STDOUT STDERR STDIN STDOUT STDERR STDIN STDOUT Metacaracteres Los metacaracteres son caracteres especiales que la shell utiliza para operar sobre conjuntos enteros de ficheros y directorios en una única orden. Los metacaracteres llamados también comodines, son los siguientes: * Representa cualquier cadena de caracteres arbitraria, incluyendo la cadena vacía(nula). No equivale al punto inicial. Ejemplo: fich* Equivale a: fich, fich1, fich2..., fich.txt No equivale a: afich, fic, .fich 18

*c* Equivale a: fich, fichero, fich.txt,capitulo.dat No equivale a: salida_date, salida_txt .* Equivale a: .fich, .texto No equivale a: fich, fich1,salida_dat ? Representa cualquier carácter simple. Ejemplo: fich? Equivale a: fich1, fich2,...,ficha. No equivale a: fich, fich10 sal?da Equivale a: salada, salida, sal3da, sal.da No equivale a: asalada, salida.dat, salda [ ] Encierran una lista de caracteres donde la correspondencia es con cualquier carácter simple encerrado entre los corchetes. El carácter − utilizado dentro de los corchetes indican un rango de caracteres, por ejemplo [a−z] es una notación abreviada para representar cualquier letra minúscula del alfabeto. Ejemplo: fich[1−7] Equivale a: fich1, fich2...fich7 No equivale a: fich8,fich9 fich[12−15] Equivale a: fich1, fich5 No equivale a: fich3, fich4, fich6, fich7,fich8,fich9 CAPITULO 4 LOS EDITORES VI Y PICO Los Programas Editores de UNIX UNIX se caracteriza por la multiplicidad de editores disponibles: vi, ed, sed, etc. Históricamente, ed es el programa editor original de UNIX. Es un editor de líneas, en ciertos aspectos similar al edlin de MS−DOS, y como tal, no es demasiado satisfactorio. El editor de pantalla vi es, en algunos aspectos, mucho más potente y práctico que ed. Esto es debido a que, como en otros programas editores de pantalla, el usuario puede mover 19

el cursor a través de la pantalla y proceder directamente sobre el fichero a las sustituciones de texto deseadas, sin la complicación e ineficacia que supone el tener que direccionar individualmente las líneas del fichero. No obstante debe señalarse que vi no es un procesador de textos como el Word o Wordperfect de MS−DOS. Por ejemplo, no tiene órdenes para realizar automáticamente una corrección dada de texto en todos el fichero, ni para mover o copiar bloques de texto. Estos inconvenientes fueron resueltos por William Joy, dando a vi una facilidad notable: la de comunicar directamente con ed. Esto permite usar las ordenes de ed para llevar a cabo automáticamente sustituciones globales en todo el fichero, copiar y mover bloques del fichero etc. Otra facilidad de vi es la de poder invocar desde el mismo todas las órdenes del shell Esto le da una enorme flexibilidad y utilidad para, por ejemplo, depurar programas y ejecutarlos sin tener que salir del mismo. El Editor de Pantalla vi Antes de proceder a la descripción de las ordenes de vi, se debe tratar brevemente el tema de su instalación para una pantalla determinada. Como ocurre con todos los programas editores de pantalla, para que vi funcione correctamente, tiene que conocer los caracteres de control de la pantalla; es decir, vi necesita conocer las secuencias de caracteres ASCII que mueven el cursor una posición a la derecha, a la izquierda, una línea hacia arriba, etc. Desafortunadamente, en este caso cada pantalla es distinta. En las distribuciones de UNIX existe un fichero denominado `termcap' en donde figuran los parámetros de control del cursor de varias decenas de pantallas de uso común. Se puede utilizar el editor ed (que funciona en todas las pantallas) para examinar rápidamente el fichero `termcap' con el fin de encontrar la pantalla de interés. La primera línea de la descripción de una pantalla dada en `termcap' contiene los nombres con los que la misma puede ser declarada a vi. Por ejemplo, la pantalla de Digital Equipment Corporation VT−100 tiene el nombre vt100. Si se quiere declarar a vi la pantalla vt100 , se puede proceder del modo siguiente: csh setenv TERM vt100 ksh TERM=vt100 export TERM Si la pantalla que se desea instalar no figura en `termcap', se puede utilizar ed para crear una descripción de la misma. La mejor táctica es copiar (dentro del fichero `termcap') una descripción para dicha pantalla usando para ello una ya existente para una pantalla de características similares a esta; luego, con los parámetros de control obtenidos del manual de la pantalla, se corregiría la descripción copiada con los parámetros adecuados hasta que vi funcione correctamente. Finalmente se entra en la operación de vi. El método que se va a utilizar consiste en enumerar simplemente la selección de las órdenes más importantes de vi, y luego aplicar las mismas en una sesión de ensayo de edición de un fichero. El lector, una vez que empiece a usarlas, apreciará que esta selección le permite usar vi con facilidad. En la siguiente tabla de órdenes de vi, la orden `a' es sinónima de teclear la letra `a'; el símbolo `^' representa la tecla designada `Ctrl' en la mayoría de los teclados, y los símbolos `^i' significan . Para editar un fichero denominado `nombre' con vi se teclea: vi nombre A continuación se muestra una tabla donde figuran las órdenes de vi de uso más frecuente: 1/ Movimientos del cursor 20

h o ! Un carácter a la izquierda l o ! Un carácter a la derecha j o ! Una línea abajo k o ! Una línea arriba w Al principio de la siguiente palabra b Al principio de la palabra anterior e Al final de la palabra en curso ( Al principio de la frase en curso ) Al principio de la frase siguiente { Al principio del párrafo en curso } Al principio del párrafo siguiente H A principio de la pantalla M A mitad de la pantalla L A final de la pantalla ^f Mueve una pantalla hacia adelante ^b Mueve una pantalla hacia atrás nG Va a la línea n del fichero G Va a la última línea del fichero ^g Visualiza el número de linea y el estado 2/ Comandos de creación i Inserta texto a partir del cursor I Inserta texto al principio de la línea en curso a Añade texto después del cursor A Añade texto al final de la línea en curso. o Inserta texto una línea debajo de la actual O Inserta texto una línea arriba de la actual

21

Retorna el editor a modo comando 3/ Comandos de borrado Borra el carácter sobre el que está el cursor x Borra el carácter sobre el que está el cursor nx Borra n caracteres X Borra el carácter anterior al cursor dw Borra la palabra sobre la que se encuentra el cursor dd Borra la línea sobre la que está el cursor ndd Borra n lineas a partir del cursor D Borra desde el cursor hasta el final de la línea d) Borra la frase actual d} Borra el párrafo actual u Deshace el último comando U Borra el último cambio en la línea actual 4/ Búsqueda de cadenas de caracteres /patrón Busca el patrón hacia adelante ene el buffer ?patrón Busca el patrón hacia atrás en el buffer n Repite el último comando de búsqueda N Repite el último comando de búsqueda en sentido opuesto 5/ Sustituir cadenas de caracteres r Sustituye solo el carácter actual R Entra en modo sustitución hasta el s Borra el carácter sobre el que está el cursor y añade nuevo texto hasta el S Sustituye todos los caracteres de la línea cw Sustituye la palabra o resto de palabra por otra cc Sustituye todos los caracteres de la línea

22

C Sustituye desde el cursor hasta el final de la línea 6/ comandos especiales . Repite el último comando J Une la línea de abajo con la actual ^l Refresca la pantalla 7/ Comandos de editor de líneas :sh Hace una llamada temporal a la shell ^d Retorna de la shell temporal al editor :n Va a la línea n del buffer :$ Va a la última línea del buffer :.,$d Borra desde la línea actual hasta el final :r file Copia el fichero file debajo de la línea actual :s/t1/t2/ Sustituye t1 por t2 :s/t1/t2/g Sustituye t1 por t2 globalmente 8/ Comandos para salir de vi :wq Sale del editor salvando en disco :q! Sale del editor sin salvar :q Sale del editor sin salvar. Funciona solo si no se ha modificado el buffer Conceptos básicos Se quiere crear con vi un fichero de texto nuevo, al cual se denominará leccionl: pinar2.csic.es> vi leccion1 (invocación de vi para crear leccion1) Esto causa la aparición de la siguiente pantalla: _ " " "

23

" " " " ´´leccion1´´ [New file] en donde _ designa al cursor, es decir, la posición en la pantalla en la que aparecerá el próximo carácter tecleado por el usuario. Debe notarse que las órdenes descritas a continuación, son órdenes de vi, ya que este programa está ahora en control, y no en la shell. Ahora se teclea: a (insertar texto después del cursor) Esto es una prueba del editor vi _ " " " " " ´´leccion1´´ [New file] Si se quiere grabar este fichero (que tenemos en edición) en el disco, se teclea: (fin del modo de inserción) :wq (grabar el fichero en el disco y terminar la sesión de vi) En la última línea nos indica el número de líneas que tiene y el número de caracteres. Se puede verificar que el fichero leccion1 se ha grabado correctamente en el disco, usando el comando cat: pinar2.csic.es> cat leccion1 Esto es una prueba del editor vi Hay que tener en cuenta que vi es un programa editor cuyo fin esencial es crear y modificar programas fuente en lenguajes de alto nivel. Por tanto, no dispone de los caracteres especiales castellanos (acentos, eñes, etc.). Como vi es un programa cuyo uso requiere gran precisión, se indicará explícitamente todo lo que el usuario teclea y cada tecla que pulsa. Se mostrarán las órdenes de vi, y las pantallas resultantes de las mismas se dan 24

inmediatamente a continuación. Entrada de texto La operación de entrada de programas y textos en el ordenador es básica. Cuando se comienza con una sesión de vi, el texto que se introduce por teclado se almacena temporalmente en la memoria principal del ordenador; al terminar la sesión con vi, el programa o texto se almacena permanentemente en el disco. pinar2.csic.es> vi leccion2 (invocación de vi para crear leccion2) Similarmente a como se ha creado lección1, aparecerá una pantalla inicial, se le teclea el comando a para añadir texto. Esta es la primera lonea Esta es la segunda lonea ... Esta es la decime lonea est _ " " ´´leccion2´´ [New file] (fin del modo de inserción) :wq (grabar el fichero en el disco y terminar la sesión de vi) Corrección de Errores Como se han cometido errores en la entrada de texto, se tendrán que corregir teniendo que volver a editar el fichero leccion2. pinar2.csic.es> ví leccion2 La única diferencia con la pantalla anterior es que [New file] ha desaparecido ya que el fichero ya existía en el directorio actual y el cursor está situado en la primera línea y columna. Para corregir un error, hay que utilizar los comandos de desplazamiento de cursor mediante las teclas: j o pulsar una de estas teclas el número apropiado de veces para mover el cursor a la posición indicada a continuación Esta es la primera lonea

25

Esta es la segunda lonea ... Esta es la decime lonea est " " " ´´leccion2´´ dd (borrar la línea donde está el cursor) Esta es la primera lonea Esta es la segunda lonea ... Esta es la decime lonea " " " " ´´leccion2´´ :1,$s/Esta/esta/ (desde la primera (1) hasta la última línea ($) del fichero, sustituir (s) la cadena Esta por la cadena esta) esta es la primera lonea esta es la segunda lonea ... esta es la decime lonea " " " 26

" 10 substitutions Esta última orden pertenece al editor ed, para introducirla se pulsará si se está en modo de texto, y después el carácter :, y a continuación la orden tal y como se detalla en el ejemplo anterior. :1,$s/lo/li (desde la primera (1) hasta la última línea ($) del fichero, sustituir (s) la cadena lo por la cadena li) esta es la primera linea esta es la segunda linea ... esta es la decime linea " " " " 10 substitutions H (mueve el cursor a principio de pantalla) j o pulsar una de estas teclas el número apropiado de veces para mover el cursor a la posición indicada a continuación esta es la primera linea esta es la segunda linea ... esta es la decime linea " " " " 10 substitutions l o pulsar una de estas teclas el número apropiado de veces para mover el cursor a la posición indicada a 27

continuación esta es la primera linea esta es la segunda linea ... esta es la decime linea " " " " 10 substitutions ra (reemplazar (r) por el carácter a, en la posición donde se encuentra el cursor) esta es la primera linea esta es la segunda linea ... esta es la decima linea " " " " 10 substitutions a (añadir texto después del cursor) Se inserta el texto: y ultima (se tiene que tener en cuenta que delante de la y existe un espacio en blanco). La pantalla quedaría así: esta es la primera linea esta es la segunda linea ... esta es la decima y ultima_linea 28

" " " " 10 substitutions (fin del modo de inserción) :wq (grabar el fichero en el disco y terminar la sesión de vi) Órdenes de uso más Importante y Operaciones con Bloques En este apartado se describe el uso de las órdenes de vi más importantes. pinar2.csic.es> vi leccion2 ( invocación de vi para modificar leccion2) Una vez que aparezca la pantalla se le teclea el comando: /ra (a partir del cursor, buscar hacia adelante la cadena ra) esta es la primera linea esta es la segunda linea esta es la tercera linea ... esta es la decima y ultima linea " " " " n (buscar próxima aparición de la cadena ra hacia adelante) esta es la primera linea esta es la segunda linea esta es la tercera linea ...

29

esta es la decima y ultima linea " " " " j o ( pulsar una de estas teclas el número apropiado de veces para mover el cursor a la posición indicada a continuación) esta es la primera linea esta es la segunda linea esta es la tercera linea esta es la cuarta linea esta es la quinta linea esta es la sexta linea esta es la septima linea esta es la octava linea esta es la novena linea esta es la decima y ultima linea " " ?se ( a partir del cursor, buscar hacia atrás la cadena se) esta es la primera linea esta es la segunda linea esta es la tercera linea esta es la cuarta linea esta es la quinta linea esta es la sexta linea esta es la septima linea 30

esta es la octava linea esta es la novena linea esta es la decima y ultima linea " ?se n (buscar la próxima aparición de la cadena se hacia atrás) esta es la primera linea esta es la segunda linea esta es la tercera linea esta es la cuarta linea esta es la quinta linea esta es la sexta linea esta es la septima linea esta es la octava linea esta es la novena linea esta es la decima y ultima linea " ? Aunque la pantalla anterior está bastante clara, ya que sólo tiene al fondo el símbolo que indica la última operación realizada, en otras ocasiones hay otros caracteres de órdenes de vi ajenos al texto mismo del fichero. Cuando se desee ver la pantalla en limpio, borrando los caracteres ajenos al texto como ? se puede teclear: Refresca la pantalla :1,$t10 ( hacer una copia de todo el fichero, desde la primera (1) a la última línea ($), y colocar la copia después de la línea 10) ... esta es la novena linea

31

esta es la decima y ultima linea esta es la primera linea esta es la segunda linea ... esta es la septima linea esta es la octava linea esta es la novena linea esta es la decima y ultima linea " 10 lines Debe notarse que el proceso de duplicación del fichero es la causa de que la primera línea en pantalla no sea la primera línea del fichero. Si se quiere visualizar el fichero desde el principio, se hace lo siguiente: 1G (mover el cursor al principio del fichero) esta es la primera linea ... esta es la decima y ultima linea esta es la primera linea esta es la segunda linea ... esta es la septima linea esta es la octava linea esta es la novena linea esta es la decima y ultima linea " " Si se quiere borrar las últimas diez líneas del fichero, primero se traslada el cursor a la línea 11: o pulsar una de estas teclas el número apropiado de veces para mover el cursor a la posición indicada 32

a continuación esta es la primera linea ... esta es la decima y ultima linea esta es la primera linea esta es la segunda linea ... esta es la septima linea esta es la octava linea esta es la novena linea esta es la decima y ultima linea " " 10dd (borrar 10 líneas a partir de la del cursor) esta es la primera linea esta es la segunda linea esta es la tercera linea esta es la cuarta linea esta es la quinta linea esta es la sexta linea esta es la septima linea esta es la octava linea esta es la novena linea esta es la decima y ultima linea " 10 lines deleted

33

Para copiar desde la línea 3 a la 5 (incluidas ambas), y colocar la copia después de la línea 1, se hace lo siguiente: :3,5t1 esta es la primera linea esta es la tercera linea esta es la cuarta linea esta es la quinta linea esta es la segunda linea esta es la tercera linea esta es la cuarta linea ... esta es la novena linea esta es la decima y ultima linea " 3 lines Para borrar ahora las líneas segunda, tercera y cuarta del fichero, se hace lo siguiente: o (pulsar una de estas teclas el número apropiado de veces para mover el cursor a la posición indicada a continuación) esta es la primera linea esta es la tercera linea esta es la cuarta linea esta es la quinta linea esta es la segunda linea esta es la tercera linea esta es la cuarta linea ... esta es la novena linea

34

esta es la decima y ultima linea " 3 lines Ahora se borran las tres líneas a partir de la del cursor: 3dd esta es la primera linea esta es la segunda linea esta es la tercera linea esta es la cuarta linea esta es la quinta linea esta es la sexta linea esta es la septima linea esta es la octava linea esta es la novena linea esta es la decima y ultima linea " 3 lines deleted El movimiento (no la copia) de bloques se hace de la siguiente manera: :5,7m2 ( trasladar o mover de la línea 5 a la 7 (incluidas ambas), a partir de la línea 2) esta es la primera linea esta es la segunda linea esta es la quinta linea esta es la sexta linea esta es la septima linea esta es la tercera linea esta es la cuarta linea

35

esta es la octava linea esta es la novena linea esta es la decima y ultima linea " 3 lines Para volver a dejar el fichero en la forma original, se hace lo siguiente: :3,5m7 (trasladar o mover de la línea 3 a la 5 (incluida.s ambas), a partir de la línea 7.) esta es la primera linea esta es la segunda linea esta es la tercera linea esta es la cuarta linea esta es la quinta linea esta es la sexta linea esta es la septima linea esta es la octava linea esta es la novena linea esta es la decima y ultima linea " 3 lines Por último, se trataran las opciones principales para hacer sustituciones en todo el fichero. :1,$s/r/R ( sustituir en todo el fichero, desde la primera línea (1) hasta la última ($), la cadena r por la R) esta es la pRimera linea esta es la segunda linea esta es la teRcera linea esta es la cuaRta linea ... 36

esta es la sexta linea esta es la octava linea esta es la novena linea esta es la decima y ultima linea " 3 substitutions Se puede comprobar que en cada línea, sólo ha sido sustituida la primera aparición de la cadena r. A continuación se trata una orden de vi de gran importancia práctica, la orden para deshacer (`undo') el último cambio hecho. Si se quiere cancelar la última modificación hecha en el fichero, se hará lo siguiente: u (anular el último cambio realizado) Esto hace que se recupere la penúltima pantalla. Para sustituir todas las apariciones de la cadena r por la cadena R, se utiliza la siguiente orden: :1,$s/r/R/g (sustituir en todo el fichero, desde la primera línea (1) hasta la última (pinar2.csic.es>), la cadena r por la R; la opción g hace que el cambio tenga lugar en todas las apariciones de r en cada línea) con lo cual se obtiene la pantalla siguiente: esta es la pRimeRa linea esta es la segunda linea esta es la teRceRa linea esta es la cuaRta linea ... esta es la sexta linea esta es la octava linea esta es la novena linea esta es la decima y ultima linea " 5 substitutions Comunicación entre vi y Shell Otra facilidad muy potente de vi es que, sin tener que salir al sistema, se puede ejecutar toda clase de 37

comandos y procesos shell. Para lograrlo, en cualquier momento de la sesión de vi se puede teclear: :! y a continuación introducir comandos de UNIX. Por ejemplo: :!ls ( listar el contenido del directorio activo) :!pwd (mostrar el camino del directorio activo) Esta facilidad puede usarse para acelerar al máximo la eliminación de los errores de compilación de un programa. Supongamos que estamos depurando un módulo fuente de un programa C denominado modl.c; después de hacer las últimas correcciones a este programa, lo compilamos: :!f77 main.f Si hay errores de compilación, éstos se muestran por pantalla con el número de las líneas donde ocurren. Entonces, se vuelve al modo normal de edición de vi, pulsando ; de este modo, se puede empezar de nuevo la sesión de depuración de main.f, luego la compilación etc. Esta facilidad acelera al máximo la depuración de módulos fuente de lenguajes tanto compilados (C, Fortran 77) corno interpretados (Shell). El editor de pantalla Pico.− Si bien el editor de pantalla vi está en los diferentes sistemas operativos unix que existen en el mercado y es la herramienta obligada para todo administrador de sistema, para un usuario final, este editor es bastante complicado y farragoso de utilizar y por tanto no es recomendable su utilización. Existe un editor denominado Pico creado en la Universidad de Washington, bastante sencillo de utilizar y es gratuito pero no universal como el vi y por tanto hay que buscarlo en Internet, capturarlo e instalarlo en el ordenador. El software esta disponible mediante ftp anonymous en la siguiente dirección: ftp.cac.washington.edu y el programa se denomina pine3.96.tar.Z o pine3.96.tar.gz También se puede capturarlo en España en la dirección ftp.csic.es y el programa se llama pine3.91.tar . Pine es un gestor de correo electrónico que para componer los mensajes utiliza un editor que es Pico. Los pasos para instalar Pine seria: tar −xvf pine3.91.tar cd pine3.91 build donde es la marca de ordenador o el tipo de unix donde se va a instalar. Por ejemplo: ult Ultrix, nxt Next, sun Sun, a32 IBM RS/6000 bajo AIX 3.2, lnx linux, etc. El directorio pine3.91 generado por el comando tar, contiene una serie de ficheros y directorios de los cuales destacan: 38

bin Directorio donde se almacenarán los ejecutables de Pine y Pico una vez compilados los ficheros fuentes. build Shell script para compilar los fuentes de Pine y Pico doc Directorio donde se almacena la documentación y las notas técnicas. pico Ficheros fuentes de Pico pine Ficheros fuentes de Pine La sintaxis de pico es la siguiente: pico [+n [−nn [−t [−v [−w [−z [fichero los argumentos entre corchetes indican que son opcionales. Opciones: +n Pico empieza a editar con el cursor localizado en la línea n del fichero. −nn Cheque el correo cada n segundos para detectar si ha llegado un nuevo mensaje. Por ejemplo, −n60 indica que pico chequee el correo cada minuto. −t Activa el modo tool utilizado cuando pico va a ser utilizado conjuntamente con otras herramientas como Elm, Pnews, etc. −v Visualiza solamente el fichero no permitiendo la modificación. −w Desactiva el cortado de palabras por lo que permite editar líneas muy largas. −z Permite utilizar para suspender la edición de pico. fichero Nombre del fichero que se quiere editar. Similarmente al gestor de correo electrónico Pine, pico proporciona una serie de comandos que son mostrado al final de la pantalla y que son ejecutados en combinación con la tecla Ctrl. El texto es insertado a partir del cursor.

39

El editor tiene cinco características básicas: • Alineación de parágrafos.− Actúa sobre el parágrafo donde está el cursor y si este se encuentra en la línea en blanco de separación, sobre el parágrafo posterior. Los parágrafos están delimitados por líneas en blanco o por líneas que comienzan por una tabulación o un espacio en blanco. Para alinear se ejecuta el comando . Para deshacer la última alineación se ejecuta .

40

• Búsqueda de caracteres sin discriminar si son mayúsculas o minúsculas. Los últimos caracteres buscados se convierten, por omisión, en la cadena a encontrar en una nueva búsqueda. La búsqueda se realiza con . • Desplazamiento, copiado o borrado de un texto. • Revisión automática de la ortografía. La palabra escrita incorrectamente en inglés destaca aumentando su brillo en la pantalla. Si se tuviese el diccionario en español, solo habría que definirlo en la variable de entorno SPELL. Par que actúe la revisión ortográfica hay que ejecutar . • Visualizador de archivos mediante los comandos Read File y Write Out. El visualizador muestra los nombres de los ficheros, sus tamaños y los directorios que cuelgan del directorio actual. Permite renombrar, copiar y borrar ficheros.

41

CAPITULO 5 COMANDOS UNIX En esta unidad, se tratará los comandos básicos del sistema UNIX. Se mostrarán las opciones más importantes 42

de cada comando, en algunas ocasiones se estudiaran todas, en otras sólo las más utilizadas. Prácticamente todas las opciones de un comando pueden combinarse entre sí; se avisará de todas aquellas que sean incompatibles. La sintaxis de cada comando irá seguida de la descripción de las funciones que realiza y de una lista de opciones, a continuación se mostraran algunos ejemplos. Las convenciones usadas en esta unidad son las siguientes: 1/ El formato de los comandos se pondrá a inicio de cada comando y en negrita. 2/ Todos los argumentos y opciones mostrados en cursiva, son partes que serán sustituidas por valores introducidos por el usuario. 3/ Todos los argumentos encerrados entre corchetes son opcionales. A continuación se muestra un esquema general del aspecto que presentara cada comando: comando opciones expresiones ficheros Descripción: Opciones: Ejemplos: logname Descripción: Visualiza el contenido de la variable del sistema $LOGNAME (en esta variable se almacena el nombre del usuario que accede al sistema). Opciones: No tiene opciones. Ejemplos: pinar2.csic.es> logname curso01 Se visualiza el nombre del usuario (login) que accedió al sistema, en este caso curso01. uname [opciones] Descripción: Declara o establece el nombre de identificación único de la máquina.

43

Opciones: −m Tipo de CPU de la máquina. −n Nombre del nodo. −r Release del Sistema Operativo. −s Nombre del Sistema. −v Versión del Sistema Operativo. −a Muestra toda la información anterior. −S nombre Cambia el nombre del nodo a nombre. Esta opción solo la puede utilizar el superusuario. No puede llevar ninguna otra opción. Por omisión muestra la versión del Sistema Operativo. Ejemplos: pinar2.csic.es> uname −a OSF1 pinar2.csic.es V3.2 214 alpha Al indicar la opción −a nos facilita toda la información, en primer lugar el del Sistema, después el nombre del nodo, a continuación la Release del Sistema seguido de la versión, y por último el tipo de procesador de la máquina. passwd Descripción: Crea o cambia la palabra clave (password) asociada a un usuario. Sólo el propio usuario y el superusuario la pueden cambiar. Se puede cambiar la palabra clave cada vez que se desee. La nueva password debe tener las siguientes características: Tendrá al menos 6 caracteres, sólo los 8 primeros son significativos, al menos 2 caracteres serán alfabéticos, y como mínimo uno será numérico o especial. Opciones: No tiene opciones Ejemplos: pinar2.csic.es> passwd passwd: Changing password for usuario 44

Old password: New password: Re−enter new password: pwd Descripción: Visualiza el PATH completo del directorio de trabajo. Opciones: No tiene opciones. Ejemplos: pinar2.csic.es> pwd /disco_1/cti/curso01/dir1 Nos indica el lugar concreto en el que estamos situados (directorio de trabajo) dentro del sistema de ficheros. ls [opciones] [nombre] Descripción: Lista el contenido del directorio actual o del directorio especificado en nombre, y proporciona información sobre sus ficheros, nombre también puede ser un fichero, en ese caso proporciona información sobre ese fichero. Sigue un orden alfabético, pero antepone los ficheros ocultos (aquellos cuyo primer carácter es `.') y aquellos que empiecen por mayúscula. Opciones: −C Lista ordenada por columnas y clasificada en sentido vertical. −F Coloca un slash `/' antes de cada nombre de fichero si este es un directorio, y antepone un asterisco `*' si es un fichero ejecutable (tiene permisos de ejecución). −R Produce un listado recursivo de todos los subdirectorios. −a Lista todos los ficheros incluidos los ocultos. −b Imprime los caracteres no gráficos en formato octal. −c Lista ordenada por la fecha de última modificación del inode. −d nombre

45

Visualiza nombre, sólo si nombre es un directorio. No lista el contenido del directorio. −f Lista ordenada por fecha de creación del fichero. −i Imprime el número de enlaces(links). −l Imprime un listado largo y detallado. La salida de esta opción contiene los permisos de acceso, número de enlaces, propietario, grupo, tamaño en bytes o numero de dispositivo si se trata de un fichero especial, y fecha de la última modificación. −m Listado en líneas, cada fichero va separado del siguiente por una coma. −q Sustituye los caracteres no gráficos de un fichero por ? . −r Invierte el orden (alfabético) de salida. −s Imprime el tamaño en bloques de los ficheros. −t Lista ordenada por fecha de última modificación del fichero. −u Lista ordenada por fecha de último acceso al fichero. −x Lista ordenada por columnas y clasificada en sentido horizontal. Ejemplos: pinar2.csic.es> ls background.bin fich_1 fich_8 background.f fich_2 fichero_curso background.sal fich_234 lsdir bin fich_3 metacaracteres capitulo_6 fich_4 novale comandos_importantes.man fich_5 pantalla comandos_impresora.man fich_6 tar crear_ficheros.csh fich_7 trata_args Si no se especifican opciones, fichero o directorios en los argumentos, entonces se listan los ficheros del directorio en curso, que aparecerán en orden alfabético. pinar2.csic.es> ls −s total 302 32 background.bin 1 fich_4 46

1 background.f 1 fich_5 1 background.sal 1 fich_6 1 bin 1 fich_7 1 capitulo_6 1 fich_8 224 comandos_importantes.man 1 fichero_curso 18 comandos_impresora.man 1 lsdir 1 crear_ficheros.csh 1 metacaracteres 1 fich_1 5 novale 1 fich_2 4 pantalla 1 fich_234 1 tar 1 fich_3 1 trata_args Este comando lista, el tamaño de los ficheros en bloques (cada bloque 512 k). La primera línea nos da el total de ficheros del directorio, incluidos los ocultos , a continuación nos muestra en la primera columna el número de bloques que ocupa, y en la segunda el nombre del fichero. pinar2.csic.es> ls −la total 313 drwxr−x−−x 6 curso00 users 1024 Sep 18 08:25 . drwxr−xr−x 29 root users 512 Sep 5 10:18 .. −rwxr−xr−x 1 curso00 users 1499 Sep 5 10:01 .cshrc −rwxr−xr−x 1 curso00 users 1639 Sep 5 10:01 .login −rwxr−xr−x 1 curso00 users 1580 Sep 5 10:01 .profile −rw−−−−−−− 1 curso00 users 2624 Sep 14 20:33 .sh_history −rwxr−xr−x 1 curso00 users 32768 Sep 12 16:40 background.bin −rw−r−−r−− 1 curso00 users 472 Sep 12 16:40 background.f −rw−r−−r−− 1 curso00 users 75 Sep 13 19:32 background.sal drwxr−xr−x 2 curso00 users 512 Jul 7 1994 bin drwxr−xr−x 2 curso00 users 512 Sep 12 14:38 capitulo_6

47

−rw−r−−r−− 1 curso00 users 220343 Sep 5 10:01 comandos_importantes.man −rw−r−−r−− 1 curso00 users 17749 Sep 5 10:01 comandos_impresora.man −rw−r−−r−− 1 curso00 users 678 Sep 5 10:01 crear_ficheros.csh −rw−r−−r−− 1 curso00 users 169 Sep 12 16:42 fich_1 −rw−r−−r−− 1 curso00 users 169 Sep 12 16:42 fich_2 −rw−r−−r−− 1 curso00 users 507 Sep 12 16:52 fich_234 −rw−r−−r−− 1 curso00 users 169 Sep 12 16:42 fich_3 −rw−r−−r−− 1 curso00 users 169 Sep 12 16:42 fich_4 −rw−r−−r−− 1 curso00 users 169 Sep 12 16:42 fich_5 −rw−r−−r−− 1 curso00 users 169 Sep 12 16:43 fich_6 −rw−r−−r−− 1 curso00 users 169 Sep 12 16:43 fich_7 −rw−r−−r−− 1 curso00 users 266 Sep 12 16:43 fich_8 −rw−r−−r−− 1 curso00 users 168 Sep 5 10:01 fichero_curso −rwxr−xr−x 1 curso00 users 91 Sep 13 19:27 lsdir drwxr−xr−x 2 curso00 users 512 Sep 12 16:57 metacaracteres −rw−r−−r−− 1 curso00 users 5071 Sep 14 20:32 novale −rw−r−−r−− 1 curso00 users 3872 Sep 12 17:14 pantalla drwxr−xr−x 2 curso00 users 512 Sep 11 14:15 tar −rw−r−−r−− 1 curso00 users 128 Sep 15 10:16 trata_args Este es un ejemplo típico de la salida de la opción −l, es muy importante comprenderla bien, ya que, para emplear el sistema UNIX, se deben acceder a muchos ficheros diferentes. La salida de la opción −l es la única manera de descubrir la información clave de cada fichero. El primer campo del formato detallado es el campo de modo. Comprende diez caracteres, el primer carácter indica el tipo de fichero, y los siguientes nueve caracteres indican los privilegios de acceso al fichero. −rw−r−−r−− El código para el tipo de fichero es el siguiente: Código Significado − Fichero convencional

48

d Fichero de directorio c Fichero especial de caracteres b Fichero especial de bloques l Enlace simbólico s Socket Si los privilegios de acceso a un fichero son los siguientes: −rwxrwxr−x indican que: es un fichero convencional debido al primer carácter(−), que tienen permiso de lectura, escritura y ejecución (rwx) tanto el propietario como el grupo, y que el público tiene tan solo permiso de lectura y ejecución (r−x). En el capítulo 2, en el apartado Tipos de ficheros, Modos de acceso y Protección, se estudió con detalle tanto las operaciones de lectura, escritura y ejecución como los privilegios de acceso. El segundo campo indica el número de enlaces (links), el siguiente indica el propietario del fichero, a continuación muestra el grupo al que pertenece el propietario del fichero, el siguiente campo indica el tamaño del fichero en bytes, después muestra la fecha y hora de última modificación, y por último facilita el nombre del fichero. cat [opciones] ficheros Descripción Visualiza el contenido de uno o más ficheros. Se pueden concatenar varios ficheros y direccionarlos a otro fichero mediante el operador > Opciones: −s Suprime el mensaje `cat: cannot open fichero', que se produce cuando se intenta visualizar un fichero que no existe. −v Imprime los caracteres no gráficos que pueda contener un fichero (excepto tabuladores, nueva línea y salto de página). −e Imprime el carácter `$ ' antes de una nueva línea (esta opción sólo se puede utilizar junto con −v). −t Imprime los caracteres Ctrl−i en lugar de los tabuladores (esta opción sólo se puede utilizar junto con −v). Ejemplos: pinar2.csic.es> cat saludo Buenos dias Existe un fichero llamado saludo, al ejecutar el comando se visualiza su contenido. 49

pinar2.csic.es> cat nombre Antonio pinar2.csic.es> cat saludo nombre > ejemplo pinar2.csic.es> cat ejemplo Buenos dias Antonio Existe un fichero llamado saludo, existe otro fichero llamado nombre; se combinan y se redirecciona su salida a otro fichero llamado ejemplo; por último se visualiza el contenido de ejemplo. cd [directorio] Descripción: Cambia el directorio de trabajo a directorio. Si no se especifica directorio, se accederá al directorio HOME (directorio de inicio de sesión). También se puede utilizar como argumento .. , en ese caso se accederá al directorio inmediatamente superior (directorio padre). Opciones: No tiene opciones. Ejemplos: pinar2.csic.es> pwd / pinar2.csic.es> cd /disco_1/cti/curso01 pinar2.csic.es> pwd /disco_1/cti/curso01 El directorio de trabajo es /(root), al ejecutar el comando, cambia al directorio /disco_1/cti/curso01. pinar2.csic.es> cd /disco_1/cti/curso01 pinar2.csic.es> pwd /disco_1/cti /curso01 pinar2.csic.es> cd .. /disco_1/cti mkdir [opción] directorio(s) 50

Descripción: Crea uno o más directorios. El usuario debe tener permiso de escritura para poder crear un directorio. Opciones: −m permisos Define los permisos de lectura, escritura y ejecución del directorio. Ejemplos: pinar2.csic.es> mkdir docs graf Al ejecutar el comando, se crean dos nuevos directorios llamados docs y graf, que estarán situados en un nivel inferior (en el árbol de directorios) que el directorio desde el cual fueron creados. pinar2.csic.es> mkdir −m 444 test Crea el directorio test con permiso de lectura para el propietario, grupo y otros usuarios. rmdir [opción] directorio(s) Descripción: Borra uno o más directorios. Es necesario que los directorios estén vacíos, y serán borrados desde el directorio inmediatamente superior. Opciones: −p Borra todos los directorios de un nombre de trayectoria Ejemplos: pinar2.csic.es> rmdir docs graf Al ejecutar este comando, los directorios docs y graf desaparecen del árbol de directorios. pinar2.csic.es> rmdir −p a/b/c Borra todos los directorios en el nombre de camino a/b/c. Los directorios tiene que estar vacios. rm [opciones] fichero(s) Descripción: Borra uno o más ficheros. Para ejecutar este comando es necesario tener permiso de escritura en el directorio que contiene el fichero, en cambio no hace falta tener permisos sobre el fichero que se desea borrar. Si se intenta borrar un fichero que no tiene permiso de escritura, pedirá confirmación. Opciones:

51

−i Pide confirmación para el borrado del fichero. −f Fuerza el borrado sin pedir confirmación. −r Borra todos los ficheros del directorio especificado incluyendo los subdirectorios, el directorio también será borrado. Ejemplos: pinar2.csic.es> rm fich_temp El fichero fich_temp desaparecerá del directorio de trabajo. pinar2.csic.es> rm fractal.f rm: fractal.f: 444 mode y/n Se intenta borrar el fichero fractal.f que tiene un modo (o máscara) r−r−r− (444) que no permite escribir sobre él, el sistema advierte de esta circunstancia, y pide confirmación para borrarlo, pulsar y para borrarlo, o n para conservarlo. pinar2.csic.es> rm −i menu01.c menu01.c: ? y/n Al ejecutar este comando, nos pide confirmación para borrarlo, pulsar y para borrarlo, o n para conservarlo. pinar2.csic.es> rm −r /disco_1/cti/curso01/docs Al ejecutar este comando, se borraría el contenido del directorio docs, si docs tuviera algún subdirectorio, borraría su contenido y el propio subdirectorio, y así sucesivamente; el directorio docs también será borrado. cp [opciones] fichero_fuente fichero_destino cp [opciones] fichero(s) directorio_destino Descripción: Hace una copia del contenido de fichero_fuente en fichero_destino en el directorio de trabajo, sin destruir el contenido de fichero_fuente. Copia el contenido de uno o varios ficheros en el directorio_destino especificado, los ficheros copiados se llamarán igual. Si el fichero(s) destino existe, su contenido será reemplazado. Opciones: −i Si el fichero(s)_destino existe, pide confirmación para reemplazarlo. −r Permite que se copie un directorio fuente y todos sus subdirectorios en un directorio de destino. −p Conserva la fecha del último acceso, modificación, permisos e identificación de usuario y grupo; del fichero_fuente.

52

Ejemplos: pinar2.csic.es> cp oldfile newfile Al ejecutar este comando, se hace una copia del contenido oldfile en el fichero newfile. pinar2.csic.es> cp fich_1 fich_2 dir_1 Al ejecutar este comando, se copia el contenido de los ficheros fich_1 y fich_2 en el directorio /dir_1, el nombre de los nuevos ficheros será el mismo que el de los ficheros origen. pinar2.csic.es> cp −p dir_1/* dir_2 Copia todos los ficheros de dir_1 en dir_2 conservando la fecha de modificación. pinar2.csic.es> cp −r dir_1/* dir_2 La jerarquía de ficheros que cuelgue de dir_1 se copia en dir_2. mv [opciones] fichero_fuente fichero_destino mv [opciones] fichero(s) directorio_destino Descripción: Mueve uno o varios ficheros al directorio especificado, los ficheros destino se llamarán igual. Cambia el nombre de fichero_fuente a fichero_destino en el directorio de trabajo. Si fichero_destino o los ficheros destino existen, serán reemplazados; si existen y no tienen permiso de escritura, se pediráhhh confirmación Opciones: −f Fuerza el movimiento o cambio de nombre del fichero sin pedir confirmación. −i Si el fichero_destino existe, pide confirmación para reemplazarlo. Ejemplos: pinar2.csic.es> mv fich_1 fich_01 Al ejecutar este comando, se cambia de nombre al fichero fich_1 pasandose a llamar fich_01 (fich_1 desaparecerá del directorio de trabajo). pinar2.csic.es> mv fich_1 fich_2 fich_2: 444 mode y/n Se intenta cambiar de nombre a fich_1 y llamarle fich_2, este último fichero existe y tiene un modo (o máscara ) r−r−r− (444) que no permite escribir sobre él, al ejecutar el comando, el sistema advierte de esta circunstancia y pide confirmación, pulsar y para renombrarlo, o n para conservarlo tal como estaba.

53

pinar2.csic.es> mv fich_3 fich_4 dir_2 Al ejecutar este comando, se mueven los ficheros fich_3 y fich_4 del directorio de trabajo al directorio dir_2 (fich_3 y fich_4 desaparecerán del directorio de trabajo).ln [opciones] fichero_fuente fichero_destino ln [opciones] fichero(s) directorio_destino Descripción: Crea un enlace o vinculo (link) entre fichero_fuente y fichero_destino en el directorio de trabajo, también puede crear enlaces entre uno o más ficheros en el directorio_destino especificado. Crear un enlace consiste en hacer que un mismo fichero aparezca bajo el mismo o diferentes nombres, en diferentes lugares del árbol de directorios. No es una copia ya que si se modifica uno, el resto quedan automáticamente modificados. Si fichero_destino o los ficheros destino existen serán reemplazados; si existen y no tienen permiso de escritura, se pedirá confirmación. Existen dos tipos de enlaces: hard y symbolico. La diferencia radica en que los enlaces hard, opción por omisión, son un reflejo del fichero original y ocupan espacio en el disco. Los enlaces simbólicos no ocupan espacio en disco ya que son ficheros o directorios que apuntan al fichero o directorio original . En este caso, hay que hacer notar que pueden hacerse enlaces a directorios. Opciones: −f Fuerza la creación del enlace sin pedir confirmación. −s Crea un link simbólico Ejemplos: pinar2.csic.es> ln fich_5 fich_link Al ejecutar el comando se crea un link de fich_5 llamado fich_link , de modo que un mismo fichero aparece bajo dos nombres en el directorio de trabajo. Si se modifica cualquiera de los dos, por ejemplo fich_link, luego se puede acceder a fich_5 mediante un editor (si fuera un fichero de texto) y se podría comprobar que su contenido también fue modificado. pinar2.csic.es> ln −s fich_3 fich_4 dir_1 Se crearán enlaces simbólicos de los ficheros fich_3 y fich_4 en el directorio dir_1 , los links creados tendrán el mismo nombre. chmod modo fichero(s) Descripción: Cambia el modo de acceso de uno o mas ficheros (pueden ser convencionales o un directorio). Sólo el propietario del fichero o el superusuario pueden cambiar el modo. El nuevo modo (o máscara) contiene tres partes: quién, operador y permiso, los caracteres que definen estas tres partes son los siguientes: Quién 54

u Usuario (propietario) g Grupo o Otros a Todos (propietario,grupo,otros) Operador + Añadir permiso − Quitar permiso = Asignar permiso Permisos r Lectura w Escritura x Ejecución u Permisos en curso del usuario g Permisos en curso del grupo o Permisos en curso de otros En el modo se indicará en primer lugar a quién (propietario, grupo, otros) se va cambiar los permisos, después se indica (mediante el operador) si se añade, retira o asigna un permiso, y por último qué permiso será añadido, retirado o asignado. También se puede especificar el modo mediante una secuencia de tres dígitos. El primer dígito representa los permisos para el usuario, el segundo para el grupo y el tercero para otros; el valor de cada uno de ellos se puede obtener de la siguiente tabla: Permiso Valor Escritura 4 Lectura 2 Ejecución 1 Ninguno 0 Cada dígito se obtiene de la suma de los valores de los permisos que se quieren asignar. Opciones:

55

No tiene opciones. Ejemplos: pinar2.csic.es> ls −l act_ctas.c −rwxrwxr−− 1 jose proyectos 21548 Sep 12 12:46 act_ctas.c pinar2.csic.es> chmod g −x act_ctas.c pinar2.csic.es> ls −l act_ctas.c −rwxrw−r−− 1 jose proyectos 21548 Sep 12 12:46 act_ctas.c Se tiene un fichero llamado fich_8 que tiene el siguiente modo rwxrwxr−−, la ejecución de este comando hace que se retire el permiso de ejecución (−x) al grupo (g). El nuevo modo del fichero será rwxrw−r−−. pinar2.csic.es> ls −l lect_grf.4gl −rwxr−xr−x 1 maria_d gestion 34912 Jan 28 17:09 lect_grf.4gl pinar2.csic.es> chmod u=rw, go=r lect_grf.4gl pinar2.csic.es> ls −l lect_grf.4gl −rw−r−−r−− 1 maria_d gestion 34912 Jan 28 17:09 lect_grf.4gl Se tiene un fichero llamado fich_8 que tiene el siguiente modo (o máscara) rwxr−xr−x, la ejecución de este comando hace que se asigne (=) al usuario (u) los permisos de lectura y escritura (rw), y que se asigne (=) el permiso de lectura (r) al grupo y a otros (go). El nuevo modo del fichero será rw−r−−r−−. pinar2.csic.es> ls −l doc001.man −rwxr−x−−x 1 eva admon 90731 Dec 17 18:32 doc001.man pinar2.csic.es> chmod o=g doc001.man pinar2.csic.es> ls −l doc001.man −rwxr−xr−x 1 eva admon 90731 Dec 17 18:32 doc001.man Se tiene un fichero llamado fich_8 que tiene el siguiente modo rwxr−x−x, la ejecución de este comando hace que se asigne (=) a otros (o), los mismo permisos que tenía el grupo (g). El nuevo modo del fichero será rwxr−xr−x. pinar2.csic.es> ls −l read.doc −rw−r−−r−− 1 felix tecnico 39159 Feb 5 09:05 read.doc pinar2.csic.es> chmod 755 read.doc pinar2.csic.es> ls −l read.doc 56

−rwxr−xr−x 1 felix tecnico 39159 Feb 5 09:05 read.doc Se tiene un fichero llamado fich_8 que tiene el siguiente modo rw−r−r−, la ejecución de este comando (755) hace que el usuario tenga permisos de lectura, escritura y ejecución (lectura (4) + escritura (2) + ejecución (1) = 7), el grupo de lectura y ejecución (lectura (4) + ejecución (1) = 5), y otros de lectura y ejecución (lectura (4) + ejecución (1)=5). El nuevo modo del fichero será rwxr−xr−x. pinar2.csic.es> ls −l ctrl_ctas.c tot_ctas.c −rw−rw−−−x 1 jose_ant conslt 70286 Sep 21 11:36 ctrl_ctas.c −rwxrw−r−− 1 jose_ant conslt 69041 Nov 13 08:16 tot_ctas.c pinar2.csic.es> chmod 700 ctrl_ctas.c tot_ctas.c pinar2.csic.es> ls −l ctrl_ctas.c tot_ctas.c −rwx−−−−−− 1 jose_ant conslt 70286 Sep 21 11:36 ctrl_ctas.c −rwx−−−−−− 1 jose_ant conslt 69041 Nov 13 08:16 tot_ctas.c Se tienen dos ficheros llamados fich_8 fich_8 que tienen el siguiente modo rw−rw−x y rwxrw−r− respectivamente, la ejecución de este comando (700) provoca que los dos ficheros tengan permisos de lectura, escritura y ejecución para el usuario (lectura (4) + escritura (2) + ejecución (1) = 7), y ningún permiso para grupo y otros (la ausencia de permisos tiene valor 0). El nuevo modo de ambos ficheros será rwx−−−−−−. chown [opción] nuevo_propietario[.grupo] fichero(s) Descripción: Cambia la propiedad de ficheros o directorios a un nuevo propietario. El nuevo propietario podrá ser cualquier login o número de identificación de usuario que esté dado de alta en el sistema. Opciones: −R Desciende cambiando la propiedad por toda la jerarquía de ficheros y subdirectorios que cuelgan del fichero directorio. Ejemplos: pinar2.csic.es> ls −l matar_procesos.sh pinar2.csic.es> −rwxrx−r−x 1 curso23 users 37713 Dec 2 13:30 matar_procesos.sh pinar2.csic.es> chown curso10 matar_procesos.sh pinar2.csic.es> ls −l matar_procesos.sh pinar2.csic.es> −rwxrx−r−x 1 curso10 users 37713 Dec 2 13:30 matar_procesos.sh Se tiene un fichero llamado matar_procesos.sh cuyo propietario es el usuario curso23 la ejecución del comando hace que este fichero pase a ser propiedad del usuario curso10. 57

chgrp [opción] nuevo_grupo ficheros(s) Descripción: Cambia la propiedad de ficheros o directorios a un nuevo grupo. El nuevo grupo podrá ser cualquier nombre o número de grupo que esté dado de alta en el sistema. Los ficheros mantienen el mismo propietario. Opciones: −R Desciende cambiando la propiedad por toda la jerarquía de ficheros y subdirectorios que cuelgan del fichero directorio. Ejemplos: pinar2.csic.es> ls −l matar_procesos.sh pinar2.csic.es> −rwxrx−r−x 1 curso10 users 37713 Dec 2 13:30 matar_procesos.sh pinar2.csic.es> chgrp proyecto matar_procesos.sh pinar2.csic.es> ls −l matar_procesos.sh pinar2.csic.es> −rwxrx−r−x 1 curso10 proyecto 37713 Dec 2 13:30 matar_procesos.sh Se tiene un fichero llamado matar_procesos.sh que está asociado al grupo users, la ejecución del comando hace que este fichero pase a estar asociado al grupo proyecto. file [opción] ficheros(s) Descripción: Determina el tipo de datos que contiene un fichero(s).Si averigua que el fichero es ASCII trata de identificar el lenguaje (en términos de programación) del fichero. Opciones.− −f fichero Toma los nombres de los ficheros a examinar, del contenido de fichero. Ejemplos: pinar2.csic.es> file progl.c progl.c: c program text Se tiene un fichero llamado fich_8, la ejecución del comando nos indica que se trata de un programa escrito en lenguaje c. pinar2.csic.es> file −f datos prog1.c: c program text 58

cprog: directory new_pr.sh: comando text doc01.man: ascii text Se tiene un fichero llamado datos que contiene nombres de ficheros, la ejecución del comando indica que tipo de datos contiene cada fichero cuyo nombre se encuentra reflejado en datos. Por cada línea muestra el nombre de fichero y su contenido (programa c, directorio, fichero de comandos shell , fichero ASCII etc.). more, page [opciones] [fichero(s)] Descripción: Pagina el contenido de uno o más ficheros. Después de cada pantalla aparece una línea de comando, para visualizar la siguiente página pulsar RETURN; si se pulsa `h' aparece un menú de ayuda. Cuando se está paginando más de un fichero, hace una pausa entre cada uno de ellos (indica antes el nombre del próximo fichero). Este comando puede tornar sus argumentos de la entrada estándar. Opciones: −c Limpia la pantalla antes de paginar el contenido del fichero(s). −e No hace pausa entre ficheros. −número Esta opción hace que cada página tenga un determinado número de líneas. +número de línea Empieza a paginar 2 líneas antes del número de línea. +/patrón/ Empieza a paginar 2 líneas antes del patrón. Ejemplos:: pinar2.csic.es> more fic_prueba Esto es una prueba del comando more (EOF): La ejecución del comando, pagina el contenido del fichero , este fichero fich_8 no ocupa una página entera, 59

por ello la línea de comando nos indica el fin del fichero, pulsando RETURN, aparece de nuevo el prompt del shell. tail [opciones] [fichero] Descripción: Visualiza las diez últimas líneas de un fichero. Opciones: +n Empieza a visualizar a partir de n líneas del principio del fichero. −n Empieza a visualizar partir de n líneas del final del fichero. Ejemplos.− pinar2.csic.es> tail −2 fich_10 Esta es la penultima linea de fichero Esta es la ultima linea del fichero Se visualizan las dos últimas líneas del fichero fich_10 . who [opciones] Descripción: Lista información acerca de los usuarios que están activos en el Sistema. Por defecto muestra el nombre del usuario, la línea a la que está conectado y la hora a la que accedió al Sistema. Opciones: −s Es la opción por defecto. −u Visualiza la siguiente información: nombre del usuario, línea a la que está conectado, hora a la que accedió al sistema, horas y minutos transcurridos desde la última actividad del usuario (un punto indica actividad en el último minuto), número de identificación del proceso shen del usuario (PID), y por último un comentario (suele ser el número de placa y puerto al que está conectado). −T Visualiza el estado de todos los terminales. Un signo + indica que se puede escribir en ese terminal, un signo − indicará que está protegido. −b Indica la hora y fecha de la última carga del sistema. who am i Muestra en pantalla el login del usuario que esta activo en el terminal.

60

Ejemplos: pinar2.csic.es> who cntiteh ttyp1 Sep 18 07:58 curso00 ttyp2 Sep 18 08:21 curso00 ttyp3 Sep 18 08:21 immgv84 ttyp4 Sep 18 08:25 cntiteh 161.111.80. Sep 18 07:58 La ejecución de este comando, facilita información sobre todos los usuarios que están activos en el sistema en el momento actual. tty [opción] Descripción: Imprime el nombre de dispositivo al cual está asociado el terminal que se está utilizando (línea). Opciones: −l Imprime el número de la línea a la que se está conectado, y si es o no una línea síncrona. Ejemplos: pinar2.csic.es> tty /dev/tty13 La ejecución de este comando visualiza el PATH completo del dispositivo al cual está asociado el terminal que se está utilizando, en este caso /dev/tty13. banner caracteres Descripción: Visualiza caracteres a gran tamaño. Opciones: No tiene opciones. Ejemplos: pinar2.csic.es> banner h ##

61

## ###### ## ## ## La ejecución del comando visualiza el argumento h en gran tamaño. cal [opciones] Descripción: Imprime un calendario del mes actual. Se puede especificar cualquier mes de cualquier año. Opciones: 1..12 Un dígito del 1 al 12 para especificar el mes. 1..9999 Un dígito del 1 al 9999 para especificar el año. Ejemplos: pinar2.csic.es> cal September 1995 Sun Mon Tue Wed Thu Fri Sat 12 3456789 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 calendar [−] Descripción: Este comando busca un fichero llamado calendar que debe encontrarse en el directorio HOME, si el fichero existe visualizará aquellas líneas de dicho fichero donde encuentre la fecha del día en curso. La fecha deberá tener alguno de estos formatos:

62

Dec.7 12/7 December 7 El fichero calendar puede crearse con un editor, la fecha puede ir en cualquier parte de la línea (al principio, al final, etc.). Se el día que se ejecuta el comando es viernes, sacará también las líneas con fecha del lunes siguiente (lo mismo para sábado y domingo). Opciones: − El resultado de la búsqueda en el fichero calendar pantalla será enviado al buzón de correo del usuario, no a la pantalla. Ejemplos: pinar2.csic.es>cat calendar Reunion Proyecto A 01/25 jan 26 Reunion Proyecto B Reunion Direccion, February 7 al las 17:00 pinar2.csic.es> calendar Reunion Direccion, February 7 al las 17:00 Tenemos un fichero llamado calendar que hemos creado con un editor, y se han escrito varias líneas, cada línea contiene una fecha y un mensaje. Se supone que hoy es 7 de Febrero, si se ejecuta el comando calendar, se visualizan las líneas del fichero calendar que contienen la fecha de hoy. find path condicion Descripción: Busca a partir de uno o más path, ficheros que cumplan la condición especificada. Se debe especificar al menos un path y una condición. Opciones: No tiene opciones. Este comando utiliza como argumentos condiciones. Se puede utilizar una o varias condiciones. Dos condiciones separadas por un espacio en blanco se relacionan por un `y' lógico. Dos condiciones separadas por `−o' se relacionan por un `o' lógico. El carácter `!' precediendo a una condición, será una negación lógica de dicha condición. También se permite agrupar condiciones utilizando paréntesis,( ); cada paréntesis irá precedido por el carácter `\'. A continuación se ofrece una lista de condiciones: −name fichero Busca un fichero llamado fichero.

63

−perm máscara de permisos Busca ficheros que tengan la máscara de permisos, que se indica. −type tipo de fichero Busca ficheros de un determinado tipo, donde tipo de fichero puede ser uno de los siguientes: b para ficheros especiales de bloque, c para ficheros especiales de caracteres, d para ficheros de directorio, f para ficheros convencionales y l para links simbólicos. −links n Busca ficheros con n links(enlaces). −user usuario Busca aquellos ficheros que sean propiedad de usuario. El nombre del usuario se indica mediante su login o su número de identificación. −group grupo Busca aquellos ficheros que estén asociados a un determinado grupo. El grupo se indica mediante su nombre o su número de identificación. −size n [c,k] Busca ficheros cuyo tamaño sea de n bloques. Si se incluye `c', el tamaño será de n caracteres. Si se incluye k, el tamaño será en kilobytes. −atime n Busca aquellos ficheros a los que se ha accedido por última vez hace n días. −mtime n Busca aquellos ficheros cuyo contenido se ha modificado hace n días. −ctime n Busca aquellos ficheros cuyo modo se ha cambiado hace n días. −exec comando Si la condición de búsqueda se cumple, se ejecuta el comando; la ejecución del comando afecta al fichero(s) que está siendo evaluado. A continuación del comando separadas por un espacio en blanco se colocan dos llaves `{}', que representarán el nombre del archivo que está siendo evaluado, a continuación de las llaves y separado también por un espacio en blanco se coloca un `;' , precedido por el carácter `\'. −ok comando Funciona igual que −exec y tiene su mismo formato, se diferencian en que −ok pide confirmación antes de ejecutar el comando. 64

−print Imprime los PATH de los ficheros que son localizados. −newer fichero Busca aquellos ficheros cuyos datos han sido modificados después que fichero. En aquellas condiciones que llevan un número n, se pueden establecer las siguientes convenciones: n será un número entero que significa n exactamente, −n significará menor que n, +n significa mayor que n. Ejemplos: pinar2.csic.es> find /disco_1/cti/curso −name fich_2 −print pinar2.csic.es> /disco_1/cti/curso/dir1/fich_2 En este ejemplo se le dice al comando find que busque en el directorio /disco_1/cti/curso02, un fichero llamado fich2, y que imprima el PATH completo de dicho fichero. Dicho fichero es localizado y se imprime su PATH. pinar2.csic.es> pwd pinar2.csic.es> /disco_1/cti/curso pinar2.csic.es> find . −links +3 −print /disco_1/cti/curso /menu.c /disco_1/cti/curso /fuentes/script.sh La ejecución de este comando, hace que se busque a partir del directorio de trabajo `.', aquellos ficheros que tengan más de un link, y que se impriman sus PATH completos. En el directorio de trabajo, encuentra el fichero menu.c, y en el subdirectorio fuentes, localiza el fichero script.sh. El comando find empieza la búsqueda a partir del directorio de trabajo, y entra en todos los subdirectorios que encuentre. pinar2.csic.es> find . −size +10 −exec ls {} \; estadistica.txt ./docs/informe.doc En este ejemplo el comando find busca a partir del directorio de trabajo, todos aquellos ficheros cuyo tamaño supere los 10 bloques, y posteriormente ejecuta la orden de listarlos. Se puede observar el formato característico de la condición exec (llaves, punto y coma). grep [opciones] patrón [fichero(s)] Descripción: Busca un patrón en uno o más ficheros e imprime todas las líneas de dicho fichero que contengan el patrón. Si no se especifica fichero, utiliza la entrada estándar. 65

Opciones: −b Muestra antes de cada línea, el número del bloque donde se encuentra el patrón. −c Imprime sólo el número total de líneas donde localiza el patrón. −i Ignora la diferencia entre mayúsculas y minúsculas. −l Imprime sólo el nombre de los ficheros donde localiza el patrón. −n Imprime el número de línea del fichero donde aparece el patrón, así como la línea completa. −s Suprime el mensaje de error, que se produce cuando el fichero no existe o no tiene permiso de lectura. −v Imprime las líneas del fichero donde no aparece el patrón. Ejemplos: pinar2.csic.es> cat nombres jose antonio eugenia sana dolores pascual juan rebollar jose manuel pinar2.csic.es> grep jose nombres jose antonio jose manuel pinar2.csic.es> grep jose antonio nombres jose antonio Se tiene un fichero llamado nombres, que contiene varias líneas con varios nombres, la ejecución del primer comando busca el patrón jose en el fichero nombres, e imprime las líneas donde aparece, en este caso dos. La ejecución del segundo comando, busca el patrón jose antonio (obsérvese que va encerrado entre comillas debido a que el patrón lleva un espacio en blanco) en el fichero nombres, e imprime las líneas donde aparece, en este caso una. pinar2.csic.es> cat nombres jose antonio eugenia sanz

66

dolores pascual juan rebollar jose manuel pinar2.csic.es> grep −n jose nombres 1:jose antonio 5:jose manuel La ejecución de este comando, muestra las líneas del fichero nombres, donde aparece el patrón jose precedidas por el número de la línea del fichero donde se encuentran. pinar2.csic.es> cat nombres jose antonio eugenia sanz dolores pascual juan rebollar jose manuel pinar2.csic.es> grep −v jose nombres eugenia sanz dolores pascual juan rebollar La ejecución de este comando, muestra aquellas líneas del fichero nombres donde no aparece el patrón jose. lpstat [opciones] Descripción: Visualiza tanto el estado de los dispositivos de impresión, como de los trabajos que están en cola. Opciones: −t Visualiza un informe completo sobre el estado del sistema de impresión (existen opciones que visualizan información parcial sobre el sistema de impresión). Ejemplos:

67

pinar2.csic.es> lpstat −t schedeler is running system default detination: lp1 device for lp1 : /dev/tty01 lp1 accepting requests since Jan 15 15:11 printer lp1 now printing lp1−1059. enabled since Feb 1 08:52 lp1−1059 curso01 2612 Feb 13 13:41 n lp1 lp1−1060 curso02 1682 Feb 13 13:42 n lp1 La ejecución de este comando facilita la siguiente información: indica que el planificador está en ejecución, nos dice la impresora por defecto (lp1), nos muestra el dispositivo para la impresora (/dev/tty0l), a continuación indica la fecha de configuración del sistema de impresión, luego muestra que fichero se esta imprimiendo en la actualidad (lpl−1059) y desde cuando el sistema de impresión se encuentra activado, por último muestra los trabajos que están en cola de impresión (también muestra el que se está imprimiendo en ese momento) así como su número de solicitud, usuario que lo solicita, número de proceso y fecha. lpr [opciones] ficheros(s) Descripción: Envía un fichero a una cola para su posterior impresión. Opciones: −h Suprime la pagina cabecera del listado, que sirve para distinguir una salida impresa de otra. −J nombre Pone nombre en la página cabecera. Por omisión, imprime fichero. −m Envía un correo cuando se termina la impresión. −N número Número máximo de páginas a imprimir. Por omisión, 100 páginas. −O orientación Selecciona la orientación en la impresoras que soporte dicha acción Portrait! Paralela al borde más corto de la página. Landscape! Paralela al borde más largo de la página. −P impresora 68

Selecciona una impresora determinada −r Borra el fichero cuando la impresión termina −#número Número de copias de fichero Ejemplo: pinar2.csic.es> lpr −#3 −Plp37 −h index.c cata.f Imprime en la impresora lp37, 3 copias de los ficheros index.c y cata.f, suprimiendo la página de cabecera de cada copia. lpq [opciones] Descripción: Examina las colas de impresión. Opciones: −l Muestra información sobre cada uno de los ficheros que conforman la solicitud de impresión. ID(s) Número de identificador de la solicitud de impresión. −P impresora Muestra las solicitudes de impresión existente en una cola de impresión determinada. +número Muestra la cola cada número de segundos hasta que esta se vacía. usuario(s) Solicitudes de impresión de un usuario(s) determinado. Ejemplo: pinar2.csic.es> lpq Mon Sep 18 08:28:57 1995: Attempting to print dfA230pinar2.csic.es Rank Pri Owner Job Files Total Size active 0 curso00 230 novale 5071 bytes pinar2.csic.es> lpq Mon Sep 18 08:29:03 1995: 69

no entries lprm [opciones] Descripción: Borra una o más solicitudes de una cola de impresión. Opciones: ID Número de identificador de la solicitud de impresión. Se visualiza con lp lpq o lpstat −P impresora Borra la solicitud de impresión existente en una cola de impresión determinada. usuario Solicitudes de impresión de un usuario determinado. − Borra todas las solicitudes del usuario. Ejemplo: lprm −Plp0 13 Borra la solicitud de impresión número 13 de la cola lp0 lprm −Plp0 curso01 Borra las solicitudes de impresión del usuario curso01 acumuladas en la cola lp0 tee [opciones] ficheros(s) Descripción: Toma la entrada estándar y envía una copia a la salida estándar y otra copia a uno o más ficheros. Normalmente toma su entrada de la salida de otro comando (utilizando un pipe), se suele utilizar en programación shell. Opciones: −a No inicializa el fichero cuando se envía la copia a un fichero que existe (lo añade al final). Ejemplos: pinar2.csic.es> ls −l | tee fich _tmp −rwxr−xr−x 1 curso05 users 49068 Feb 11 09:33 articulos.c −rwxrwxrwx 1 curso05 users 69210 Feb 10 19:01 codigos.c

70

pinar2.csic.es> cat fich_tmp −rwxr−xr−x 1 curso05 users 49068 Feb 11 09:33 articulos.c −rwxrwxrwx 1 curso05 users 69210 Feb 10 19:01 codigos.c La ejecución de este comando, hace que la salida del comando ls −l se visualice por pantalla (salida estándar) y que se copie a su vez en el fichero fich_tmp. pinar2.csic.es> cat fich_temp Reunion Departamento Jueves 7 de Febrero : 2 horas. Pruebas Viernes 8 de Febrero : 3 horas. pinar2.csic.es> ls −l | tee −a fich −tmp −rwxr−xr−x 1 curso05 users 49068 Feb 11 09:33 articulos.c −rwxrwxrwx 1 curso05 users 69210 Feb 10 19:01 codigos.c pinar2.csic.es> cat fich_tmp Reunion Departamento Jueves 7 de Febrero : 2 horas. Pruebas Viernes 8 de Febrero : 3 horas. −rwxr−xr−x 1 curso05 users 49068 Feb 11 09:33 articulos.c −rwxrwxrwx 1 curso05 users 69210 Feb 10 19:01 codigos.c La ejecución de este comando, hace que la salida del comando ls −l se visualiza por pantalla, y que se copie a su vez en el fichero fich_tmp, pero sin inicializarlo (lo copia al final del fichero). od [opciones] [ficheros(s)] Descripción: Produce un volcado en formato octal de uno o más ficheros. Opciones: −b Visualiza bytes en formato octal. −e Visualiza bytes en formato ASCII. Con esta opción los caracteres se visualizan y los caracteres de control se imprimen en octal, excepto algunos caracteres estándar, que se representan de la siguiente manera: Tecla de retroceso \b Tabulador \t Nueva línea \n 71

Retorno de carro \r Nulo \O alimentador de hojas \f −d Visualiza palabras en formato decimal. −o Visualiza palabras en formato octal (es la opción por defecto). −x Visualiza palabras en formato hexadecimal. Ejemplos: pinar2.csic.es> cat prueba Buenos dias esto es una prueba. pinar2.csic.es> od −c prueba 0000000 041165 062556 067563 020144 064541 071412 062563 072157 0000020 020145 071440 072556 060440 070162 072545 061141 027012 0000040 La ejecución de este comando provoca el volcado del fichero prueba por palabras en formato octal (es equivalente a la opción −o). pinar2.csic.es> cat prueba Buenos dias esto es una prueba. pinar2.csic.es> od prueba 0000000 B u e n o s d i a s \n e s t o 0000020 e s u n a p r u e b a . \n 0000040 La ejecución de este comando provoca el volcado en bytes del fichero prueba en formato ASCII. nl [opciones] [ficheros] Descripción: Numera las líneas de un fichero y envía la salida al terminal. 72

Opciones: −in Incrementa la numeración de las líneas en n. −vn Indica mediante n el valor inicial de la numeración de líneas. −sc Separa el número de línea del texto mediante el carácter que se indique en c. Ejemplos: pinar2.csic.es> cat prueba Buenos dias esto es una prueba pinar2.csic.es> nl prueba 1 Buenos dias 2 esto es una prueba La ejecución de este comando, numera las líneas del fichero prueba, y las muestra por pantalla. pinar2.csic.es> cat prueba Buenos dias esto es una prueba pinar2.csic.es> nl −v10 prueba 10 Buenos dias 11 esto es una prueba La ejecución de este comando, numera las líneas del fichero prueba, pero hace que dicha numeración empiece a partir de 10. wc [opciones] [ficheros (s)] Descripción: Cuenta el número de caracteres, palabras y líneas de uno o más fichero(s). Si no se indica fichero, leerá de la entrada estándar. Opciones:

73

−c Imprime sólo el número de caracteres del fichero. −l Imprime sólo el número de líneas del fichero. −w Imprime sólo el número de palabras del fichero. Ejemplos: pinar2.csic.es> cat prueba Buenos dias esto es una prueba. pinar2.csic.es> wc prueba 2 6 32 prueba En este ejemplo, el comando imprime el número total de líneas (2), de palabras (6), y de caracteres (32) (incluye espacios en blanco y nueva línea) del fichero prueba. pinar2.csic.es> who curso01 tty23 Feb 11 11:45 curso02 tty15 Feb 11 10:13 curso03 tty13 Feb 11 09:23 curso04 tty17 Feb 11 12:27 curso05 tty12 Feb 11 13:11 curso06 tty07 Feb 11 08:37 pinar2.csic.es> who | wc −l 6 La salida del comando who, facilita información acerca de los usuarios que están conectados al sistema (utiliza una línea para cada usuario). Si mediante un pipe, se conecta su salida a la entrada de wc, tendremos el número de líneas de la salida de who, o lo que es lo mismo el número de usuarios que están conectados al sistema, en este caso 6. ps [opciones] Descripción: Visualiza información sobre el estado de los procesos. Opciones: 74

−e Visualiza información básica acerca de todos los procesos (número de proceso, número de terminal asociado al proceso, tiempo total de CPU que lleva consumido el proceso, y comando con sus opciones) −f Genera un listado completo que incluye: usuario que ejecuta el proceso, número de proceso, número de proceso padre, información sobre la planificación, hora de comienzo del proceso, número de terminal asociado al proceso, tiempo total de CPU que lleva consumido el proceso, y comando con sus opciones. Debe utilizarse junto con la opción −e. −t terminales Visualiza solo información acerca de los procesos asociados a los terminales indicados. Si se especifica más de un terminal deberán ir separados por comas o espacios en blanco. Debe utilizarse junto con la opción −e. −u usuarios Visualiza solo información acerca de los procesos asociados a los usuarios indicados. Si se especifica más de un usuario deberán ir separados por comas o espacios en blanco. Ejemplos: pinar2.csic.es> ps u USER PID %CPU %MEM VSZ RSS TTY S STARTED TIME COMMAND curso00 30476 95.0 0.1 2.92M 272K ttyp7 R 16:33:51 0:09.08 back.bin curso00 5955 0.0 0.2 1.98M 488K ttyp7 S 16:10:23 0:01.64 −tcsh (tcsh) La ejecución de este comando, facilita la siguiente información acerca de los procesos activos pertenecientes al usuario: nombre de usuario(USER), número de proceso (PID), porcentaje de utilización de la cpu (%CPU) y de la memoria real (%MEM), tamaño requerido para el proceso en la memoria real (RSS) y la virtual (VSZ), terminal asociado al proceso(TTY), estado del proceso(S), hora de comienzo (STARTED), tiempo consumido de CPU (TIME) y el comando que generó el proceso (COMMAND). pinar2.csic.es> ps −ef USER PID PPID %CPU STARTED TTY TIME COMMAND root 0 0 0.0 Aug 30 ?? 03:28:49 [kernel idle] root 1 0 0.0 Aug 30 ?? 1:19.12 /sbin/init −a root 9 1 0.0 Aug 30 ?? 0:00.12 /sbin/kloadsrv −f root 12 8519 0.0 Sep 07 ?? 0:00.07 xterm −display 134.2.73. root 39 1 25.0 Aug 30 ?? 10:50:51 /sbin/update root 136 1 0.0 Aug 30 ?? 0:12.35 /usr/sbin/syslogd root 138 1 0.0 Aug 30 ?? 0:00.08 /usr/sbin/binlogd 75

root 190 1 0.0 Aug 30 ?? 0:58.94 /usr/sbin/routed root 213 1 0.0 Aug 30 ?? 1:33.49 /usr/sbin/rwhod root 267 1 0.0 Aug 30 ?? 0:00.28 /usr/sbin/portmap root 269 1 0.0 Aug 30 ?? 0:00.46 /usr/sbin/mountd −i root 271 1 0.0 Aug 30 ?? 0:00.02 /usr/sbin/nfsd 8 root 273 1 0.0 Aug 30 ?? 0:00.02 /usr/sbin/nfsiod 7 ..... curso00 12972 11084 0.0 08:21:10 ttyp2 0:00.39 −tcsh (tcsh) root 9236 12397 0.0 08:30:05 ttyp3 0:00.05 ps −ef curso00 12397 2760 0.0 08:21:41 ttyp3 0:01.15 −tcsh (tcsh) La ejecución de este comando, facilita un listado completo sobre todos los procesos que están activos en el sistema, dicho listado proporciona la siguiente información adicional: el número de identificador del proceso padre (PPID). nohup comando [argumentos] Descripción: Se utiliza para ejecutar un comando y sus argumentos (si los tuviera) y poder salir del sistema. Es inmune a interrupciones. La diferencia entre este comando, o enviar a ejecución un comando en background, es que todos aquellos procesos que se envíen en background, morirán si el usuario abandona el sistema; en cambio aquellos comandos que se ejecuten mediante nohup no morirán si el usuario abandona el sistema, sino que seguirán ejecutándose. Opciones: No tiene opciones. Ejemplos: pinar2.csic.es> nohup ls −l > fich_ls La ejecución de este comando provoca que ls −l se ejecute incluso si salimos del sistema. Si el comando fuese ejecutado sin redireccionar la salida y el usuario estuviese fuera del sistema, al no poderse dirigir la salida a la pantalla, se crearía un fichero denominado nohup.out kill [−señal] número de proceso Descripción: Finaliza (mata) un proceso. Un proceso sólo puede finalizarlo el propietario o el superusuario. Al comando debe acompañarlo una señal y el número del proceso que se quiere finalizar; existen varias señales, pero se 76

suele utilizarse únicamente la señal −9, debido a que produce una finalización absoluta del proceso. Opciones: No tienen opciones. Ejemplos: pinar2.csic.es> ps u USER PID %CPU %MEM VSZ RSS TTY S STARTED TIME COMMAND curso00 30476 95.0 0.1 2.92M 272K ttyp7 R 16:33:51 0:09.08 back.bin curso00 5955 0.0 0.2 1.98M 488K ttyp7 S 16:10:23 0:01.64 −tcsh (tcsh) pinar2.csic.es> kill −9 30476 Se tiene un proceso en ejecución cuyo número es 30476, y por cualquier circunstancia se quiere detener su ejecución; introduciendo el comando kill acompañado de la señal (−9) y del número de proceso (30476), se finaliza dicho proceso. nice [incremento] comando [argumentos] Descripción: Ejecuta un comando (y sus argumentos si los tuviera) con una prioridad de CPU más baja de lo normal. Esto permite al sistema ejecutar otros comandos primero. El incremento (un número entre 1 y 19) cambia el nivel de prioridad; el incremento más alto implica la prioridad más baja. Si no se especifica incremento, se toma por defecto el 10. Opciones: No tiene opciones. Ejemplos.− pinar2.csic.es> nice −19 ps −ef En este ejemplo el comando ps −ef se ejecuta con una prioridad de CPU 10 veces más baja de lo normal. time comandos [argumentos] Descripción: Ejecuta el comando (y sus argumentos si los tuviera), e indica el tiempo que tarda en ejecutarse. Indica el tiempo real (real) , que es el número de segundos que transcurren desde que se teclea el comando hasta que vuelve a mostrarse el prompt de la shell. Visualiza el tiempo de usuario (user time) que es el tiempo que se emplea en ejecutar el comando, y también indica el tiempo de sistema (system time), que es la cantidad de segundos de CPU que consume el comando. La suma del tiempo de usuario y del tiempo de sistema no coinciden con el tiempo real, porque este último incluye el tiempo que tarda en imprimirse la salida del comando. 77

Opciones: No tiene opciones. Ejemplos pinar2.csic.es> time ps −f USER PID PPID %CPU STARTED TTY TIME COMMAND curso00 4733 12972 0.0 08:26:51 ttyp2 0:01.74 vi n curso00 12972 11084 0.0 08:21:10 ttyp2 0:00.39 −tcsh (tcsh) curso00 12397 2760 0.0 08:21:41 ttyp3 0:01.18 −tcsh (tcsh) 0.012u 0.045s 0:00.05 100.0% 0+1k 0+5io 0pf+0w La ejecución de este comando, produce primero la salida por pantalla del comando ps −f y después nos indica el tiempo total (real) que transcurre desde que se teclea el comando y se pulsa hasta que vuelve a salir el prompt de la shell; a continuación muestra el tiempo que tarda en ejecutar el comando su propio código; y por último se muestra el tiempo de CPU que ha consumido el comando. sort [opciones] [ficheros(s)] Descripción: Clasifica por orden alfabético las líneas de uno o más ficheros. Opciones: −e Comprueba que el archivo esté previamente ordenado. Si está ordenado no produce ninguna salida, en caso contrario muestra un mensaje de error junto con la primera línea que no esté ordenada (sort: disorder : Una que incumple el orden). −m Fusiona y ordena a su vez, archivos que previamente estén ordenados. Si los archivos que se indiquen como argumentos no están ordenados, solamente los fusiona pero no los ordena. −f Ignora la diferencia entre mayúsculas y minúsculas. −r Invierte el orden de clasificación. −o fichero Redirecciona la salida al fichero indicado. −u Elimina de la salida, las líneas repetidas que pudiera tener el fichero. Ejemplos: pinar2.csic.es>cat prueba

78

jorge dolores alvaro magdalena eva maria raquel pinar2.csic.es> sort prueba alvaro dolores eva jorge magdalena maria raquel La ejecución de este comando, produce que el fichero prueba se visualice ordenado por pantalla. pinar2.csic.es>cat prueba jorge dolores alvaro magdalena eva maria raquel pinar2.csic.es> sort −o fich_out prueba pinar2.csic.es> cat fich_out

79

alvaro dolores eva jorge magdalena maria raquel En este ejemplo se ordena el fichero prueba, pero en vez de producir la salida por pantalla, se envía la salida al fichero fich_out. cmp [opciones] fichero1 fichero2 Descripción: Compara fichero1 con fichero2 y visualiza el byte y la línea donde difieren. Opciones: −l Su salida produce tres columnas. En la primera se refleja el número de byte donde difieren los dos ficheros, en la segunda y tercera columna se visualiza la representación octal de los dos caracteres que difieren. −s Devuelve el código de retorno de la ejecución del comando: 0 ! Los ficheros son iguales. 1 ! Los ficheros son diferentes. 2 ! Al menos uno de los ficheros no tiene permiso de acceso o existe un argumento invalido. Ejemplos: pinar2.csic.es> cat fic1 hola pinar2.csic.es> cat fic2 adios pinar2.csic.es> cmp fic1 fic2 fic1 fic2 differ: byte 1, line 1 En este ejemplo se comparan los ficheros fic1 y fic2, y la salida del comando indica que difieren en el carácter 1 de la línea 1. 80

date [+formato] Descripción: Visualiza el ida, la hora, el mes y el año, por omisión. Se puede cambiar el formato de salida del comando. Opciones: Cambia el formato de salida utilizando los siguientes descriptores de campo: %m Mes del año %d Día del mes %y Los dos últimos dígitos del año %j Día del año %a Día de la semana (abreviado) %h Mes del año (abreviado) %D Fecha (mes/día/año) %H Hora (0−23) %M Minutos %S Segundos %T Hora (horas:minutos:segundos) %r Hora (AM/PM) %n Inserta una línea %t Inserta un tabulador. Si se quiere introducir un mensaje en el formato, se deberá encerrar entre comillas toda la expresión. Ejemplos: pinar2.csic.es> date Mon Sep 11 12:05:07 MET DST 1995 La ejecución de este comando visualiza la fecha y hora actual. pinar2.csic.es> date +Mes : %m%nDia : %d%nHora : %T Mes : 09

81

Dia : 11 Hora : 12:30:00 La ejecución de este comando visualiza por pantalla el mes (%m), seguido de una nueva línea (%n), a continuación el día (%d) seguido por una nueva línea y por último la hora completa (%T). Al llevar cadenas de caracteres, el formato va encerrado entre comillas. su [opciones] usuario Descripción: Permite convertirse en superusuario, siempre que se tenga permiso, o en cualquier otro usuario del sistema, siempre que se conozca la palabra clave de acceso. Opciones: − Accede al nuevo usuario con todos sus privilegios(adquiere sus variables, se sitúa en el directorio home, etc.). Ejemplos: pinar2:csic.es> su − curso02 password: La ejecución de este comando hace que se acceda al usuario curso02 con todos sus privilegios. Para salir del usuario curso02 y volver al inicial, se teclea exit o . compress [opciones] [fichero(s)] Descripción: Comprime o expande datos. Cada fichero comprimido se le añade la extensión .Z. Opciones: −c Escribe sobre la salida estándar sin cambiar los ficheros. −d Descomprime un fichero. (Similar a uncompress) −v Muestra el porcentaje de reducción alcanzado cuando se comprime el fichero. Ejemplo: pinar2.csic.es> compress −v fich_1 pinar2.csic.es> fich_1: Compression: 36.30% −− replaced with fich_1.Z uncompress [opciones] [fichero(s)] Descripción: 82

Sustituye un fichero comprimido (.Z) con una versión de dicho fichero pero con sus datos expandidos Opciones: −c Escribe sobre la salida estándar sin cambiar los ficheros. −v Muestra el porcentaje de reducción alcanzado cuando se comprime el fichero. Ejemplo: pinar2.csic.es> uncompress −v fich_1 pinar2.csic.es> fich_1.Z: −− replaced with fich_1 tar [opciones] ficheros Descripción: Salva y restaura múltiples directorios y ficheros en unos solo. Usualmente se utiliza en cintas magnéticas. Para transmitir datos por Internet, también se emplea este junto con el formato comprimido. Opciones: −c Crea un archivo donde se graban múltiples ficheros −x Extrae del archivo los ficheros contenidos en él. −v Muestre el nombre del fichero que se está tratando. −f dispositivo Redirige la entrada o salida estándar hacia un dispositivo específico. Si en dispositivo se pone un −, se toma como entrada o salida estándar el terminal. Ejemplos: tar −c file1 file2 Graba file1 y file2 en un nuevo archivo sobre el dispositivo de cinta por omisión. tar −xvf /dev/rmt0h ./dir1 Extrae toda le jerarquía de ficheros que contiene dir1 desde el dispositivo /dev/rmt0h pinar2.csic.es> tar −cvf − fich_1 fich_2> fich.tar pinar2.csic.es> fich_1 pinar2.csic.es> fich_2 pinar2.csic.es> mkdir dir_tar

83

pinar2.csic.es> mv fich.tar dir_tar pinar2.csic.es> cd dir_tar pinar2.csic.es> tar −xvf fich.tar pinar2.csic.es> fich_1 pinar2.csic.es> fich_2 Se graban los ficheros fich_1 y fich_2 en formato tar en el archivo fic.tar, se crea el directorio dir_tar, se mueve el fichero y se cambia a dicho directorio, y se extraen los ficheros . man [opción] comando Descripción: Proporciona una descripción del comando seleccionado accediendo al manual de consulta del usuario en−linea(online). Opciones: − Desactiva el pipe more por lo que la salida se mostrará de forma continua en vez de pantalla a pantalla. Ejemplos: pinar2.csic.es> man logname logname(1) logname(1) NAME logname − Displays user login name SYNOPSIS logname DESCRIPTION The logname command writes to standard output the name you used to log into the system. RELATED INFORMATION Commands: env(1)/printenv(1), login(1). Functions: getlogin(2). CAPITULO 6

84

PROGRAMACIÓN DE LA SHELL Hasta ahora solo se había utilizado la shell como un interprete de comandos interactivos pero donde alcanza su máxima potencia y utilidad es como lenguaje de programación. Para ello, además de los comandos que en capítulos anteriores se han enunciado, contiene variables de entorno, instrucciones de control de secuencia, operadores aritméticos y lógicos, etc. El problema en la programación de una shell u otra radica en que unas variables existen en una y no en otras, que existen pero su nombre varían, que los formatos de programación varían de una a otra, etc. Vamos a exponer las variables, operadores e instrucciones más importantes de la csh y la ksh. Como la ksh engloba a la sh, obtendremos un gran abanico de posibilidades que proporciona el sistema operativo Unix. Las convenciones que vamos a seguir en este capitulo serán las siguientes: 1/ Las opciones comunes a los dos entornos, se indicaran explícitamente. 2/ Los ejemplos de la csh como de la ksh se pondrán con el tipo de fuente Arial pero para diferenciarlos, la ksh se escribirán en cursiva. Ejecución de un programa shell Cualquier comando o secuencia de comandos que estén almacenados en un fichero texto es un programa shell que se conoce como fichero de comandos, guión, procedimiento shell o shell script. Existen tres formas de ejecución de un fichero de comandos: 1/ Utilizando la redirección de la entrada estándar que ya se ha visto en el capitulo 3. Dependiendo de que tipo de shell se quiera utilizar, la ejecución sería: sh < shell_script csh < shell_script ksh < shell_script tcsh < shell_script 2/ Debido a que lo más común es que la shell lea los comandos desde un fichero, se ha incluido una característica especial dentro del mismo. Si la shell se invoca con el nombre de un fichero como argumento, entonces leerá los comandos desde este fichero por lo que no habrá que redireccionar la salida. La ejecución seria: sh shell_script csh shell_script ksh shell_script tcsh shell_script 3/ Las dos formas anteriores pueden crear problemas con ciertos comandos. La forma correcta es hacer que el 85

fichero de comandos sea ejecutable. Los ficheros que crea un usuario tienen unos permisos que, por omisión, no contemplan la ejecución. Si se trata de ejecutar el fichero, el sistema denegará dicha petición. El comando para ver los permisos del fichero es ls −l shell_script Para hacerlo ejecutable chmod +x shell_script o chmod 777 shell_script Para ejecutar el procedimiento shell shell_script Se ejecuta el programa introduciendo tan solo el nombre como si fuese un comando del sistema. Si este fichero de comandos se va a utilizar frecuentemente, para que sea ejecutable desde cualquier punto de la estructura jerárquica de directorios creada por el usuario, habrá que añadir a la variable PATH que posteriormente se estudiará, el camino donde se ubica dicho fichero de comandos. El programa se procesará bajo la shell que esté activa cuando se invoca la ejecución. Normalmente será la shell que se procesa cuando se accede al sistema. Si se quiere crear un fichero de comandos que se ejecute bajo una shell determinada, hay que poner en la línea 1, columna 1, una de las siguientes opciones: #! /bin/sh #! /bin/csh #! /bin/ksh #! /usr/local/bin/tcsh Estas instrucciones pueden cambiar de camino dependiendo de los sistemas operativos. Si se observa, la tcsh está ubicada en el nodo pinar2.csic.es en un directorio distinto al resto y esto es debido a la forma de organización elegida por el administrador de sistemas. Similarmente que a los comandos del sistema, a un shell script se le puede pasar uno o varios argumentos. Ejemplo: pinar2.csic.es> cat lsdir #! /bin/ksh if [ $# = 0 ]

86

then dir=. else dir=$1 fi find $dir −type d −print pinar2.csic.es> sh < lsdir . ./bin ./metacaracteres ./tar El shell script lista todos los directorios que cuelgan del directorio actual. Si se ejecuta bajo la tcsh o la csh, el procedimiento dará un error ya que no entiende el tipo de formato en que está escrito. En cambio, bajo ksh se ejecutará como si fuera la sh. pinar2.csic.es> tcsh < lsdir f: Expression Syntax. pinar2.csic.es> ksh < lsdir . ./bin ./metacaracteres ./tar Se ejecuta otra vez para demostrar que no es necesario redireccionar la entrada. pinar2.csic.es> sh lsdir . ./bin ./metacaracteres /tar

87

Se ejecuta pasándole un argumento, en este caso un directorio del sistema operativo. pinar2.csic.es> sh lsdir /sbin /sbin /sbin/it.d .... /sbin/lsm/help /sbin/lsm/lib Variables Cualquier lenguaje de programación emplea variables para almacenar valores. Como su nombre indican, la información contenida en ellas pueden sufrir modificaciones durante la ejecución del fichero comando. Tanto csh como ksh soportan tres tipos de variables: alfabéticas, numéricas y del sistema. La Bourne shell no soporta las variables numéricas, solo se pueden realizar operaciones matemáticas sencillas utilizando la función expr. Sustitución de variables Cuando una variable va precedida del signo monetario $, la shell interpreta que tiene que sustituir este nombre por su contenido. Si se desea evitar la sustitución, hay que utilizar los caracteres \ y `. Las no evitan la sustitución. \ La barra invertida anula el significado del carácter siguiente. ` Los caracteres entre comillas no admiten interpretaciones. Incluso el carácter de nueva línea pierde su finalidad. Así, un argumento enmarcado entre comillas puede contener varias líneas. La sustitución de variables de comandos y parámetros si se realizan dentro de las dobles comillas. Ejemplo: pinar2.csic.es> echo nombres nombres pinar2.csic.es> echo $nombres Antonio y Juan pinar2.csic.es> echo \$nombres $nombres pinar2.csic.es> echo '$nombres'

88

$nombres pinar2.csic.es> echo "$nombres" Antonio y Juan Asignación de variables La csh utiliza la función set para asignar las variables locales, setenv para las globales y @ para las numéricas. Muchas de las expresiones que puede evaluar el mandato @ y los operadores que este reconoce, se derivan del lenguaje de programación C. La ksh asigna directamente un valor a una variable local sin tener que emplear una instrucción específica. Para hacerla global, se utiliza la función export y let para las variables numéricas. Los formatos son: csh: set nombre_variable = valor (local) setenv nombre_variable valor (global) @nombre_variable operador valor (numérica) ksh nombre_variable = valor (local) export nombre_variable valor (global) let nombre_variable operador valor (numérica) Ejemplos: csh: pinar2.csic.es> set color=gris pinar2.csic.es> echo $color gris pinar2.csic.es> set colores=(rojo verde azul blanco negro) pinar2.csic.es> echo $colores rojo verde azul blanco negro pinar2.csic.es> echo $colores[3] azul 89

pinar2.csic.es> echo $colores[2−4] verde azul blanco pinar2.csic.es> set colores[3]=amarillo pinar2.csic.es> echo $colores[2−4] verde amarillo blanco pinar2.csic.es> cat var_global.csh echo "Esto es una" $var1 " de variable de entorno local o global" pinar2.csic.es> set var1=prueba pinar2.csic.es> csh var_global.csh var1: Undefined variable. pinar2.csic.es> setenv var1 prueba pinar2.csic.es> csh var_global.csh Esto es una prueba de variable de entorno local o global pinar2.csic.es> @acumula=2 @acumula=2: Command not found. pinar2.csic.es> @ acumula=2 pinar2.csic.es> echo $acumula 2 pinar2.csic.es> @ acumula=(15/3) @: Badly formed number. pinar2.csic.es> @ acumula=(15 / 3) pinar2.csic.es> echo $acumula 5 pinar2.csic.es> @ acumula+=3 pinar2.csic.es> echo $acumula 8

90

pinar2.csic.es> @ acumula++ pinar2.csic.es> echo $acumula 9 pinar2.csic.es> set cuenta=(0 0 0 0) pinar2.csic.es> @ cuenta[2]=9 pinar2.csic.es> @ cuenta[3]= ( $cuenta[2] + 5 ) pinar2.csic.es> @ cuenta[4]= ( $cuenta[3] / $cuenta[2] ) pinar2.csic.es> echo $cuenta 0 9 14 1 ksh: pinar2.csic.es>color=gris pinar2.csic.es>echo $color gris pinar2.csic.es>colores='rojo verde azul blanco negro' pinar2.csic.es>echo $colores rojo verde azul blanco negro pinar2.csic.es>echo $colores[3] rojo verde azul blanco negro[3] pinar2.csic.es>cat var_global.csh echo "Esto es una" $var1 " de variable de entorno local o global" pinar2.csic.es>ksh var_global.csh Esto es una de variable de entorno local o global pinar2.csic.es>var1=prueba pinar2.csic.es>ksh var_global.csh Esto es una de variable de entorno local o global pinar2.csic.es>export var1

91

pinar2.csic.es>ksh var_global.csh Esto es una prueba de variable de entorno local o global pinar2.csic.es>let acumula=2 pinar2.csic.es>echo $acumula 2 pinar2.csic.es>let acumula=15/3 pinar2.csic.es>echo $acumula 5 pinar2.csic.es>let acumula=$acumula+3 pinar2.csic.es>echo $acumula 8 pinar2.csic.es>let multi=$acumula*3 pinar2.csic.es>echo $multi 24 pinar2.csic.es>cuenta[1]=9 pinar2.csic.es>cuenta[2]=${cuenta[1]}+5 pinar2.csic.es>echo $cuenta[1] 0[1] pinar2.csic.es>echo ${cuenta[1]} 9 pinar2.csic.es>echo ${cuenta[2]} 9+5 pinar2.csic.es>let cuenta[2]=${cuenta[1]}+5 pinar2.csic.es>echo ${cuenta[2]} 14 pinar2.csic.es>let cuenta[3]=${cuenta[2]}+${cuenta[3]}

92

pinar2.csic.es>echo ${cuenta[3]} 37 Operadores Definición para csh y ksh de los más importantes operadores. Una expresión puede estar compuesta por constantes, variables y los siguientes operadores: Aritméticos % Módulo / División * Multiplicación − Resta + Suma Relacionales > Mayor que < Menor que >= Mayor que o igual a <= Menor que y igual a != Diferente a = = Igual a Lógicos && y || o Llaves de separación Definición para csh y ksh. Se deben utilizar las llaves ({ }) para distinguir una variable del texto que la rodea. pinar2.csic.es> echo $nom Maria

93

pinar2.csic.es> echo ${nom}no Mariano Formas especiales de variables de usuario $# nombre_de_variable Almacena el número de argumentos que tiene la variable set dias = (lunes martes miercoles jueves viernes) echo $# dias 5 $? nombre_de_variable Determina si una variable se ha declarado o no. Adquiere valor 1 si se ha declarado y 0 en caso contrario. echo $? dias 1 unset dias echo $? dias 0 Variables del sistema La shell declara e inicializa una serie de variables cuyos valores pueden ser modificados por el usuario desde la línea de comandos o definiéndolo en los archivos que se autoejecutan y que posteriormente se estudiaran: Estas variables son: Entorno csh argv Contiene los argumentos de la línea de comandos. argv[0] contiene el nombre de programa y argv[1]...argv[9] desde el primero hasta el noveno argumento. Todos loas argumentos se pueden referenciar mediante argv[*]. cdpath Busca los caminos absolutos para el comando cd. Si está definida esta variable, al ejecutarse el comando cd, el sistema buscará un subdirectorio actual. Si no se encuentra, lo busca en todos los directorios definidos en cdpath. cwd Contiene el camino del directorio de trabajo actual. Es modificado por el comando cd. echo Con la opción −x fija la variable echo y la shell muestra cada comando antes de ejecutarlo. history Asigna la cantidad de líneas de comandos que deben ser almacenadas para una posterior reejecución, 94

si se desea. home Almacena el camino del directorio domicilio del usuario. ignoreeof Si se define, no se puede salir de la shell con . Hay que hacerlo con exit. mail Contiene una lista de ficheros que el mail chequea periódicamente (por omisión, 10 minutos) cuando un nuevo mensaje es recibido. Si el primer argumento asignado a mail es numérico, se especifica el intervalo de tiempo en segundos para chequear los ficheros. noclobber Impide la sobreescritura de un fichero al redireccionar la salida. Si no se declara (opción por omisión): x > fichsal Si fichsal no existe se crea, y si existe se sobrescribe. x >> fichsal Si fichsal no existe se crea, y si existe se agrega agrega al final del fichero. Si se declara noclobber x > fichsal Si no existe se crea, y si existe muestra un mensaje de error. x >> fichsal Si no existe muestra un mensaje de error. Si existe se añade al final de fichsal. noglob Si se declara, la shell no expande nombres de ficheros ambiguos. nonomatch Si se declara, no da error si se declara una expansión de nombre de fichero y no encuentra uno igual. notify Si se declara, la shell notifica al usuario a través de STDOUT cuando un proceso en background termina. Si no se declara, opción por defecto, lo anuncia justo antes de imprimir el inductor de la shell. path Los caminos por omisión para encontrar un comando. prompt Define el inductor del sistema. Generalmente es % para los usuarios y # para el superusuario. En este curso, está definido el nombre del ordenador. shell Contiene el nombre del camino de la shell que se está ejecutando status Contiene el estado de salida devuelto por el último comando ejecutado time Tiempo en segundos de CPU permitidos en la ejecución de un comando. Si se sobrepasa, la shell envía una información a STDOUT una vez que acaba la ejecución indicando el porcentaje de utilización de la CPU. verbose También se activa si se invoca la shell con la opción −v. Muestra las palabras de cada mandato después de una sustitución en history. Entorno ksh

95

PPID Identificador de proceso de del padre de la shell PWD Similar a cwd en csh OLDPWD Directorio de trabajo anteriormente puesto por el comando cd RANDOM Cada vez que este parámetro es referenciado, un número entero aleatorio es asignado. Se puede inicializar asignándole un valor. REPLY Este parámetro es puesto por los comandos select y el comando especial read cuando no se le suministra un argumento. SECONDS Cada vez que se llama a esta variable, devuelve el número de segundos transcurridos desde que loa shell fue invocada. CDPATH Similar a cdpath en csh. COLUMNS Si se declara, el valor asignado sirve para definir la anchura de la ventana de edición y para los listados de impresión. EDITOR Si se define emacs, gmacs o vi y la variable VISUAL no está definida, la opción para el editor de la shell es activado. ENV Si es activado, la sustitución de parámetros es ejecutada sobre el valor para generar el camino del script que debe ser procesado cuando la shell es invocada. FCEDIT El nombre del editor por omisión para el comando fc. IFS Define un carácter como separador de campo en la línea de mandatos. Por defecto, es el espacio en blanco o el tabulador. Ejemplo: si tenemos una shell script que cuenta el número de argumentos con que fue llamado y lo ejecutamos: num_args a:b:c:d Fue llamado con 1 argumento. IFS=: num_args a:b:c:d Fue llamado con 4 argumentos HISTFILE Define el camino del fichero donde se grabó la historia de los comandos. Por omisión es $HOME/.sh_history HISTSIZE Similar a history en csh HOME Similar a home en csh. LINES Define el número de columnas a imprimir listadas con el comando select.

96

MAIL Nombre del fichero de correo. Si la variable MAILPATH no está definida, cuando se recibe un mensaje, la shell lo informa en este fichero. MAILCHECK Define el intervalo en segundos que la shell chequea el mail para detectar si ha llegado algún mensaje. Por omisión es 600 (10 minutos) pero si se pone 0, la shell chequea antes de cada inductor. MAILPATH Lista de nombres de fichero separadas por puntos (:). Si este parámetro es definido, la shell informa de la llegada de un mensaje en cualquiera de los ficheros especificados. PATH Similar a path en csh. PS1 Similar a prompt en csh. PS2 Se define el contenido de un inductor secundario que actúa cuando el mandato no acaba en la misma línea y la shell aguarda a que el usuario continua definiéndola en la línea siguiente. Ejemplo: pinar2.csic.es> echo ` Mandato dividido > en dos lineas' Mandato dividido en dos lineas pinar2.csic.es> PS2=`+' pinar2.csic.es> echo ` Mandato dividido + en dos lineas' Mandato dividido en dos lineas PS3 Define el inductor para utilizarlo en un bucle de programación. Por omisión #?. SHELL Similar a shell en csh. TMOUT Similar a autologout en csh. VISUAL Si el valor de la variable es definido a emacs, gmacs o vi; entonces es activada la opción para el editor seleccionado. Líneas de comandos Es un secuencia de uno o más comandos simples con encadenamiento de entradas y salidas, separados por ;, &,|, && o ||. El carácter ; sirve para ejecutar secuencialmente de izquierda a derecha más de una instrucción en una línea de 97

comandos. pinar2.csic.es> comando1 ; comando2 ; comando3 equivale a: pinar2.csic.es> comando1 pinar2.csic.es> comando2 pinar2.csic.es> comando3 El carácter & determina que la shell ejecute una tarea de forma subordinada. Ejemplo: pinar2.csic.es> comando1 & comando2 & comando3 indica que tanto comando1 como comando2 se ejecutan de forma subordinada y comando3 de forma preferente. En cuanto comando3 acaba, se recupera el inductor. El carácter | pipe que ya se ha estudiado en el apartado de conductos y filtros en el capitulo 3, es la ejecución secuencial de un número arbitrario de comandos en la que la salida del primero es la entrada del segundo, la salida del segundo es la entrada del tercero ; y así sucesivamente. El formato es: pinar2.csic.es> comando1 | comando2 | comando3 Los caracteres && y || se utilizan para la ejecución condicional de comandos que es una secuencia de comandos en el que el segundo se ejecuta o no dependiendo del resultado de la ejecución del primero. pinar2.csic.es> comando1 && comando2 comando2 se procesa si la ejecución de comando1 termina sin error. pinar2.csic.es> comando1 || comando2 comando2 se procesa si comando1 termina con error. Agrupamiento de comandos Un grupo de comandos es una secuencia de instrucciones que al ser enmarcadas por paréntesis, la shell los trata por lo que respecta a la entrada, salida y tratamiento de errores como si fuera uno solo. Ejemplo: pinar2.csi.es> date ; who >> fich_sal la salida del comando date que proporciona la fecha y la hora, se mostrará por pantalla, mientras que el comando who que informa de los usuarios conectados al sistema en ese momento, se almacenaran en el fichero fich_sal. pinar2.csic.es> (date ; who) >> fich_sal en este caso, la información proporcionada por los comando who y date se almacenaran en fich_sal. 98

Estructuras de control Las estructuras de control son una serie de comandos internos de la shell que pueden alterar el flujo dependiendo de alguna condición interna o externa. Hay unas que son exclusivas de un tipo de shell, mientras que otras son comunes pero cambian la sintaxis. Emplearemos la convención de poner en cursiva la sintaxis de la ksh. CASE switch (cadena_prueba) case str1 lista_comandos [breaksw] case str2 lista_comandos [breaksw] ..... [default] lista_comandos [breaksw] endsw La cadena de caracteres de la instrucción switch es comparada con cada una de las cadenas str (str1, str2...strn) de la instrucción case. Si son iguales, se ejecuta la lista de comandos correspondientes hasta la instrucción breaksw. Si no existe una cadena de caracteres similar, se ejecuta la lista de comandos default. La ejecución continua por el comando siguiente a la instrucción endsw. Si el comando opcional breaksw no es declarado, la ejecución del comando continua desde una lista case a otra secuencialmente. case cadena_prueba in str1) lista_comandos;; str2) lista_comandos;; .... *) lista_comandos;; esac IF/THEN/ELSE 99

Proporciona una ejecución condicional de distintas listas de comandos. if (expresion1) then lista_comandos1 [else if (expresion2) then] lista_comandos2 [else] lista_comandos3 endif Si expresion1 es verdadera se ejecuta lista_comandos1. Si no lo es y esta declarado el comando else if, si expresion2 es verdadera, se ejecuta lista_comandos2. Si expresion1 y expresion2 son falsas, se ejecuta lista_comandos3 en caso de que este declarado el comando else. if expresion then lista_comandos1 [elif expresion then lista_comandos2 [else lista_comandos3 fi FOREACH (csh) FOR−IN (ksh) Ejecución de una lista de comandos controlada por los valores de una variable. foreach nombre (argumentos) lista_comandos end La variable nombre toma secuencialmente un valor de la lista de argumentos y ejecuta lista de comandos. Lista_comandos se ejecuta tantas veces como número de argumentos exista. for nombre [argumentos] do lista_comandos done 100

REPEAT Repite un comando un número de veces determinado. Es una estructura que no existe en la sh ni en la ksh. repeat numero_de_veces comando WHILE Ejecución en bucle de una secuencia de comandos while (expresion) lista_comandos end Mientras expresión sea verdadera, lista_comandos se ejecutará. while expresion do lista_comandos done BREAK y CONTINUE Un ciclo foreach o while puede ser alterado o interrumpido. El comando break transfiere el control a la instrucción siguiente al comando end por lo que el ciclo de ejecución concluye. El comando continue transfiere el control a end por lo que continua la ejecución del ciclo. GOTO Es solo válido para la csh y permite un salto incondicional a una etiqueta localizada en el programa. Al formato de la etiqueta hay que añadirle dos puntos como se expone en la sintaxis: goto label1 ... label1: ... SELECT Es válido solo para la ksh. Imprime los argumentos sobre la salida de error estándar (STDERR) , cada uno precedido por un número. select nombre [argumentos]

101

do lista_comandos done Si los argumentos son omitidos entonces los parámetros posicionales son utilizados. El inductor PS3 es mostrado y la línea es leída desde la entrada estándar (STDIN). Si se digita un valor similar a uno de la lista de argumentos entonces el valor de argumento es pasado a nombre. Si no se digita valor, entonces la lista seleccionada es mostrada. Si el valor tecleado es diferente a los argumentos, la variable nombre adquiere valor nulo. La línea leída desde STDIN es almacenada en la variable REPLY. Lista_comandos es ejecutada hasta que un break o un final de fichero es encontrado. Evaluación de expresiones Operadores sobre ficheros Existen una serie de operadores que tratan de la existencia o no de un fichero y de sus atributos. El formato es: operador nombre_de_fichero Los operadores más comunes son: −s verifica que el fichero existe (ksh) −e verifica que el fichero existe (csh) −f verifica que es un fichero −d verifica que es un directorio −r verifica que el fichero tiene permiso de lectura −w verifica que el fichero tiene permiso de escritura −x verifica que el fichero tiene permiso de ejecución Operadores sobre variables El orden conforme se evalúa una expresión depende de los operadores que intervengan en ella. El orden de precedencia, de mayor a menor, en la ejecución de una expresión es: */% +− >= <= = = != Reejecución de variables

102

Las variables shell HISTSIZE en ksh y history en csh son utilizadas para determinar el número de comandos que son salvados en el fichero history. En ksh, el nombre del fichero history es $HOME/.sh_history aunque se le puede modificar definiendo la variable HISTFILE. Los comandos almacenados se pueden recuperar secuencialmente en orden inverso a su ejecución mediante: csh ! ksh Si por error , se recuperan más líneas de las deseadas, se puede volver hacia atrás, es decir, en el sentido en que fueron ejecutados los comandos. Se realiza mediante: csh ! ksh Una vez seleccionado el comando que se quiere reejecutar, se puede mover el cursor a través de él tecleando: derecha: izquierda: csh ! csh ! ksh ksh La modificación de la lista de atributos depende del editor definido en la variable de entorno EDITOR. Generalmente suele estar definido como editor el vi, por tanto, como se vio en el capitulo 4, para modificar la línea de comandos se emplea: a Añadir x Borrar r Reemplazar el carácter donde se sitúa el cursor R Reemplazar caracteres i Insertar a partir del cursor Estos modos de edición se desactivan pulsando la tecla escape (). Una vez modificado el comando recuperado, para ejecutarlo tan solo hay que pulsar la tecla saliéndose al mismo tiempo del proceso de reejecución de comandos. Alias Los alias permiten que los comandos del sistema actúen de forma diferente a la estándar y que se puedan definir nuevos comandos. El sistema de alias realiza una sustitución de cadena en la línea de comandos, de acuerdo con las especificaciones del usuario. Los alias no actúan dentro de un shell script y su formato es el siguiente:

103

csh alias comando_usuario comando_sistema ksh alias comando_usuario = comando_sistema Ejemplo: csh alias dir ls −l ksh alias dir = ls −l Para mostrar los alias que están definidos, de ejecuta: pinar2.csic.es> alias dir (ls −l) rm (rm −i) pinar2.csic.es> unalias rm pinar2.csic.es> alias dir (ls −l) Si se quiere desactivar un alias, existe el comando unalias cuyo formato es: unalias comando_usuario Los alias definidos en una sesión se pierden cuando esta termina. Para hacer permanentes los alias, hay que definirlos en los ficheros autoejecutables. Ficheros autoejecutables Existen unos ficheros que se autoejecutan cuando el usuario se conecta al sistema y que sirven para definir el entorno en el que se quiere trabajar: alias, variables, caminos de búsqueda, tipo de terminal, etc. El superusuario puede definir una serie de variables que afectaran a todos los usuarios que accedan al sistema. Si el usuario trabaja bajo Bourne o Korn shell, las variables se definen /etc/profile. Bajo csh o tcsh, el superusuario utiliza el fichero /etc/csh.login. Cada usuario tiene en su directorio $HOME los siguientes ficheros autoejecutables y que sirven para definir su entorno personal: .profile Se procesa bajo sh y ksh .login Se procesa bajo csh .cshrc Se procesa bajos csh Los ficheros .profile y .login se ejecutan cada vez que un usuario se conecta al sistema operativo, es decir, se inicia una sesión. Suele contener las variables globales del usuario y el tipo de terminal.

104

El fichero .cshrc se ejecuta cuando se inicia una sesión o cuando se ejecuta un script cshell. La secuencia de inicialización de ficheros comienza mediante el procesamiento del fichero /etc/csh.login o /etc/profile. Posteriormente, la shell elegida busca en el directorio domicilio el fichero .cshrc o .profile. El siguiente paso es por parte de la csh o tcsh, la ejecución de .login. A partir de ese momento, la shell pasa el control al usuario. Cuando el usuario teclea exit, logout o un carácter final de fichero , la C shell examina el directorio domicilio y ejecuta, si existe, el fichero .logout. Ejemplos : ######################################################################## # Ejemplo de fichero .profile # PATH=$HOME/bin:${PATH:−/usr/bin:.} export PATH stty dec tset −I −Q PS1="`hostname`> " MAIL=/usr/spool/mail/$USER ############################################################################# ############################################################################# # Ejemplo de fichero .login # if ($?path) then set path=($HOME/bin $path) else set path=($HOME/bin /usr/bin .) endif stty dec new tset −I −Q

105

set prompt="`hostname`> " set mail=/usr/spool/mail/$USER ################################################################### ################################################################### # Ejemplo de fichero .cshrc # setenv MAIL /usr/spool/mail/$USER ############################################################# Variable PATH Como se habrá podido observar, existe una definición para la variable path en los ficheros ejecutables. Esta es una de las variables más importantes y define los caminos en los que la shell busca cuando se le ordena que ejecute un programa. El contenido se puede visualizar de la siguiente manera: echo $PATH /bin:/usr/bin ksh /bin /usr/bin csh Si este es el camino de búsqueda, cualquier programa a ejecutar lo buscará primeramente en el directorio /bin y si no lo encuentra, rastreará el directorio /usr/bin. Si no existiese el programa en estos dos directorios, se visualizará un mensaje de error avisando de que no se localiza el programa. Si se quiere que también busque en el directorio actual, habrá que añadir dos puntos (:) si es la ksh o sh, o un punto (.) si es la csh o tcsh. La variable PATH se podría definir así: PATH = /bin::/usr/bin −− ksh set path = (/bin . /usr/bin) −− csh La shell buscará en primer lugar en el directorio /bin, en segundo lugar en el directorio actual y en tercer lugar en /usr/bin. Sustitución de tilde Cuando la ksh o la csh encuentran un carácter tilde (") al comienzo de un nombre de camino, tiene el mismo significado que poner $HOME, es decir, contiene la trayectoria absoluta del directorio domicilio. Por ejemplo: pinar2.csic.es> cd "/metacaracteres pinar2.csic.es> pwd

106

/disco_1/cti/curso01/metacaracteres pinar2.csic.es> cd " pinar2.csic.es> pwd /disco_1/cti/curso01 CAPITULO 7 COMUNICACIÓN ENTRE USUARIOS Al ser el sistema operativo Unix multiususario, permite la comunicación entre ellos aunque estén localizados físicamente a cientos de kilómetros. La comunicación es de dos formas, una interactiva utilizando el comando write o talk y la otra es el correo electrónico, mediante el cual, se envía un mensaje a un usuario determinado independientemente de que esté en ese momento conectado al sistema. WRITE Es el primer medio establecido en el sistema operativo Unix para la comunicación interactiva y tiene el problema que al receptor, si no tiene desabilitado el recibir mensajes, le aparece la información súbitamente entremezclándose con la suya propia. La información se transmite línea a línea, es decir, hasta que no se da no se transmite lo tecleado. Para cercionarse que el usuario está conectado al sistema, se ejecuta el comando who. Si es usuario de otro ordenador, se procesa rwho (remote who). El formato es: write nombre_usuario (para usuarios locales) write nombre_usuario@nodo (para usuarios remotos) Se finaliza la comunicación con . TALK La forma de utilización es similar al comando write pero es mucho más dinámico ya que una vez que el receptor establece la comunicación con el emisor, a los dos se les aparece una pantalla en blanco dividida en dos por una línea de puntos, en la mitad de arriba se utiliza para emitir y la de abajo para recibir. Conforme se van tecleando los caracteres, se van transmitiendo. No es necesario dar . El formato es: talk nombre_usuario (para usuarios locales) talk nombre_usuario@nodo (para usuarios remotos) Se finaliza la comunicación con . 107

MAIL El correo electrónico se utiliza para enviar mensajes a uno o varios usuarios y no se dirigen a pantalla sino a un directorio especial localizado en /usr/spool/mail/nombre_de_usuario. El mensaje queda almacenado en forma de fichero. Cuando un usuario se conecta y tiene un mensaje sin leer, el sistema operativo le informa de ello mediante el mensaje: You have mail Si existe más de una carta sin leer, estas se almacenan secuencialmente según el orden de llegada, pero son visualizadas en secuencia inversa, es decir, la primera mostrada es la última recibida. El sistema operativo Unix tiene dos gestores de correo: mail y mailx. El segundo es similar al primero pero es mucho más potente teniendo ya programado el poder poner título a la carta. Para visualizar las cartas recibidas, se ejecuta el comando mailx sin argumentos. Las opciones para administrar el correo son: Imprime la carta siguiente d Borra la carta seleccionada y visualiza la siguiente p Visualiza la carta actual de nuevo − Visualiza la carta anterior a la actual s [fichero] Salva la carta en fichero. Si no se especifica fichero, se almacena en el fichero mbox. El formato es: mailx nombre_usuario(s) (para usuarios locales) mailx nombre_usuario(s)@nodo (para usuarios remotos) Ejemplo: Para enviar una carta a varios usuarios, se ejecuta: pinar2.csic.es> mailx curso02 curso03 curso04 Subject: Aviso de reunion La proxima reunion se celebrara el dia 21 de setiembre a las 10:00. . EOT Para terminar la edición de una carta se teclea en la columna 1, un punto(.) y se le da . Aparecerá el vocablo EOT que significa final de transmisión. PINE 108

Es un gestor de correos del que ya se ha hablado en el capítulo 5 con el editor Pico. Es u de libre distribución y de su instalación ya se ha indicado en dicho capítulo. Pine es un gestor diseñado en un principio para usuarios no expertos en informática, es completamente interactivo y se ejecuta sobre una amplia gama de tipos de terminales. Cumple con los protocolos SMTP (Simple Mail Transfer Protocol), IMAP2bis y MIME (Multipurpose Internet Mail Extension), lo que le permite recibir y enviar mensajes multimedia, es decir, texto junto con ficheros de imagen y sonido. El formato con las opciones más importantes es: pine [−r [−z [−l [−conf [−f carpeta [−n num_mensaje [−sort orden [address,dirección Opciones: −r Actúa en modo demostración permitiendo solo enviar mensajes a sí mismo. −z Permite que con pueda ser suspendida la sesión Pine. −l Muestra las carpetas y su contenido. −f carpeta Abre la sesión pine sobre una carpeta determinada. −n num_mensaje Abre la sesión sobre un número de mensaje específico. −sort orden Clasifica los mensajes de una carpeta en uno de los siguientes ordenes: Conforme lleguen (Por defecto), por fecha, por titulo, por remitente, por tamaño, en orden inverso a conforme lleguen. address,dirección Pine pasa automáticamente a componer mensaje y lo envía a una dirección determinada. Cuando se ejecuta pine, la pantalla principal a la que se puede volver en un determinado momento con es:

109

donde : HELP Es una ayuda interactiva del gestor de correos Pine. COMPOSE MESSAGE Para escribir y enviar mensajes.

110

FOLDER INDEX Muestra los mensajes de la carpeta activa. Por omisión la carpeta activa es INBOX. FOLDER LIST Muestra las diferentes carpetas. Pine crea tres carpetas: INBOX donde se reciben los mensajes, sent−mail donde se almacenan los mensajes emitidos, y saved−messages sonde se salvan los mensajes recibidos.

ADDRESS BOOK Crea o actualiza grupos de direcciones.

111

SETUP Personaliza el gestor Pine al equipo existente. QUIT Para salir de Pine. INDICE Capítulo 1 Evolución histórica y características Evolución histórica .................................................................................. 3 Características ........................................................................................... 8 Capítulo 2 Procesos y ficheros Procesos ................................................................................................... 10 Ficheros ................................................................................................... 11 Tipos ................................................................................................... 12 Directorios que contiene el Sistema Operativo ................................... 13 Caminos ............................................................................................... 14 Acceso, Protección ............................................................................... 15 Capítulo 3 La shell Entrada al sistema ..................................................................................... 18 112

Inicio de la sesión ................................................................................. 19 Tipos de shell ............................................................................................ 20 Capas del Sistema Operativo ................................................................ 21 Estructura de los comandos ...................................................................... 21 Procesos en foreground y background ..................................................... 22 Entrada, salida y error estándar ................................................................ 24 Redireccionamiento de la entrada, salida y error estándar ...................... 25 Adición de la salida estándar a un fichero ............................................... 27 Concatenación de ficheros ........................................................................ 28 Conductos (Pipes) ..................................................................................... 29 Filtros ........................................................................................................ 30 Metacaracteres ...................................................................................... 31 Capítulo 4 El editor vi Los programas editores de Unix ............................................................... 33 El editor de pantalla vi .............................................................................. 33 El editor de pantalla Pico 54 Capítulo 5 Comandos Unix logname ..................................................................................................... 61 uname ........................................................................................................ 62 passwd ....................................................................................................... 63 pwd ............................................................................................................ 64 ls ................................................................................................................ 65 cat .............................................................................................................. 69 cd ............................................................................................................... 70 mkdir ......................................................................................................... 71 rmdir ......................................................................................................72

113

rm ...........................................................................................................73 cp ................................................................................................................75 mv ...............................................................................................................76 ln .................................................................................................................77 chmod .........................................................................................................78 chown ........................................................................................................ .82 chgrp .......................................................................................................83 file ...........................................................................................................84 more, page ................................................................................................. .85 tail ............................................................................................................86 who ...........................................................................................................87 tyy .............................................................................................................88 banner .......................................................................................................89 cal .............................................................................................................90 calendar ....................................................................................................91 find ............................................................................................................92 grep ...........................................................................................................95 lpstat .........................................................................................................97 lpr .............................................................................................................98 lpq ............................................................................................................. 99 lprm ..........................................................................................................100 tee .............................................................................................................101 od .............................................................................................................103 nl ..............................................................................................................105 wc .............................................................................................................. ..106 ps ..............................................................................................................107

114

nohup .......................................................................................................109 kill ............................................................................................................110 nice ...........................................................................................................111 time .......................................................................................................112 sort ............................................................................................................113 cmp ...........................................................................................................115 date ............................................................................................................116 su ...............................................................................................................118 compress ...................................................................................................119 uncompress ...............................................................................................120 tar .........................................................................................................121 man .............................................................................................................122 Capítulo 6 Programación de la shell Ejecución de un programa shell ..............................................................123 Variables Sustitución de variables ...............................................................124 Asignación de variables ...............................................................128 Operadores ...................................................................................131 Llaves de separación ....................................................................132 Variables del sistema ...................................................................133 Líneas de comandos .................................................................................138 Agrupamientos de comandos ...................................................................139 Estructuras de control ...............................................................................140 Evaluación de expresiones .......................................................................144 Reejecución de variables .........................................................................145 Alias ..........................................................................................................146 Ficheros autoejecutables ...........................................................................147 Variables PATH ........................................................................................149 115

Sustitución de tilde ....................................................................................150 Capítulo 7 Comunicación entre ususarios Write ...........................................................................................................151 Talk .............................................................................................................152 Mail .............................................................................................................152 Pine .153 / var usr tmp dev etc sbin sys PROGRAMAS DE APLICACIONES SHELL KERNEL HARDWARE shell terminal who sort who TERMINAL sort lpr

116

Get in touch

Social

© Copyright 2013 - 2024 MYDOKUMENT.COM - All rights reserved.