CURSO MICA UNIX/LINUX H. Deeg Parte de los materiales están reproducidos de 'Introducción a UNIX' de Fernando Cabrera y Begoña García Lorenzo 8 Oct. 2003 hardware = lo que se ve con el ordenador apagado kernel = ‘nucleo’. El verdadero ‘UNIX’. - Programa basico que maneja todo la interactuacion con el hardware. Desarroladas especificamente por el hardware. - Controla memoria y asigna a procesos - Distribuye tiempo del CPU entre processos (=‘multitasking’). shell = interpretador de commandos. - El shell tiene comandos propios (man tcsh los enseña). Cada UNIX tiene varios versiones de 'shells'. Aqui utilizamos el TC-shell (tcsh). comandos = pequeñas programas que invoca el usuario Comillas u otros characteres especiales i) Comillas simples : Veamos los siguientes ejemplos: echo * echo '*' En el primer caso se sustituye * por los nombres de todos los ficheros en ese directorio separadeos por espacios. En el segundo caso el resultado nos muestra por pantalla el caracter *. Esto se debe a que las comillas impiden la sustitución de * por nombres de ficheros tratandolo como un caracter sin significado especial. Dentro los comillas simples ' ' todos los caracteres pierden su significado especial: * ? > < >> | & # ( ) echa ^ " \ || && ii) Las dobles comillas : El uso de las doble comillas puede producir resultados diferentes como por ejemplo: echo $DOCS echo "$DOCS" echo '$DOCS' Los dos primeros casos tienen el mismo efecto y muestra por pantalla el valor de la variable DOCS. Esto se debe a que el caracter $, que sirve para referirse al valor de una variable, no pierde su significado dentro de las dobles comillas. Sin embargo esto si sucede dentro de las comillas simples y el resultado en el tercer caso es mostrar por pantalla $DOCS. Caracteres que NO pierden su significado especial entre las doble-comillas " " son: $ \ Además las dobles comillas también mantienen el significado de los espacios en blanco. iii) El caracter \ Este caracter sirve para quitar cualquier significado especial que tenga para la shell el caracter que va a continuacion de \ . Por ejemplo: echo \$shell como resultado muestra por pantalla $shell. iv) Las comillas simple invertias ` El significado de las comillas invertidas es completamente diferente. Se emplea encerrando en estas comillas un comando y el resultado es ejecutar el comando insertando la salida en el punto de la línea de comandos donde se encuentra el comando. Por ejemplo: echo La fecha de hoy es `date` man `ls` NO funciona!man En el primer caso se ejecuta el comando date insertando el resultado al final de la frase. El segundo dará probablemente error, pues tratará de buscar una página del manual de ayuda para comandos que se llamen como cada uno de los ficheros del directorio. A no ser que algún fichero tenga nombre de comando, el resultado será que no encuentra la página del manual para cada nombre de fichero. Las comillas invertidas mantienen su significado dentro de las dobles comillas, pero no dentro de las comillas simples. Definir comandos con 'alias' Frecuentemente, se quiere utilizar un (o más) comando con unos opciones preferidas. El alias permite definir comandos nuevos. Sintaxis: alias alias-name definición Normalemente, se escribe la definicion dentro comillas simples, para asignar la defincion literalmente al alias. También: alias (sin argumento) unalias alias-name lista todos los alias definidos borra un alias Ejemplos: alias hi 'history 10' alias psa 'ps -Af' alias gv 'ghostview -a4' alias lsh 'ls -alt |head -15' Se pueden pasar argumentos al alias desde la línea de comandos. Cuando ejecutamos un alias podemos poner una serie de argumentos que se interpretan como si estuvieran inmediatamente depués de la definición del alias. Por ejemplo: gv test.ps (con gv definido como arriba) ejecuta entonces ghostview -a4 test.ps Si queremos que los argumentos que damos al alias se sitúen en un punto distinto del final, tenemos los siguientes cracteres: !^ !* que deben estar precedidos de \ para evitar que el caracter ! sea interpretado por la shell de otra manera. El primero pasa el argumento que aparece en primer lugar de la línea de comandos al punto donde aparece !^. El segundo pasa todos los argumentos. Por ejemplo: alias gv 'ghostview -a4 \!* &' con esta defincion del gv, teclar: gv test.ps va ejecutar: ghostview -a4 test.ps & Para 'escapar' de un alias que tiene el mismo nombre como un comando UNIX se utiliza \comando. Ejemplo: si rm esta definido asi: alias rm 'rm -i' \rm invoca el 'rm' en su modo por defecto (sin la opcion -i) Scripts (primer parte) y configuracion de tu entorno Los definiciones de variables de ambientes y los alias se pierden cuando se cierra la ventana del terminal. Para mantenerlos, ellos deben estar definidos dentro de un fichero que se ejecuta como un macro. Ejemplo/ejercicia: Escriba con emacs en un fichero llamado 'miscripts' los siguientes líneas: (lineas empezando con # se ignoran) # ejemplos de alias alias ls 'ls -F' alias lsa '\ls -al' alias lsh '\ls -lst | head -5' # ejemplos de variables de ambiente setenv DOCS /home/hdeeg/materials setenv SAMP /home/hdeeg/samples setenv TABLES $SAMP/tables Después de guardar el fichero, este se ejecuta con: source miscripts Despues, los nuevos alias y vars. de ambiente deben que estar definidos . Compruébalo con alias y setenv Una coleccion de alias utiles se encuentra en $DOCS/aliasutiles Para ejecutar un script cada vez que se inicia una nueva session (o una nueva ventana), insertamos al fin del fichero ~/.tcshrc esta linea: source miscripts (Ojo: para funcionar asi, miscripts debe que estar en directorio ~) No recomiendo modificar el .cshrc (o .tcshrc si estas utilizando el tcsh) fuera de introducir un 'source' de un fichero con los alias y variables de ambientes personales. Razon: Se podrian producir errores que impiden el inicio de un nuevo proceso shell. Eso pasa frecuentemente despues de modificar los alias o vars de ambiente. En este caso, des-comentar el 'source' en .cshrc vuelve el entorno al estado virgin. Asi, se permite rapidamente un aislamiento de los errores. Una otra ventaja con el metodo descrito es una mejor facilidad del traslado del entorno personal a otros ordenadores o cuentas.