Shell: comandos internos y externos, así como la descarga del código fuente del shell bash

concepto

Los comandos de Linux se dividen en comandos internos (incorporados) (incorporados) y comandos externos. Las funciones de los comandos internos y los comandos externos son básicamente las mismas, pero existen algunas diferencias sutiles.

Los llamados internos y externos son en realidad relativos a la propia Shell. Con el fin de mejorar la eficiencia operativa del sistema, el sistema Linux carga en la memoria comandos ligeros de uso frecuente cuando se inicia el sistema para que el Shell los llame en cualquier momento.Estos comandos son comandos internos.

Por el contrario, los comandos más pesados ​​llamados por la capa del sistema solo se cargarán en el disco duro cuando sean llamados, que son comandos externos.

comando interno

El comando interno es en realidad una parte del programa shell, que es implementado por el software shell, que contiene algunos comandos del sistema linux relativamente simples, que son reconocidos por el programa shell y se ejecutan dentro del programa shell, generalmente cargado en el sistema linux. tiempo de ejecución, el shell se carga y reside en la memoria del sistema. Los comandos internos son una parte importante del propio shell. Los comandos internos están incrustados en el programa shell y no existen en el disco en forma de archivos de disco únicamente. Los comandos internos están escritos en el código fuente bashy y su velocidad de ejecución es más rápida que la de los comandos externos, porque el shell no necesita crear subprocesos para analizar los comandos internos y todos se ejecutan en el proceso Shell. Por ejemplo: exit, history, cd, echo, fg, cd, source, export, time, etc.

comando externo

El comando externo es la parte de utilidad del sistema Linux, que es un programa ejecutable externo independiente. Debido a que las funciones del programa de utilidad suelen ser relativamente potentes, la cantidad de programas contenidos en él será grande y no se descargarán juntos con el sistema cuando el sistema está cargado Se carga en la memoria, pero se llama a la memoria solo cuando es necesario. Por lo general, la entidad del comando externo no está incluida en el shell, pero su proceso de ejecución de comandos está controlado por el programa de shell. Cuando se llama a un comando externo, la esencia es llamar a otro programa. Primero, el Shell creará un subproceso y luego ejecutará el programa en el subproceso. El programa Shell administra la búsqueda de rutas, la carga y el almacenamiento de comandos externos y controla la ejecución de los comandos. Los comandos externos también se instalan fuera de bash, generalmente ubicados en /bin, /usr/bin, /sbin, /usr/sbin...etc. La ruta de almacenamiento de los comandos externos se puede ver mediante el comando "echo $PATH". Comandos externos comunes como: /bin/ls, vi, tee, tar, etc.

¿Por qué dividir los comandos internos y los comandos externos?

Los comandos internos son en realidad parte del programa SHELL, que contiene algunos comandos relativamente concisos y de uso frecuente en la vida diaria. Estos comandos generalmente se cargan en la memoria cuando se inicia el sistema y residen en la memoria. Son reconocidos por el programa SHELL y se ejecutan dentro del programa SHELL. Solo hay una razón para esto: maximizar la eficiencia de ejecución y mejorar el rendimiento del sistema. . El comando externo suele ser una función de software del sistema. Esta parte de la función del programa suele ser relativamente potente, pero la cantidad del programa incluido también es grande, por lo que no se carga junto con el inicio del sistema y solo se lee desde el disco duro en la memoria cuando el usuario lo necesita.

Proceso de ejecución y secuencia de comandos internos y externos

Debido a que el comando interno está integrado por SHELL, se puede usar directamente al llamar al comando sin buscar variables de entorno. Sin embargo, el comando externo es bastante diferente, porque si el usuario va a usar el comando externo, necesita para ser llamado por el programa SHELL, por lo que hay uno más. El problema de la ruta de ejecución de la capa es la variable de entorno de la que hablamos a menudo.

Un comando externo es un comando ejecutado por una copia del Shell (nuevo proceso).El proceso básico es el siguiente:

* a. Crear un nuevo proceso. Este proceso es una copia del Shell.

* b.En el nuevo proceso, busque el comando especificado en los directorios enumerados en la variable PATH.

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin: es un valor predeterminado típico para la variable PATH. Cuando el nombre del comando contiene un símbolo de barra inclinada (/), se omitirá el paso de búsqueda de ruta.

* c. En el nuevo proceso, reemplace el programa Shell en ejecución con el nuevo programa encontrado y ejecútelo.

