Curso de software03
-
Upload
enriqueaco -
Category
Documents
-
view
584 -
download
0
Transcript of Curso de software03
![Page 1: Curso de software03](https://reader030.fdocuments.co/reader030/viewer/2022020307/559c82851a28ab7e778b4710/html5/thumbnails/1.jpg)
Curso de Software Libre03
![Page 2: Curso de software03](https://reader030.fdocuments.co/reader030/viewer/2022020307/559c82851a28ab7e778b4710/html5/thumbnails/2.jpg)
Copyright © 2010, Enrique Acosta Figueredo Este trabajo está licenciado bajo la licencia Creative
Commons Attribution-Share Alike 3.0 (CC-by-sa 3.0). Ud. Puede copiar, modificar, mezclar,
rehacer, distribuir, mostrar , mejorar, sublicenciar o vender libremente este material bajo las condiciones
definidas en dicha licencia.
Consulte http://creativecommons.org/licenses/by-sa/3.0/
![Page 3: Curso de software03](https://reader030.fdocuments.co/reader030/viewer/2022020307/559c82851a28ab7e778b4710/html5/thumbnails/3.jpg)
PROCESOS
![Page 4: Curso de software03](https://reader030.fdocuments.co/reader030/viewer/2022020307/559c82851a28ab7e778b4710/html5/thumbnails/4.jpg)
Administración de Procesos
Introducción a Procesos
Estados del proceso
Programación de procesos: nice y renice
Envío de señales
Control de trabajo
Programación de tareas retrasadas: at
Programación de tareas periódicas: cron
![Page 5: Curso de software03](https://reader030.fdocuments.co/reader030/viewer/2022020307/559c82851a28ab7e778b4710/html5/thumbnails/5.jpg)
Conceptos Claves Un proceso es una instancia de un ejecutable en ejecución identificado por un id de proceso (pid).
Debido a que Linux implementa memoria virtual cada proceso posee su propio contexto distintivo de memoria.
Un proceso tiene un uid y una colección de gid como credenciales.
Un proceso tiene un contexto de sistema de archivos incluyendo un cwd, una umask, un directorio raíz y una colección de archivos abiertos.
Un proceso tiene un contexto de programación que incluye un valor de niceness.
Un proceso tiene una colección de variables de entorno.
El comando ps puede utilizarse para examinar todos los procesos actuales en ejecución.
El comando top puede utilizarse para controlar todos los procesos en ejecución.
Introducción a Procesos
![Page 6: Curso de software03](https://reader030.fdocuments.co/reader030/viewer/2022020307/559c82851a28ab7e778b4710/html5/thumbnails/6.jpg)
Procesos Un proceso es una instancia de un programa en ejecución
Clases de programas que: Diseñados para iniciar rapidamente, Especializados en función, Trabajan bien con otros programas Usualmente no tienen una contraparte en otros sistemas
operativos
La responsabilidad del kernel de Linux es proporcionar un lugar para que los procesos ejerzan su labor sin necesidad de tocar el campo del otro.
![Page 7: Curso de software03](https://reader030.fdocuments.co/reader030/viewer/2022020307/559c82851a28ab7e778b4710/html5/thumbnails/7.jpg)
¿ Que es un Proceso?Contexto de ejecución
Cada proceso existe (al menos hasta cierto punto) dentro de una memoria física de la máquina. Puesto que Linux (y Unix) están diseñados para ser un entorno multiusuario, la memoria asignada a un proceso está protegida y ningún otro proceso puede acceder a ésta.
Contexto de E/S
Cada proceso interactúa hasta cierto punto con el sistema de archivos para leer y escribir información que existe o existirá después del ciclo de vida del proceso.
Variables de entorno
Cada proceso mantiene su propia lista de pares nombre-valor, conocida como variables de entorno o en general como el entorno del proceso.
![Page 8: Curso de software03](https://reader030.fdocuments.co/reader030/viewer/2022020307/559c82851a28ab7e778b4710/html5/thumbnails/8.jpg)
¿ Que es un Proceso?Información de Herencia
Cada proceso se identifica con un PID o id del proceso asignado en el momento de su creación.
Credenciales Cada proceso se ejecuta bajo el contexto de un determinado
usuario (o más exactamente de un id de usuario determinado) y bajo el contexto de una colección de id de grupo (generalmente, todos los grupos a los que pertenezca el usuario).
Estadísticas de recursos y límites Cada proceso también registra estadísticas para trazar la
cantidad de recursos del sistema utilizados, el número de archivos abiertos, la cantidad de tiempo de CPU, etc.
![Page 9: Curso de software03](https://reader030.fdocuments.co/reader030/viewer/2022020307/559c82851a28ab7e778b4710/html5/thumbnails/9.jpg)
Utilitarios de Administración de Procesos
Los sistemas GNU/Linux cuentan varios programas para efectuar el seguimiento de los procesos que se están ejecutando en el sistema. Entre los mas usados en la interfase de texto están los programas ps y top.
Ps: Sin ninguna opción dará la lista de procesos que están corriendo desde la terminal donde se ejecuto el ps. .
PID: Id del Proceso
TTY: identifica la consola donde se esta ejecutando el proceso.
TIME: tiempo total del proceso que se ha estado ejecutando.
![Page 10: Curso de software03](https://reader030.fdocuments.co/reader030/viewer/2022020307/559c82851a28ab7e778b4710/html5/thumbnails/10.jpg)
Utilitario de Administración de Procesos (PS)
Si añadimos la opción l tendremos un listado largo del comando ps. En algunas versiones se usa la opción -l.
UID : que identifica el dueño del proceso PID : ID del ProcesoPPID : PID del proceso padre NI : nivel que se otorga a un proceso para requerir cierto privilegio VSZ :es el tamaño que tiene el proceso. RSS :es la tamaño del proceso que se encuentra residente en la memoria. WCHAN:es el nombre de la función del kernel donde el proceso esta durmiendo.
![Page 11: Curso de software03](https://reader030.fdocuments.co/reader030/viewer/2022020307/559c82851a28ab7e778b4710/html5/thumbnails/11.jpg)
Visualización de Procesos El comando ps lista todos los procesos iniciados desde una terminal de usuario.
Opciones comunes del comando ps para la selección de procesos
Opciones comunes del comando ps para la selección de salida
![Page 12: Curso de software03](https://reader030.fdocuments.co/reader030/viewer/2022020307/559c82851a28ab7e778b4710/html5/thumbnails/12.jpg)
Utilitario de Administración de Procesos (TOP)El comando ps nos muestra una radiografía de los procesos en el momento, pero no nos muestra los cambios que se van teniendo.
Para esto contamos con el comando top. El mismo muestra en tiempo real la situación de los procesos que se están ejecutando en el sistema, ordenados por defecto según el porcentaje la CPU que estén usando.
Al ejecutarlo se podrá ver otra información adicional, como la cantidad de usuarios que están en el sistema, cuantos procesos están corriendo y de estos cuantos estas activos, cuantos durmiendo, cuantos en proceso de terminar (ZOMBIE) y cuantos finalizados.
![Page 13: Curso de software03](https://reader030.fdocuments.co/reader030/viewer/2022020307/559c82851a28ab7e778b4710/html5/thumbnails/13.jpg)
Utilitario de Administración de Procesos (TOP)Además se podrá ver la cantidad e memoria física total, la cantidad usada y la cantidad libre; así como también se podrá obtener la misma información de la memoria swap.
Lo más importante es que esta información se ira actualizando automáticamente cada tanto tiempo, por defecto 5 segundos, y que podremos ir alterando lo que va mostrando.
![Page 14: Curso de software03](https://reader030.fdocuments.co/reader030/viewer/2022020307/559c82851a28ab7e778b4710/html5/thumbnails/14.jpg)
Monitoreo de ProcesosEl comando top mostrará un cuadro de procesos actualmente en ejecución, que se actualiza ciertos segundos
![Page 15: Curso de software03](https://reader030.fdocuments.co/reader030/viewer/2022020307/559c82851a28ab7e778b4710/html5/thumbnails/15.jpg)
El comando top
Comandos top más utilizados
Opciones para el comando top
![Page 16: Curso de software03](https://reader030.fdocuments.co/reader030/viewer/2022020307/559c82851a28ab7e778b4710/html5/thumbnails/16.jpg)
Monitor de Sistema GNOME
La aplicación se puede iniciar desde una línea de comandos como:
gnome-system-monitor Menú Herramientas:
monitor del sistema.
![Page 17: Curso de software03](https://reader030.fdocuments.co/reader030/viewer/2022020307/559c82851a28ab7e778b4710/html5/thumbnails/17.jpg)
Configurando mostrar los campos en el Monitor de Sistema GNOME
Monitor de Sistema puede ser configurado abriendo:
Editor:Preferencias
![Page 18: Curso de software03](https://reader030.fdocuments.co/reader030/viewer/2022020307/559c82851a28ab7e778b4710/html5/thumbnails/18.jpg)
Panel del Monitor de Sistema
El monitor de Sistema provee un segundo panel, que muestra:
Grafica de Utilización total de CPU
Utilización de Memoria versus tiempo
Tabla de uso de disco
![Page 19: Curso de software03](https://reader030.fdocuments.co/reader030/viewer/2022020307/559c82851a28ab7e778b4710/html5/thumbnails/19.jpg)
Localizando Procesospgrep permite a los usuarios listar rápidamente procesos por:
Nombre de Comando, Usuario, Terminal, o Grupo
Opciones comunes para especificar el criterio de selección del proceso pgrep.
Opciones comunes para especificar el formato de salida pgrep
![Page 20: Curso de software03](https://reader030.fdocuments.co/reader030/viewer/2022020307/559c82851a28ab7e778b4710/html5/thumbnails/20.jpg)
Estados del Proceso Conceptos Claves
En Linux, el primer proceso, /sbin/init, lo inicia el kernel en el arranque. Todos los demás procesos son el resultado de un proceso padre que se duplica o bifurca. Un proceso comienza a ejecutar un nuevo comando a través de un proceso llamado execing. Los nuevos comandos suelen ejecutarse mediante un proceso (a menudo una shell) primero mediante una bifurcación y luego ejecutando un nuevo comando. Este mecanismo se conoce como el mecanismo fork y exec. Los procesos siempre pueden encontrarse en uno de los cinco estados: ejecutable, dormido voluntario, dormido involuntario, detenido o zombi. La ascendencia del proceso puede verse con el comando pstree. Cuando un proceso muere, el padre del proceso debe recolectar su información del código de retorno y del uso de recursos. Cuando un padre muere antes que sus hijos, el primer proceso hereda los huérfanos (usualmente /sbin/init).
![Page 21: Curso de software03](https://reader030.fdocuments.co/reader030/viewer/2022020307/559c82851a28ab7e778b4710/html5/thumbnails/21.jpg)
Como se inician los procesos
Nuevos procesos son creados a traves de un forking. Cuando un proceso se bifurca, este crea un duplicado de si mismo.
Inmediatamente después de una bifurcación, el proceso recién creado (el hijo) es un duplicado exacto del proceso original (el padre). El hijo hereda una copia idéntica de la memoria del proceso original, los archivos abiertos de padre, copias idénticas de los parámetros del padre, tales como el directorio de trabajo actual o umask.
El hijo tiene un ID de proceso diferente y un proceso de padre diferente
![Page 22: Curso de software03](https://reader030.fdocuments.co/reader030/viewer/2022020307/559c82851a28ab7e778b4710/html5/thumbnails/22.jpg)
Ejecución de un nuevo comando (Exec-ing)
Los nuevos comandos se ejecutan a través de un técnica llamada execing
Cuando se ejecuta un nuevo comando, El proceso actual borra y libera la mayoría de sus recursos, y Carga una nueva colección de instrucciones desde el comando especificado en el
sistema de archivos.
Algunos programas pueden bifurcarse (fork) sin ejecutar un nuevo comando (execing).
Demonios de Red, Bifurcan un nuevo hijo para manejar una conexión de un cliente específico El padre retorna para escuchar nuevos clientes
![Page 23: Curso de software03](https://reader030.fdocuments.co/reader030/viewer/2022020307/559c82851a28ab7e778b4710/html5/thumbnails/23.jpg)
El comando pstreeCada proceso a excepción del primero se crea por bifurcación, dentro de los procesos existe un linaje bien definido de relaciones padre e hijo.
[maxwell@station maxwell]$ pstree
init-+-apmd
|-atd
|-automount
|-battstat-applet
...
|-fetchmail
|-galeon-bin
|-gconfd-1
|-2*[gconfd-2]
|-gdm-binary-+-gdm-binary-+-X
| | `-gnome-session---ssh-agent
| `-gdm-binary---gnome-session---ssh-agent
![Page 24: Curso de software03](https://reader030.fdocuments.co/reader030/viewer/2022020307/559c82851a28ab7e778b4710/html5/thumbnails/24.jpg)
Como muere un proceso Un proceso muere ya sea que muera normalmente seleccionando exit o anormalmente como el resultado de recibir una señal.Cuando un procesos sale,
Todos sus recursos se liberan, a excepción del código de retorno Es responsabilidad del padre del proceso coleccionar esta información y liberar los
últimos recursos del hijo muerto
Si el proceso padre muere antes que el proceso hijo nace Huerfanos - El hijo queda huérfano Zombies – Se genera el estado Zombie, entre el momento en que un proceso sale, liberando
la mayoría de sus recursos, y el momento en que su padre recoge su valor de retorno, liberando el resto de sus recursos,
Huerfanos son adoptados por el primer proceso, /sbin/init es un padre muy inteligente, ya que se encarga de adoptar hijos huerfanos
![Page 25: Curso de software03](https://reader030.fdocuments.co/reader030/viewer/2022020307/559c82851a28ab7e778b4710/html5/thumbnails/25.jpg)
Los 5 estados del ProcesoEl siguiente listado muestra los cinco estados, junto con la letra convencional utilizada por ps, top y otros comandos para identificar el estado actual de un proceso.
cada proceso muriendo pasa a través de un estado zombi transitorio. No obstante, en ocasiones, algunos se quedan en ese estado.
Procesos zombi (Z)
Ocasionalmente, los usuarios deciden suspender procesos. Los procesos suspendidos no realizarán ninguna acción hasta no ser reiniciados por el usuario. En la shell bash, la secuencia de teclas CONTROL-Z puede utilizarse para suspender un proceso.
Procesos detenidos (suspendidos) (T)
Cuando dos procesos tratan de acceder el mismo recurso de sistema al mismo tiempo. En estas situaciones, el kernel fuerza al proceso a dormir.
Dormido involuntario (no interrumpible) (D)
Por lo general, este es un proceso que no tiene nada que hacer hasta que suceda algo interesante. Un ejemplo clásico es el demonio de red httpd, el cual es un proceso que implementa un servidor de red. En medio de solicitudes de un cliente (navegador de red), el servidor no tiene nada que hacer, y elige irse a dormir.
Dormido voluntario (interrumpible) (S)
Los procesos en un estado ejecutable son procesos que si tienen la oportunidad de acceder la CPU
Ejecutable (R)
DescripciónEstado
![Page 26: Curso de software03](https://reader030.fdocuments.co/reader030/viewer/2022020307/559c82851a28ab7e778b4710/html5/thumbnails/26.jpg)
![Page 27: Curso de software03](https://reader030.fdocuments.co/reader030/viewer/2022020307/559c82851a28ab7e778b4710/html5/thumbnails/27.jpg)
Conceptos Claves
Una tarea primaria del kernel de Linux es la programación de procesos.
Cada proceso tiene un valor de niceness que influye en su programación.
Los comandos nice y renice pueden cambiar la prioridad de programación de un proceso.
Programación de Procesos: nice y renice
![Page 28: Curso de software03](https://reader030.fdocuments.co/reader030/viewer/2022020307/559c82851a28ab7e778b4710/html5/thumbnails/28.jpg)
Programación de Procesos Cada proceso tiene dos valores que influyen en su programación.
(dinamica) valor de prioridad del proceso (fija) valor del niceness del proceso
![Page 29: Curso de software03](https://reader030.fdocuments.co/reader030/viewer/2022020307/559c82851a28ab7e778b4710/html5/thumbnails/29.jpg)
Prioridad de ProcesosEl kernel da a cada proceso una cantidad de contadores.
Cada vez que un proceso se programa en la CPU, entrega uno de sus contadores.
Cuando decide qué proceso programar en la próxima CPU, el kernel escoge un proceso ejecutable con la mayoría de contadores.
![Page 30: Curso de software03](https://reader030.fdocuments.co/reader030/viewer/2022020307/559c82851a28ab7e778b4710/html5/thumbnails/30.jpg)
Proceso Niceness
Cada proceso también tiene un valor estático conocido como su valor de niceness.
El valor tiene un rango que va de -20 a 19 para cualquier proceso, iniciando en 0 por defecto.Aquellos con un mayor valor de niceness (>0)
obtienen menos contadores menos tiempo en la CPU
Aquellos con un valor niceness (< 0) Obtienen mas contadores mas tiempo de CPU
![Page 31: Curso de software03](https://reader030.fdocuments.co/reader030/viewer/2022020307/559c82851a28ab7e778b4710/html5/thumbnails/31.jpg)
• The "niceness" of a process is a numeric hint to the kernel about how the process should be treated in relation to other processes contending for the CPU. The strange name is derived from the fact that it determines how nice you are going to be to other users of the system. A high nice value means a low priority for your process: you are going to be nice. A low or negative value means high priority: you are not very nice. The range of allowable niceness values is -20 to +19.
![Page 32: Curso de software03](https://reader030.fdocuments.co/reader030/viewer/2022020307/559c82851a28ab7e778b4710/html5/thumbnails/32.jpg)
Iniciar un comando con prioridad baja
El comando nice se utiliza para establecer un valor de niceness del proceso al iniciar el proceso.
El comando renice puede utilizarse para cambiar el niceness de un proceso en ejecución.
![Page 33: Curso de software03](https://reader030.fdocuments.co/reader030/viewer/2022020307/559c82851a28ab7e778b4710/html5/thumbnails/33.jpg)
Hacer procesos mucho más ambiciosos
Los usuarios normales no pueden bajar el niceness de un proceso. Esto trae dos implicaciones:
Debido a que los procesos inician con un niceness de 0 por defecto, los usuarios normales no pueden hacer procesos "ambiciosos" con valores de niceness negativos.
Una vez que a un proceso le han bajado el nice, los usuarios normales no pueden volverlo "normal" otra vez .
El administrador puede utilizar el comando renice como root para elevar el niceness
Usuario normal no puede restaurar dicha situación.
![Page 34: Curso de software03](https://reader030.fdocuments.co/reader030/viewer/2022020307/559c82851a28ab7e778b4710/html5/thumbnails/34.jpg)
Resumen de nice y renice Cada proceso tiene fijada una prioridad que Linux usa para determinar que
intervalos de tiempo son compartidos. Puede fijar la prioridad de un proceso comenzando con el comando nice:
$ nice -n 10 ./simulation &
El comando nice puede cambiar la prioridad de un proceso cuando lo inicia. Si usted quiere cambiar la prioridad de amabilidad de un proceso corriendo, use renice :
$ renice 10 641
641: old priority 0, new priority 10
![Page 35: Curso de software03](https://reader030.fdocuments.co/reader030/viewer/2022020307/559c82851a28ab7e778b4710/html5/thumbnails/35.jpg)
Conceptos Claves Las señales son una forma de bajo nivel de la comunicación entre procesos que surgen de una variedad de recursos, incluyendo el kernel, la terminal y otros procesos. Las señales se distinguen por los números de señales que tienen nombres y usos simbólicos.Los nombres simbólicos para los nombres de señales pueden listarse con el comando kill -l. El comando kill envía señales a otros procesos. Tras recibir una señal, un proceso puede ya sea, ignorarla, reaccionar de un modo especificado por defecto de kernel o implementar un manejador de señal personalizado. Convencionalmente, el número de señal 15 (SIGTERM) se utiliza para solicitar la terminación de un proceso. La señal número 9 (SIGKILL) termina un proceso y no puede anularse. Los comandos pkill y killall pueden utilizarse para enviar señales a procesos especificados por nombre de comando o el usuario a quienes pertenecen. Otras utilidades, tales como top y el Monitor de sistema GNOME, también pueden utilizarse para enviar señales.
Envio de señales
![Page 36: Curso de software03](https://reader030.fdocuments.co/reader030/viewer/2022020307/559c82851a28ab7e778b4710/html5/thumbnails/36.jpg)
Señales
Linux utiliza señales para notificar procesos de eventos anormales, y como un mecanismo comunicación entre procesos.
Como si el proceso tratase de dividir un número por 0, o Tratase de accesar memoia que no le pertenece.
Los procesos también pueden enviar señales a otros procesos.
Los diferentes tipos de señales tienen números simbólicos pero también se identifican con números enteros.
Los varios números enteros y el nombre simbólico que les son asignados pueden listarse por medio del comando kill -l
![Page 37: Curso de software03](https://reader030.fdocuments.co/reader030/viewer/2022020307/559c82851a28ab7e778b4710/html5/thumbnails/37.jpg)
¿Porque se envian las señales? Hay una variedad de razones por las cuales las señales se pueden enviar a un
proceso como se ilustra con los siguientes ejemplos. Excepciones de Hardware
El proceso le pidió al hardware realizar alguna operación errónea. Por ejemplo, el kernel enviará un proceso SIGFPE (señal número 8) si realiza una división por 0.
Condiciones de Software Los procesos pueden necesitar ser notificados de alguna condición anormal del software.
Por ejemplo, cada vez que muere un proceso, el kernel envía un SIGCHLD (número de señal 17) al padre del proceso.
Interrupciones de Terminal Varias secuencias de control de teclas de la terminal envían señales al proceso de la shell
bash. Por ejemplo, CONTROL-C envía un SIGINT (número de señal 2) mientras que CONTROL-Z envía un SIGTSTP (número de señal 20).
Otros Procesos Los procesos pueden elegir enviar señales a cualquier otro proceso perteneciente al mismo
usuario. El comando kill está diseñado para hacer justo esto.
![Page 38: Curso de software03](https://reader030.fdocuments.co/reader030/viewer/2022020307/559c82851a28ab7e778b4710/html5/thumbnails/38.jpg)
Enviando Señales
El comando kill se utiliza para enviar señales a otros procesos.
![Page 39: Curso de software03](https://reader030.fdocuments.co/reader030/viewer/2022020307/559c82851a28ab7e778b4710/html5/thumbnails/39.jpg)
Recepción de SeñalesCuando un proceso recibe una señal puede realizar una de las siguientes tres acciones.
Implementar un manejador de señal predeterminado del kernel Cada señal se asigna una de las siguientes conductas.
Terminar: El proceso de recepción se cierra. Ignorar: El proceso de recepción ignora la señal Nucleo: El proceso de recepción termina, pero bota una imagen de su memoria en un
archivo llamado core en el actual directorio de trabajo del proceso. El archivo core puede ser utilizado por desarrolladores para ayudar a depurar el programa.
Parar: Detener (suspender) el proceso.
Escoja ignorar la señal Los programadores pueden elegir que su aplicación simplemente ignore señales especificadas.
Escoger implementar un manejador de señal personalizado Los programadores pueden elegir implementar su propia conducta cuando se recibe una señal
específica.
![Page 40: Curso de software03](https://reader030.fdocuments.co/reader030/viewer/2022020307/559c82851a28ab7e778b4710/html5/thumbnails/40.jpg)
Uso de Señales para terminar procesos
Señales importantes para usuarios normales
![Page 41: Curso de software03](https://reader030.fdocuments.co/reader030/viewer/2022020307/559c82851a28ab7e778b4710/html5/thumbnails/41.jpg)
El comando pkillEl comando pkill se puede utilizar para enviar señales a procesos seleccionados por medios más generales.
Opciones para el comando pkill
![Page 42: Curso de software03](https://reader030.fdocuments.co/reader030/viewer/2022020307/559c82851a28ab7e778b4710/html5/thumbnails/42.jpg)
El comando killallkillall envía señales a procesos especificados por el nombre de comando.
Opciones para el comando killall
![Page 43: Curso de software03](https://reader030.fdocuments.co/reader030/viewer/2022020307/559c82851a28ab7e778b4710/html5/thumbnails/43.jpg)
El Monitor de Sistema
La aplicación del Monitor de sistema GNOME, presentada en una lección anterior, también puede utilizarse para enviar señales a los procesos.
Al hacer click derecho en un proceso, un menú emergente le permite al usuario seleccionar End Process, el cual tiene el efecto de entregar un SIGTERM al proceso.
![Page 44: Curso de software03](https://reader030.fdocuments.co/reader030/viewer/2022020307/559c82851a28ab7e778b4710/html5/thumbnails/44.jpg)
Conceptos Claves La shell bash permite a los comandos ejecutarse en segundo plano como "trabajos".
La shell bash permite a un trabajo ejecutarse en segundo plano y puede tener múltiples trabajos en segundo plano.
El comando jobs listará todos los trabajos en segundo plano.
La secuencia de teclas CONTROL-Z suspenderá y enviará a segundo plano el actual trabajo que se encuentra en primer plano.
El comando bg reanuda un trabajo de segundo plano.
El comando fg trae un trabajo de segundo plano a primer plano.
Control de Trabajo
![Page 45: Curso de software03](https://reader030.fdocuments.co/reader030/viewer/2022020307/559c82851a28ab7e778b4710/html5/thumbnails/45.jpg)
Ejecución de comandos en segundo plano como trabajos
Cualquier comando que usted especifique puede también ejecutarse en el segundo plano,adjuntándole el signo (“&”) a la línea de comandos.Sólo los comandos de larga ejecución que no requieren entradas desde el teclado y no generan grandes cantidades de salida son apropiados para un segundo plano.
![Page 46: Curso de software03](https://reader030.fdocuments.co/reader030/viewer/2022020307/559c82851a28ab7e778b4710/html5/thumbnails/46.jpg)
Administración de múltiples trabajos
Iniciando multiples jobs en background
Visualizando jobs en background (comando jobs)
Traer un trabajo al primer plano con fg (comando fg)
![Page 47: Curso de software03](https://reader030.fdocuments.co/reader030/viewer/2022020307/559c82851a28ab7e778b4710/html5/thumbnails/47.jpg)
Suspensión del trabajo de primer plano con CONTROLZ
La secuencia CONTROL-Z es un método para suspender procesos.
![Page 48: Curso de software03](https://reader030.fdocuments.co/reader030/viewer/2022020307/559c82851a28ab7e778b4710/html5/thumbnails/48.jpg)
Reiniciar un trabajo detenido en el segundo plano
Un trabajo detenido puede reiniciarse en el segundo plano con el comando incorporado bg.
![Page 49: Curso de software03](https://reader030.fdocuments.co/reader030/viewer/2022020307/559c82851a28ab7e778b4710/html5/thumbnails/49.jpg)
Matar Trabajos (Killing Jobs)El comando kill, utilizado para entregar señales para procesos se implementa como un comando incorporado de shell.
![Page 50: Curso de software03](https://reader030.fdocuments.co/reader030/viewer/2022020307/559c82851a28ab7e778b4710/html5/thumbnails/50.jpg)
Administración de trabajos en la shell bash
![Page 51: Curso de software03](https://reader030.fdocuments.co/reader030/viewer/2022020307/559c82851a28ab7e778b4710/html5/thumbnails/51.jpg)
Conceptos Claves El comando at puede someter comandos para que se ejecuten más tarde.
El comando batch puede emitir comandos para que se ejecuten cuando la carga de las máquinas sea baja.
Los comandos pueden escribirse directamente o someterse como un script.
la stdout de los trabajos at se envía por correo al usuario.
Los comandos atq y atrm se utilizan para examinar y quitar trabajos actualmente programados.
Programación de Taeas retrasadas: at
![Page 52: Curso de software03](https://reader030.fdocuments.co/reader030/viewer/2022020307/559c82851a28ab7e778b4710/html5/thumbnails/52.jpg)
El demonio atdEl demonio atd le permite a los usuarios someter trabajos para ser realizados más tarde
Para utilizar el demonio atd, éste debe estar ejecutándose.
Los usuarios pueden confirmar que atd se está ejecutando simplemente al examinar la lista de procesos en ejecución
![Page 53: Curso de software03](https://reader030.fdocuments.co/reader030/viewer/2022020307/559c82851a28ab7e778b4710/html5/thumbnails/53.jpg)
Envío de trabajos con atEl comando at se utiliza para someter trabajos al demonio atd para que se ejecuten en una hora específica. Los comandos que se van a ejecutar son sometidos ya sea como script (con la opción -f) o escritos directamente via la stdin.at [-f filename | -m] TIME
![Page 54: Curso de software03](https://reader030.fdocuments.co/reader030/viewer/2022020307/559c82851a28ab7e778b4710/html5/thumbnails/54.jpg)
Para programar una tarea no repetitiva en un tiempo específico, escriba el comando at time, en el que time es el tiempo para ejecutar el comando.
El argumento time puede ser uno de los siguientes:
* formato HH:MM — Por ejemplo,04:00 especifica 4:00AM. Si se inserta el tiempo, se ejecuta en el tiempo específico el día después. * midnight — Especifica 12:00AM. * noon — Especifica 12:00PM. * teatime — Especifica 4:00PM. * formato del nombre-mes, día y año — Por ejemplo, Enero 15 del año 2002. El año es opcional. * formato MMDDYY, MM/DD/YY, o MM.DD.YY — Por ejemplo, 011502 para el día 15 de Enero del año 2002. * ahora + tiempo — el tiempo está en minutos, horas, días o semanas. Por ejemplo, ahora + 5 días, especifica que el comando debería ser ejecutado a la misma hora en 5 días.
La hora debe ser especificada en primer lugar, seguido por la fecha opcional. Para más información sobre el formato del tiempo, lea el fichero del texto /usr/share/doc/at-<version>/timespec.
Tras haber escrito el comando at con el argumento del tiempo, el prompt at> será visualizado. Escriba el comando a ejecutar, , pulse [Intro] y escriba Ctrl-D. Se puede especificar más de un comando escribiendo cada comando seguido de la tecla [Intro]. Después de haber escrito todos los comandos, pulse [Intro] para obtener una línea en blanco y escriba Ctrl-D. Alternativamente, se puede introducir un script de shell en el intérprete de comandos y escribir Ctrl-D en una línea en blanco para salir. Si se introduce un script, la configuración de la shell usada será la configuración de la shell en la SHELL del usuario, la shell de registro del usuario o /bin/sh (el primero que se encuentre).
![Page 55: Curso de software03](https://reader030.fdocuments.co/reader030/viewer/2022020307/559c82851a28ab7e778b4710/html5/thumbnails/55.jpg)
Para ejecutar una tarea no repetitiva cuando el promedio de carga está por debajo de 0.8, utilice el comando batch.
Tras haber escrito el comando batch, se visualiza el intérprete de comandos at>. Escriba el comando a ejecutar, pulse [Intro] y escriba Ctrl-D. Se puede especificar más de un comando al escribir cada comando seguido de la tecla [Intro]. Tras haber escrito todos los comandos, pulse [Intro] para acceder a una línea en blanco y escriba Ctrl-D. Se puede introducir de forma alternativa un script de shell en el intérprete de comandos y escribir Ctrl-D en una línea en blanco para salir. Si se introduce un script, la shell usada es la configuración de la she en el entorno SHELL del usuario, la shell de login del usuario, o /bin/sh (todo lo que se encuentre en primer lugar). Tan pronto como el promedio de carga está bajo 0.8, se ejecutará la configuración del comando o el script.
![Page 56: Curso de software03](https://reader030.fdocuments.co/reader030/viewer/2022020307/559c82851a28ab7e778b4710/html5/thumbnails/56.jpg)
Resumen de los comandos at
![Page 57: Curso de software03](https://reader030.fdocuments.co/reader030/viewer/2022020307/559c82851a28ab7e778b4710/html5/thumbnails/57.jpg)
Conceptos Claves La utilidad cron se utiliza para programar tareas recurrentes.
El comando crontab provee un frontend para editar archivos crontab.
El archivo crontab utiliza 5 campos para especificar la información de temporización.
la stdout de trabajos cron se envía por correo al usuario.
Programación de Taeas periodicas: cron
![Page 58: Curso de software03](https://reader030.fdocuments.co/reader030/viewer/2022020307/559c82851a28ab7e778b4710/html5/thumbnails/58.jpg)
Cron es el nombre del programa que permite a usuarios Linux/Unix ejecutar automáticamente comandos o scripts (grupos de comandos) a una hora o fecha específica. Es usado normalmente para comandos de tareas administrativas, como respaldos, pero puede ser usado para ejecutar cualquier cosa. Como se define en las páginas del manual de cron (#> man cron) es un demonio que ejecuta programas agendados.
En prácticamente todas las distribuciones de Linux se usa la versión Vixie Cron, por la persona que la desarrolló, que es Paul Vixie, uno de los grandes gurús de Unix, también creador, entre otros sistemas, de BIND que es uno de los servidores DNS más populares del mundo.
![Page 59: Curso de software03](https://reader030.fdocuments.co/reader030/viewer/2022020307/559c82851a28ab7e778b4710/html5/thumbnails/59.jpg)
The cron Service
El demonio crond es el demonio que realiza tareas periódicamente en nombre del sistema o de usuarios individuales.
El demonio suele iniciarse cuando el sistema arranca, por lo tanto, la mayoría de usuarios lo pueden ignorar. Al listar todos los procesos y buscar crond puede confirmar si el demonio crond está en ejecución.
![Page 60: Curso de software03](https://reader030.fdocuments.co/reader030/viewer/2022020307/559c82851a28ab7e778b4710/html5/thumbnails/60.jpg)
Usando el comando crontabLos usuarios rara vez administran su archivo crontab directamente (o incluso saben dónde se almacena), en cambio, utilizan el comando crontab para editar la lista o quitarla.
crontab {-e | -l | -r} crontab FILE
![Page 61: Curso de software03](https://reader030.fdocuments.co/reader030/viewer/2022020307/559c82851a28ab7e778b4710/html5/thumbnails/61.jpg)
Sintaxis crontabLos usuarios especifican los trabajos que se van a ejecutar y cuándo se van a ejecutar, al configurar un archivo conocido como el "cuadro cron" a menudo abreviado en inglés "crontab".
Las líneas del comando cron constan de seis campos separados de espacios en blanco. Los primeros 5 campos se utilizan para especificar cuándo ejecutar el comando y el sexto campo se utiliza para especificar el comando a ejecutar (compuesto de todo después del quinto campo).
![Page 62: Curso de software03](https://reader030.fdocuments.co/reader030/viewer/2022020307/559c82851a28ab7e778b4710/html5/thumbnails/62.jpg)
Hay al menos dos maneras distintas de usar cron:
La primera es en el directorio /etc, donde muy seguramente encontrarás los siguientes directorios:
* cron.hourly * cron.daily * cron.weekly * cron.monthly
Si se coloca un archivo tipo script en cualquiera de estos directorios, entonces el script se ejecutará cada hora, cada día, cada semana o cada mes, dependiendo del directorio.
Para que el archivo pueda ser ejecutado tiene que ser algo similar a lo siguiente:
#!/bin/sh#script que genera un respaldocd /usr/documentostar czf * respaldocp respaldo /otra_directorio/.
Nótese que la primera línea empieza con #!, que indica que se trata de un script shell de bash, las demás líneas son los comandos que deseamos ejecute el script. Este script podría nombrarse por ejemplo respaldo.sh y también debemos cambiarle los permisos correspondientes para que pueda ser ejecutado, por ejemplo:
#> chmod 700 respaldo.sh#> ls -l respaldo.sh-rwx------ 1 root root 0 Jul 20 09:30 respaldo.shLa "x" en el grupo de permisos del propietario (rwx) indica que puede ser ejecutado.
![Page 63: Curso de software03](https://reader030.fdocuments.co/reader030/viewer/2022020307/559c82851a28ab7e778b4710/html5/thumbnails/63.jpg)
estud:~# ls -d /etc/cron.* -ldrwxr-xr-x 2 root root 4096 dic 11 23:41 /etc/cron.ddrwxr-xr-x 2 root root 4096 dic 11 23:41 /etc/cron.dailydrwxr-xr-x 2 root root 4096 dic 2 21:18 /etc/cron.hourlydrwxr-xr-x 2 root root 4096 dic 2 21:18 /etc/cron.monthlydrwxr-xr-x 2 root root 4096 dic 2 21:18 /etc/cron.weekly
estud:~# ls /etc/cron.daily/* -l-rwxr-xr-x 1 root root 199 jul 26 2008 /etc/cron.daily/amavisd-new-rwxr-xr-x 1 root root 633 jul 14 2009 /etc/cron.daily/apache2-rwxr-xr-x 1 root root 6822 feb 7 2009 /etc/cron.daily/apt-rwxr-xr-x 1 root root 314 dic 4 2008 /etc/cron.daily/aptitude-rwxr-xr-x 1 root root 502 nov 20 2007 /etc/cron.daily/bsdmainutils-rwxr-xr-x 1 root root 4073 sep 30 2008 /etc/cron.daily/exim4-base-rwxr-xr-x 1 root root 89 oct 8 2008 /etc/cron.daily/logrotate-rwxr-xr-x 1 root root 954 ene 24 2009 /etc/cron.daily/man-db-rwxr-xr-x 1 root root 438 oct 28 2008 /etc/cron.daily/mlocate-rwxr-xr-x 1 root root 330 may 21 2009 /etc/cron.daily/squirrelmail-rwxr-xr-x 1 root root 3349 sep 28 2008 /etc/cron.daily/standard
![Page 64: Curso de software03](https://reader030.fdocuments.co/reader030/viewer/2022020307/559c82851a28ab7e778b4710/html5/thumbnails/64.jpg)
Ejemplos más complejos
01 * * * * Se ejecuta al minuto 1 de cada hora de todos los días15 8 * * * A las 8:15 a.m. de cada día15 20 * * * A las 8:15 p.m. de cada día00 5 * * 0 A las 5 a.m. todos los domingos* 5 * * Sun Cada minuto de 5:00a.m. a 5:59a.m. todos los domingos45 19 1 * * A las 7:45 p.m. del primero de cada mes01 * 20 7 * Al minuto 1 de cada hora del 20 de julio10 1 * 12 1 A la 1:10 a.m. todos los lunes de diciembre00 12 16 * Wen Al mediodía de los días 16 de cada mes y que sea Miércoles30 9 20 7 4 A las 9:30 a.m. del dia 20 de julio y que sea jueves30 9 20 7 * A las 9:30 a.m. del dia 20 de julio sin importar el día de la semana20 * * * 6 Al minuto 20 de cada hora de los sábados20 * * 1 6 Al minuto 20 de cada hora de los sábados de enero
![Page 65: Curso de software03](https://reader030.fdocuments.co/reader030/viewer/2022020307/559c82851a28ab7e778b4710/html5/thumbnails/65.jpg)
Otros
59 11 * 1-3 1,2,3,4,5A las 11:59 a.m. de lunes a viernes, de enero a marzo
45 * 10-25 * 6-7Al minuto 45 de todas las horas de los días 10 al 25 de todos los meses y que el día sea sábado o domingo
10,30,50 * * * 1,3,5En el minuto 10, 30 y 50 de todas las horas de los días lunes, miércoles y viernes
*/15 10-14 * * *Cada quince minutos de las 10:00a.m. a las 2:00p.m.
* 12 1-10/2 2,8 *Todos los minutos de las 12 del día, en los días 1,3,5,7 y 9 de febrero a agosto. (El incremento en el tercer campo es de 2 y comienza a partir del 1)
0 */5 1-10,15,20-23 * 3Cada 5 horas de los días 1 al 10, el día 15 y del día 20 al 23 de cada mes y que el día sea miércoles
3/3 2/4 2 2 2Cada 3 minutos empezando por el minuto 3 (3,6,9, etc.) de las horas 2,6,10, etc (cada 4 horas empezando en la hora 2) del día 2 de febrero y que sea martes
![Page 66: Curso de software03](https://reader030.fdocuments.co/reader030/viewer/2022020307/559c82851a28ab7e778b4710/html5/thumbnails/66.jpg)
Linux es un sistema multiusuario y cron es de las aplicaciones que soporta el trabajo con varios usuarios a la vez. Cada usuario puede tener su propio archivo crontab, de hecho el /etc/crontab se asume que es el archivo crontab del usuario root, aunque no hay problema que se incluyan otros usuarios, y de ahí el sexto campo que indica precisamente quien es el usuario que ejecuta la tarea y es obligatorio en /etc/crontab.
Pero cuando los usuarios normales (e incluso root) desean generar su propio archivo de crontab, entonces utilizaremos el comando crontab.
En el directorio /var/spool/cron (puede variar según la distribución), se genera un archivo cron para cada usuario, este archivo aunque es de texto, no debe editarse directamente.
bacteria:~# ls -l /var/spool/cron/crontabs/total 8-rw------- 1 enrique crontab 260 abr 16 10:42 enrique-rw------- 1 root crontab 766 dic 1 10:31 root
![Page 67: Curso de software03](https://reader030.fdocuments.co/reader030/viewer/2022020307/559c82851a28ab7e778b4710/html5/thumbnails/67.jpg)
También se pueden especificar los siguientes ’sinónimos’:
* @reboot: cada vez que el sistema arranque. * @yearly: equivale a 0 0 1 1 *
* @monthly: equivale a 0 0 1 * * * @weekly: equivale a 0 0 * * 0
* @daily: equivale a 0 0 * * * * @hourly: equivale a 0 * * * *
El carácter barra (/) permite especificar intervalos en los rangos. Por ejemplo, si hablamos de horas, 8-16/2 significa que el comando se ejecutará a las 8, 10, 12, 14 y 16 horas. Si hablamos de minutos, por ejemplo, */5 significa cada 5 minutos.
![Page 68: Curso de software03](https://reader030.fdocuments.co/reader030/viewer/2022020307/559c82851a28ab7e778b4710/html5/thumbnails/68.jpg)
Controlando el acceso a cron
Cron permite controlar que usuarios pueden o no pueden usar los servicios de cron. Esto se logra de una manera muy sencilla a través de los siguientes archivos:
* /etc/cron.allow * /etc/cron.deny
Para impedir que un usuario utilice cron o mejor dicho el comando crontab, basta con agregar su nombre de usuario al archivo /etc/cron.deny, para permitirle su uso entonces sería agregar su nombre de usuario en /etc/cron.allow, si por alguna razón se desea negar el uso de cron a todos los usuarios, entonces se puede escribir la palabra ALL al inicio de cron.deny y con eso bastaría.
#> echo ALL >>/etc/cron.denyo para agregar un usuario mas a cron.allow#> echo juan >>/etc/cron.allow
Si no existe el archivo cron.allow ni el archivo cron.deny, en teoría el uso de cron esta entonces sin restricciones de usuario. Si se añaden nombres de usuarios en cron.allow, sin crear un archivo cron.deny, tendrá el mismo efecto que haberlo creado con la palabra ALL. Esto quiere decir que una vez creado cron.allow con un solo usuario, siempre se tendrán que especificar los demás usuarios que se quiere usen cron, en este archivo.
![Page 69: Curso de software03](https://reader030.fdocuments.co/reader030/viewer/2022020307/559c82851a28ab7e778b4710/html5/thumbnails/69.jpg)
date' básico y cambiar el entorno local
En este pequeño manual, comenzaremos entonces desde lo básico, date sin argumentos:
#> dateSun Jun 24 18:50:23 CDT 2007
Lo primero que notamos es la que la salida esta en inglés, ya que el primer campo representa el día de la semana "Sun" de "Sunday" domingo, y el siguiente campo no es tan evidente que esté en inglés ya que es Junio pero si fuera por ejemplo enero se mostraría "Jan" de "january" y como se trata de trabajar en español (claro, nada contra el inglés, solo es por si te gusta tener tu sistema operativo en español), será lo primero que cambiaremos entonces:
#> echo $LC_TIME
#> La variable de entorno LC_TIME no tiene ningún valor, por lo tanto toma el default que es el inglés. #>#> export LC_TIME=es_MX#> datedom jun 24 18:55:18 CDT 2007
![Page 70: Curso de software03](https://reader030.fdocuments.co/reader030/viewer/2022020307/559c82851a28ab7e778b4710/html5/thumbnails/70.jpg)
¿Cómo cambiar la fecha desde la consola?.
# date -d mm/dd/aa
También podemos utilizar el siguiente comando:
# date --date=mm/dd/aa
Donde mm=mes, dd=dia y aa=año.
¿Cómo cambiar la hora desde la consola?.
# date -s hh:mm:ss
También podemos utilizar el siguiente comando:
# date --set=hh:mm:ss
Donde hh=hora, mm=minuto, ss=segundo.
![Page 71: Curso de software03](https://reader030.fdocuments.co/reader030/viewer/2022020307/559c82851a28ab7e778b4710/html5/thumbnails/71.jpg)
Opción "-d" (trabajando con elementos relativos)
Pero regresemos a date, y ahora veamos como podemos obtener resultados de fechas en el pasado o presente, los más simples primero y todo con la opción "-d":
#> date -d "tomorrow"lun jun 25 19:55:28 CDT 2007#> date -d "yesterday"sáb jun 23 19:55:36 CDT 2007
Pues interesante, dirás, pero sigue sin ser muy útil, pero espera, dentro de las comillas " ", es posible utilizar una combinación de las siguientes palabras: (todas en inglés)
días de la semana (palabra completa o abreviación de tres letras), meses, next, ago, last, year, month, week, day, hour, minute, second, indicadores de zonas horarias, números, el símbolo +, el símbolo -
Asi que si por ejemplo quisieras saber que día será dentro de 6 semanas:
#> date -d "6 weeks"dom ago 5 20:25:08 CDT 2007
O lo contrario en el pasado con "ago", que día fue hace 6 semanas:
#> date -d "6 weeks ago"dom may 13 20:26:46 CDT 2007
![Page 72: Curso de software03](https://reader030.fdocuments.co/reader030/viewer/2022020307/559c82851a28ab7e778b4710/html5/thumbnails/72.jpg)
[root@localhost ~]# cat /etc/adjtime0.041498 1177502852 0.0000001177502852LOCAL[root@localhost ~]#-----
Supongamos queremos poner: 27-Mayo-2007 y la hora 17:27.Esto lo haremos como root:
# date --set "2007-05-27 17:27"Sun May 27 17:27:00 CET 2007
Ahora realizaremos el mismo cambio para actualizar la fecha en la BIOS.
# hwclock --set --date="2007-05-27 17:27"
Para comprobarlo tecleamos:
# hwclockFri Feb 25 16:25:06 2000 -0.010586 seconds
![Page 73: Curso de software03](https://reader030.fdocuments.co/reader030/viewer/2022020307/559c82851a28ab7e778b4710/html5/thumbnails/73.jpg)
SERVICIO de TIEMPO
1- apt-get install ntp
2- config de ntp*********************************# /etc/ntp.conf, configuration for ntpd; see ntp.conf(5) for helpdriftfile /var/lib/ntp/ntp.drift# Enable this if you want statistics to be logged.#statsdir /var/log/ntpstats/statistics loopstats peerstats clockstatsfilegen loopstats file loopstats type day enablefilegen peerstats file peerstats type day enablefilegen clockstats file clockstats type day enable
# You do need to talk to an NTP server or two (or three).#server ntp.your-provider.example
# pool.ntp.org maps to about 1000 low-stratum NTP servers. Your server will# pick a different set every time it starts up. Please consider joining the# pool: <http://www.pool.ntp.org/join.html>server herus.cfg.sld.cu iburst dynamicserver time.sld.cu iburst dynamic#server 1.debian.pool.ntp.org iburst dynamic#server 2.debian.pool.ntp.org iburst dynamic#server 3.debian.pool.ntp.org iburst dynamic#server 4.debian.pool.ntp.org iburst dynamic..........******************************************
![Page 74: Curso de software03](https://reader030.fdocuments.co/reader030/viewer/2022020307/559c82851a28ab7e778b4710/html5/thumbnails/74.jpg)
3- se reinicia el servicio
/etc/init.d/ntpd restart
4- se configura el inetd para que levante los sockets del programa
*****************************************# /etc/inetd.conf: see inetd(8) for further informations.## Internet superserver configuration database### Lines starting with "#:LABEL:" or "#<off>#" should not# be changed unless you know what you are doing!## If you want to disable an entry so it isn't touched during# package updates just comment it out with a single '#' character.## Packages should modify this file by using update-inetd(8)## <service_name> <sock_type> <proto> <flags> <user> <server_path> <args>##:INTERNAL: Internal services#discard stream tcp nowait root internal#discard dgram udp wait root internal#daytime stream tcp nowait root internaltime stream tcp nowait root internal****************************************
5- se reincia el servicio del superdemonio
/etc/init.d/openbsd-inetd restart
Debe estar abierto en cortafuegos acceso por 37 udp y tcpcp
![Page 75: Curso de software03](https://reader030.fdocuments.co/reader030/viewer/2022020307/559c82851a28ab7e778b4710/html5/thumbnails/75.jpg)
Se prueba que sea accesible el servicio de tiempo desde localhost y otro servicio
provincia:~# telnet localhost 37 Trying 127.0.0.1...Connected to localhost.Escape character is '^]'.�e Connection closed by foreign host.�
jagua:~# telnet correo.cfg.sld.cu 37Trying 201.220.209.242...Connected to casper.cfg.sld.cu.Escape character is '^]'.�e© .Connection closed by foreign host
Para probar que el servicio de ntp está ok se debe ejecutar
ntpq -p
remote refid st t when poll reach delay offset jitter============================================================================== herus.cfg.sld.c .STEP. 16 u - 64 0 0.000 0.000 0.000*finlay.red.sld. 72.232.254.202 3 u 61 64 377 4.832 1.783 1.975 201.220.209.255 .BCST. 16 u - 64 0 0.000 0.000 0.001
y luego desde las pc se hace rdate al server
jagua:~# rdate correo.cfg.sld.cumar 06 abr 2010 12:25:22 CDT
y se ajusta la hora de las estaciones....
![Page 76: Curso de software03](https://reader030.fdocuments.co/reader030/viewer/2022020307/559c82851a28ab7e778b4710/html5/thumbnails/76.jpg)
Entrada y salida estándar y tuberías
![Page 77: Curso de software03](https://reader030.fdocuments.co/reader030/viewer/2022020307/559c82851a28ab7e778b4710/html5/thumbnails/77.jpg)
Entrada y Salida estándar
En Linux cada proceso abre tres canales de comunicación:
1. la entrada estándar (stdin): entrada de datos, el teclado. 2. la salida estándar 1 (stdout): respuesta del comando, el monitor. 3. la salida estándar 2 (stderr): mensajes de error, el monitor.
Por ejemplo, el comando cat tiene como entrada estándar el teclado y como salida estándar 1 el monitor. Si lo ejecutamos sin argumentos leerá datos del teclado y los enviará al monitor, de manera que cada línea que el usuario teclea es inmediatamente enviada al monitor, hasta la señal de fin de entrada de datos (<Ctrl+D>).
$ catHola caracolHola caracolAdiosAdios<Ctrl+D>
En cambio, el comando para copiar archivos cp tiene como entrada estándar un archivo (file1) y como salida estándar 1 otro archivo (file2):
cp file1 file2
![Page 78: Curso de software03](https://reader030.fdocuments.co/reader030/viewer/2022020307/559c82851a28ab7e778b4710/html5/thumbnails/78.jpg)
Veamos los operadores que nos permiten redireccionar la entrada y salida estándar:
* redirección destructiva de la salida (>) o Podemos redireccionar la salida estándar 1 a un archivo usando el símbolo ">". Este tipo de redirección es destructiva: si el archivo no existe lo crea, y si existe lo sobrescribe. En el siguiente ejemplo vemos que el resultado de cat no se muestra por pantalla, sino que es enviado al archivo lista.
$ cat > lista Hola caracol Adios <Ctrl+D>
Para almacenar el contenido del archivo file1 en file2 haremos:
$ cat file1 > file2
o Este tipo de redirección también se puede aplicar a la salida estándar 2, la salida de errores, que normalmente es también el monitor. Por ejemplo, cuando se ejecuta un comando en segundo plano, interesa evitar que los mensajes de error aparezcan en la pantalla, pues en ella habremos empezado a hacer otra cosa: en ese caso, lo que haremos será redirigir la salida de errores hacia un archivo. En el siguiente ejemplo, compilamos en segundo plano un archivo dirigiendo los mensajes de error al archivo errores:
$ gcc prueba.c 2> errores &
o Podemos redireccionar ambas salidas, la salida estándar 1 y la 2. Por ejemplo, si ejecutamos el siguiente comando redireccionando la salida estándar 1, el sistema listará el directorio actual y enviará la salida al archivo dummy:
$ ls > dummy
![Page 79: Curso de software03](https://reader030.fdocuments.co/reader030/viewer/2022020307/559c82851a28ab7e778b4710/html5/thumbnails/79.jpg)
Pero si hacemos eso con un directorio inexistente, el sistema no enviará nada a dummy, pero mandará el mensaje de error a la pantalla, ya que hemos redireccionado la salida estándar 1 pero no la salida estándar 2, la salida estándar para errores:
$ ls directorio_inexistente > dummy ls: directorio_inexistente: No existe el archivo o el directorio. Para que el error tampoco aparezca por pantalla redireccionaremos ambas salidas: $ ls directorio_inexistente > dummy 2> dummy
# redirección no destructiva de la salida (>>)
* Podemos hacer una redirección no destructiva de la salida estándar 1 utilizando el operador ">>". Este tipo de redirección es no destructiva: si el archivo no existe lo crea, y si existe añadirá la salida al final del archivo, en lugar de sobrescribirlo. Por ejemplo, para añadir el archivo file2 al final de file1 haremos:
$ cat file2 >> file1
* También se puede aplicar la redirección no destructiva a la salida estándar 2, la salida de errores. Por ejemplo, para añadir los mensajes de error producidos al compilar prueba.c en segundo plano al archivo errores haremos:
$ gcc prueba.c 2>> errores &
# redirección de la entrada (<)Podemos redireccionar la entrada estándar usando el operador "<":$ sort < cosas.txtaceitunasberenjenascastañas
![Page 80: Curso de software03](https://reader030.fdocuments.co/reader030/viewer/2022020307/559c82851a28ab7e778b4710/html5/thumbnails/80.jpg)
# tuberías (|) las tuberías o pipes nos permiten conectar (entubar) una cadena de comandos: la salida del primero es la entrada del segundo, y así sucesivamente. Por ejemplo, vamos a enviar a sort la salida de ls, para que la ordene en orden inverso:
$ ls | sort -rtesisnotashistoria
Podemos conectar tantos comandos como queramos:
$ ls /usr | sort -r | more
# bifurcaciones (| tee) una bifurcación o T permite que la salida de un comando, además de redirigirse a un determinado archivo, se bifurque también hacia la terminal, con objeto de observar inmediatamente el resultado. Para que la salida de ls se bifurque hacia la terminal y hacia file haremos:
$ ls | tee file
Para que la salida de ls se añada al final de file usaremos la opción -a:
$ ls | tee -a file
![Page 81: Curso de software03](https://reader030.fdocuments.co/reader030/viewer/2022020307/559c82851a28ab7e778b4710/html5/thumbnails/81.jpg)
# tuberías con nombre (FIFOs): una tubería con nombre es un archivo que actúa como una tubería. Uno añade algo al archivo y sale por el otro extremo. Es por eso que se denomina FIFO o First-In-First-Out: lo primero que entra a la tubería es lo primero que sale por el otro extremo.
Si se escribe en una tubería con nombre, el proceso que escribe en la tubería no finaliza hasta que la información escrita es leída de la tubería.
Si se lee de una tubería con nombre, el proceso de lectura espera hasta que exista algo para leer antes de finalizar.
El tamaño de la tubería es siempre cero: no almacena datos, sólo vincula dos procesos. No obstante, puesto que la tubería tiene nombre, los dos procesos no tienen que estar en la misma línea de comandos ni tampoco ser ejecutados por el mismo usuario.
Veamos un ejemplo. Creamos una tubería con nombre:$ mkfifo mi_tuberia
Escribimos en la tubería con nombre en segundo plano:$ echo "hola" > mi_tuberia &[1] 5952
Listamos la tubería con nombre para comprobar que su tamaño es cero:$ ls -l mi_tuberiaprw-r--r-- 1 francis francis 0 2003-11-06 23:18 mi_tuberia
Leemos la tubería con nombre:$ cat mi_tuberiahola[1]+ Done echo "hola" > mi_tuberia
![Page 82: Curso de software03](https://reader030.fdocuments.co/reader030/viewer/2022020307/559c82851a28ab7e778b4710/html5/thumbnails/82.jpg)