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