Hablando de Linux Shell

  
Ese día, mi colega me mostró un paso de operación en mi computadora
, usando un comando env, bueno, admito que soy analfabeto, ¡no sé qué está haciendo este comando! ! ! Es debido a mi ignorancia que ha despertado el deseo de aprender y explorar. Debo aprender este env a fondo. Después de varias horas de tiempo libre después del trabajo, finalmente descubrí esta “坨”;
El entendimiento más simple de Shell
Este es el shell en tus ojos. Cuando abres Terminal en Linux, hay una pantalla negra o una ventana de pantalla blanca. Oh, estos son nuestros ojos. Shell, este entendimiento puede ser correcto, tal vez no correcto.

Cuando abrimos Terminal, en realidad ejecutamos un intérprete de shell predeterminado. Normalmente somos /bin /bash. Cuando ingresamos varios comandos en la terminal, es desde /bin /Bash para explicar, es decir, Shell es un programa que se ejecuta en Terminal.
Entendiendo el Shell, a menudo ejecutamos un script de shell en el shell actual. Cuando ejecuta el script de shell, ¿sabe qué hay detrás de esto? Esto continúa con el siguiente tema: el shell primario y el shell secundario.
Shell primario y Shell secundario. Si no comprende la relación entre el shell principal y el shell secundario, este artículo se centra en las variables del shell, no está claro.
Cuando iniciemos Terminal, ejecutaremos un proceso de shell, que por el momento se llamará Shell A, cuando ejecutamos el script de shell en esta Terminal, el proceso A generará un nuevo proceso para iniciar otro intérprete de shell.
(Esto se especifica en la primera línea del script, por ejemplo: #! /Bin /bash), el nuevo proceso de la bifurcación se llama proceso B por el momento. En este punto, el proceso A y el proceso B son la relación entre los procesos padre e hijo, el proceso B es un shell secundario y el proceso A es el shell primario. Una vez que la secuencia de comandos en el shell secundario ha terminado de ejecutarse, el shell secundario finaliza y vuelve al proceso principal. Este es el shell padre y el shell hijo.
Creo que debería borrar el shell padre y el shell hijo. Después de comprender esta relación, continuaremos resumiendo. La inicialización de Shell lee algunos archivos de configuración. En primer lugar, debe darse cuenta de que inicia sesión en el sistema Linux, abre el Terminal, cuando usa el Shell, el sistema lee una gran configuración "&" Archivos que determinan las variables en tu shell. Entonces, cuando resumimos las variables en el shell, debemos observar qué archivos de configuración se leen y cuál es el orden de lectura.
  • /etc /profile: este archivo configura la información del entorno para cada usuario del sistema. Cuando el usuario inicia sesión en el sistema por primera vez, se ejecutará el archivo. Y lea la configuración del shell desde el archivo de configuración en el directorio /etc/profile.d;
  • ~ /.bash_profile o ~ /.bash_login o ~ /.profile: el sistema buscará estos tres archivos a su vez, estos Es para la configuración del usuario actual, pero se debe tener en cuenta que estos tres archivos generalmente no existen al mismo tiempo. Incluso si existen al mismo tiempo, después de que el sistema encuentra uno en este orden, no leerá el resto;
  • ~ /.bashrc: este archivo contiene la información de bash para el shell bash que pertenece al usuario que está conectado actualmente. Este archivo se leerá cuando inicie sesión y abra un nuevo shell cada vez;
  • /etc /bashrc: ejecute este archivo para cada usuario que ejecute el shell bash; cuando se abra el shell bash, se leerá el archivo.

    Estos archivos de configuración de script determinan las variables de su sistema y las variables de entorno. Si está interesado, puede consultar el código fuente de estos scripts y sabrá exactamente cómo se llaman. Por supuesto, si necesitamos definir algunas variables que usamos a menudo, como configurar el JDK, es posible que desee editarlas.
    Variables en Shell
    Juegue con el shell anterior, borre las variables en el proceso de shell único y luego agregue el shell secundario para resumir.
    Existen tres variables en el Shell:
  • Variables internas; no se pueden modificar las definiciones del sistema;
  • variables de entorno; se pueden modificar las definiciones del sistema; puede usar la exportación para convertir variables de usuario a Variables de entorno;
  • variables de usuario; definidas por el usuario, se pueden definir, nada con lo que jugar.

    Por ejemplo, las siguientes son variables internas:

    Nombre de variable
    Descripción
    $ # Número de parámetro de línea de comando $ 0 Nombre de programa actual $? Anterior El código de retorno del comando o función es el PID del programa actual.
    Las siguientes son algunas de las variables de entorno que utilizamos. En general, usamos el comando env para ver las variables de entorno del usuario actual.

    Nombre de variable
    Descripción
    PATH Indica qué directorios buscará el Shell en el directorio o programa SHELL Usuario actual Tipo de shell HOME Directorio de inicio de usuario actual PS1 Aviso básico

    > Las variables de usuario (variables locales) son más informales, puede definirlas usted mismo, por ejemplo:
    > str = 'Hello World' > echo $ str Usamos el comando set para mostrar el usuario definido en el shell actual Variables, por supuesto, el comando set también genera variables de entorno.
    ¿Entiendes lo que dijiste arriba? Seguimos







































    Con las relaciones padre e hijo, ¿se heredarán las variables de shell en el proceso padre en el proceso hijo? ? ? Al mismo tiempo, ¿se devolverá la variable de shell en el proceso hijo al proceso padre? ? ? Esto es todo lo que tenemos que prestar atención. Veamos un ejemplo:
    El shell primario define una variable:
    > str = 'Hello World' luego ejecuta el siguiente script en el shell primario:
    #! /Bin /bash # Definición de salida en el shell primario Strecho $ str # Salida de la variable de entorno echo $ HOMEecho $ PATH Encontrará que después de ejecutar, la salida de $ str está vacía, pero $ HOME y $ PATH se pueden generar perfectamente. Esto también muestra que las variables de usuario que definimos en un shell solo pueden ser utilizadas por el shell actual, y otras son inaccesibles, incluso si es un shell secundario, las variables de entorno del proceso primario se pueden usar en el proceso secundario. Acceso Pero a veces, tenemos este requisito:

    Accediendo a las variables de usuario del proceso principal (variables locales) en el proceso secundario, ¿qué debo hacer? ? ?
    Cuando encontramos tal demanda, tuve que hablar sobre el comando de exportación.
    Hablar sobre el comando de exportación El comando
    export establece la variable de usuario en una variable de entorno para que se pueda acceder en el proceso de shell secundario. Este es exactamente el mismo que el significado chino de exportación. Para el ejemplo anterior, podemos ingresar el comando en el shell principal:
    > export str Cuando ejecute nuevamente el script, puede generar el valor de la variable de usuario str; esta es la función de exportar. Sin embargo, después de ingresar la cadena de exportación en el shell principal, cuando cerramos la shell principal, la variable de entorno no será válida. Si desea abrir la shell, puede configurar la exportación inmediatamente. Podemos escribir la cadena de exportación en el resumen anterior de acuerdo con nuestras necesidades. Ese " 坨 " archivo de configuración de inicio, para que la exportación no se invalide porque el shell primario está cerrado.
    Otra relación entre padre e hijo. Ahora podemos acceder a la variable del proceso padre en el proceso hijo. ¿Alguna vez ha pensado si modificar la variable del shell padre en el shell hijo afectará a la variable en el shell padre? ¿Cuál es el valor? Puede que desee hacer una prueba.
    #! /bin /bash # Modificar el valor de la variable str pasada por el shell primario $ str = 'http: //www.jellythink.com'echo $ str Ejecute el script y encuentre el valor de str en el shell primario y Ningún cambio ha tenido lugar. De hecho, esto está relacionado con otro punto de conocimiento sobre el proceso en Linux. Cuando el proceso principal bifurca un proceso secundario, el proceso secundario copiará las variables relevantes del proceso principal. En este momento, el proceso secundario tendrá el mismo valor que el proceso principal. Aunque el mismo nombre tiene el mismo valor, es solo una copia del proceso principal. La modificación a la copia es independiente del proceso padre. Para obtener información sobre los procesos de Linux, puede consultar este artículo.
    Y si definimos una variable en el shell secundario, ¿es accesible en el shell primario? La práctica nos dice que esto no funciona, no puede acceder a las variables definidas en el shell secundario en el shell primario. Si desea acceder a las variables definidas en el shell secundario en el shell primario, puede usar un archivo temporal para escribir las variables locales en el archivo temporal, y el shell primario lee el archivo para lograr el propósito de acceder a las variables definidas en el shell secundario.
    Resumen
    Aunque este artículo es mixto y mixto, cada parte está estrechamente relacionada y entrelazada. Es muy útil para que todos entiendan Linux Shell como un todo, y también es beneficioso para todos que aprendan Linux Shell. El artículo es un poco largo y requiere un poco de paciencia para leerlo de principio a fin. Para aprender, se necesita un poco de paciencia. ¿Qué dices? Este se resume aquí, y el siguiente es un adiós.
    Jelly Think - un sitio técnico original para compartir artículos.
    21 de octubre de 2015 en hohhot.
    Apéndice
    Aquí hay un resumen de los comandos involucrados en el texto y algunos comandos relacionados.

    Comando
    Descripción
    conjunto Muestra la variable de shell definida localmente sin establecer Borrar las variables de entorno, por ejemplo: unset str export Establecer una nueva variable de entorno env Mostrar todas las variables de entorno actuales del usuario

  • Copyright © Conocimiento de Windows All Rights Reserved