Red de conocimiento informático - Consumibles informáticos - Explicar los métodos de ejecución y seguimiento de los programas shell.

Explicar los métodos de ejecución y seguimiento de los programas shell.

¿Qué es Shell? Cualquier invento tiene una interfaz para que la utilicen los usuarios. La interfaz para los usuarios de UNIX es el Shell (es posible que esté familiarizado con el comando de DOS, pero UNIX es mucho más potente). Shell proporciona un entorno para que los usuarios ingresen comandos y parámetros y obtengan resultados de ejecución de comandos. Para diferentes necesidades, UNIX proporciona diferentes Shells. La mayoría de los UNIX actuales son compatibles con BourneShell. El siguiente tutorial toma BourneShell (Bsh) como ejemplo para comprender las poderosas funciones de UNIX Shell paso a paso, aprovechar su poderoso encanto y lograr el propósito de una administración y aplicación más conveniente y flexible. UNIX. 1. Método de interacción entre el kernel de UNIX y el Shell Al iniciar UNIX, el programa UNIX (kernel) se transferirá a la memoria de la computadora y permanecerá en la memoria hasta que se apague la máquina. Durante el proceso de arranque, el programa init se ejecutará en segundo plano hasta que se apague la máquina. El programa consulta el fichero /etc/inittab, que enumera los distintos puertos a los que está conectado el terminal y sus características. Cuando se encuentra una terminal activa, el programa init llama al programa getty para mostrar el inicio de sesión y otra información de inicio de sesión en la terminal. (nombre de usuario y contraseña), después de ingresar la contraseña, getty llama al proceso de inicio de sesión, que verifica la identidad del usuario según el contenido del archivo /etc/passwd. Si el usuario está autenticado, el proceso de inicio de sesión establece el directorio de inicio del usuario en el directorio actual y entrega el control a una serie de programas de configuración. El programa de instalación puede ser una aplicación específica. Por lo general, el programa de instalación es un programa Shell, como:/bin/sh, que es Bourne Shell (el comando aparece, jaja). Después de obtener el control, el programa Shell lee y ejecuta los archivos /etc/.profile y .profile. Estos dos archivos establecen el entorno de trabajo de todo el sistema y del propio usuario, respectivamente. Finalmente, el Shell muestra un símbolo del sistema, como $. (Esto toma bsh como ejemplo. Si es csh, es .cshrc, ksh es .kshrc, bash es .bashrc, etc.) Tenga en cuenta que /etc/.profile y .profile pueden considerarse como autoexec.bat de DOS o archivos config.sys) Cuando se cierra el shell, el kernel entrega el control al programa init, que reinicia el proceso de inicio de sesión automático. Hay dos formas de salir del shell: una es que el usuario ejecute el comando de salida y la otra es que el kernel (por ejemplo, root usa el comando kill) emita un comando kill para finalizar el proceso del shell. Una vez que se cierra el shell, el kernel recupera los recursos utilizados por el usuario y el programa. Después de que el usuario inicia sesión, la relación entre el comando del usuario y la computadora es: proceso de comando--->programa Shell--->kernel UNIX--->hardware de la computadora. Cuando el usuario ingresa un comando, como $ls, el Shell ubicará su archivo ejecutable /bin/ls y lo pasará al kernel para su ejecución. El kernel genera un nuevo subproceso que llama y ejecuta /bin/ls. Cuando el programa completa la ejecución, el kernel cancela el proceso hijo y entrega el control a su proceso padre, el programa Shell. Por ejemplo, ejecute: $ps Este comando enumerará los procesos que está ejecutando el usuario, es decir, el programa Shell (hablemos de ello en detalle a continuación, no se preocupe ahora) y el programa ps. Si se ejecuta: $sleep 10 & $ps El primer comando generará un proceso secundario de suspensión ejecutado en segundo plano. El subproceso se mostrará cuando se ejecute el comando ps. Cada vez que el usuario ejecuta un comando, se generará un proceso hijo. La ejecución del proceso hijo es completamente independiente de su proceso padre o del shell, lo que permite que el shell realice otros trabajos. (Shell simplemente le dice al kernel la intención del usuario y luego hace lo que debe hacer). Ahora Windows tiene una tarea programada (ejecuta automáticamente una tarea en una fecha y hora fijas). De hecho, UNIX ha tenido esta función durante mucho tiempo. , que es la llamada ejecución automática de Shell.

