Informática


Sistema operativo Unix


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.

<Ctrl-d> 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 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 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.-

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.

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

.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

DESCRIPCIÓN

/

Directorio raíz de la jerarquía. Contiene ficheros y directorios necesarios para arrancar e inicializar el sistema operativo.

dev

Ficheros y directorios para operaciones de entradas y salidas sobre dispositivos físicos y seudodispositivos.

etc

Ficheros y bases de datos para la administración de sistemas.

sbin

Comandos para arrancar e inicializar el sistema en modo single-user.

tmp

Ficheros temporales.

usr

Comandos locales, manuales online, librerias, colas, etc..

var

Ficheros variables, temporales, colas, log multiproposito.

sys

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 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.

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

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

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.

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.

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.

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 <Ctrl-d> a principio de linea

Este proceso se rompe con <Ctrl-d> a principio de linea

<Ctrl-d>

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 *

*****************************************

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.

<Ctrl-d>

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 <Ctrl-d> a principio de línea.

Similarmente a STDOUT y STDERR, STDIN puede ser redirigido a cualquier fichero o dispositivo utilizando el metacaracter <.

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:

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

*****************************************

* 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

( 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

*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 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 <Ctrl-i>. 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

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

<Esc> Retorna el editor a modo comando

3/ Comandos de borrado

<Backsp> 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 <ESC>

s Borra el carácter sobre el que está el cursor y añade nuevo texto hasta el <ESC>

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

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:

_

"

"

"

"

"

"

"

´´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 <Return>

del editor vi <Return>

_

"

"

"

"

"

´´leccion1´´ [New file]

Si se quiere grabar este fichero (que tenemos en edición) en el disco, se teclea:

<Esc> (fin del modo de inserción)

:wq <Return> (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 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 <Return>

Esta es la segunda lonea <Return>

...

Esta es la decime lonea <Return>

est

_

"

"

´´leccion2´´ [New file]

<Esc> (fin del modo de inserción)

:wq <Return> (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

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/<Return> (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

"

"

"

"

10 substitutions

Esta última orden pertenece al editor ed, para introducirla se pulsará <Esc> 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<RETURN> (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 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

"

"

"

"

10 substitutions

<Esc> (fin del modo de inserción)

:wq <Return> (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<Return> (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

...

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<Return> ( 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

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:

<Ctrl-l> Refresca la pantalla

:1,$t10<Return> ( 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

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:

<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 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

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<Return>

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:

<i> 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

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<Return> ( 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

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<Return> (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<Return> ( 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

...

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<Return> (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 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<Return> ( listar el contenido del directorio activo)

:!pwd<Return> (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<Return>

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 <Return>; 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 <plataforma>

donde <plataforma> 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:

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 <Ctrl-Z > 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.

'Sistema operativo Unix'

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 <Ctrl-J>. Para deshacer la última alineación se ejecuta <Ctrl-U>.

'Sistema operativo Unix'

  • 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 <Ctrl-W>.

  • 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 <Ctrl-T>.

  • Visualizador de archivos mediante los comandos <Ctrl-O> Read File y <Ctrl-R> 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.

'Sistema operativo Unix'

'Sistema operativo Unix'

CAPITULO 5

COMANDOS UNIX

En esta unidad, se tratará los comandos básicos del sistema UNIX. Se mostrarán las opciones más importantes 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.

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

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

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

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

-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

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.

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)

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:

-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.

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.

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

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:

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

-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.

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

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, 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.

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

# #

# #

######

# #

# #

# #

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

1 2

3 4 5 6 7 8 9

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:

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.

-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.

-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.

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

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:

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

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:

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

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

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.

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:

-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:

-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

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 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.

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 <Return> 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

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

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.

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

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 <Ctrl-d>.

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:

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

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

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 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 ]

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

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'

$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

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

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

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]}

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

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, si se desea.

home Almacena el camino del directorio domicilio del usuario.

ignoreeof Si se define, no se puede salir de la shell con <Ctrl-d>. 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

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.

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 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.

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

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

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]

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

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 <Esc-k>

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 <j>

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 <l> ksh <h>

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 (<Esc>).

Una vez modificado el comando recuperado, para ejecutarlo tan solo hay que pulsar la tecla <Return> 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:

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.

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 <Ctrl-d>, 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

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

/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 <Return> 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 <Ctrl-d>.

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 <Return>.

El formato es:

talk nombre_usuario (para usuarios locales)

talk nombre_usuario@nodo (para usuarios remotos)

Se finaliza la comunicación con <Ctrl-d>.

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:

<Return> 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.

.<Return>

EOT

Para terminar la edición de una carta se teclea en la columna 1, un punto(.) y se le da <Return>. Aparecerá el vocablo EOT que significa final de transmisión.

PINE

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 <Ctrl-Z> 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 <Ctrl-M> es:

'Sistema operativo Unix'

donde :

HELP Es una ayuda interactiva del gestor de correos Pine.

COMPOSE MESSAGE Para escribir y enviar mensajes.

'Sistema operativo Unix'

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.

'Sistema operativo Unix'

ADDRESS BOOK Crea o actualiza grupos de direcciones.

'Sistema operativo Unix'

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

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

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

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

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




Descargar
Enviado por:Jose Maria Martinez Pacheco
Idioma: castellano
País: España

Te va a interesar