SISTEMA OPERATIVO UNIX Convenciones:

Anuncio
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
1
industria.
Mientras que AT&T potenciaba el sistema operativo Unix en el mundo comercial, las implementaciones
desarrolladas por el Departamento de Ciencias de la Computación de la Universidad de California de
Berkeley y denominado BSD (Berkeley Software Distribution), se utilizaron masivamente en el entorno
universitario y técnico. Aparece así dos sistemas operativos (AT&T y BSD) incompatibles entre sí. Esta
situación conlleva a dos entornos informáticos diferentes pero cualquier innovación lo suficientemente
eficiente desarrollada que aparece en uno, el otro trata de asumirlo inmediatamente.
El Unix de AT&T ha tenido diferentes sistemas de denominación. En un principio se les etiquetaba
dependiendo del número de revisión siendo la Revisión Sexta y Revisión Séptima muy populares. AT&T
cambió la denominación apareciendo el System III y System V, el System IV fue un sistema de transición que
nunca salió de los Laboratorios Bell.
A finales de los ochenta, lo vuelve a cambiar dejando la denominación System V y añadiéndole el número de
versión: System V, Revisión 3; System V, Revisión 4; a menudo se citan como SVR3 y SVR4
respectivamente.
En el transcurso de la década de los ochenta, el Unix sigue evolucionando tanto en la línea Berkeley como en
la AT&T, destacando estos factores:
1/ Instalación del Unix en los ordenadores de arquitectura RISC.
2/ Adopción del las X−Windows como interface gráfica en la que se consigue un interacción total entre el
hombre y la máquina a través del ratón.
3/ Desarrollo de las comunicaciones con la aparición del protocolo UUCP(Unix to Unix Copy Program) que
permite transmitir información independientemente de tipo de Unix y marca de ordenador que lo soporte.
4/ Aparición de la estructura cliente/servidor con la implementación del NFS (Network File System) de Sun
Microsystems.
5/ Instalación del Unix sobre el PC cuando este adquiere la suficiente potencia. Esto ocurre con el
microprocesador 80286. Aparece el Xenix, nueva rama independiente del Unix, desarrollada por Santa Cruz
Operations, empresa controlada por Microsoft al ser propietaria de parte de sus acciones.
Como se podrá observar, conforme el Unix va adquiriendo importancia, se va diversificando y haciéndose
incompatible.
Con la aparición del microprocesador i80386, AT&T e Intel deciden implementar el SVR3 sobre esta
plataforma, esto supondría la muerte del Xenix ya que es un Unix con muchas limitaciones debido a la escasa
potencia del microprocesador 80286. Ante esta perspectiva, Microsoft se incorpora al proyecto ya que si no lo
hace, habría perdido una parcela donde hasta entonces mandaba él exclusivamente. De esta manera, se
reabsorbe en el núcleo original, la variante Xenix del Unix.
Como el segmento Unix del mercado informático estaba dando ya los suficientes beneficios y se esperaba,
como así ha ocurrido, que seria el de mayor crecimiento de ventas, las grandes empresas de informática (IBM,
DEC, HP, etc.) se alían para no depender de AT&T y Sun, las cuales dominaban el sistema operativo Unix y
el de las estaciones de trabajo respectivamente.
Se crea una asociación denominada OSF(Open Software Foundation) cuya finalidad es la creación de un
sistema operativo abierto y no propietario. Como contrarrespuesta, AT&T y Sun crean Unix Internacional
2
cuyos objetivos son idénticos a los de OSF. El resto de las empresas informáticas alinean en uno u otro bando
dependiendo de sus intereses y perspectivas de futuro.
OSF selecciona AIX, sistema operativo de IBM, como base para el desarrollo de su futuro sistema operativo
que se llamará OSF/1. Tras 17 meses de trabajo y debido a las continuas desconfianzas de los participantes y a
las criticas hechas al sistema por su falta de seguridad y de cálculo multisimétrico, OSF decide reemplazarlo
por el Mach Unix, sistema desarrollado por la Universidad Carnegie Mellon de Pittsburg (Pennsylvania) y se
llega al acuerdo de instalarlos en los ordenadores de las empresas asociadas en 1993.
La realidad ha sido diferente, solo Digital ha cumplido instalando OSF/1 en sus estaciones de trabajo Alpha de
64 bits. Las dos realizaciones más importante de esta asociación ha sido el sistema operativo OSF/1 y el
interface gráfico de usuario OSF/Motif, el cual, basándose en la normativa X11, ofrece una interface más fácil
tanto para los desarrolladores de software como para los usuarios finales.
Una vez visto donde había llegado OSF, Unix Internacional se disuelve y su aportación máxima es la creación
del Unix System V donde se integra las extensiones BSD 4.X y por lo tanto confluyen las dos ramas
originales del UNIX. Además, se llega a un acuerdo con la Universidad de Berkeley para que no saque más
versiones al mercado por lo que se cierra la posibilidad de una nueva escisión.
Si la finalidad de las multinacionales informáticas es adquirir las mayores cuotas de mercado, la de los
desarrolladores de software y usuarios es la de tener un entorno lo más independiente posible de un sistema
propietario y el asegurar sus inversiones a largo plazo.
Durante la década de los ochenta aparecen una serie de organizaciones que adaptándose a la realidad del
mercado, redactan una serie de normas de estandarización, que al final se convierten de obligado
cumplimiento para las empresas multinacionales del sector debido al fuerte apoyo por parte de diversos
gobiernos de las naciones más desarrolladas, principales compradores de equipos informáticos.
La estandarización del Unix se basa en tres puntos:
1/ X11.− Conjunto de normas redactadas en el MIT y adoptadas por todos los fabricantes por lo que se
establece una interface gráfica única. Basándose en este software de dominio público, Sun desarrolla una
interface gráfica denominada Open Look y OSF crea OSF/Motif que se convierte en el estándar de facto del
mercado.
2/ Posix − Su finalidad es crear una interface única entre los diferentes Unix. Posix parte inicialmente de las
especificaciones FIPS (Federal Information Processing Specification) para establecer un Unix estándar
oficialmente reconocido por el Gobierno de los EE.UU. Posix es una definición independiente de cualquier
marca y a la que los vendedores pueden adherirse sin tener que obtener codificación bajo licencia de AT&T
pero su contenido se deriva de Unix System V Interface Definition (SVID).
3/ X Open .− Es una institución independiente que establece una serie de normas para que los sistemas dejen
de ser propietarios y se conviertan en abiertos. X/Open acepta los estándares de facto y los incorpora a un
Entorno Común de Aplicaciones (Common Aplications Enviroment CAE) que aparece detallado en su guía de
portabilidad denominada XPG seguido del número de versión XPG3, XPG4.
Esta institución influye sobre los Gobiernos (por ejemplo todos los Estados miembros de la CEE) ya que son
los más importantes compradores de sistemas informáticos, para que no compren sistemas que no sean
abiertos.
Características.−
3
1/ Herramientas software.− Bajo el concepto de divide y vencerás, el Unix permite desarrollar grandes
proyectos basándose en la interconexión de subrutinas empaquetadas formadas por una secuencia de ordenes
simple. Estas subrutinas se pueden reutilizar en múltiples proyectos lo que proporciona al Unix una gran
productividad en el desarrollo de software.
2/ Portabilidad.− Solo una pequeña parte del Sistema operativo es dependiente de la máquina por lo que la
portabilidad de las aplicaciones desarrolladas en un tipo de máquina esta asegurada.
3/ Flexibilidad.− Bajo el Sistema operativo Unix se han desarrollado todo tipo de aplicaciones:
automatización de fábricas, conmutación telefónica, química computacional, juegos, etc.
4/ Potencia.− La sintaxis clara y concisa permite a los usuarios alcanzar sus objetivos de una forma rápida y
sencilla, por lo que este sistema operativo se convierte en el más potente para cualquier plataforma hardware.
5/ Multiusuario y Multitarea.− Multitarea significa que un usuario puede desencadenar más de un proceso al
mismo tiempo, como por ejemplo editar un texto, imprimir otro y ejecutar un programa.
El concepto multiusuario implica que el sistema operativo Unix puede soportar las actividades de más de una
persona a la vez.
6/ Orientación a red.− El S. O. Unix lleva incorporado variado software de comunicación como demuestra la
existencia del protocolo propio UUCP (Unix to Unix Copy Program) que sirve para comunicar maquinas de
diferentes marcas bajo sistema operativo Unix y que actualmente aún se utiliza para el correo electrónico en
algunas redes como por ejemplo USENET y BITNET. Actualmente incorpora TCP/IP, protocolo de
comunicación adoptado por Internet.
CAPITULO 2
PROCESOS Y FICHEROS
Procesos.−
Un proceso es una tarea que se esta ejecutando hasta que termina. Si un usuario ejecuta un comando del
sistema operativo, por ejemplo: ls, esta orden genera un proceso que subsiste hasta que la operación termina.
Debido a que una de las características del Unix es la multitarea, existirán mas de un proceso
simultáneamente.
Como la Unidad Central de Proceso (UCP) del ordenador tan solo puede ejecutar un solo proceso en un
momento determinado, sería el Kernel (parte del Unix que maneja el sistema globalmente) quien controle el
acceso a la UCP, concediéndoselo durante un breve intervalo de tiempo y pasando el control a otro proceso.
Por esto, a los sistemas operativos multitarea se les denomina sistemas de tiempo compartido.
Al usuario le parece que tan solo él está trabajando con el ordenador. Si el ordenador se sobrecarga con
demasiados procesos, el tiempo de respuesta aumentara llegándose a perderse la interactividad
hombre−maquina. Si el tiempo de respuesta aumenta mucho, el sistema llega a degradarse ya que está
gastando más recursos en la gestión de acceso de los procesos a la UCP que en la ejecución de dichos
procesos.
Los procesos nacen y mueren y su duración es variable. Unos nacen cuando arranca el sistema y mueren
cuando se apaga, son especiales y se les denominan daemons (demonios). El sistema proporciona una
respuesta a través de ellos cuando se les requiere para una acción determinada, por eso, existen diferentes
daemons con fines precisos: comunicación , impresión, reloj, etc.
4
Cuando un usuario accede al sistema, se crea un proceso shell para que este lo utilice y el proceso muere
cuando el usuario se despide. Luego siempre existe al menos un proceso asociado a cada sesión de trabajo.
Los procesos pueden desencadenar el nacimiento de otros procesos produciéndose una jerarquización en el
sistema de procesos. El proceso más antiguo es el proceso padre que puede engendrar (spawn) múltiples hijos
y estos a su vez crear sus propios hijos y así sucesivamente. Un proceso tan solo puede tener un padre y si este
se muere, el proceso hijo generalmente también muere aunque se puede salvar si se desea, pasándole el
control al padre del proceso muerto (en términos familiares al abuelo).
Cuando un proceso hijo muere, puede pasar cierto tiempo hasta que el padre se entere, mientras tanto el kernel
mantiene este proceso es un estado especial denominado defunct en unos unix y zombies en otros.
Ficheros.−
El sistema de ficheros en Unix se basa en una jerarquización formada por directorios, de los cuales cuelgan
ficheros y subdirectorios , y así sucesivamente. Un directorio es un tipo de fichero.
Tipos de ficheros.−
En unix existen ficheros especiales como los fifo (pipes) en el System V y los links (enlaces simbólicos) y
sockets (receptáculos) en Berkeley.
Ficheros convencionales
Los ficheros convencionales que contienen información generada por el usuario son de dos tipos: texto y
binario.
Un fichero texto es un fichero ASCII. La unidad mínima de información con la que trabajan los ordenadores
es el octeto. Cada octeto está compuesto de 8 bits en el que cada uno de ellos puede contener un 0 o un 1,
luego los posibles valores que puede contener un octeto es 28 = 256. El código ASCII utiliza 7 bits, o sea 27 =
128 caracteres que contiene todos los caracteres alfabéticos, numéricos y especiales visualizables o
imprimibles.
Un fichero binario almacena cualquiera de los posibles valores que puede contener un octeto.
Normas para la creación de ficheros:
1/ No puede haber dos nombres idénticos de ficheros en un mismo directorio.
2/ Los nombres de los ficheros pueden tener una longitud de 255 caracteres pudiéndose emplear cualquier tipo
de carácter excepto espacios, tabuladores y metacaracteres de la shell.
3/ No existe ninguna norma sobre la extensión de los caracteres pudiendo un nombre de fichero contener
varias extensiones, por ejemplo
nombre_de_fichero.tar.Z
Existen ciertas extensiones que suponen contienen un tipo de información:
.sh ==> Programas de la shell
.c ==> Programas fuente en lenguaje C
5
.f ==> Programa fuente en lenguaje Fortran
.tar ==> Fichero en formato tar
.Z ==> Fichero comprimido
¡ATENCION! El Sistema operativo Unix es sensible a las mayúsculas, esto supone que los siguientes ficheros
sean diferentes: FICHERO_1, Fichero_1, fichero_1
Directorios
Es un tipo de fichero que contiene listas de ficheros y subdirectorios. Cuando se crea un directorio, se generan
dos ficheros . y el .. y sirven para mantener la jerarquía de archivos. El fichero . es un seudónimo del nombre
del directorio en curso y el ..del directorio padre del directorio en curso.
Cada usuario tiene un directorio personal (home directory) al que se accede directamente al comenzar la
sesión de trabajo
pinar2.csic.es> cd
pinar2.csic.es> pwd
Directorios que contienen el sistema operativo Unix.
La jerarquización de ficheros no solo afecta a los usuarios sino es una forma intrínseca del sistema operativo
Unix. La cuna de la jerarquía es el directorio raíz (root directory) del cual cuelgan de forma arborescente una
serie de subdirectorios que contienen diferentes programas del sistema operativo.
DIRECTORIO
/
dev
etc
sbin
tmp
usr
var
sys
DESCRIPCIÓN
Directorio raíz de la jerarquía. Contiene ficheros y directorios necesarios para arrancar e
inicializar el sistema operativo.
Ficheros y directorios para operaciones de entradas y salidas sobre dispositivos físicos y
seudodispositivos.
Ficheros y bases de datos para la administración de sistemas.
Comandos para arrancar e inicializar el sistema en modo single−user.
Ficheros temporales.
Comandos locales, manuales online, librerias, colas, etc..
Ficheros variables, temporales, colas, log multiproposito.
Ficheros de configuración del sistema.
Nombres de camino
Un nombre de camino especifica la ruta a seguir a través del sistema de ficheros para acceder al archivo
deseado. Los ficheros que no estén en el directorio en curso, se deben referenciar utilizando un nombre de
camino (pathname).
Todo camino que empiece por una barra `/' es un camino absoluto ya que comienza en el directorio raíz. El
resto de los caminos comienzan en el directorio en curso.
Un camino esta compuesto por una lista de nombres de directorios separados por unas barras o por un nombre
6
solo. Los primeros nombres de la lista son directorios. El último nombre de la lista es el fichero de destino. No
se permiten espacios en blanco dentro de un nombre de camino.
Ejemplo:
pinar2.csic.es> pwd
/usr/users/usuario_1
pinar2.csic.es> vi /usr/users/usuario_1/dir_1/fich_1 (camino absoluto)
pinar2.csic.es> vi dir_1/fich_1 (camino relativo)
Se asciende por la jerarquía del sistema de archivos haciendo referencia al fichero .. Ejemplo:
pinar2.csic.es> pwd
/usr/users/usuario_1/dir_1/dir_2/dir_3
pinar2.csic.es> cd ../..
pinar2.csic.es> pwd
/usr/users/usuario_1/dir_1
Tipo de ficheros, modo de acceso y protección.
Cada fichero creado en Unix contiene una serie de atributos que los definen: tipo de ficheros, permiso de
acceso, número de enlaces, nombre del propietario, tamaño, fecha y hora de la última modificación.
Existen los siguientes tipos de archivos:
− Ficheros ordinarios
− Directorios
− Enlaces (links)
− Socket
− Character
− Bloque
Los dos primeros tipos serían como ejemplo un fichero o un directorio creado por el usuario.
El tipo enlace es un apuntador a un archivo que aparece en el directorio que se desee con el mismo u otro
nombre. No es una copia ya que cualquier modificación hecha en cualquiera de ellos, queda reflejada en el
otro. En una copia, cuando se modifica uno, los dos ficheros son diferentes. Posteriormente veremos el
comando para generarlos. Los tipos socket y character son ficheros especiales del sistema operativo y no se
estudiaran en este curso.
7
Sobre cada fichero se pueden realizar tres operaciones: leer, escribir y ejecutar. La lectura permite/impide que
se pueda visualizar la información de un fichero pero esta no se puede modificar. Si se tiene permiso de
escritura, se puede modificar la información o borrar el fichero. La ejecución supone que es un fichero con
comandos de la shell o un binario ejecutable, se ejecuta dándole el nombre de camino.
Estos tres tipos de acceso actúan sobre los tres tipos de usuarios que tiene un fichero:
Propietario: El usuario que lo creó. Sólo el o el superusuario (administrador de sistemas) pueden cambiar la
propiedad.
Grupo: El concepto de grupo viene determinado por el concepto de multiusuario y a la necesidad de que
ciertos usuarios que trabajan en un proyecto común tengan que
compartir la información. Un usuario puede pertenecer a más de un grupo.
Público: Todos los demás usuarios del sistema.
La información sobre el tipo, el modo de acceso y la protección de los ficheros la proporciona el comando ls
−l que posteriormente explicaremos.
Ejemplo:
pinar2.csic.es> ls −l
total 259
drwxr−xr−x 2 curso00 users 512 Jul 7 1994 bin
−rw−r−−r−− 1 curso00 users 168 Sep 5 10:01 fich_1
−rw−r−−r−− 1 curso00 users 168 Sep 5 10:01 fich_2
−rw−r−−r−− 1 curso00 users 168 Sep 5 10:01 fich_3
−rw−r−−r−− 1 curso00 users 168 Sep 5 10:01 fich_4
−rw−r−−r−− 1 curso00 users 168 Sep 5 10:01 fich_5
−rw−r−−r−− 1 curso00 users 168 Sep 5 10:01 fich_6
−rw−r−−r−− 1 curso00 users 168 Sep 5 10:01 fich_7
−rw−r−−r−− 1 curso00 users 266 Sep 5 10:01 fich_8
−rw−r−−r−− 1 curso00 users 168 Sep 5 10:01 fichero_curso
−rwxr−xr−x 1 curso00 users 89 Sep 5 10:01 lsdir
drwxr−xr−x 2 curso00 users 512 Sep 5 10:01 metacaracteres
El concepto de lectura, escritura y ejecución se interpreta de forma diferente si es un directorio
8
El permiso de lectura proporciona qué ficheros están contenidos en dicho directorio si le damos el comando ls.
Si no se tiene permiso, no se obtendrá la lista pero eso no significa que no se pueda leer un fichero que
cuelgue de él ya que eso dependerá del tipo de acceso del propio fichero.
El permiso de escritura proporciona que el usuario puede crear o eliminar ficheros dentro de un directorio.
Una vez creado el fichero, si se deniega el permiso de escritura al directorio y se tiene en el fichero, éste podrá
ser modificado.
El permiso de ejecución permite que los ficheros que cuelgan del directorio sean ejecutados cuando se
especifica un nombre de camino. Si algún directorio de orden jerárquico superior no tiene permiso de
ejecución, el fichero seleccionado no se ejecutará.
CAPITULO 3
LA SHELL
La shell es una interface que traduce las ordenes dadas por el usuario a un formato interno inteligible por el
sistema operativo.
Shell significa concha, caparazón; y como su nombre indica, es una capa que se sitúa por encima del núcleo
del sistema proporcionando un número externo de funciones que permiten sacar el máximo de potencia al
sistema operativo.
Entrada al Sistema
Debido a que el sistema operativo Unix es multiusuario, se debe verificar una serie de características como el
derecho de un usuario a acceder al sistema para proteger la privacidad de la información, evitar que dicho
usuario ocupe todos los recursos del sistema en detrimento de los demás usuarios, facturar los recursos
consumidos: tiempo de CPU, espacio en disco, número de líneas impresas, etc.
Cuando se entra al sistema, el futuro usuario debe solicitar que el superusuario le cree una cuenta. El nombre
de la cuenta es variable siendo elegido por el propio usuario si no existe una norma establecida de asignación
de nombres o no existe ya otra cuenta con el mismo nombre. El nombre de usuario debe ser único en todo el
sistema. El nombre de la cuenta del superusuario es fijo y se denomina root.
Junto al nombre, el superusuario asigna porque lo impone algunos sistemas, una palabra clave de acceso
(password). Una vez que el usuario ha accedido al sistema, la debe cambiar con el comando passwd que en el
capitulo 5 veremos. En caso de olvido de dicha palabra clave, ni el superusuario la puede descifrar. Lo que si
puede, y de hecho hace, es asignar una palabra clave nueva.
Inicio de la Sesión
Debido a que este curso se imparte desde ordenadores personales que no pueden soportar el sistema operativo
ya que la configuración mínima del Unix es en torno a 80 Mb. Estos ordenadores se convierten en terminales
tontos y acceden al nodo pinar2.csic.es que trabaja bajo el sistema operativo OSF/1.
Para establecer la comunicación entre los ordenadores personales y la estación de trabajo hay que utilizar el
programa telnet de los protocolos de comunicaciones TCP/IP (Transfer Control Protocol/ Internet Protocol).
Para ello ejecutaremos
C: CD TCPIP
9
C: TELNET PINAR2
Una vez que se establece la comunicación con el ordenador aparecerá la siguiente presentación
login:
El sistema operativo requiere el nombre de usuario. Se vuelve a recordar que el Unix es sensible a las
mayúsculas y minúsculas. Se teclea el nombre de usuario
login: alberto
password:
El sistema requiere la palabra clave a acceso que no se visualizará mientras se teclea, así se protege el acceso
si existe una persona que esté presente en ese momento.
Si se introduce incorrectamente el login, el password o el usuario no tiene autorización para acceder, el
sistema responderá:
login: alberto
password: ********
login incorrect
login:
Cuando se accede al sistema, existe una carátula de bienvenida donde el nodo se identifica. Cuando termina,
el sistema devuelve el control mediante el inductor pinar2.csic.es>. En este momento se esta bajo la shell y se
puede ejecutar comandos o crear programas que se denominan shell−scripts.
El inductor varia dependiendo de la shell que se utilice y de las variables de entorno que se definan.
Generalmente el inductor bajo sh y ksh es el carácter $ y para la csh, el %.
Tipos de shell
A los largo de la historia del Unix han existido varios tipos de shell siendo las más importantes:
1) Bourne shell (sh).− Es el primero que tuvo una amplia aceptación. Fue escrito por Steven Bourne y existen
muchos programas de administración del sistema operativo en dicho lenguaje.
2) C shell (csh).− Fue desarrollado por Bell Joy, es muy parecido al lenguaje C y tiene mas capacidad para el
tratamiento interactivo de la información. Fue inicialmente distribuido por el Unix BSD.
3) Korn shell (ksh).− Escrito por Dave Korn, es compatible con la Bourne shell pero es mucho mas potente,
supera en capacidades interactivas a la C shell.
4/ tcsh.− Es la csh pero potenciada su interactividad mediante el reconocimiento automático de nombres de
archivo, de tipo de terminales, aumento de la capacidad y tratamiento de los últimos comandos ejecutados
(mecanismo history), edición de la línea de comando en estilo Emacs, etc. Su distribución es gratuita y se está
convirtiendo en estándar. Bajo esta shell se desarrollará el curso.
10
5/ bash.− GNU Bourne−Again Shell. Bash es un interprete de comandos compatible con la Bourne Shell (sh)
y que ejecuta comandos leidos desde la entrada estandar o desde un fichero. Bash también incorpora
características de la Korn y C shells.
Capas del sistema operativo Unix
Estructura de los comandos
Los comandos en el sistema operativo Unix están formados por una palabra o secuencia de palabras separadas
por espacios en blanco en donde , la primera es el propio comando y el resto son argumentos del comando. Si
por necesidad hay que utilizar un argumento que contenga un espacio en blanco, esta debe estar delimitado
por dobles comillas( ) o por apóstrofos('), no se debe utilizar el acento grave(`).
Formato: comando [argumento(s)]
Los argumentos de los comandos pueden ser una:
Opción.− Literal normalmente precedido por un signo − y que modifica la acción del comando. Existen
opciones que van precedidas por el signo + y otras que no llevan signo.
Expresión.− Cadena de caracteres que se va a utilizar como entrada para el comando.
Nombre de fichero.− Cualquier nombre de fichero permitido por el Unix. Se admite para el tratamiento de
grupos de ficheros la utilización de metacaracteres o caracteres comodines que posteriormente se estudiaran.
Ejemplos:
ls
ls −l
ls −la fich*
grep sistema operativo unix fich_8
grep sistema operativo Unix fich_8
grep −v sistema operativo Unix fich_8
date
date + %r %d %h %y (%a)
Procesos en Foreground y Background
Los comandos que se ejecutan interactivamente por el usuario están en foreground. ya que hasta que no se
acaba su ejecución no se puede desencadenar otra. Este es el modo en que operan los sistemas operativos que
no soportan la multitarea, en los cuales, una vez que se ejecuta un proceso , el usuario está inactivo ya que no
puede acceder al sistema hasta que el proceso no termine.
La shell de unix permite arrancar un proceso y dejarlo desatendido y mientras, el usuario seguir introduciendo
comandos. A esta forma de proceso desatendido se le denomina background.
11
Para ejecutar un proceso en background tan solo hay que poner su nombre seguido del carácter ampersand
(&).
El programa en background no debe requerir datos desde el terminal ya que se produciría una coincidencia de
requerimientos tanto por parte del programa en background como de la shell.
Si se envían datos al terminal, estos se confundirán con los proporcionados por los comandos ejecutados en
foreground.
Para observar esta forma de proceso, se ejecutará el programa background.bin , el cual genera un fichero de
resultados denominado background_sal
pinar2.csic.es> background.bin &
[1] 30476
El número proporcionado por la shell es el de identificación de proceso (pid− process id number). Cada
proceso tiene un pid único.
Para ver el estado de los proceso existe el comando ps
pinar2.csic.es> ps u
USER PID %CPU %MEM VSZ RSS TTY S STARTED TIME COMMAND
curso00 30476 95.0 0.1 2.92M 272K ttyp7 R 16:33:51 0:09.08 background.bin
curso00 5955 0.0 0.2 1.98M 488K ttyp7 S 16:10:23 0:01.64 −tcsh (tcsh)
[1] + Done background.bin
Entrada, salida y error estándar.
La información de salida generada por la ejecución de un programa se debe dirigir hacia un lugar, este puede
ser un fichero, una impresora o un terminal.
Al entrar en el sistema, la shell dirige tanto la entrada como la salida hacia un terminal y se le denomina
entrada/salida estándar.
El comando cat copia un fichero en la salida estándar. Si se ejecuta:
pinar2.csic.es> cat fich_1
*****************************************
* SISTEMA OPERATIVO UNIX *
*****************************************
Esta información esta almacenada en el fichero fich_1
como la salida estándar está dirigida al terminal, el contenido del fichero fich_1 se visualizará sobre este.
12
Si se ejecuta el comando cat sin argumentos, copia la entrada estándar en la salida estándar.
pinar2.csic.es> cat
Estamos dirigiendo
Estamos dirigiendo
la entrada estandar
la entrada estandar
a la salida estandar
a la salida estandar
Este proceso se rompe con <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 *
*****************************************
13
Esta información esta almacenada en el fichero fich_1
pinar2.csic.es> cat > fich_1
Vamos a destruir el contenido del fichero fich_1
y se va a grabar esta información.
<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 <.
14
Ejemplo: cat fich_1csh
csh < fich_1csh
Lo que se hace en este ejemplo es invocar a la shell csh y ejecutar los comandos introducidos en el paso
anterior. Esto provoca que existan dos shells, la shell de entrada al sistema que como se ha indicado
anteriormente es la tcsh y una subshell que en este caso es la csh.
La salida estándar está direccionada al terminal, ahora se direccionará a un fichero y utilizaremos otra shell
para observar que las salidas obtenidas son similares:
ksh < fich_1csh > salida_csh
cat salida_csh
Cualquiera de los ficheros estándar pueden ser redireccionados entre sí. Por ejemplo, el comando:
ls −l 2>&1
redirecciona el fichero STDERR hacia el fichero STDOUT. El símbolo & informa a la shell que redirecciona
un fichero numerado 1, no un fichero denominado 1. Este último caso sería:
ls −l 2> 1
Adición de la salida estándar a un fichero.−
El símbolo >> añade el contenido de la entrada estándar al final del fichero seleccionado. Ejemplo:
pinar2.csic.es> date>salida_date
pinar2.csic.es> cat salida_date
Tue Sep 12 16:51:06 MET DST 1995
pinar2.csic.es> who>>salida_date
pinar2.csic.es> cat salida_date
Tue Sep 12 16:51:06 MET DST 1995
curso01 ttyp1 Sep 12 16:29
curso02 ttyp2 Sep 12 15:43
curso01 ttyp3 Sep 12 15:45
curso05 ttyp4 Sep 12 13:18
Concatenación de ficheros.−
Se realiza con el comando cat y es de la siguiente manera:
15
pinar2.csic.es> cat fich_2
*****************************************
* SISTEMA OPERATIVO UNIX *
*****************************************
Esta informacion esta almacenada en el fichero fich_2
pinar2.csic.es> cat fich_3
*****************************************
* SISTEMA OPERATIVO UNIX *
*****************************************
Esta informacion esta almacenada en el fichero fich_3
pinar2.csic.es> cat fich_4
*****************************************
* SISTEMA OPERATIVO UNIX *
*****************************************
Esta informacion esta almacenada en el fichero fich_4
pinar2.csic.es> cat fich_2 fich_3 fich_4 > fich_234
pinar2.csic.es> cat fich_234
*****************************************
* SISTEMA OPERATIVO UNIX *
*****************************************
Esta informacion esta almacenada en el fichero fich_2
*****************************************
* SISTEMA OPERATIVO UNIX *
*****************************************
Esta informacion esta almacenada en el fichero fich_3
*****************************************
16
* SISTEMA OPERATIVO UNIX *
*****************************************
Esta informacion esta almacenada en el fichero fich_4
Conductos (Pipes)
Un pipe (|) conecta la salida estándar de un programa a la entrada estándar de otro, es decir, es un mecanismo
que redirige los ficheros STDIN y STDOUT de un proceso hacia el STDOUT y STDIN de otro.
La utilización de los pipes permiten ejecutar en una sola línea varias acciones sin tener que generar un fichero
temporal que al final tendría que borrarse.
Mediante el redireccionamiento de la entrada/salida estándar, el formato sería:
comando_a argumentos > fich_temp
comando_b argumentos < fich_temp
rm fich_temp
El comando rm borra ficheros y directorios.
Si se emplea un conducto, su formato sería:
comando_a argumentos | comando_b argumentos
Ejemplo:
who>fichero_temporal
sort fichero_temporal
rm fichero_temporal
empleando un pipe sería:
who|sort
El comando sort clasifica la salida por orden alfabético. Su flujo sería el siguiente:
(A)(B)
(C)(D)(E)
(F)
( A ) STDIN de who
( B ) STDERR de who
17
( C ) STDOUT de who
( D ) STDIN de sort
( E ) STDERR de sort
( F ) STDOUT de sort
Filtros
Es un comando que procesa una cadena de datos de entrada, le hace un filtrado (por ejemplo, quitar las líneas
en blanco) y genera una salida.
Los comandos que son filtros pueden utilizarse como operaciones intermedias en un pipe. Por ejemplo:
who | sort | lpr
su diagrama sería:
STDERR
STDIN
STDOUT
STDERR
STDIN
STDOUT
STDERR
STDIN
STDOUT
Metacaracteres
Los metacaracteres son caracteres especiales que la shell utiliza para operar sobre conjuntos enteros de
ficheros y directorios en una única orden.
Los metacaracteres llamados también comodines, son los siguientes:
* Representa cualquier cadena de caracteres arbitraria, incluyendo la cadena vacía(nula). No equivale al punto
inicial.
Ejemplo: fich*
Equivale a: fich, fich1, fich2..., fich.txt
No equivale a: afich, fic, .fich
18
*c*
Equivale a: fich, fichero, fich.txt,capitulo.dat
No equivale a: salida_date, salida_txt
.*
Equivale a: .fich, .texto
No equivale a: fich, fich1,salida_dat
? Representa cualquier carácter simple.
Ejemplo: fich?
Equivale a: fich1, fich2,...,ficha.
No equivale a: fich, fich10
sal?da
Equivale a: salada, salida, sal3da, sal.da
No equivale a: asalada, salida.dat, salda
[ ] Encierran una lista de caracteres donde la correspondencia es con cualquier carácter simple encerrado entre
los corchetes. El carácter − utilizado dentro de los corchetes indican un rango de caracteres, por ejemplo [a−z]
es una notación abreviada para representar cualquier letra minúscula del alfabeto.
Ejemplo: fich[1−7]
Equivale a: fich1, fich2...fich7
No equivale a: fich8,fich9
fich[12−15]
Equivale a: fich1, fich5
No equivale a: fich3, fich4, fich6, fich7,fich8,fich9
CAPITULO 4
LOS EDITORES VI Y PICO
Los Programas Editores de UNIX
UNIX se caracteriza por la multiplicidad de editores disponibles: vi, ed, sed, etc. Históricamente, ed es el
programa editor original de UNIX. Es un editor de líneas, en ciertos aspectos similar al edlin de MS−DOS, y
como tal, no es demasiado satisfactorio. El editor de pantalla vi es, en algunos aspectos, mucho más potente y
práctico que ed. Esto es debido a que, como en otros programas editores de pantalla, el usuario puede mover
19
el cursor a través de la pantalla y proceder directamente sobre el fichero a las sustituciones de texto deseadas,
sin la complicación e ineficacia que supone el tener que direccionar individualmente las líneas del fichero. No
obstante debe señalarse que vi no es un procesador de textos como el Word o Wordperfect de MS−DOS. Por
ejemplo, no tiene órdenes para realizar automáticamente una corrección dada de texto en todos el fichero, ni
para mover o copiar bloques de texto. Estos inconvenientes fueron resueltos por William Joy, dando a vi una
facilidad notable: la de comunicar directamente con ed. Esto permite usar las ordenes de ed para llevar a cabo
automáticamente sustituciones globales en todo el fichero, copiar y mover bloques del fichero etc.
Otra facilidad de vi es la de poder invocar desde el mismo todas las órdenes del shell Esto le da una enorme
flexibilidad y utilidad para, por ejemplo, depurar programas y ejecutarlos sin tener que salir del mismo.
El Editor de Pantalla vi
Antes de proceder a la descripción de las ordenes de vi, se debe tratar brevemente el tema de su instalación
para una pantalla determinada. Como ocurre con todos los programas editores de pantalla, para que vi
funcione correctamente, tiene que conocer los caracteres de control de la pantalla; es decir, vi necesita conocer
las secuencias de caracteres ASCII que mueven el cursor una posición a la derecha, a la izquierda, una línea
hacia arriba, etc. Desafortunadamente, en este caso cada pantalla es distinta. En las distribuciones de UNIX
existe un fichero denominado `termcap' en donde figuran los parámetros de control del cursor de varias
decenas de pantallas de uso común. Se puede utilizar el editor ed (que funciona en todas las pantallas) para
examinar rápidamente el fichero `termcap' con el fin de encontrar la pantalla de interés. La primera línea de la
descripción de una pantalla dada en `termcap' contiene los nombres con los que la misma puede ser declarada
a vi. Por ejemplo, la pantalla de Digital Equipment Corporation VT−100 tiene el nombre vt100.
Si se quiere declarar a vi la pantalla vt100 , se puede proceder del modo siguiente:
csh
setenv TERM vt100
ksh
TERM=vt100
export TERM
Si la pantalla que se desea instalar no figura en `termcap', se puede utilizar ed para crear una descripción de la
misma. La mejor táctica es copiar (dentro del fichero `termcap') una descripción para dicha pantalla usando
para ello una ya existente para una pantalla de características similares a esta; luego, con los parámetros de
control obtenidos del manual de la pantalla, se corregiría la descripción copiada con los parámetros adecuados
hasta que vi funcione correctamente.
Finalmente se entra en la operación de vi. El método que se va a utilizar consiste en enumerar simplemente la
selección de las órdenes más importantes de vi, y luego aplicar las mismas en una sesión de ensayo de edición
de un fichero. El lector, una vez que empiece a usarlas, apreciará que esta selección le permite usar vi con
facilidad. En la siguiente tabla de órdenes de vi, la orden `a' es sinónima de teclear la letra `a'; el símbolo `^'
representa la tecla designada `Ctrl' en la mayoría de los teclados, y los símbolos `^i' significan <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
20
h o ! Un carácter a la izquierda
l o ! Un carácter a la derecha
j o ! Una línea abajo
k o ! Una línea arriba
w Al principio de la siguiente palabra
b Al principio de la palabra anterior
e Al final de la palabra en curso
( Al principio de la frase en curso
) Al principio de la frase siguiente
{ Al principio del párrafo en curso
} Al principio del párrafo siguiente
H A principio de la pantalla
M A mitad de la pantalla
L A final de la pantalla
^f Mueve una pantalla hacia adelante
^b Mueve una pantalla hacia atrás
nG Va a la línea n del fichero
G Va a la última línea del fichero
^g Visualiza el número de linea y el estado
2/ Comandos de creación
i Inserta texto a partir del cursor
I Inserta texto al principio de la línea en curso
a Añade texto después del cursor
A Añade texto al final de la línea en curso.
o Inserta texto una línea debajo de la actual
O Inserta texto una línea arriba de la actual
21
<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
22
C Sustituye desde el cursor hasta el final de la línea
6/ comandos especiales
. Repite el último comando
J Une la línea de abajo con la actual
^l Refresca la pantalla
7/ Comandos de editor de líneas
:sh Hace una llamada temporal a la shell
^d Retorna de la shell temporal al editor
:n Va a la línea n del buffer
:$ Va a la última línea del buffer
:.,$d Borra desde la línea actual hasta el final
:r file Copia el fichero file debajo de la línea actual
:s/t1/t2/ Sustituye t1 por t2
:s/t1/t2/g Sustituye t1 por t2 globalmente
8/ Comandos para salir de vi
:wq Sale del editor salvando en disco
:q! Sale del editor sin salvar
:q Sale del editor sin salvar. Funciona solo si no se ha modificado el buffer
Conceptos básicos
Se quiere crear con vi un fichero de texto nuevo, al cual se denominará leccionl:
pinar2.csic.es> vi leccion1 (invocación de vi para crear leccion1)
Esto causa la aparición de la siguiente pantalla:
_
"
"
"
23
"
"
"
"
´´leccion1´´ [New file]
en donde _ designa al cursor, es decir, la posición en la pantalla en la que aparecerá el próximo carácter
tecleado por el usuario. Debe notarse que las órdenes descritas a continuación, son órdenes de vi, ya que este
programa está ahora en control, y no en la shell. Ahora se teclea: a (insertar texto después del cursor)
Esto es una prueba <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
24
inmediatamente a continuación.
Entrada de texto
La operación de entrada de programas y textos en el ordenador es básica. Cuando se comienza con una sesión
de vi, el texto que se introduce por teclado se almacena temporalmente en la memoria principal del ordenador;
al terminar la sesión con vi, el programa o texto se almacena permanentemente en el disco.
pinar2.csic.es> vi leccion2 (invocación de vi para crear leccion2)
Similarmente a como se ha creado lección1, aparecerá una pantalla inicial, se le teclea el comando a para
añadir texto.
Esta es la primera lonea <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
25
Esta es la segunda lonea
...
Esta es la decime lonea
est
"
"
"
´´leccion2´´
dd (borrar la línea donde está el cursor)
Esta es la primera lonea
Esta es la segunda lonea
...
Esta es la decime lonea
"
"
"
"
´´leccion2´´
:1,$s/Esta/esta/<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
"
"
"
26
"
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
27
continuación
esta es la primera linea
esta es la segunda linea
...
esta es la decime linea
"
"
"
"
10 substitutions
ra (reemplazar (r) por el carácter a, en la posición donde se encuentra el cursor)
esta es la primera linea
esta es la segunda linea
...
esta es la decima linea
"
"
"
"
10 substitutions
a (añadir texto después del cursor)
Se inserta el texto: y ultima (se tiene que tener en cuenta que delante de la y existe un espacio en blanco). La
pantalla quedaría así:
esta es la primera linea
esta es la segunda linea
...
esta es la decima y ultima_linea
28
"
"
"
"
10 substitutions
<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
...
29
esta es la decima y ultima linea
"
"
"
"
j o <!> ( pulsar una de estas teclas el número apropiado de veces para mover el cursor a la posición indicada a
continuación)
esta es la primera linea
esta es la segunda linea
esta es la tercera linea
esta es la cuarta linea
esta es la quinta linea
esta es la sexta linea
esta es la septima linea
esta es la octava linea
esta es la novena linea
esta es la decima y ultima linea
"
"
?se<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
30
esta es la octava linea
esta es la novena linea
esta es la decima y ultima linea
"
?se
n (buscar la próxima aparición de la cadena se hacia atrás)
esta es la primera linea
esta es la segunda linea
esta es la tercera linea
esta es la cuarta linea
esta es la quinta linea
esta es la sexta linea
esta es la septima linea
esta es la octava linea
esta es la novena linea
esta es la decima y ultima linea
"
?
Aunque la pantalla anterior está bastante clara, ya que sólo tiene al fondo el símbolo que indica la última
operación realizada, en otras ocasiones hay otros caracteres de órdenes de vi ajenos al texto mismo del
fichero. Cuando se desee ver la pantalla en limpio, borrando los caracteres ajenos al texto como ? se puede
teclear:
<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
31
esta es la decima y ultima linea
esta es la primera linea
esta es la segunda linea
...
esta es la septima linea
esta es la octava linea
esta es la novena linea
esta es la decima y ultima linea
"
10 lines
Debe notarse que el proceso de duplicación del fichero es la causa de que la primera línea en pantalla no sea la
primera línea del fichero. Si se quiere visualizar el fichero desde el principio, se hace lo siguiente:
1G (mover el cursor al principio del fichero)
esta es la primera linea
...
esta es la decima y ultima linea
esta es la primera linea
esta es la segunda linea
...
esta es la septima linea
esta es la octava linea
esta es la novena linea
esta es la decima y ultima linea
"
"
Si se quiere borrar las últimas diez líneas del fichero, primero se traslada el cursor a la línea 11:
<j> o <!> pulsar una de estas teclas el número apropiado de veces para mover el cursor a la posición indicada
32
a continuación
esta es la primera linea
...
esta es la decima y ultima linea
esta es la primera linea
esta es la segunda linea
...
esta es la septima linea
esta es la octava linea
esta es la novena linea
esta es la decima y ultima linea
"
"
10dd (borrar 10 líneas a partir de la del cursor)
esta es la primera linea
esta es la segunda linea
esta es la tercera linea
esta es la cuarta linea
esta es la quinta linea
esta es la sexta linea
esta es la septima linea
esta es la octava linea
esta es la novena linea
esta es la decima y ultima linea
"
10 lines deleted
33
Para copiar desde la línea 3 a la 5 (incluidas ambas), y colocar la copia después de la línea 1, se hace lo
siguiente:
:3,5t1<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
34
esta es la decima y ultima linea
"
3 lines
Ahora se borran las tres líneas a partir de la del cursor:
3dd
esta es la primera linea
esta es la segunda linea
esta es la tercera linea
esta es la cuarta linea
esta es la quinta linea
esta es la sexta linea
esta es la septima linea
esta es la octava linea
esta es la novena linea
esta es la decima y ultima linea
"
3 lines deleted
El movimiento (no la copia) de bloques se hace de la siguiente manera:
:5,7m2<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
35
esta es la octava linea
esta es la novena linea
esta es la decima y ultima linea
"
3 lines
Para volver a dejar el fichero en la forma original, se hace lo siguiente:
:3,5m7<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
...
36
esta es la sexta linea
esta es la octava linea
esta es la novena linea
esta es la decima y ultima linea
"
3 substitutions
Se puede comprobar que en cada línea, sólo ha sido sustituida la primera aparición de la cadena r. A
continuación se trata una orden de vi de gran importancia práctica, la orden para deshacer (`undo') el último
cambio hecho. Si se quiere cancelar la última modificación hecha en el fichero, se hará lo siguiente:
u (anular el último cambio realizado)
Esto hace que se recupere la penúltima pantalla.
Para sustituir todas las apariciones de la cadena r por la cadena R, se utiliza la siguiente orden:
:1,$s/r/R/g<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
37
comandos y procesos shell. Para lograrlo, en cualquier momento de la sesión de vi se puede teclear:
:!
y a continuación introducir comandos de UNIX. Por ejemplo:
:!ls<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:
38
bin Directorio donde se almacenarán los ejecutables de Pine y Pico una vez compilados los ficheros fuentes.
build Shell script para compilar los fuentes de Pine y Pico
doc Directorio donde se almacena la documentación y las notas técnicas.
pico Ficheros fuentes de Pico
pine Ficheros fuentes de Pine
La sintaxis de pico es la siguiente:
pico [+n [−nn [−t [−v [−w [−z [fichero
los argumentos entre corchetes indican que son opcionales.
Opciones:
+n Pico empieza a editar con el cursor localizado en la línea n del fichero.
−nn Cheque el correo cada n segundos para detectar si ha llegado un nuevo
mensaje. Por ejemplo, −n60 indica que pico chequee el correo cada minuto.
−t Activa el modo tool utilizado cuando pico va a ser utilizado
conjuntamente con otras herramientas como Elm, Pnews, etc.
−v Visualiza solamente el fichero no permitiendo la modificación.
−w Desactiva el cortado de palabras por lo que permite editar líneas muy
largas.
−z Permite utilizar <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.
39
El editor tiene cinco características básicas:
• Alineación de parágrafos.− Actúa sobre el parágrafo donde está el cursor y si este se encuentra en la
línea en blanco de separación, sobre el parágrafo posterior. Los parágrafos están delimitados por
líneas en blanco o por líneas que comienzan por una tabulación o un espacio en blanco. Para alinear
se ejecuta el comando <Ctrl−J>. Para deshacer la última alineación se ejecuta <Ctrl−U>.
40
• Búsqueda de caracteres sin discriminar si son mayúsculas o minúsculas. Los últimos caracteres
buscados se convierten, por omisión, en la cadena a encontrar en una nueva búsqueda. La búsqueda se
realiza con <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.
41
CAPITULO 5
COMANDOS UNIX
En esta unidad, se tratará los comandos básicos del sistema UNIX. Se mostrarán las opciones más importantes
42
de cada comando, en algunas ocasiones se estudiaran todas, en otras sólo las más utilizadas.
Prácticamente todas las opciones de un comando pueden combinarse entre sí; se avisará de todas aquellas que
sean incompatibles.
La sintaxis de cada comando irá seguida de la descripción de las funciones que realiza y de una lista de
opciones, a continuación se mostraran algunos ejemplos.
Las convenciones usadas en esta unidad son las siguientes:
1/ El formato de los comandos se pondrá a inicio de cada comando y en negrita.
2/ Todos los argumentos y opciones mostrados en cursiva, son partes que serán sustituidas por valores
introducidos por el usuario.
3/ Todos los argumentos encerrados entre corchetes son opcionales.
A continuación se muestra un esquema general del aspecto que presentara cada comando:
comando opciones expresiones ficheros
Descripción:
Opciones:
Ejemplos:
logname
Descripción:
Visualiza el contenido de la variable del sistema $LOGNAME (en esta variable se almacena el nombre del
usuario que accede al sistema).
Opciones:
No tiene opciones.
Ejemplos:
pinar2.csic.es> logname
curso01
Se visualiza el nombre del usuario (login) que accedió al sistema, en este caso curso01.
uname [opciones]
Descripción:
Declara o establece el nombre de identificación único de la máquina.
43
Opciones:
−m Tipo de CPU de la máquina.
−n Nombre del nodo.
−r Release del Sistema Operativo.
−s Nombre del Sistema.
−v Versión del Sistema Operativo.
−a Muestra toda la información anterior.
−S nombre
Cambia el nombre del nodo a nombre. Esta opción solo la puede utilizar el superusuario. No puede llevar
ninguna otra opción.
Por omisión muestra la versión del Sistema Operativo.
Ejemplos:
pinar2.csic.es> uname −a
OSF1 pinar2.csic.es V3.2 214 alpha
Al indicar la opción −a nos facilita toda la información, en primer lugar el del Sistema, después el nombre del
nodo, a continuación la Release del Sistema seguido de la versión, y por último el tipo de procesador de la
máquina.
passwd
Descripción:
Crea o cambia la palabra clave (password) asociada a un usuario. Sólo el propio usuario y el superusuario la
pueden cambiar.
Se puede cambiar la palabra clave cada vez que se desee.
La nueva password debe tener las siguientes características: Tendrá al menos 6 caracteres, sólo los 8 primeros
son significativos, al menos 2 caracteres serán alfabéticos, y como mínimo uno será numérico o especial.
Opciones:
No tiene opciones
Ejemplos:
pinar2.csic.es> passwd
passwd: Changing password for usuario
44
Old password:
New password:
Re−enter new password:
pwd
Descripción:
Visualiza el PATH completo del directorio de trabajo.
Opciones:
No tiene opciones.
Ejemplos:
pinar2.csic.es> pwd
/disco_1/cti/curso01/dir1
Nos indica el lugar concreto en el que estamos situados (directorio de trabajo)
dentro del sistema de ficheros.
ls [opciones] [nombre]
Descripción:
Lista el contenido del directorio actual o del directorio especificado en nombre, y proporciona información
sobre sus ficheros, nombre también puede ser un fichero, en ese caso proporciona información sobre ese
fichero. Sigue un orden alfabético, pero antepone los ficheros ocultos (aquellos cuyo primer carácter es `.') y
aquellos que empiecen por mayúscula.
Opciones:
−C Lista ordenada por columnas y clasificada en sentido vertical.
−F Coloca un slash `/' antes de cada nombre de fichero si este es un directorio, y antepone un asterisco `*' si es
un fichero ejecutable (tiene permisos de ejecución).
−R Produce un listado recursivo de todos los subdirectorios.
−a Lista todos los ficheros incluidos los ocultos.
−b Imprime los caracteres no gráficos en formato octal.
−c Lista ordenada por la fecha de última modificación del inode.
−d nombre
45
Visualiza nombre, sólo si nombre es un directorio. No lista el contenido del directorio.
−f Lista ordenada por fecha de creación del fichero.
−i Imprime el número de enlaces(links).
−l Imprime un listado largo y detallado. La salida de esta opción contiene los permisos de acceso, número de
enlaces, propietario, grupo, tamaño en bytes o numero de dispositivo si se trata de un fichero especial, y fecha
de la última modificación.
−m Listado en líneas, cada fichero va separado del siguiente por una coma.
−q Sustituye los caracteres no gráficos de un fichero por ? .
−r Invierte el orden (alfabético) de salida.
−s Imprime el tamaño en bloques de los ficheros.
−t Lista ordenada por fecha de última modificación del fichero.
−u Lista ordenada por fecha de último acceso al fichero.
−x Lista ordenada por columnas y clasificada en sentido horizontal.
Ejemplos:
pinar2.csic.es> ls
background.bin fich_1 fich_8
background.f fich_2 fichero_curso
background.sal fich_234 lsdir
bin fich_3 metacaracteres
capitulo_6 fich_4 novale
comandos_importantes.man fich_5 pantalla
comandos_impresora.man fich_6 tar
crear_ficheros.csh fich_7 trata_args
Si no se especifican opciones, fichero o directorios en los argumentos, entonces se listan los ficheros del
directorio en curso, que aparecerán en orden alfabético.
pinar2.csic.es> ls −s
total 302
32 background.bin 1 fich_4
46
1 background.f 1 fich_5
1 background.sal 1 fich_6
1 bin 1 fich_7
1 capitulo_6 1 fich_8
224 comandos_importantes.man 1 fichero_curso
18 comandos_impresora.man 1 lsdir
1 crear_ficheros.csh 1 metacaracteres
1 fich_1 5 novale
1 fich_2 4 pantalla
1 fich_234 1 tar
1 fich_3 1 trata_args
Este comando lista, el tamaño de los ficheros en bloques (cada bloque 512 k). La primera línea nos da el total
de ficheros del directorio, incluidos los ocultos , a continuación nos muestra en la primera columna el número
de bloques que ocupa, y en la segunda el nombre del fichero.
pinar2.csic.es> ls −la
total 313
drwxr−x−−x 6 curso00 users 1024 Sep 18 08:25 .
drwxr−xr−x 29 root users 512 Sep 5 10:18 ..
−rwxr−xr−x 1 curso00 users 1499 Sep 5 10:01 .cshrc
−rwxr−xr−x 1 curso00 users 1639 Sep 5 10:01 .login
−rwxr−xr−x 1 curso00 users 1580 Sep 5 10:01 .profile
−rw−−−−−−− 1 curso00 users 2624 Sep 14 20:33 .sh_history
−rwxr−xr−x 1 curso00 users 32768 Sep 12 16:40 background.bin
−rw−r−−r−− 1 curso00 users 472 Sep 12 16:40 background.f
−rw−r−−r−− 1 curso00 users 75 Sep 13 19:32 background.sal
drwxr−xr−x 2 curso00 users 512 Jul 7 1994 bin
drwxr−xr−x 2 curso00 users 512 Sep 12 14:38 capitulo_6
47
−rw−r−−r−− 1 curso00 users 220343 Sep 5 10:01 comandos_importantes.man
−rw−r−−r−− 1 curso00 users 17749 Sep 5 10:01 comandos_impresora.man
−rw−r−−r−− 1 curso00 users 678 Sep 5 10:01 crear_ficheros.csh
−rw−r−−r−− 1 curso00 users 169 Sep 12 16:42 fich_1
−rw−r−−r−− 1 curso00 users 169 Sep 12 16:42 fich_2
−rw−r−−r−− 1 curso00 users 507 Sep 12 16:52 fich_234
−rw−r−−r−− 1 curso00 users 169 Sep 12 16:42 fich_3
−rw−r−−r−− 1 curso00 users 169 Sep 12 16:42 fich_4
−rw−r−−r−− 1 curso00 users 169 Sep 12 16:42 fich_5
−rw−r−−r−− 1 curso00 users 169 Sep 12 16:43 fich_6
−rw−r−−r−− 1 curso00 users 169 Sep 12 16:43 fich_7
−rw−r−−r−− 1 curso00 users 266 Sep 12 16:43 fich_8
−rw−r−−r−− 1 curso00 users 168 Sep 5 10:01 fichero_curso
−rwxr−xr−x 1 curso00 users 91 Sep 13 19:27 lsdir
drwxr−xr−x 2 curso00 users 512 Sep 12 16:57 metacaracteres
−rw−r−−r−− 1 curso00 users 5071 Sep 14 20:32 novale
−rw−r−−r−− 1 curso00 users 3872 Sep 12 17:14 pantalla
drwxr−xr−x 2 curso00 users 512 Sep 11 14:15 tar
−rw−r−−r−− 1 curso00 users 128 Sep 15 10:16 trata_args
Este es un ejemplo típico de la salida de la opción −l, es muy importante comprenderla bien, ya que, para
emplear el sistema UNIX, se deben acceder a muchos ficheros diferentes. La salida de la opción −l es la única
manera de descubrir la información clave de cada fichero. El primer campo del formato detallado es el campo
de modo. Comprende diez caracteres, el primer carácter indica el tipo de fichero, y los siguientes nueve
caracteres indican los privilegios de acceso al fichero.
−rw−r−−r−−
El código para el tipo de fichero es el siguiente:
Código Significado
− Fichero convencional
48
d Fichero de directorio
c Fichero especial de caracteres
b Fichero especial de bloques
l Enlace simbólico
s Socket
Si los privilegios de acceso a un fichero son los siguientes:
−rwxrwxr−x
indican que: es un fichero convencional debido al primer carácter(−), que tienen permiso de lectura, escritura
y ejecución (rwx) tanto el propietario como el grupo, y que el público tiene tan solo permiso de lectura y
ejecución (r−x).
En el capítulo 2, en el apartado Tipos de ficheros, Modos de acceso y Protección, se estudió con detalle tanto
las operaciones de lectura, escritura y ejecución como los privilegios de acceso.
El segundo campo indica el número de enlaces (links), el siguiente indica el propietario del fichero, a
continuación muestra el grupo al que pertenece el propietario del fichero, el siguiente campo indica el tamaño
del fichero en bytes, después muestra la fecha y hora de última modificación, y por último facilita el nombre
del fichero.
cat [opciones] ficheros
Descripción
Visualiza el contenido de uno o más ficheros. Se pueden concatenar varios ficheros y direccionarlos a otro
fichero mediante el operador >
Opciones:
−s Suprime el mensaje `cat: cannot open fichero', que se produce cuando se intenta visualizar un fichero que
no existe.
−v Imprime los caracteres no gráficos que pueda contener un fichero (excepto tabuladores, nueva línea y salto
de página).
−e Imprime el carácter `$ ' antes de una nueva línea (esta opción sólo se puede utilizar junto con −v).
−t Imprime los caracteres Ctrl−i en lugar de los tabuladores (esta opción sólo se puede utilizar junto con −v).
Ejemplos:
pinar2.csic.es> cat saludo
Buenos dias
Existe un fichero llamado saludo, al ejecutar el comando se visualiza su contenido.
49
pinar2.csic.es> cat nombre
Antonio
pinar2.csic.es> cat saludo nombre > ejemplo
pinar2.csic.es> cat ejemplo
Buenos dias
Antonio
Existe un fichero llamado saludo, existe otro fichero llamado nombre; se combinan y se redirecciona su salida
a otro fichero llamado ejemplo; por último se visualiza el contenido de ejemplo.
cd [directorio]
Descripción:
Cambia el directorio de trabajo a directorio. Si no se especifica directorio, se accederá al directorio HOME
(directorio de inicio de sesión). También se puede utilizar como argumento .. , en ese caso se accederá al
directorio inmediatamente superior (directorio padre).
Opciones:
No tiene opciones.
Ejemplos:
pinar2.csic.es> pwd
/
pinar2.csic.es> cd /disco_1/cti/curso01
pinar2.csic.es> pwd
/disco_1/cti/curso01
El directorio de trabajo es /(root), al ejecutar el comando, cambia al directorio /disco_1/cti/curso01.
pinar2.csic.es> cd /disco_1/cti/curso01
pinar2.csic.es> pwd
/disco_1/cti /curso01
pinar2.csic.es> cd ..
/disco_1/cti
mkdir [opción] directorio(s)
50
Descripción:
Crea uno o más directorios. El usuario debe tener permiso de escritura para poder crear un directorio.
Opciones:
−m permisos
Define los permisos de lectura, escritura y ejecución del directorio.
Ejemplos:
pinar2.csic.es> mkdir docs graf
Al ejecutar el comando, se crean dos nuevos directorios llamados docs y graf, que estarán situados en un nivel
inferior (en el árbol de directorios) que el directorio desde el cual fueron creados.
pinar2.csic.es> mkdir −m 444 test
Crea el directorio test con permiso de lectura para el propietario, grupo y otros usuarios.
rmdir [opción] directorio(s)
Descripción:
Borra uno o más directorios. Es necesario que los directorios estén vacíos, y serán borrados desde el
directorio inmediatamente superior.
Opciones:
−p Borra todos los directorios de un nombre de trayectoria
Ejemplos:
pinar2.csic.es> rmdir docs graf
Al ejecutar este comando, los directorios docs y graf desaparecen del árbol de directorios.
pinar2.csic.es> rmdir −p a/b/c
Borra todos los directorios en el nombre de camino a/b/c. Los directorios tiene que estar vacios.
rm [opciones] fichero(s)
Descripción:
Borra uno o más ficheros. Para ejecutar este comando es necesario tener permiso de escritura en el directorio
que contiene el fichero, en cambio no hace falta tener permisos sobre el fichero que se desea borrar. Si se
intenta borrar un fichero que no tiene permiso de escritura, pedirá confirmación.
Opciones:
51
−i Pide confirmación para el borrado del fichero.
−f Fuerza el borrado sin pedir confirmación.
−r Borra todos los ficheros del directorio especificado incluyendo los subdirectorios, el directorio también
será borrado.
Ejemplos:
pinar2.csic.es> rm fich_temp
El fichero fich_temp desaparecerá del directorio de trabajo.
pinar2.csic.es> rm fractal.f
rm: fractal.f: 444 mode y/n
Se intenta borrar el fichero fractal.f que tiene un modo (o máscara) r−r−r− (444) que no permite escribir
sobre él, el sistema advierte de esta circunstancia, y pide confirmación para borrarlo, pulsar y para borrarlo, o
n para conservarlo.
pinar2.csic.es> rm −i menu01.c
menu01.c: ? y/n
Al ejecutar este comando, nos pide confirmación para borrarlo, pulsar y para borrarlo, o n para conservarlo.
pinar2.csic.es> rm −r /disco_1/cti/curso01/docs
Al ejecutar este comando, se borraría el contenido del directorio docs, si docs tuviera algún subdirectorio,
borraría su contenido y el propio subdirectorio, y así sucesivamente; el directorio docs también será borrado.
cp [opciones] fichero_fuente fichero_destino
cp [opciones] fichero(s) directorio_destino
Descripción:
Hace una copia del contenido de fichero_fuente en fichero_destino en el directorio de trabajo, sin destruir el
contenido de fichero_fuente. Copia el contenido de uno o varios ficheros en el directorio_destino
especificado, los ficheros copiados se llamarán igual. Si el fichero(s) destino existe, su contenido será
reemplazado.
Opciones:
−i Si el fichero(s)_destino existe, pide confirmación para reemplazarlo.
−r Permite que se copie un directorio fuente y todos sus subdirectorios en un directorio de destino.
−p Conserva la fecha del último acceso, modificación, permisos e identificación de usuario y grupo; del
fichero_fuente.
52
Ejemplos:
pinar2.csic.es> cp oldfile newfile
Al ejecutar este comando, se hace una copia del contenido oldfile en el fichero newfile.
pinar2.csic.es> cp fich_1 fich_2 dir_1
Al ejecutar este comando, se copia el contenido de los ficheros fich_1 y fich_2 en el directorio /dir_1, el
nombre de los nuevos ficheros será el mismo que el de los ficheros origen.
pinar2.csic.es> cp −p dir_1/* dir_2
Copia todos los ficheros de dir_1 en dir_2 conservando la fecha de modificación.
pinar2.csic.es> cp −r dir_1/* dir_2
La jerarquía de ficheros que cuelgue de dir_1 se copia en dir_2.
mv [opciones] fichero_fuente fichero_destino
mv [opciones] fichero(s) directorio_destino
Descripción:
Mueve uno o varios ficheros al directorio especificado, los ficheros destino se llamarán igual. Cambia el
nombre de fichero_fuente a fichero_destino en el directorio de trabajo. Si fichero_destino o los ficheros
destino existen, serán reemplazados; si existen y no tienen permiso de escritura, se pediráhhh
confirmación
Opciones:
−f Fuerza el movimiento o cambio de nombre del fichero sin pedir confirmación.
−i Si el fichero_destino existe, pide confirmación para reemplazarlo.
Ejemplos:
pinar2.csic.es> mv fich_1 fich_01
Al ejecutar este comando, se cambia de nombre al fichero fich_1 pasandose a llamar fich_01 (fich_1
desaparecerá del directorio de trabajo).
pinar2.csic.es> mv fich_1 fich_2
fich_2: 444 mode y/n
Se intenta cambiar de nombre a fich_1 y llamarle fich_2, este último fichero existe y tiene un modo (o
máscara ) r−r−r− (444) que no permite escribir sobre él, al ejecutar el comando, el sistema advierte de esta
circunstancia y pide confirmación, pulsar y para renombrarlo, o n para conservarlo tal como estaba.
53
pinar2.csic.es> mv fich_3 fich_4 dir_2
Al ejecutar este comando, se mueven los ficheros fich_3 y fich_4 del directorio de trabajo al directorio dir_2
(fich_3 y fich_4 desaparecerán del directorio de trabajo).ln [opciones] fichero_fuente fichero_destino
ln [opciones] fichero(s) directorio_destino
Descripción:
Crea un enlace o vinculo (link) entre fichero_fuente y fichero_destino en el directorio de trabajo, también
puede crear enlaces entre uno o más ficheros en el directorio_destino especificado. Crear un enlace consiste
en hacer que un mismo fichero aparezca bajo el mismo o diferentes nombres, en diferentes lugares del árbol
de directorios. No es una copia ya que si se modifica uno, el resto quedan automáticamente modificados. Si
fichero_destino o los ficheros destino existen serán reemplazados; si existen y no tienen permiso de escritura,
se pedirá confirmación.
Existen dos tipos de enlaces: hard y symbolico. La diferencia radica en que los enlaces hard, opción por
omisión, son un reflejo del fichero original y ocupan espacio en el disco. Los enlaces simbólicos no ocupan
espacio en disco ya que son ficheros o directorios que apuntan al fichero o directorio original . En este caso,
hay que hacer notar que pueden hacerse enlaces a directorios.
Opciones:
−f Fuerza la creación del enlace sin pedir confirmación.
−s Crea un link simbólico
Ejemplos:
pinar2.csic.es> ln fich_5 fich_link
Al ejecutar el comando se crea un link de fich_5 llamado fich_link , de modo que un mismo fichero aparece
bajo dos nombres en el directorio de trabajo. Si se modifica cualquiera de los dos, por ejemplo fich_link, luego
se puede acceder a fich_5 mediante un editor (si fuera un fichero de texto) y se podría comprobar que su
contenido también fue modificado.
pinar2.csic.es> ln −s fich_3 fich_4 dir_1
Se crearán enlaces simbólicos de los ficheros fich_3 y fich_4 en el directorio dir_1 , los links creados tendrán
el mismo nombre.
chmod modo fichero(s)
Descripción:
Cambia el modo de acceso de uno o mas ficheros (pueden ser convencionales o un directorio). Sólo el
propietario del fichero o el superusuario pueden cambiar el modo.
El nuevo modo (o máscara) contiene tres partes: quién, operador y permiso, los caracteres que definen estas
tres partes son los siguientes:
Quién
54
u Usuario (propietario)
g Grupo
o Otros
a Todos (propietario,grupo,otros)
Operador
+ Añadir permiso
− Quitar permiso
= Asignar permiso
Permisos
r Lectura
w Escritura
x Ejecución
u Permisos en curso del usuario
g Permisos en curso del grupo
o Permisos en curso de otros
En el modo se indicará en primer lugar a quién (propietario, grupo, otros) se va cambiar los permisos, después
se indica (mediante el operador) si se añade, retira o asigna un permiso, y por último qué permiso será
añadido, retirado o asignado.
También se puede especificar el modo mediante una secuencia de tres dígitos. El primer dígito representa los
permisos para el usuario, el segundo para el grupo y el tercero para otros; el valor de cada uno de ellos se
puede obtener de la siguiente tabla:
Permiso Valor
Escritura 4
Lectura 2
Ejecución 1
Ninguno 0
Cada dígito se obtiene de la suma de los valores de los permisos que se quieren asignar.
Opciones:
55
No tiene opciones.
Ejemplos:
pinar2.csic.es> ls −l act_ctas.c
−rwxrwxr−− 1 jose proyectos 21548 Sep 12 12:46 act_ctas.c
pinar2.csic.es> chmod g −x act_ctas.c
pinar2.csic.es> ls −l act_ctas.c
−rwxrw−r−− 1 jose proyectos 21548 Sep 12 12:46 act_ctas.c
Se tiene un fichero llamado fich_8 que tiene el siguiente modo rwxrwxr−−, la ejecución de este comando hace
que se retire el permiso de ejecución (−x) al grupo (g). El nuevo modo del fichero será rwxrw−r−−.
pinar2.csic.es> ls −l lect_grf.4gl
−rwxr−xr−x 1 maria_d gestion 34912 Jan 28 17:09 lect_grf.4gl
pinar2.csic.es> chmod u=rw, go=r lect_grf.4gl
pinar2.csic.es> ls −l lect_grf.4gl
−rw−r−−r−− 1 maria_d gestion 34912 Jan 28 17:09 lect_grf.4gl
Se tiene un fichero llamado fich_8 que tiene el siguiente modo (o máscara) rwxr−xr−x, la ejecución de este
comando hace que se asigne (=) al usuario (u) los permisos de lectura y escritura (rw), y que se asigne (=) el
permiso de lectura (r) al grupo y a otros (go). El nuevo modo del fichero será rw−r−−r−−.
pinar2.csic.es> ls −l doc001.man
−rwxr−x−−x 1 eva admon 90731 Dec 17 18:32 doc001.man
pinar2.csic.es> chmod o=g doc001.man
pinar2.csic.es> ls −l doc001.man
−rwxr−xr−x 1 eva admon 90731 Dec 17 18:32 doc001.man
Se tiene un fichero llamado fich_8 que tiene el siguiente modo rwxr−x−x, la ejecución de este comando hace
que se asigne (=) a otros (o), los mismo permisos que tenía el grupo (g). El nuevo modo del fichero será
rwxr−xr−x.
pinar2.csic.es> ls −l read.doc
−rw−r−−r−− 1 felix tecnico 39159 Feb 5 09:05 read.doc
pinar2.csic.es> chmod 755 read.doc
pinar2.csic.es> ls −l read.doc
56
−rwxr−xr−x 1 felix tecnico 39159 Feb 5 09:05 read.doc
Se tiene un fichero llamado fich_8 que tiene el siguiente modo rw−r−r−, la ejecución de este comando (755)
hace que el usuario tenga permisos de lectura, escritura y ejecución (lectura (4) + escritura (2) + ejecución (1)
= 7), el grupo de lectura y ejecución (lectura (4) + ejecución (1) = 5), y otros de lectura y ejecución (lectura
(4) + ejecución (1)=5). El nuevo modo del fichero será rwxr−xr−x.
pinar2.csic.es> ls −l ctrl_ctas.c tot_ctas.c
−rw−rw−−−x 1 jose_ant conslt 70286 Sep 21 11:36 ctrl_ctas.c
−rwxrw−r−− 1 jose_ant conslt 69041 Nov 13 08:16 tot_ctas.c
pinar2.csic.es> chmod 700 ctrl_ctas.c tot_ctas.c
pinar2.csic.es> ls −l ctrl_ctas.c tot_ctas.c
−rwx−−−−−− 1 jose_ant conslt 70286 Sep 21 11:36 ctrl_ctas.c
−rwx−−−−−− 1 jose_ant conslt 69041 Nov 13 08:16 tot_ctas.c
Se tienen dos ficheros llamados fich_8 fich_8 que tienen el siguiente modo rw−rw−x y rwxrw−r−
respectivamente, la ejecución de este comando (700) provoca que los dos ficheros tengan permisos de lectura,
escritura y ejecución para el usuario (lectura (4) + escritura (2) + ejecución (1) = 7), y ningún permiso para
grupo y otros (la ausencia de permisos tiene valor 0). El nuevo modo de ambos ficheros será rwx−−−−−−.
chown [opción] nuevo_propietario[.grupo] fichero(s)
Descripción:
Cambia la propiedad de ficheros o directorios a un nuevo propietario. El nuevo propietario podrá ser cualquier
login o número de identificación de usuario que esté dado de alta en el sistema.
Opciones:
−R Desciende cambiando la propiedad por toda la jerarquía de ficheros y subdirectorios que cuelgan del
fichero directorio.
Ejemplos:
pinar2.csic.es> ls −l matar_procesos.sh
pinar2.csic.es> −rwxrx−r−x 1 curso23 users 37713 Dec 2 13:30 matar_procesos.sh
pinar2.csic.es> chown curso10 matar_procesos.sh
pinar2.csic.es> ls −l matar_procesos.sh
pinar2.csic.es> −rwxrx−r−x 1 curso10 users 37713 Dec 2 13:30 matar_procesos.sh
Se tiene un fichero llamado matar_procesos.sh cuyo propietario es el usuario curso23 la ejecución del
comando hace que este fichero pase a ser propiedad del usuario curso10.
57
chgrp [opción] nuevo_grupo ficheros(s)
Descripción:
Cambia la propiedad de ficheros o directorios a un nuevo grupo. El nuevo grupo podrá ser cualquier nombre o
número de grupo que esté dado de alta en el sistema. Los ficheros mantienen el mismo propietario.
Opciones:
−R Desciende cambiando la propiedad por toda la jerarquía de ficheros y subdirectorios que cuelgan del
fichero directorio.
Ejemplos:
pinar2.csic.es> ls −l matar_procesos.sh
pinar2.csic.es> −rwxrx−r−x 1 curso10 users 37713 Dec 2 13:30 matar_procesos.sh
pinar2.csic.es> chgrp proyecto matar_procesos.sh
pinar2.csic.es> ls −l matar_procesos.sh
pinar2.csic.es> −rwxrx−r−x 1 curso10 proyecto 37713 Dec 2 13:30 matar_procesos.sh
Se tiene un fichero llamado matar_procesos.sh que está asociado al grupo users, la ejecución del comando
hace que este fichero pase a estar asociado al grupo proyecto.
file [opción] ficheros(s)
Descripción:
Determina el tipo de datos que contiene un fichero(s).Si averigua que el fichero es ASCII trata de identificar
el lenguaje (en términos de programación) del fichero.
Opciones.−
−f fichero
Toma los nombres de los ficheros a examinar, del contenido de fichero.
Ejemplos:
pinar2.csic.es> file progl.c
progl.c: c program text
Se tiene un fichero llamado fich_8, la ejecución del comando nos indica que se trata de un programa escrito en
lenguaje c.
pinar2.csic.es> file −f datos
prog1.c: c program text
58
cprog: directory
new_pr.sh: comando text
doc01.man: ascii text
Se tiene un fichero llamado datos que contiene nombres de ficheros, la ejecución del comando indica que tipo
de datos contiene cada fichero cuyo nombre se encuentra reflejado en datos. Por cada línea muestra el nombre
de fichero y su contenido (programa c, directorio, fichero de comandos shell , fichero ASCII etc.).
more, page [opciones] [fichero(s)]
Descripción:
Pagina el contenido de uno o más ficheros. Después de cada pantalla aparece una línea de comando, para
visualizar la siguiente página pulsar RETURN; si se pulsa `h' aparece un menú de ayuda. Cuando se está
paginando más de un fichero, hace una pausa entre cada uno de ellos (indica antes el nombre del próximo
fichero). Este comando puede tornar sus argumentos de la entrada estándar.
Opciones:
−c Limpia la pantalla antes de paginar el contenido del fichero(s).
−e No hace pausa entre ficheros.
−número
Esta opción hace que cada página tenga un determinado número de líneas.
+número de línea
Empieza a paginar 2 líneas antes del número de línea.
+/patrón/
Empieza a paginar 2 líneas antes del patrón.
Ejemplos::
pinar2.csic.es> more fic_prueba
Esto es
una prueba
del comando
more
(EOF):
La ejecución del comando, pagina el contenido del fichero , este fichero fich_8 no ocupa una página entera,
59
por ello la línea de comando nos indica el fin del fichero, pulsando RETURN, aparece de nuevo el prompt del
shell.
tail [opciones] [fichero]
Descripción:
Visualiza las diez últimas líneas de un fichero.
Opciones:
+n Empieza a visualizar a partir de n líneas del principio del fichero.
−n Empieza a visualizar partir de n líneas del final del fichero.
Ejemplos.−
pinar2.csic.es> tail −2 fich_10
Esta es la penultima linea de fichero
Esta es la ultima linea del fichero
Se visualizan las dos últimas líneas del fichero fich_10 .
who [opciones]
Descripción:
Lista información acerca de los usuarios que están activos en el Sistema. Por defecto muestra el nombre del
usuario, la línea a la que está conectado y la hora a la que accedió al Sistema.
Opciones:
−s Es la opción por defecto.
−u Visualiza la siguiente información: nombre del usuario, línea a la que está conectado, hora a la que accedió
al sistema, horas y minutos
transcurridos desde la última actividad del usuario (un punto indica actividad en el último minuto), número de
identificación del proceso shen del usuario (PID), y por último un comentario (suele ser el número de placa y
puerto al que está conectado).
−T Visualiza el estado de todos los terminales. Un signo + indica que se puede escribir en ese terminal, un
signo − indicará que está protegido.
−b Indica la hora y fecha de la última carga del sistema.
who am i
Muestra en pantalla el login del usuario que esta activo en el terminal.
60
Ejemplos:
pinar2.csic.es> who
cntiteh ttyp1 Sep 18 07:58
curso00 ttyp2 Sep 18 08:21
curso00 ttyp3 Sep 18 08:21
immgv84 ttyp4 Sep 18 08:25
cntiteh 161.111.80. Sep 18 07:58
La ejecución de este comando, facilita información sobre todos los usuarios que están activos en el sistema en
el momento actual.
tty [opción]
Descripción:
Imprime el nombre de dispositivo al cual está asociado el terminal que se está utilizando (línea).
Opciones:
−l Imprime el número de la línea a la que se está conectado, y si es o no una línea síncrona.
Ejemplos:
pinar2.csic.es> tty
/dev/tty13
La ejecución de este comando visualiza el PATH completo del dispositivo al cual está asociado el terminal
que se está utilizando, en este caso /dev/tty13.
banner caracteres
Descripción:
Visualiza caracteres a gran tamaño.
Opciones:
No tiene opciones.
Ejemplos:
pinar2.csic.es> banner h
##
61
##
######
##
##
##
La ejecución del comando visualiza el argumento h en gran tamaño.
cal [opciones]
Descripción:
Imprime un calendario del mes actual. Se puede especificar cualquier mes de cualquier año.
Opciones:
1..12 Un dígito del 1 al 12 para especificar el mes.
1..9999
Un dígito del 1 al 9999 para especificar el año.
Ejemplos:
pinar2.csic.es> cal
September 1995
Sun Mon Tue Wed Thu Fri Sat
12
3456789
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
calendar [−]
Descripción:
Este comando busca un fichero llamado calendar que debe encontrarse en el directorio HOME, si el fichero
existe visualizará aquellas líneas de dicho fichero donde encuentre la fecha del día en curso. La fecha deberá
tener alguno de estos formatos:
62
Dec.7
12/7
December 7
El fichero calendar puede crearse con un editor, la fecha puede ir en cualquier parte de la línea (al principio, al
final, etc.). Se el día que se ejecuta el comando es viernes, sacará también las líneas con fecha del lunes
siguiente (lo mismo para sábado y domingo).
Opciones:
− El resultado de la búsqueda en el fichero calendar pantalla será enviado al buzón de correo del usuario, no a
la pantalla.
Ejemplos:
pinar2.csic.es>cat calendar
Reunion Proyecto A 01/25
jan 26 Reunion Proyecto B
Reunion Direccion, February 7 al las 17:00
pinar2.csic.es> calendar
Reunion Direccion, February 7 al las 17:00
Tenemos un fichero llamado calendar que hemos creado con un editor, y se han escrito varias líneas, cada
línea contiene una fecha y un mensaje. Se supone que hoy es 7 de Febrero, si se ejecuta el comando calendar,
se visualizan las líneas del fichero calendar que contienen la fecha de hoy.
find path condicion
Descripción:
Busca a partir de uno o más path, ficheros que cumplan la condición especificada. Se debe especificar al
menos un path y una condición.
Opciones:
No tiene opciones. Este comando utiliza como argumentos condiciones. Se puede utilizar una o varias
condiciones. Dos condiciones separadas por un espacio en blanco se relacionan por un `y' lógico. Dos
condiciones separadas por `−o' se relacionan por un `o' lógico. El carácter `!' precediendo a una condición,
será una negación lógica de dicha condición. También se permite agrupar condiciones utilizando paréntesis,(
); cada paréntesis irá precedido por el carácter `\'. A continuación se ofrece una lista de condiciones:
−name fichero
Busca un fichero llamado fichero.
63
−perm máscara de permisos
Busca ficheros que tengan la máscara de permisos, que se indica.
−type tipo de fichero
Busca ficheros de un determinado tipo, donde tipo de fichero puede ser uno de los siguientes: b para ficheros
especiales de bloque, c para ficheros especiales de caracteres, d para ficheros de directorio, f para ficheros
convencionales y l para links simbólicos.
−links n
Busca ficheros con n links(enlaces).
−user usuario
Busca aquellos ficheros que sean propiedad de usuario. El nombre del usuario se indica mediante su login o
su número de identificación.
−group grupo
Busca aquellos ficheros que estén asociados a un determinado grupo. El grupo se indica mediante su nombre
o su número de identificación.
−size n [c,k]
Busca ficheros cuyo tamaño sea de n bloques. Si se incluye `c', el tamaño será de n caracteres. Si se incluye k,
el tamaño será en kilobytes.
−atime n
Busca aquellos ficheros a los que se ha accedido por última vez hace n días.
−mtime n
Busca aquellos ficheros cuyo contenido se ha modificado hace n días.
−ctime n
Busca aquellos ficheros cuyo modo se ha cambiado hace n días.
−exec comando
Si la condición de búsqueda se cumple, se ejecuta el comando; la ejecución del comando afecta al fichero(s)
que está siendo evaluado. A continuación del comando separadas por un espacio en blanco se colocan dos
llaves `{}', que representarán el nombre del archivo que está siendo evaluado, a continuación de las llaves y
separado también por un espacio en blanco se coloca un `;' , precedido por el carácter `\'.
−ok comando
Funciona igual que −exec y tiene su mismo formato, se diferencian en que −ok pide confirmación antes de
ejecutar el comando.
64
−print
Imprime los PATH de los ficheros que son localizados.
−newer fichero
Busca aquellos ficheros cuyos datos han sido modificados después que fichero.
En aquellas condiciones que llevan un número n, se pueden establecer las siguientes convenciones: n será un
número entero que significa n exactamente, −n significará menor que n, +n significa mayor que n.
Ejemplos:
pinar2.csic.es> find /disco_1/cti/curso −name fich_2 −print
pinar2.csic.es> /disco_1/cti/curso/dir1/fich_2
En este ejemplo se le dice al comando find que busque en el directorio /disco_1/cti/curso02, un fichero
llamado fich2, y que imprima el PATH completo de dicho fichero. Dicho fichero es localizado y se imprime
su PATH.
pinar2.csic.es> pwd
pinar2.csic.es> /disco_1/cti/curso
pinar2.csic.es> find . −links +3 −print
/disco_1/cti/curso /menu.c
/disco_1/cti/curso /fuentes/script.sh
La ejecución de este comando, hace que se busque a partir del directorio de trabajo `.', aquellos ficheros que
tengan más de un link, y que se impriman sus PATH completos. En el directorio de trabajo, encuentra el
fichero menu.c, y en el subdirectorio fuentes, localiza el fichero script.sh. El comando find empieza la
búsqueda a partir del directorio de trabajo, y entra en todos los subdirectorios que encuentre.
pinar2.csic.es> find . −size +10 −exec ls {} \;
estadistica.txt
./docs/informe.doc
En este ejemplo el comando find busca a partir del directorio de trabajo, todos aquellos ficheros cuyo tamaño
supere los 10 bloques, y posteriormente ejecuta la orden de listarlos. Se puede observar el formato
característico de la condición exec (llaves, punto y coma).
grep [opciones] patrón [fichero(s)]
Descripción:
Busca un patrón en uno o más ficheros e imprime todas las líneas de dicho fichero que contengan el patrón. Si
no se especifica fichero, utiliza la entrada estándar.
65
Opciones:
−b Muestra antes de cada línea, el número del bloque donde se encuentra el patrón.
−c Imprime sólo el número total de líneas donde localiza el patrón.
−i Ignora la diferencia entre mayúsculas y minúsculas.
−l Imprime sólo el nombre de los ficheros donde localiza el patrón.
−n Imprime el número de línea del fichero donde aparece el patrón, así como la línea completa.
−s Suprime el mensaje de error, que se produce cuando el fichero no existe o no tiene permiso de lectura.
−v Imprime las líneas del fichero donde no aparece el patrón.
Ejemplos:
pinar2.csic.es> cat nombres
jose antonio
eugenia sana
dolores pascual
juan rebollar
jose manuel
pinar2.csic.es> grep jose nombres
jose antonio
jose manuel
pinar2.csic.es> grep jose antonio nombres
jose antonio
Se tiene un fichero llamado nombres, que contiene varias líneas con varios nombres, la ejecución del primer
comando busca el patrón jose en el fichero nombres, e imprime las líneas donde aparece, en este caso dos. La
ejecución del segundo comando, busca el patrón jose antonio (obsérvese que va encerrado entre comillas
debido a que el patrón lleva un espacio en blanco) en el fichero nombres, e imprime las líneas donde aparece,
en este caso una.
pinar2.csic.es> cat nombres
jose antonio
eugenia sanz
66
dolores pascual
juan rebollar
jose manuel
pinar2.csic.es> grep −n jose nombres
1:jose antonio
5:jose manuel
La ejecución de este comando, muestra las líneas del fichero nombres, donde aparece el patrón jose
precedidas por el número de la línea del fichero donde se encuentran.
pinar2.csic.es> cat nombres
jose antonio
eugenia sanz
dolores pascual
juan rebollar
jose manuel
pinar2.csic.es> grep −v jose nombres
eugenia sanz
dolores pascual
juan rebollar
La ejecución de este comando, muestra aquellas líneas del fichero nombres donde
no aparece el patrón jose.
lpstat [opciones]
Descripción:
Visualiza tanto el estado de los dispositivos de impresión, como de los trabajos que están en cola.
Opciones:
−t Visualiza un informe completo sobre el estado del sistema de impresión (existen opciones que visualizan
información parcial sobre el sistema de impresión).
Ejemplos:
67
pinar2.csic.es> lpstat −t
schedeler is running
system default detination: lp1
device for lp1 : /dev/tty01
lp1 accepting requests since Jan 15 15:11
printer lp1 now printing lp1−1059. enabled since Feb 1 08:52
lp1−1059 curso01 2612 Feb 13 13:41 n lp1
lp1−1060 curso02 1682 Feb 13 13:42 n lp1
La ejecución de este comando facilita la siguiente información: indica que el planificador está en ejecución,
nos dice la impresora por defecto (lp1), nos muestra el dispositivo para la impresora (/dev/tty0l), a
continuación indica la fecha de configuración del sistema de impresión, luego muestra que fichero se esta
imprimiendo en la actualidad (lpl−1059) y desde cuando el sistema de impresión se encuentra activado, por
último muestra los trabajos que están en cola de impresión (también muestra el que se está imprimiendo en
ese momento) así como su número de solicitud, usuario que lo solicita, número de proceso y fecha.
lpr [opciones] ficheros(s)
Descripción:
Envía un fichero a una cola para su posterior impresión.
Opciones:
−h Suprime la pagina cabecera del listado, que sirve para distinguir una salida impresa de otra.
−J nombre
Pone nombre en la página cabecera. Por omisión, imprime fichero.
−m Envía un correo cuando se termina la impresión.
−N número
Número máximo de páginas a imprimir. Por omisión, 100 páginas.
−O orientación
Selecciona la orientación en la impresoras que soporte dicha acción
Portrait! Paralela al borde más corto de la página.
Landscape! Paralela al borde más largo de la página.
−P impresora
68
Selecciona una impresora determinada
−r Borra el fichero cuando la impresión termina
−#número
Número de copias de fichero
Ejemplo:
pinar2.csic.es> lpr −#3 −Plp37 −h index.c cata.f
Imprime en la impresora lp37, 3 copias de los ficheros index.c y cata.f, suprimiendo la página de cabecera de
cada copia.
lpq [opciones]
Descripción:
Examina las colas de impresión.
Opciones:
−l Muestra información sobre cada uno de los ficheros que conforman la solicitud de impresión.
ID(s) Número de identificador de la solicitud de impresión.
−P impresora
Muestra las solicitudes de impresión existente en una cola de impresión determinada.
+número
Muestra la cola cada número de segundos hasta que esta se vacía.
usuario(s)
Solicitudes de impresión de un usuario(s) determinado.
Ejemplo:
pinar2.csic.es> lpq
Mon Sep 18 08:28:57 1995: Attempting to print dfA230pinar2.csic.es
Rank Pri Owner Job Files Total Size
active 0 curso00 230 novale 5071 bytes
pinar2.csic.es> lpq
Mon Sep 18 08:29:03 1995:
69
no entries
lprm [opciones]
Descripción:
Borra una o más solicitudes de una cola de impresión.
Opciones:
ID Número de identificador de la solicitud de impresión. Se visualiza con lp lpq o lpstat
−P impresora
Borra la solicitud de impresión existente en una cola de impresión determinada.
usuario
Solicitudes de impresión de un usuario determinado.
− Borra todas las solicitudes del usuario.
Ejemplo:
lprm −Plp0 13
Borra la solicitud de impresión número 13 de la cola lp0
lprm −Plp0 curso01
Borra las solicitudes de impresión del usuario curso01 acumuladas en la cola lp0
tee [opciones] ficheros(s)
Descripción:
Toma la entrada estándar y envía una copia a la salida estándar y otra copia a uno o más ficheros.
Normalmente toma su entrada de la salida de otro comando (utilizando un pipe), se suele utilizar en
programación shell.
Opciones:
−a No inicializa el fichero cuando se envía la copia a un fichero que existe (lo añade al final).
Ejemplos:
pinar2.csic.es> ls −l | tee fich _tmp
−rwxr−xr−x 1 curso05 users 49068 Feb 11 09:33 articulos.c
−rwxrwxrwx 1 curso05 users 69210 Feb 10 19:01 codigos.c
70
pinar2.csic.es> cat fich_tmp
−rwxr−xr−x 1 curso05 users 49068 Feb 11 09:33 articulos.c
−rwxrwxrwx 1 curso05 users 69210 Feb 10 19:01 codigos.c
La ejecución de este comando, hace que la salida del comando ls −l se visualice por pantalla (salida estándar)
y que se copie a su vez en el fichero fich_tmp.
pinar2.csic.es> cat fich_temp
Reunion Departamento Jueves 7 de Febrero : 2 horas.
Pruebas Viernes 8 de Febrero : 3 horas.
pinar2.csic.es> ls −l | tee −a fich −tmp
−rwxr−xr−x 1 curso05 users 49068 Feb 11 09:33 articulos.c
−rwxrwxrwx 1 curso05 users 69210 Feb 10 19:01 codigos.c
pinar2.csic.es> cat fich_tmp
Reunion Departamento Jueves 7 de Febrero : 2 horas.
Pruebas Viernes 8 de Febrero : 3 horas.
−rwxr−xr−x 1 curso05 users 49068 Feb 11 09:33 articulos.c
−rwxrwxrwx 1 curso05 users 69210 Feb 10 19:01 codigos.c
La ejecución de este comando, hace que la salida del comando ls −l se visualiza por pantalla, y que se copie a
su vez en el fichero fich_tmp, pero sin inicializarlo (lo copia al final del fichero).
od [opciones] [ficheros(s)]
Descripción:
Produce un volcado en formato octal de uno o más ficheros.
Opciones:
−b Visualiza bytes en formato octal.
−e Visualiza bytes en formato ASCII. Con esta opción los caracteres se visualizan y los caracteres de control
se imprimen en octal, excepto algunos caracteres estándar, que se representan de la siguiente manera:
Tecla de retroceso \b
Tabulador \t
Nueva línea \n
71
Retorno de carro \r
Nulo \O
alimentador de hojas \f
−d Visualiza palabras en formato decimal.
−o Visualiza palabras en formato octal (es la opción por defecto).
−x Visualiza palabras en formato hexadecimal.
Ejemplos:
pinar2.csic.es> cat prueba
Buenos dias
esto es una prueba.
pinar2.csic.es> od −c prueba
0000000 041165 062556 067563 020144 064541 071412 062563 072157
0000020 020145 071440 072556 060440 070162 072545 061141 027012
0000040
La ejecución de este comando provoca el volcado del fichero prueba por palabras en formato octal (es
equivalente a la opción −o).
pinar2.csic.es> cat prueba
Buenos dias
esto es una prueba.
pinar2.csic.es> od prueba
0000000 B u e n o s d i a s \n e s t o
0000020 e s u n a p r u e b a . \n
0000040
La ejecución de este comando provoca el volcado en bytes del fichero prueba en formato ASCII.
nl [opciones] [ficheros]
Descripción:
Numera las líneas de un fichero y envía la salida al terminal.
72
Opciones:
−in Incrementa la numeración de las líneas en n.
−vn Indica mediante n el valor inicial de la numeración de líneas.
−sc Separa el número de línea del texto mediante el carácter que se indique
en c.
Ejemplos:
pinar2.csic.es> cat prueba
Buenos dias
esto es una prueba
pinar2.csic.es> nl prueba
1 Buenos dias
2 esto es una prueba
La ejecución de este comando, numera las líneas del fichero prueba, y las muestra
por pantalla.
pinar2.csic.es> cat prueba
Buenos dias
esto es una prueba
pinar2.csic.es> nl −v10 prueba
10 Buenos dias
11 esto es una prueba
La ejecución de este comando, numera las líneas del fichero prueba, pero hace que dicha numeración empiece
a partir de 10.
wc [opciones] [ficheros (s)]
Descripción:
Cuenta el número de caracteres, palabras y líneas de uno o más fichero(s). Si no se indica fichero, leerá de la
entrada estándar.
Opciones:
73
−c Imprime sólo el número de caracteres del fichero.
−l Imprime sólo el número de líneas del fichero.
−w Imprime sólo el número de palabras del fichero.
Ejemplos:
pinar2.csic.es> cat prueba
Buenos dias
esto es una prueba.
pinar2.csic.es> wc prueba
2 6 32 prueba
En este ejemplo, el comando imprime el número total de líneas (2), de palabras
(6), y de caracteres (32) (incluye espacios en blanco y nueva línea) del fichero prueba.
pinar2.csic.es> who
curso01 tty23 Feb 11 11:45
curso02 tty15 Feb 11 10:13
curso03 tty13 Feb 11 09:23
curso04 tty17 Feb 11 12:27
curso05 tty12 Feb 11 13:11
curso06 tty07 Feb 11 08:37
pinar2.csic.es> who | wc −l
6
La salida del comando who, facilita información acerca de los usuarios que están conectados al sistema
(utiliza una línea para cada usuario). Si mediante un pipe, se conecta su salida a la entrada de wc, tendremos el
número de líneas de la salida de who, o lo que es lo mismo el número de usuarios que están conectados al
sistema, en este caso 6.
ps [opciones]
Descripción:
Visualiza información sobre el estado de los procesos.
Opciones:
74
−e Visualiza información básica acerca de todos los procesos (número de proceso, número de terminal
asociado al proceso, tiempo total de CPU que lleva consumido el proceso, y comando con sus opciones)
−f Genera un listado completo que incluye: usuario que ejecuta el proceso, número de proceso, número de
proceso padre, información sobre la planificación, hora de comienzo del proceso, número de terminal
asociado al proceso, tiempo total de CPU que lleva consumido el proceso, y comando con sus opciones. Debe
utilizarse junto con la opción −e.
−t terminales
Visualiza solo información acerca de los procesos asociados a los terminales indicados. Si se especifica más
de un terminal deberán ir separados por comas o espacios en blanco. Debe utilizarse junto con la opción −e.
−u usuarios
Visualiza solo información acerca de los procesos asociados a los usuarios indicados. Si se especifica más de
un usuario deberán ir separados por comas o espacios en blanco.
Ejemplos:
pinar2.csic.es> ps u
USER PID %CPU %MEM VSZ RSS TTY S STARTED TIME COMMAND
curso00 30476 95.0 0.1 2.92M 272K ttyp7 R 16:33:51 0:09.08 back.bin
curso00 5955 0.0 0.2 1.98M 488K ttyp7 S 16:10:23 0:01.64 −tcsh (tcsh)
La ejecución de este comando, facilita la siguiente información acerca de los procesos activos pertenecientes
al usuario: nombre de usuario(USER), número de proceso (PID), porcentaje de utilización de la cpu (%CPU)
y de la memoria real (%MEM), tamaño requerido para el proceso en la memoria real (RSS) y la virtual (VSZ),
terminal asociado al proceso(TTY), estado del proceso(S), hora de comienzo (STARTED), tiempo consumido
de CPU (TIME) y el comando que generó el proceso (COMMAND).
pinar2.csic.es> ps −ef
USER PID PPID %CPU STARTED TTY TIME COMMAND
root 0 0 0.0 Aug 30 ?? 03:28:49 [kernel idle]
root 1 0 0.0 Aug 30 ?? 1:19.12 /sbin/init −a
root 9 1 0.0 Aug 30 ?? 0:00.12 /sbin/kloadsrv −f
root 12 8519 0.0 Sep 07 ?? 0:00.07 xterm −display 134.2.73.
root 39 1 25.0 Aug 30 ?? 10:50:51 /sbin/update
root 136 1 0.0 Aug 30 ?? 0:12.35 /usr/sbin/syslogd
root 138 1 0.0 Aug 30 ?? 0:00.08 /usr/sbin/binlogd
75
root 190 1 0.0 Aug 30 ?? 0:58.94 /usr/sbin/routed
root 213 1 0.0 Aug 30 ?? 1:33.49 /usr/sbin/rwhod
root 267 1 0.0 Aug 30 ?? 0:00.28 /usr/sbin/portmap
root 269 1 0.0 Aug 30 ?? 0:00.46 /usr/sbin/mountd −i
root 271 1 0.0 Aug 30 ?? 0:00.02 /usr/sbin/nfsd 8
root 273 1 0.0 Aug 30 ?? 0:00.02 /usr/sbin/nfsiod 7
.....
curso00 12972 11084 0.0 08:21:10 ttyp2 0:00.39 −tcsh (tcsh)
root 9236 12397 0.0 08:30:05 ttyp3 0:00.05 ps −ef
curso00 12397 2760 0.0 08:21:41 ttyp3 0:01.15 −tcsh (tcsh)
La ejecución de este comando, facilita un listado completo sobre todos los procesos que están activos en el
sistema, dicho listado proporciona la siguiente información adicional: el número de identificador del proceso
padre (PPID).
nohup comando [argumentos]
Descripción:
Se utiliza para ejecutar un comando y sus argumentos (si los tuviera) y poder salir del sistema. Es inmune a
interrupciones. La diferencia entre este comando, o enviar a ejecución un comando en background, es que
todos aquellos procesos que se envíen en background, morirán si el usuario abandona el sistema; en cambio
aquellos comandos que se ejecuten mediante nohup no morirán si el usuario abandona el sistema, sino que
seguirán ejecutándose.
Opciones:
No tiene opciones.
Ejemplos:
pinar2.csic.es> nohup ls −l > fich_ls
La ejecución de este comando provoca que ls −l se ejecute incluso si salimos del sistema. Si el comando fuese
ejecutado sin redireccionar la salida y el usuario estuviese fuera del sistema, al no poderse dirigir la salida a la
pantalla, se crearía un fichero denominado nohup.out
kill [−señal] número de proceso
Descripción:
Finaliza (mata) un proceso. Un proceso sólo puede finalizarlo el propietario o el superusuario. Al comando
debe acompañarlo una señal y el número del proceso que se quiere finalizar; existen varias señales, pero se
76
suele utilizarse únicamente la señal −9, debido a que produce una finalización absoluta del proceso.
Opciones:
No tienen opciones.
Ejemplos:
pinar2.csic.es> ps u
USER PID %CPU %MEM VSZ RSS TTY S STARTED TIME COMMAND
curso00 30476 95.0 0.1 2.92M 272K ttyp7 R 16:33:51 0:09.08 back.bin
curso00 5955 0.0 0.2 1.98M 488K ttyp7 S 16:10:23 0:01.64 −tcsh (tcsh)
pinar2.csic.es> kill −9 30476
Se tiene un proceso en ejecución cuyo número es 30476, y por cualquier circunstancia se quiere detener su
ejecución; introduciendo el comando kill acompañado de la señal (−9) y del número de proceso (30476), se
finaliza dicho proceso.
nice [incremento] comando [argumentos]
Descripción:
Ejecuta un comando (y sus argumentos si los tuviera) con una prioridad de CPU más baja de lo normal. Esto
permite al sistema ejecutar otros comandos primero. El incremento (un número entre 1 y 19) cambia el nivel
de prioridad; el incremento más alto implica la prioridad más baja. Si no se especifica incremento, se toma por
defecto el 10.
Opciones:
No tiene opciones.
Ejemplos.−
pinar2.csic.es> nice −19 ps −ef
En este ejemplo el comando ps −ef se ejecuta con una prioridad de CPU 10 veces más baja de lo normal.
time comandos [argumentos]
Descripción:
Ejecuta el comando (y sus argumentos si los tuviera), e indica el tiempo que tarda en ejecutarse. Indica el
tiempo real (real) , que es el número de segundos que transcurren desde que se teclea el comando hasta que
vuelve a mostrarse el prompt de la shell. Visualiza el tiempo de usuario (user time) que es el tiempo que se
emplea en ejecutar el comando, y también indica el tiempo de sistema (system time), que es la cantidad de
segundos de CPU que consume el comando. La suma del tiempo de usuario y del tiempo de sistema no
coinciden con el tiempo real, porque este último incluye el tiempo que tarda en imprimirse la salida del
comando.
77
Opciones:
No tiene opciones.
Ejemplos
pinar2.csic.es> time ps −f
USER PID PPID %CPU STARTED TTY TIME COMMAND
curso00 4733 12972 0.0 08:26:51 ttyp2 0:01.74 vi n
curso00 12972 11084 0.0 08:21:10 ttyp2 0:00.39 −tcsh (tcsh)
curso00 12397 2760 0.0 08:21:41 ttyp3 0:01.18 −tcsh (tcsh)
0.012u 0.045s 0:00.05 100.0% 0+1k 0+5io 0pf+0w
La ejecución de este comando, produce primero la salida por pantalla del comando ps −f y después nos indica
el tiempo total (real) que transcurre desde que se teclea el comando y se pulsa <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
78
jorge
dolores
alvaro
magdalena
eva
maria
raquel
pinar2.csic.es> sort prueba
alvaro
dolores
eva
jorge
magdalena
maria
raquel
La ejecución de este comando, produce que el fichero prueba se visualice ordenado por pantalla.
pinar2.csic.es>cat prueba
jorge
dolores
alvaro
magdalena
eva
maria
raquel
pinar2.csic.es> sort −o fich_out prueba
pinar2.csic.es> cat fich_out
79
alvaro
dolores
eva
jorge
magdalena
maria
raquel
En este ejemplo se ordena el fichero prueba, pero en vez de producir la salida por pantalla, se envía la salida
al fichero fich_out.
cmp [opciones] fichero1 fichero2
Descripción:
Compara fichero1 con fichero2 y visualiza el byte y la línea donde difieren.
Opciones:
−l Su salida produce tres columnas. En la primera se refleja el número de byte donde difieren los dos ficheros,
en la segunda y tercera columna se visualiza la representación octal de los dos caracteres que difieren.
−s Devuelve el código de retorno de la ejecución del comando:
0 ! Los ficheros son iguales.
1 ! Los ficheros son diferentes.
2 ! Al menos uno de los ficheros no tiene permiso de acceso o existe un argumento invalido.
Ejemplos:
pinar2.csic.es> cat fic1
hola
pinar2.csic.es> cat fic2
adios
pinar2.csic.es> cmp fic1 fic2
fic1 fic2 differ: byte 1, line 1
En este ejemplo se comparan los ficheros fic1 y fic2, y la salida del comando indica que difieren en el carácter
1 de la línea 1.
80
date [+formato]
Descripción:
Visualiza el ida, la hora, el mes y el año, por omisión. Se puede cambiar el formato de salida del comando.
Opciones:
Cambia el formato de salida utilizando los siguientes descriptores de campo:
%m Mes del año
%d Día del mes
%y Los dos últimos dígitos del año
%j Día del año
%a Día de la semana (abreviado)
%h Mes del año (abreviado)
%D Fecha (mes/día/año)
%H Hora (0−23)
%M Minutos
%S Segundos
%T Hora (horas:minutos:segundos)
%r Hora (AM/PM)
%n Inserta una línea
%t Inserta un tabulador.
Si se quiere introducir un mensaje en el formato, se deberá encerrar entre comillas toda la expresión.
Ejemplos:
pinar2.csic.es> date
Mon Sep 11 12:05:07 MET DST 1995
La ejecución de este comando visualiza la fecha y hora actual.
pinar2.csic.es> date +Mes : %m%nDia : %d%nHora : %T
Mes : 09
81
Dia : 11
Hora : 12:30:00
La ejecución de este comando visualiza por pantalla el mes (%m), seguido de una nueva línea (%n), a
continuación el día (%d) seguido por una nueva línea y por último la hora completa (%T). Al llevar cadenas
de caracteres, el formato va encerrado entre comillas.
su [opciones] usuario
Descripción:
Permite convertirse en superusuario, siempre que se tenga permiso, o en cualquier otro usuario del sistema,
siempre que se conozca la palabra clave de acceso.
Opciones:
− Accede al nuevo usuario con todos sus privilegios(adquiere sus variables, se sitúa en el directorio home,
etc.).
Ejemplos:
pinar2:csic.es> su − curso02
password:
La ejecución de este comando hace que se acceda al usuario curso02 con todos sus privilegios. Para salir del
usuario curso02 y volver al inicial, se teclea exit o <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:
82
Sustituye un fichero comprimido (.Z) con una versión de dicho fichero pero con sus datos expandidos
Opciones:
−c Escribe sobre la salida estándar sin cambiar los ficheros.
−v Muestra el porcentaje de reducción alcanzado cuando se comprime el fichero.
Ejemplo:
pinar2.csic.es> uncompress −v fich_1
pinar2.csic.es> fich_1.Z: −− replaced with fich_1
tar [opciones] ficheros
Descripción:
Salva y restaura múltiples directorios y ficheros en unos solo. Usualmente se utiliza en cintas magnéticas. Para
transmitir datos por Internet, también se emplea este junto con el formato comprimido.
Opciones:
−c Crea un archivo donde se graban múltiples ficheros
−x Extrae del archivo los ficheros contenidos en él.
−v Muestre el nombre del fichero que se está tratando.
−f dispositivo
Redirige la entrada o salida estándar hacia un dispositivo específico. Si en dispositivo se pone un −, se toma
como entrada o salida estándar el terminal.
Ejemplos:
tar −c file1 file2
Graba file1 y file2 en un nuevo archivo sobre el dispositivo de cinta por omisión.
tar −xvf /dev/rmt0h ./dir1
Extrae toda le jerarquía de ficheros que contiene dir1 desde el dispositivo /dev/rmt0h
pinar2.csic.es> tar −cvf − fich_1 fich_2> fich.tar
pinar2.csic.es> fich_1
pinar2.csic.es> fich_2
pinar2.csic.es> mkdir dir_tar
83
pinar2.csic.es> mv fich.tar dir_tar
pinar2.csic.es> cd dir_tar
pinar2.csic.es> tar −xvf fich.tar
pinar2.csic.es> fich_1
pinar2.csic.es> fich_2
Se graban los ficheros fich_1 y fich_2 en formato tar en el archivo fic.tar, se crea el directorio dir_tar, se
mueve el fichero y se cambia a dicho directorio, y se extraen los ficheros .
man [opción] comando
Descripción:
Proporciona una descripción del comando seleccionado accediendo al manual de consulta del usuario
en−linea(online).
Opciones:
− Desactiva el pipe more por lo que la salida se mostrará de forma continua en vez de pantalla a pantalla.
Ejemplos:
pinar2.csic.es> man logname
logname(1) logname(1)
NAME
logname − Displays user login name
SYNOPSIS
logname
DESCRIPTION
The logname command writes to standard output the name you used to log into
the system.
RELATED INFORMATION
Commands: env(1)/printenv(1), login(1).
Functions: getlogin(2).
CAPITULO 6
84
PROGRAMACIÓN DE LA SHELL
Hasta ahora solo se había utilizado la shell como un interprete de comandos interactivos pero donde alcanza
su máxima potencia y utilidad es como lenguaje de programación. Para ello, además de los comandos que en
capítulos anteriores se han enunciado, contiene variables de entorno, instrucciones de control de secuencia,
operadores aritméticos y lógicos, etc.
El problema en la programación de una shell u otra radica en que unas variables existen en una y no en otras,
que existen pero su nombre varían, que los formatos de programación varían de una a otra, etc.
Vamos a exponer las variables, operadores e instrucciones más importantes de la csh y la ksh. Como la ksh
engloba a la sh, obtendremos un gran abanico de posibilidades que proporciona el sistema operativo Unix.
Las convenciones que vamos a seguir en este capitulo serán las siguientes:
1/ Las opciones comunes a los dos entornos, se indicaran explícitamente.
2/ Los ejemplos de la csh como de la ksh se pondrán con el tipo de fuente Arial pero para diferenciarlos, la
ksh se escribirán en cursiva.
Ejecución de un programa shell
Cualquier comando o secuencia de comandos que estén almacenados en un fichero texto es un programa shell
que se conoce como fichero de comandos, guión, procedimiento shell o shell script.
Existen tres formas de ejecución de un fichero de comandos:
1/ Utilizando la redirección de la entrada estándar que ya se ha visto en el capitulo 3. Dependiendo de que tipo
de shell se quiera utilizar, la ejecución sería:
sh < shell_script
csh < shell_script
ksh < shell_script
tcsh < shell_script
2/ Debido a que lo más común es que la shell lea los comandos desde un fichero, se ha incluido una
característica especial dentro del mismo. Si la shell se invoca con el nombre de un fichero como argumento,
entonces leerá los comandos desde este fichero por lo que no habrá que redireccionar la salida. La ejecución
seria:
sh shell_script
csh shell_script
ksh shell_script
tcsh shell_script
3/ Las dos formas anteriores pueden crear problemas con ciertos comandos. La forma correcta es hacer que el
85
fichero de comandos sea ejecutable. Los ficheros que crea un usuario tienen unos permisos que, por omisión,
no contemplan la ejecución. Si se trata de ejecutar el fichero, el sistema denegará dicha petición.
El comando para ver los permisos del fichero es
ls −l shell_script
Para hacerlo ejecutable
chmod +x shell_script
o
chmod 777 shell_script
Para ejecutar el procedimiento shell
shell_script
Se ejecuta el programa introduciendo tan solo el nombre como si fuese un comando del sistema.
Si este fichero de comandos se va a utilizar frecuentemente, para que sea ejecutable desde cualquier punto de
la estructura jerárquica de directorios creada por el usuario, habrá que añadir a la variable PATH que
posteriormente se estudiará, el camino donde se ubica dicho fichero de comandos.
El programa se procesará bajo la shell que esté activa cuando se invoca la ejecución. Normalmente será la
shell que se procesa cuando se accede al sistema.
Si se quiere crear un fichero de comandos que se ejecute bajo una shell determinada, hay que poner en la línea
1, columna 1, una de las siguientes opciones:
#! /bin/sh
#! /bin/csh
#! /bin/ksh
#! /usr/local/bin/tcsh
Estas instrucciones pueden cambiar de camino dependiendo de los sistemas operativos. Si se observa, la tcsh
está ubicada en el nodo pinar2.csic.es en un directorio distinto al resto y esto es debido a la forma de
organización elegida por el administrador de sistemas.
Similarmente que a los comandos del sistema, a un shell script se le puede pasar uno o varios argumentos.
Ejemplo:
pinar2.csic.es> cat lsdir
#! /bin/ksh
if [ $# = 0 ]
86
then
dir=.
else
dir=$1
fi
find $dir −type d −print
pinar2.csic.es> sh < lsdir
.
./bin
./metacaracteres
./tar
El shell script lista todos los directorios que cuelgan del directorio actual. Si se ejecuta bajo la tcsh o la csh, el
procedimiento dará un error ya que no entiende el tipo de formato en que está escrito. En cambio, bajo ksh se
ejecutará como si fuera la sh.
pinar2.csic.es> tcsh < lsdir
f: Expression Syntax.
pinar2.csic.es> ksh < lsdir
.
./bin
./metacaracteres
./tar
Se ejecuta otra vez para demostrar que no es necesario redireccionar la entrada.
pinar2.csic.es> sh lsdir
.
./bin
./metacaracteres
/tar
87
Se ejecuta pasándole un argumento, en este caso un directorio del sistema operativo.
pinar2.csic.es> sh lsdir /sbin
/sbin
/sbin/it.d
....
/sbin/lsm/help
/sbin/lsm/lib
Variables
Cualquier lenguaje de programación emplea variables para almacenar valores. Como su nombre indican, la
información contenida en ellas pueden sufrir modificaciones durante la ejecución del fichero comando.
Tanto csh como ksh soportan tres tipos de variables: alfabéticas, numéricas y del sistema. La Bourne shell no
soporta las variables numéricas, solo se pueden realizar operaciones matemáticas sencillas utilizando la
función expr.
Sustitución de variables
Cuando una variable va precedida del signo monetario $, la shell interpreta que tiene que sustituir este nombre
por su contenido. Si se desea evitar la sustitución, hay que utilizar los caracteres \ y `. Las no evitan la
sustitución.
\ La barra invertida anula el significado del carácter siguiente.
` Los caracteres entre comillas no admiten interpretaciones. Incluso el carácter de nueva línea pierde su
finalidad. Así, un argumento enmarcado entre comillas puede contener varias líneas.
La sustitución de variables de comandos y parámetros si se realizan dentro de las dobles comillas.
Ejemplo:
pinar2.csic.es> echo nombres
nombres
pinar2.csic.es> echo $nombres
Antonio y Juan
pinar2.csic.es> echo \$nombres
$nombres
pinar2.csic.es> echo '$nombres'
88
$nombres
pinar2.csic.es> echo "$nombres"
Antonio y Juan
Asignación de variables
La csh utiliza la función set para asignar las variables locales, setenv para las globales y @ para las numéricas.
Muchas de las expresiones que puede evaluar el mandato @ y los operadores que este reconoce, se derivan del
lenguaje de programación C.
La ksh asigna directamente un valor a una variable local sin tener que emplear una instrucción específica. Para
hacerla global, se utiliza la función export y let para las variables numéricas.
Los formatos son:
csh:
set nombre_variable = valor (local)
setenv nombre_variable valor (global)
@nombre_variable operador valor (numérica)
ksh
nombre_variable = valor (local)
export nombre_variable valor (global)
let nombre_variable operador valor (numérica)
Ejemplos:
csh:
pinar2.csic.es> set color=gris
pinar2.csic.es> echo $color
gris
pinar2.csic.es> set colores=(rojo verde azul blanco negro)
pinar2.csic.es> echo $colores
rojo verde azul blanco negro
pinar2.csic.es> echo $colores[3]
azul
89
pinar2.csic.es> echo $colores[2−4]
verde azul blanco
pinar2.csic.es> set colores[3]=amarillo
pinar2.csic.es> echo $colores[2−4]
verde amarillo blanco
pinar2.csic.es> cat var_global.csh
echo "Esto es una" $var1 " de variable de entorno local o global"
pinar2.csic.es> set var1=prueba
pinar2.csic.es> csh var_global.csh
var1: Undefined variable.
pinar2.csic.es> setenv var1 prueba
pinar2.csic.es> csh var_global.csh
Esto es una prueba de variable de entorno local o global
pinar2.csic.es> @acumula=2
@acumula=2: Command not found.
pinar2.csic.es> @ acumula=2
pinar2.csic.es> echo $acumula
2
pinar2.csic.es> @ acumula=(15/3)
@: Badly formed number.
pinar2.csic.es> @ acumula=(15 / 3)
pinar2.csic.es> echo $acumula
5
pinar2.csic.es> @ acumula+=3
pinar2.csic.es> echo $acumula
8
90
pinar2.csic.es> @ acumula++
pinar2.csic.es> echo $acumula
9
pinar2.csic.es> set cuenta=(0 0 0 0)
pinar2.csic.es> @ cuenta[2]=9
pinar2.csic.es> @ cuenta[3]= ( $cuenta[2] + 5 )
pinar2.csic.es> @ cuenta[4]= ( $cuenta[3] / $cuenta[2] )
pinar2.csic.es> echo $cuenta
0 9 14 1
ksh:
pinar2.csic.es>color=gris
pinar2.csic.es>echo $color
gris
pinar2.csic.es>colores='rojo verde azul blanco negro'
pinar2.csic.es>echo $colores
rojo verde azul blanco negro
pinar2.csic.es>echo $colores[3]
rojo verde azul blanco negro[3]
pinar2.csic.es>cat var_global.csh
echo "Esto es una" $var1 " de variable de entorno local o global"
pinar2.csic.es>ksh var_global.csh
Esto es una de variable de entorno local o global
pinar2.csic.es>var1=prueba
pinar2.csic.es>ksh var_global.csh
Esto es una de variable de entorno local o global
pinar2.csic.es>export var1
91
pinar2.csic.es>ksh var_global.csh
Esto es una prueba de variable de entorno local o global
pinar2.csic.es>let acumula=2
pinar2.csic.es>echo $acumula
2
pinar2.csic.es>let acumula=15/3
pinar2.csic.es>echo $acumula
5
pinar2.csic.es>let acumula=$acumula+3
pinar2.csic.es>echo $acumula
8
pinar2.csic.es>let multi=$acumula*3
pinar2.csic.es>echo $multi
24
pinar2.csic.es>cuenta[1]=9
pinar2.csic.es>cuenta[2]=${cuenta[1]}+5
pinar2.csic.es>echo $cuenta[1]
0[1]
pinar2.csic.es>echo ${cuenta[1]}
9
pinar2.csic.es>echo ${cuenta[2]}
9+5
pinar2.csic.es>let cuenta[2]=${cuenta[1]}+5
pinar2.csic.es>echo ${cuenta[2]}
14
pinar2.csic.es>let cuenta[3]=${cuenta[2]}+${cuenta[3]}
92
pinar2.csic.es>echo ${cuenta[3]}
37
Operadores
Definición para csh y ksh de los más importantes operadores.
Una expresión puede estar compuesta por constantes, variables y los siguientes operadores:
Aritméticos
% Módulo
/ División
* Multiplicación
− Resta
+ Suma
Relacionales
> Mayor que
< Menor que
>= Mayor que o igual a
<= Menor que y igual a
!= Diferente a
= = Igual a
Lógicos
&& y
|| o
Llaves de separación
Definición para csh y ksh.
Se deben utilizar las llaves ({ }) para distinguir una variable del texto que la rodea.
pinar2.csic.es> echo $nom
Maria
93
pinar2.csic.es> echo ${nom}no
Mariano
Formas especiales de variables de usuario
$# nombre_de_variable
Almacena el número de argumentos que tiene la variable
set dias = (lunes martes miercoles jueves viernes)
echo $# dias
5
$? nombre_de_variable
Determina si una variable se ha declarado o no. Adquiere valor 1 si se ha declarado y 0 en caso contrario.
echo $? dias
1
unset dias
echo $? dias
0
Variables del sistema
La shell declara e inicializa una serie de variables cuyos valores pueden ser modificados por el usuario desde
la línea de comandos o definiéndolo en los archivos que se autoejecutan y que posteriormente se estudiaran:
Estas variables son:
Entorno csh
argv Contiene los argumentos de la línea de comandos. argv[0] contiene el nombre de programa y
argv[1]...argv[9] desde el primero hasta el noveno argumento. Todos loas argumentos se pueden referenciar
mediante argv[*].
cdpath Busca los caminos absolutos para el comando cd. Si está definida esta variable, al ejecutarse el
comando cd, el sistema buscará un subdirectorio actual. Si no se encuentra, lo busca en todos los directorios
definidos en cdpath.
cwd Contiene el camino del directorio de trabajo actual. Es modificado por el comando cd.
echo Con la opción −x fija la variable echo y la shell muestra cada comando antes de ejecutarlo.
history Asigna la cantidad de líneas de comandos que deben ser almacenadas para una posterior reejecución,
94
si se desea.
home Almacena el camino del directorio domicilio del usuario.
ignoreeof Si se define, no se puede salir de la shell con <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
95
PPID Identificador de proceso de del padre de la shell
PWD Similar a cwd en csh
OLDPWD Directorio de trabajo anteriormente puesto por el comando cd
RANDOM Cada vez que este parámetro es referenciado, un número entero aleatorio es asignado. Se puede
inicializar asignándole un valor.
REPLY Este parámetro es puesto por los comandos select y el comando especial read cuando no se le
suministra un argumento.
SECONDS Cada vez que se llama a esta variable, devuelve el número de segundos transcurridos desde que
loa shell fue invocada.
CDPATH Similar a cdpath en csh.
COLUMNS Si se declara, el valor asignado sirve para definir la anchura de la ventana de edición y para los
listados de impresión.
EDITOR Si se define emacs, gmacs o vi y la variable VISUAL no está definida, la opción para el editor de la
shell es activado.
ENV Si es activado, la sustitución de parámetros es ejecutada sobre el valor para generar el camino del script
que debe ser procesado cuando la shell es invocada.
FCEDIT El nombre del editor por omisión para el comando fc.
IFS Define un carácter como separador de campo en la línea de mandatos.
Por defecto, es el espacio en blanco o el tabulador. Ejemplo: si tenemos una shell script que cuenta el número
de argumentos con que fue llamado y lo ejecutamos:
num_args a:b:c:d
Fue llamado con 1 argumento.
IFS=:
num_args a:b:c:d
Fue llamado con 4 argumentos
HISTFILE Define el camino del fichero donde se grabó la historia de los comandos. Por omisión es
$HOME/.sh_history
HISTSIZE Similar a history en csh
HOME Similar a home en csh.
LINES Define el número de columnas a imprimir listadas con el comando select.
96
MAIL Nombre del fichero de correo. Si la variable MAILPATH no está
definida, cuando se recibe un mensaje, la shell lo informa en este fichero.
MAILCHECK Define el intervalo en segundos que la shell chequea el mail para detectar si ha llegado algún
mensaje. Por omisión es 600 (10 minutos) pero si se pone 0, la shell chequea antes de cada inductor.
MAILPATH Lista de nombres de fichero separadas por puntos (:). Si este parámetro es definido, la shell
informa de la llegada de un mensaje en cualquiera de
los ficheros especificados.
PATH Similar a path en csh.
PS1 Similar a prompt en csh.
PS2 Se define el contenido de un inductor secundario que actúa cuando el mandato no acaba en la misma
línea y la shell aguarda a que el usuario continua definiéndola en la línea siguiente. Ejemplo:
pinar2.csic.es> echo ` Mandato dividido
> en dos lineas'
Mandato dividido
en dos lineas
pinar2.csic.es> PS2=`+'
pinar2.csic.es> echo ` Mandato dividido
+ en dos lineas'
Mandato dividido
en dos lineas
PS3 Define el inductor para utilizarlo en un bucle de programación. Por omisión #?.
SHELL Similar a shell en csh.
TMOUT Similar a autologout en csh.
VISUAL Si el valor de la variable es definido a emacs, gmacs o vi; entonces es activada la opción para el
editor seleccionado.
Líneas de comandos
Es un secuencia de uno o más comandos simples con encadenamiento de entradas y salidas, separados por ;,
&,|, && o ||.
El carácter ; sirve para ejecutar secuencialmente de izquierda a derecha más de una instrucción en una línea de
97
comandos.
pinar2.csic.es> comando1 ; comando2 ; comando3
equivale a:
pinar2.csic.es> comando1
pinar2.csic.es> comando2
pinar2.csic.es> comando3
El carácter & determina que la shell ejecute una tarea de forma subordinada. Ejemplo:
pinar2.csic.es> comando1 & comando2 & comando3
indica que tanto comando1 como comando2 se ejecutan de forma subordinada y comando3 de forma
preferente. En cuanto comando3 acaba, se recupera el inductor.
El carácter | pipe que ya se ha estudiado en el apartado de conductos y filtros en el capitulo 3, es la ejecución
secuencial de un número arbitrario de comandos en la que la salida del primero es la entrada del segundo, la
salida del segundo es la entrada del tercero ; y así sucesivamente. El formato es:
pinar2.csic.es> comando1 | comando2 | comando3
Los caracteres && y || se utilizan para la ejecución condicional de comandos que es una secuencia de
comandos en el que el segundo se ejecuta o no dependiendo del resultado de la ejecución del primero.
pinar2.csic.es> comando1 && comando2
comando2 se procesa si la ejecución de comando1 termina sin error.
pinar2.csic.es> comando1 || comando2
comando2 se procesa si comando1 termina con error.
Agrupamiento de comandos
Un grupo de comandos es una secuencia de instrucciones que al ser enmarcadas por paréntesis, la shell los
trata por lo que respecta a la entrada, salida y tratamiento de errores como si fuera uno solo.
Ejemplo:
pinar2.csi.es> date ; who >> fich_sal
la salida del comando date que proporciona la fecha y la hora, se mostrará por pantalla, mientras que el
comando who que informa de los usuarios conectados al sistema en ese momento, se almacenaran en el
fichero fich_sal.
pinar2.csic.es> (date ; who) >> fich_sal
en este caso, la información proporcionada por los comando who y date se almacenaran en fich_sal.
98
Estructuras de control
Las estructuras de control son una serie de comandos internos de la shell que pueden alterar el flujo
dependiendo de alguna condición interna o externa. Hay unas que son exclusivas de un tipo de shell, mientras
que otras son comunes pero cambian la sintaxis. Emplearemos la convención de poner en cursiva la sintaxis
de la ksh.
CASE
switch (cadena_prueba)
case str1
lista_comandos
[breaksw]
case str2
lista_comandos
[breaksw]
.....
[default]
lista_comandos
[breaksw]
endsw
La cadena de caracteres de la instrucción switch es comparada con cada una de las cadenas str (str1,
str2...strn) de la instrucción case. Si son iguales, se ejecuta la lista de comandos correspondientes hasta la
instrucción breaksw. Si no existe una cadena de caracteres similar, se ejecuta la lista de comandos default. La
ejecución continua por el comando siguiente a la instrucción endsw. Si el comando opcional breaksw no es
declarado, la ejecución del comando continua desde una lista case a otra secuencialmente.
case cadena_prueba in
str1) lista_comandos;;
str2) lista_comandos;;
....
*) lista_comandos;;
esac
IF/THEN/ELSE
99
Proporciona una ejecución condicional de distintas listas de comandos.
if (expresion1) then
lista_comandos1
[else if (expresion2) then]
lista_comandos2
[else]
lista_comandos3
endif
Si expresion1 es verdadera se ejecuta lista_comandos1. Si no lo es y esta declarado el comando else if, si
expresion2 es verdadera, se ejecuta lista_comandos2. Si expresion1 y expresion2 son falsas, se ejecuta
lista_comandos3 en caso de que este declarado el comando else.
if expresion
then lista_comandos1
[elif expresion
then lista_comandos2
[else lista_comandos3
fi
FOREACH (csh) FOR−IN (ksh)
Ejecución de una lista de comandos controlada por los valores de una variable.
foreach nombre (argumentos)
lista_comandos
end
La variable nombre toma secuencialmente un valor de la lista de argumentos y ejecuta lista de comandos.
Lista_comandos se ejecuta tantas veces como número de argumentos exista.
for nombre [argumentos]
do
lista_comandos
done
100
REPEAT
Repite un comando un número de veces determinado. Es una estructura que no existe en la sh ni en la ksh.
repeat numero_de_veces comando
WHILE
Ejecución en bucle de una secuencia de comandos
while (expresion)
lista_comandos
end
Mientras expresión sea verdadera, lista_comandos se ejecutará.
while expresion
do
lista_comandos
done
BREAK y CONTINUE
Un ciclo foreach o while puede ser alterado o interrumpido. El comando break transfiere el control a la
instrucción siguiente al comando end por lo que el ciclo de ejecución concluye. El comando continue
transfiere el control a end por lo que continua la ejecución del ciclo.
GOTO
Es solo válido para la csh y permite un salto incondicional a una etiqueta localizada en el programa. Al
formato de la etiqueta hay que añadirle dos puntos como se expone en la sintaxis:
goto label1
...
label1:
...
SELECT
Es válido solo para la ksh. Imprime los argumentos sobre la salida de error estándar (STDERR) , cada uno
precedido por un número.
select nombre [argumentos]
101
do
lista_comandos
done
Si los argumentos son omitidos entonces los parámetros posicionales son utilizados. El inductor PS3 es
mostrado y la línea es leída desde la entrada estándar (STDIN). Si se digita un valor similar a uno de la lista
de argumentos entonces el valor de argumento es pasado a nombre. Si no se digita valor, entonces la lista
seleccionada es mostrada. Si el valor tecleado es diferente a los argumentos, la variable nombre adquiere valor
nulo. La línea leída desde STDIN es almacenada en la variable REPLY. Lista_comandos es ejecutada hasta
que un break o un final de fichero es encontrado.
Evaluación de expresiones
Operadores sobre ficheros
Existen una serie de operadores que tratan de la existencia o no de un fichero y de sus atributos. El formato es:
operador nombre_de_fichero
Los operadores más comunes son:
−s verifica que el fichero existe (ksh)
−e verifica que el fichero existe (csh)
−f verifica que es un fichero
−d verifica que es un directorio
−r verifica que el fichero tiene permiso de lectura
−w verifica que el fichero tiene permiso de escritura
−x verifica que el fichero tiene permiso de ejecución
Operadores sobre variables
El orden conforme se evalúa una expresión depende de los operadores que intervengan en ella. El orden de
precedencia, de mayor a menor, en la ejecución de una expresión es:
*/%
+−
>= <=
= = !=
Reejecución de variables
102
Las variables shell HISTSIZE en ksh y history en csh son utilizadas para determinar el número de comandos
que son salvados en el fichero history. En ksh, el nombre del fichero history es $HOME/.sh_history aunque se
le puede modificar definiendo la variable HISTFILE.
Los comandos almacenados se pueden recuperar secuencialmente en orden inverso a su ejecución mediante:
csh !
ksh <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:
103
csh alias comando_usuario comando_sistema
ksh alias comando_usuario = comando_sistema
Ejemplo:
csh alias dir ls −l
ksh alias dir = ls −l
Para mostrar los alias que están definidos, de ejecuta:
pinar2.csic.es> alias
dir (ls −l)
rm (rm −i)
pinar2.csic.es> unalias rm
pinar2.csic.es> alias
dir (ls −l)
Si se quiere desactivar un alias, existe el comando unalias cuyo formato es:
unalias comando_usuario
Los alias definidos en una sesión se pierden cuando esta termina. Para hacer permanentes los alias, hay que
definirlos en los ficheros autoejecutables.
Ficheros autoejecutables
Existen unos ficheros que se autoejecutan cuando el usuario se conecta al sistema y que sirven para definir el
entorno en el que se quiere trabajar: alias, variables, caminos de búsqueda, tipo de terminal, etc.
El superusuario puede definir una serie de variables que afectaran a todos los usuarios que accedan al sistema.
Si el usuario trabaja bajo Bourne o Korn shell, las variables se definen /etc/profile. Bajo csh o tcsh, el
superusuario utiliza el fichero /etc/csh.login.
Cada usuario tiene en su directorio $HOME los siguientes ficheros autoejecutables y que sirven para definir
su entorno personal:
.profile Se procesa bajo sh y ksh
.login Se procesa bajo csh
.cshrc Se procesa bajos csh
Los ficheros .profile y .login se ejecutan cada vez que un usuario se conecta al sistema operativo, es decir, se
inicia una sesión. Suele contener las variables globales del usuario y el tipo de terminal.
104
El fichero .cshrc se ejecuta cuando se inicia una sesión o cuando se ejecuta un script cshell.
La secuencia de inicialización de ficheros comienza mediante el procesamiento del fichero /etc/csh.login o
/etc/profile. Posteriormente, la shell elegida busca en el directorio domicilio el fichero .cshrc o .profile. El
siguiente paso es por parte de la csh o tcsh, la ejecución de .login. A partir de ese momento, la shell pasa el
control al usuario.
Cuando el usuario teclea exit, logout o un carácter final de fichero <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
105
set prompt="`hostname`> "
set mail=/usr/spool/mail/$USER
###################################################################
###################################################################
# Ejemplo de fichero .cshrc
#
setenv MAIL /usr/spool/mail/$USER
#############################################################
Variable PATH
Como se habrá podido observar, existe una definición para la variable path en los ficheros ejecutables. Esta es
una de las variables más importantes y define los caminos en los que la shell busca cuando se le ordena que
ejecute un programa.
El contenido se puede visualizar de la siguiente manera:
echo $PATH
/bin:/usr/bin ksh
/bin /usr/bin csh
Si este es el camino de búsqueda, cualquier programa a ejecutar lo buscará primeramente en el directorio /bin
y si no lo encuentra, rastreará el directorio /usr/bin. Si no existiese el programa en estos dos directorios, se
visualizará un mensaje de error avisando de que no se localiza el programa.
Si se quiere que también busque en el directorio actual, habrá que añadir dos puntos (:) si es la ksh o sh, o un
punto (.) si es la csh o tcsh. La variable PATH se podría definir así:
PATH = /bin::/usr/bin −− ksh
set path = (/bin . /usr/bin) −− csh
La shell buscará en primer lugar en el directorio /bin, en segundo lugar en el directorio actual y en tercer lugar
en /usr/bin.
Sustitución de tilde
Cuando la ksh o la csh encuentran un carácter tilde (") al comienzo de un nombre de camino, tiene el mismo
significado que poner $HOME, es decir, contiene la trayectoria absoluta del directorio domicilio. Por ejemplo:
pinar2.csic.es> cd "/metacaracteres
pinar2.csic.es> pwd
106
/disco_1/cti/curso01/metacaracteres
pinar2.csic.es> cd "
pinar2.csic.es> pwd
/disco_1/cti/curso01
CAPITULO 7
COMUNICACIÓN ENTRE USUARIOS
Al ser el sistema operativo Unix multiususario, permite la comunicación entre ellos aunque estén localizados
físicamente a cientos de kilómetros.
La comunicación es de dos formas, una interactiva utilizando el comando write o talk y la otra es el correo
electrónico, mediante el cual, se envía un mensaje a un usuario determinado independientemente de que esté
en ese momento conectado al sistema.
WRITE
Es el primer medio establecido en el sistema operativo Unix para la comunicación interactiva y tiene el
problema que al receptor, si no tiene desabilitado el recibir mensajes, le aparece la información súbitamente
entremezclándose con la suya propia.
La información se transmite línea a línea, es decir, hasta que no se da <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>.
107
MAIL
El correo electrónico se utiliza para enviar mensajes a uno o varios usuarios y no se dirigen a pantalla sino a
un directorio especial localizado en /usr/spool/mail/nombre_de_usuario. El mensaje queda almacenado en
forma de fichero.
Cuando un usuario se conecta y tiene un mensaje sin leer, el sistema operativo le informa de ello mediante el
mensaje: You have mail
Si existe más de una carta sin leer, estas se almacenan secuencialmente según el orden de llegada, pero son
visualizadas en secuencia inversa, es decir, la primera mostrada es la última recibida.
El sistema operativo Unix tiene dos gestores de correo: mail y mailx. El segundo es similar al primero pero es
mucho más potente teniendo ya programado el poder poner título a la carta.
Para visualizar las cartas recibidas, se ejecuta el comando mailx sin argumentos. Las opciones para
administrar el correo son:
<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
108
Es un gestor de correos del que ya se ha hablado en el capítulo 5 con el editor Pico. Es u de libre distribución
y de su instalación ya se ha indicado en dicho capítulo.
Pine es un gestor diseñado en un principio para usuarios no expertos en informática, es completamente
interactivo y se ejecuta sobre una amplia gama de tipos de terminales. Cumple con los protocolos SMTP
(Simple Mail Transfer Protocol), IMAP2bis y MIME (Multipurpose Internet Mail Extension), lo que le
permite recibir y enviar mensajes multimedia, es decir, texto junto con ficheros de imagen y sonido.
El formato con las opciones más importantes es:
pine [−r [−z [−l [−conf [−f carpeta [−n num_mensaje [−sort orden
[address,dirección
Opciones:
−r Actúa en modo demostración permitiendo solo enviar mensajes a sí
mismo.
−z Permite que con <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:
109
donde :
HELP Es una ayuda interactiva del gestor de correos Pine.
COMPOSE MESSAGE Para escribir y enviar mensajes.
110
FOLDER INDEX Muestra los mensajes de la carpeta activa. Por omisión la carpeta activa es INBOX.
FOLDER LIST Muestra las diferentes carpetas. Pine crea tres carpetas: INBOX donde se reciben los
mensajes, sent−mail donde se almacenan los mensajes emitidos, y saved−messages sonde se salvan los
mensajes recibidos.
ADDRESS BOOK Crea o actualiza grupos de direcciones.
111
SETUP Personaliza el gestor Pine al equipo existente.
QUIT Para salir de Pine.
INDICE
Capítulo 1 Evolución histórica y características
Evolución histórica .................................................................................. 3
Características ........................................................................................... 8
Capítulo 2 Procesos y ficheros
Procesos ................................................................................................... 10
Ficheros ................................................................................................... 11
Tipos ................................................................................................... 12
Directorios que contiene el Sistema Operativo ................................... 13
Caminos ............................................................................................... 14
Acceso, Protección ............................................................................... 15
Capítulo 3 La shell
Entrada al sistema ..................................................................................... 18
112
Inicio de la sesión ................................................................................. 19
Tipos de shell ............................................................................................ 20
Capas del Sistema Operativo ................................................................ 21
Estructura de los comandos ...................................................................... 21
Procesos en foreground y background ..................................................... 22
Entrada, salida y error estándar ................................................................ 24
Redireccionamiento de la entrada, salida y error estándar ...................... 25
Adición de la salida estándar a un fichero ............................................... 27
Concatenación de ficheros ........................................................................ 28
Conductos (Pipes) ..................................................................................... 29
Filtros ........................................................................................................ 30
Metacaracteres ...................................................................................... 31
Capítulo 4 El editor vi
Los programas editores de Unix ............................................................... 33
El editor de pantalla vi .............................................................................. 33
El editor de pantalla Pico 54
Capítulo 5 Comandos Unix
logname ..................................................................................................... 61
uname ........................................................................................................ 62
passwd ....................................................................................................... 63
pwd ............................................................................................................ 64
ls ................................................................................................................ 65
cat .............................................................................................................. 69
cd ............................................................................................................... 70
mkdir ......................................................................................................... 71
rmdir ......................................................................................................72
113
rm ...........................................................................................................73
cp ................................................................................................................75
mv ...............................................................................................................76
ln .................................................................................................................77
chmod .........................................................................................................78
chown ........................................................................................................ .82
chgrp .......................................................................................................83
file ...........................................................................................................84
more, page ................................................................................................. .85
tail ............................................................................................................86
who ...........................................................................................................87
tyy .............................................................................................................88
banner .......................................................................................................89
cal .............................................................................................................90
calendar ....................................................................................................91
find ............................................................................................................92
grep ...........................................................................................................95
lpstat .........................................................................................................97
lpr .............................................................................................................98
lpq ............................................................................................................. 99
lprm ..........................................................................................................100
tee .............................................................................................................101
od .............................................................................................................103
nl ..............................................................................................................105
wc .............................................................................................................. ..106
ps ..............................................................................................................107
114
nohup .......................................................................................................109
kill ............................................................................................................110
nice ...........................................................................................................111
time .......................................................................................................112
sort ............................................................................................................113
cmp ...........................................................................................................115
date ............................................................................................................116
su ...............................................................................................................118
compress ...................................................................................................119
uncompress ...............................................................................................120
tar .........................................................................................................121
man .............................................................................................................122
Capítulo 6 Programación de la shell
Ejecución de un programa shell ..............................................................123 Variables
Sustitución de variables ...............................................................124
Asignación de variables ...............................................................128 Operadores
...................................................................................131
Llaves de separación ....................................................................132
Variables del sistema ...................................................................133
Líneas de comandos .................................................................................138
Agrupamientos de comandos ...................................................................139
Estructuras de control ...............................................................................140
Evaluación de expresiones .......................................................................144
Reejecución de variables .........................................................................145
Alias ..........................................................................................................146
Ficheros autoejecutables ...........................................................................147
Variables PATH ........................................................................................149
115
Sustitución de tilde ....................................................................................150
Capítulo 7 Comunicación entre ususarios
Write ...........................................................................................................151
Talk .............................................................................................................152
Mail .............................................................................................................152
Pine .153
/
var
usr
tmp
dev
etc
sbin
sys
PROGRAMAS DE APLICACIONES
SHELL
KERNEL
HARDWARE
shell
terminal
who
sort
who
TERMINAL
sort
lpr
116
Descargar