Algunos recursos UNIX, como cron, pueden ejecutar automáticamente programas Shell sin la participación del usuario (esta función parece estar en el directorio /var/spool/crotab). El programa Crontab es muy útil para los administradores de sistemas. El servicio Cron se utiliza para programar programas para que se ejecuten en momentos específicos (mes, día, semana, hora, minuto). Tomemos como ejemplo el crontab de root. El archivo crontab del usuario root se coloca en /var/spool/crontab/root y su formato es el siguiente: (1)(2)(3)(4)(5) (6) 0 0 * *3 /usr/ bin/updatedb 1. Minutos (0-60) 2. Horas (0-23) 3. Día (1-31) 4. Mes (1-12) 5. Semana (1-7) 6. El programa que se ejecutará 2. Funciones y características del Shell 1> Interpretación de la línea de comando 2> Usar palabras reservadas 3> Usar metacaracteres del Shell (comodines) 4> Procesar comandos del programa 5> Usar redirección y canalizaciones de entrada y salida 6> Mantener algunas variables 7> Ejecutar el control del entorno 8> La programación de Shell de soporte no dirá mucho sobre la "interpretación de la línea de comando". Consiste en ingresar una línea de comando de Unix después del símbolo del shell (por ejemplo: "$", "%", "#", etc.) y el Shell. recibirá la entrada del usuario. "Usar palabras reservadas": Shell tiene algunas palabras con significados especiales. Por ejemplo, en los scripts de Shell, palabras como do, done y for se utilizan para controlar operaciones de bucle y controlar operaciones condicionales como if y then. Las palabras reservadas varían según el entorno del shell. "Comodín": * ¿Coincide en cualquier lugar? Coincide con un solo carácter [] Coincide con un rango o lista de caracteres Por ejemplo: $ls [a-c]* Enumerará todos los archivos que comiencen con caracteres en el rango a-c $ls [a,m,t] * Se enumerarán todos los archivos que comiencen con e, m o t. "Comando de programa": cuando el usuario ingresa el comando, el Shell lee la variable de entorno $ ruta (generalmente configurada en el perfil .del usuario), que contiene el comando ejecutable. Lista de directorios donde puede existir el archivo. El shell busca el archivo ejecutable correspondiente al comando en estos directorios y luego envía el archivo al kernel para su ejecución. "Redirección de entrada y salida y tuberías": la función de redirección es la misma que la función de redirección de DOS: ">"Redireccionar salida"<" Redirigir entrada y el símbolo de tubería es un lugar poderoso en Unix El símbolo es una línea vertical: "|", uso: comando 1 | comando 2 Su función es pasar el resultado de la ejecución del primer comando comando 1 como entrada del comando 2 al comando 2, por ejemplo: $ls -s|sort -nr|pg El comando línea Extraiga todos los archivos en el directorio actual y proporcione la salida al comando de clasificación como entrada. El comando de clasificación ordena la salida de ls en orden numérico descendente. Luego, el contenido ordenado se envía al comando pg, y el comando pg muestra el contenido ordenado del comando de clasificación en el monitor. "Mantener variables": Shell puede mantener algunas variables. Las variables almacenan algunos datos para su uso posterior. Los usuarios pueden usar "=" para asignar valores a variables, como: $lookup=/usr/mydir. Este comando crea una variable llamada lookup y le asigna el valor /usr/mydir. En el futuro, los usuarios pueden usar lookup para. reemplace /usr en la línea de comando /mydir, por ejemplo: $echo $lookup El resultado muestra: /usr/mydir Para que la variable pueda ser utilizada por el proceso hijo, se puede usar el comando exprot, por ejemplo: $lookup=/usr/mydir $export lookup "Control del entorno de ejecución": se inicia cuando el usuario inicia sesión Después del shell, el shell creará un entorno de trabajo para el usuario, de la siguiente manera: 1> Cuando el programa de inicio de sesión activa el shell del usuario, Se crearán variables de entorno para el usuario.