* D. Una vez que se completa el programa, el shell original leerá el siguiente comando del terminal y ejecutará el siguiente comando en el script.

Normalmente, los comandos incorporados de Bash en el script no bifurcarán un proceso secundario cuando se ejecuten. Pero los comandos externos o de filtro en los scripts generalmente bifurcan un proceso secundario. Un comando incorporado generalmente tiene el mismo nombre que un comando del sistema (comando externo), pero Bash vuelve a implementar estos comandos internamente. Por ejemplo, el comando echo de Bash no es lo mismo que /bin/echo, aunque su comportamiento es el mismo en la mayoría de los casos.

Del mismo modo, si el comando externo correspondiente a nuestro comando interno se mueve a un directorio que no sea la variable de entorno del sistema o se elimina. El comando aún se puede ejecutar, porque el orden de búsqueda es comando interno -> comando externo.

Cuando el intérprete de comandos de shell ejecuta un comando, primero intenta ejecutarlo de acuerdo con el comando interno, si el comando a ejecutar no es un comando interno, busca el directorio donde se encuentra el archivo de ejecución correspondiente de acuerdo con el comando externo. , y lo ejecuta. Cuando el comando a ejecutar no es un comando interno (como ls), si hay dos comandos ls en directorios diferentes (como /usr/local/bin/ls y /bin/ls), el intérprete de comandos de shell será basado en PATH Qué directorio se consulta primero, los comandos en ese directorio se ejecutarán primero.

Comandos Internos Comunes

Hay alrededor de 60 comandos integrados en SHELL, y puede ver todos los comandos integrados a través del comando de habilitación integrado.

$ habilitar

permitir .

permitir :

permitir [

habilitar alias

habilitar bg

habilitar enlazar

habilitar descanso

habilitar incorporado

habilitar llamante

habilitar cd

habilitar comando

habilitar compilación

habilitar completo

habilitar compop

habilitar continuar

habilitar declarar

habilitar directorios

habilitar repudiar

habilitar eco

habilitar habilitar

habilitar evaluación

habilitar ejecutivo

habilitar salida

habilitar exportar

habilitar falso

habilitar FC

habilitar fg

habilitar getopts

habilitar hash

habilitar ayuda

habilitar historial

habilitar trabajos

habilitar matar

habilitar dejar

habilitar locales

habilitar cierre de sesión

habilitar archivo de mapa

habilitar popd

habilitar imprimir

habilitar empujar

habilitar pwd

habilitar lectura

habilitar readarray

habilitar solo lectura

habilitar retorno

habilitar conjunto

habilitar turno

habilitar tienda

habilitar fuente

habilitar suspender

habilitar prueba

habilitar tiempos

habilitar trampa

habilitar verdadero

habilitar tipo

habilitar composición tipográfica

habilitar límite

habilitar umask

habilitar unalias

habilitar desarmado

habilitar esperar

Deshabilitar (apagar) los comandos integrados

enable -n cd significa deshabilitar la función integrada del comando cd en SHELL.

 Ver el código fuente del comando interno

Ver el shell utilizado actualmente por el sistema:

$ env | grep SHELL

CONCHA=/bin/bash

GNOME_SHELL_SESSION_MODE=ubuntu

El shell actual usa bash, verifique la versión de bash:

$ bash --versión

GNU bash, versión 5.0.17(1)-lanzamiento (x86_64-pc-linux-gnu)

Derechos de autor (C) 2019 Free Software Foundation, Inc.

Licencia GPLv3+: GNU GPL versión 3 o posterior <http://gnu.org/licenses/gpl.html>

Este es software libre; usted es libre de cambiarlo y redistribuirlo.

NO HAY GARANTÍA, en la medida permitida por la ley.

El paquete bash se puede encontrar en Software-GNU Project-Free Software Foundation . Haga clic para ingresar a la página de bash, que contiene el enlace de descarga del código fuente.

Ruta del código fuente de bash: Índice de /gnu/bash , descargue la versión especificada de esta ruta. El código fuente está escrito en lenguaje C.

Nota:

1. Use el comando type, que se puede usar para mostrar el tipo de comando ejecutable para distinguir si es un comando interno de shell o un comando externo.

referencia:

1, comandos internos de Linux Shell y comandos externos

Comandos internos de Linux Shell y comandos externos - Se busca programador

Supongo que te gusta

Origin blog.csdn.net/guoqx/article/details/131041505
Recomendado
Clasificación