Leído de los archivos /etc/profile y .profile En estos archivos, la variable $TERM se usa generalmente para establecer el tipo de terminal y la variable $PATH se usa para establecer la ruta donde el Shell busca archivos ejecutables. 2> Al iniciar el shell desde el archivo /etc/passwd o la línea de comando, el usuario puede especificar algunos parámetros para el programa shell, como "-x", que puede mostrar el comando y sus parámetros antes de ejecutarlo. Estos parámetros se presentan en detalle más adelante. "Programación Shell": el contenido principal de este artículo. El shell en sí también es un lenguaje (* primero puede entenderse como una combinación de comandos de Unix, más condiciones similares a C, bucles y otras declaraciones de control del programa, similar al procesamiento por lotes de DOS, pero mucho más potente. Los usuarios pueden programar a través del shell). (script, archivo de texto) para realizar un trabajo específico. Variable SHELL A continuación presentamos la programación de Bourne Shell en detalle: Desde que Bell Labs diseñó Bourne Shell. Desde entonces, muchos fabricantes han diseñado muchas versiones de Unix basadas en diferentes plataformas de hardware. Pero entre muchas versiones de Unix, Bourne Shell se ha mantenido consistente. 1> Inicio de Bsh: después de que el usuario inicia sesión, el sistema inicia el Shell según los elementos de información sobre el usuario en el archivo /etc/passwd. Por ejemplo, los elementos de información de un usuario en passwd son: ice_walk:!:411:103:Imsnow,ice_walk:/home/ice_walk:/bin/bsh Significa que el nombre de usuario es ice_walk y otra información, en el último elemento "/ bin/bsh" indica que el tipo de entorno sh del usuario es bsh, por lo que el sistema lo inicia. Los siguientes parámetros se pueden usar durante el inicio o la ejecución (incluido el programa shell del que hablaremos a continuación; el script los explicaremos uno por uno: -a genera todas las variables -c "cadena" lee el comando de la cadena). -e Usar modo no interactivo -f deshabilita la generación de nombres de archivos de shell -h definición -i modo interactivo -k establece opciones para la ejecución de comandos -n lee comandos pero no los ejecuta -r modo restringido -s comandos lee desde la entrada estándar -t Ejecutar un comando y luego salir del shell -u Al reemplazar, el uso de variables no configuradas provocará un error -v Muestra la línea de entrada del shell -x Modo de seguimiento, muestra el comando ejecutado Se pueden combinar muchos modos. -ei no parece funcionar, ¿por qué crees que funciona? Utilice set para configurar o cancelar las opciones del shell para cambiar el entorno del shell. Utilice "-" para abrir opciones y "+" para cerrar opciones. La mayoría de Unix le permiten abrir o cerrar las opciones a, f, e, h, k, n, uv y x. Si se muestran las opciones que se han configurado en el Shell, ejecute: $echo $: hay un archivo .profile en el directorio de inicio de cada usuario en Bsh. Este archivo se puede modificar para modificar el entorno del Shell. Para agregar la ruta a un archivo ejecutable (por ejemplo/ice_walk/bin), puede agregar el siguiente código a .profile PATH=$PATH:/ice_walk/bin;exprot PATH.profile La variable de entorno del shell significa lo siguiente: CDPATH ejecuta el comando cd La ruta de búsqueda utilizada HOME El directorio de inicio del usuario IFS El delimitador de dominio interno, generalmente un carácter de espacio, un carácter de tabulación o un carácter de nueva línea MAIL Especifica la ruta a un archivo específico (buzón), que utilizan algunos sistemas de correo UNIX RUTA para encontrar la ruta de búsqueda de comandos (igual que la ruta de config.sys en DOS) Símbolo del sistema principal de PS1, el valor predeterminado es "$" Símbolo del sistema esclavo de PS2, el valor predeterminado es ">" TERM Utilice el tipo de terminal 2> Caracteres especiales y sus significados en Bsh tienen un conjunto de caracteres no alfabéticos en Bsh. Los usos de estos caracteres se dividen en cuatro categorías: como nombres de variables especiales, nombres de archivos generadores, control de datos o programas y control de caracteres de referencia y escape. Permiten a los usuarios completar tareas complejas con un código mínimo en Shell.

*> Los caracteres especiales utilizados en los nombres de las variables del Shell $# El número de parámetro pasado al comando Shell $ - Proporciona opciones cuando el Shell inicia o usa el comando set $? El valor devuelto después de la ejecución del comando anterior $$ El número de proceso del shell actual $! El número de proceso de un proceso hijo $@ Todos los parámetros, cada uno entre corchetes dobles $* Todos los parámetros, entre corchetes dobles $n Valor del parámetro posicional, n representa la posición $0 Nombre del shell actual *>Especial para generar nombres de archivos Los caracteres incluyen "*", "?" y "[]", que se mencionaron anteriormente y no se analizarán más a fondo. *>Caracteres especiales utilizados para el control de datos o programas>(archivo) La salida se redirige al archivo (si no hay un archivo, créelo, si lo hay, se sobrescribirá) >>(archivo) La salida se redirige al archivo (si no hay ningún archivo, se creará; si lo hay, se agregará al final del archivo) <(archivo) Redirección de entrada al archivo separador de comando | carácter de tubería y ejecución en segundo plano (por ejemplo: dormir 10 &) ` ` sustitución de comando, redirigiendo la salida de un comando como parámetro de otro comando. *>Para caracteres especiales entre comillas o escapes, Bsh utiliza comillas simples ' ' y comillas dobles " " para citar caracteres especiales o palabras separadas por espacios en blanco para formar uno.