Bourne Again Shell
Creador | Brian fox |
---|---|
Desarrollado por | Proyecto GNU |
Primera versión | 8 de junio de 1989 |
Última versión | 5,1 (7 de diciembre de 2020) |
Depositar | git.savannah.gnu.org/cgit/bash.git |
Escrito en | VS |
Sistema de explotación | GNU / Linux , BSD ( d ) , macOS y Microsoft Windows |
Medio ambiente | X86_64 y i686 ( d ) |
Leer formatos | Guión bash ( d ) |
Idiomas | Ingles y frances |
Tipo |
Interfaz del sistema Intérprete de comandos |
Licencia | GPL-3.0 + ( d ) |
Documentación | www.gnu.org/software/bash/manual |
Sitio web | www.gnu.org/software/bash |
Bash (acrónimo de Bourne-Again shell ) es un intérprete de línea de comandos similar a un script. Es el shell de Unix del proyecto GNU .
Sobre la base de la cáscara de Bourne , Bash trae muchas mejoras a la misma, en particular a partir de la cáscara de Korn y el C shell . Bash es un software gratuito publicado bajo la Licencia Pública General GNU . Es el intérprete predeterminado en muchos Unixes libres, especialmente en sistemas GNU / Linux . También era el shell predeterminado para Mac OS X , reemplazado con macOS Catalina (10.15) por zsh . Fue portado por primera vez a Microsoft Windows por el proyecto Cygwin , y dado que Windows 10 es una opción por derecho propio, se denominó Subsistema de Windows para Linux del sistema operativo.
"Bourne otra vez" es un juego de palabras con el caparazón de Bourne . Literalmente, Bourne nuevamente significa "Bourne nuevamente", pero también se pronuncia casi como nacido de nuevo , que significa "nacido de nuevo" o "reencarnado". Además, golpear significa "golpear fuerte" en inglés.
Brian Fox , publicó en 1988 la primera implementación de Bash en nombre de la Free Software Foundation . Más tarde fue retransmitido por Chet Ramey. El shell Bourne original, del que se inspiró Bash, fue escrito por Stephen Bourne en 1977. La versión 3.0 data deJulio de 2004y la versión 4.0 de Febrero de 2009.
La 24 de septiembre de 2014, una falla de seguridad importante se hace pública, lo que permite que el Bash sea pirateado a través de scripts CGI . A continuación, se invita a sus usuarios a parchearlo para protegerse.
Como todos los intérpretes de línea de comandos con script , Bash realiza cuatro operaciones básicas:
Los scripts son programas cortos que generalmente son fáciles de construir. Bash proporciona un servicio de gestión de flujo , es decir, permite que el resultado de un script (la salida) se pase a otro script (la entrada). De esta manera, los scripts se pueden "encadenar", cada uno de los cuales realiza una tarea única y bien definida.
Los scripts pueden ser ejecutados manualmente por el usuario o automáticamente por el sistema. Por ejemplo, en la distribución de GNU / Linux Ubuntu , el directorio resume.dcontiene una serie de scripts que se ejecutan automáticamente cuando se reinicia el sistema, es decir, después de que el sistema ha terminado la hibernación. Estos scripts se utilizan para reiniciar los diversos programas interrumpidos por el modo de espera.
Bash es un shell que se puede usar en modo interactivo o en modo por lotes:
Una “sesión” es el conjunto de acciones que realiza el usuario de un sistema informático, entre el momento en que se conecta y el momento en que se desconecta.
Bash se usa con mayor frecuencia de forma predeterminada para inicios de sesión en distribuciones GNU / Linux. También se encontró como el shell predeterminado en MacOS X, hasta la versión de Catilina en 2019.
La sesión se cierra con el comando exito Ctrl+D(la marca de fin de archivo en Unix: el usuario cierra el flujo de lectura del intérprete).
Bash usa la biblioteca readline que le permite, como el shell C , completar automáticamente (autocompletar) los nombres de comandos y archivos al escribir la tecla Tab y acelerar considerablemente el trabajo. Las teclas Arriba y Abajo le permiten navegar fácilmente por el historial de comandos.
Editando la línea de comando en modo vi o EmacsTambién es posible elegir para la edición de la línea de comandos un comportamiento similar al del editor de texto vi o al de Emacs . Entonces es necesario utilizar los comandos set -oy set +oque modifican las opciones del shell. Su comportamiento es contrario a la intuición porque set -oactiva una opción, mientras la set +odesactiva.
set -o emacsinicia la edición de la línea de comandos en modo emacs y set -o vimodo vi. Desde la versión 2.0, un nuevo comando interno ha sido añadido para configurar el comportamiento de la shell: shopt. Está destinado a reemplazar la configuración de opciones con set. El funcionamiento de shopt -oes similar set -oy el de shopt +opara set +ogarantizar la continuidad de set.
Para interpretar una línea, Bash la divide en palabras. La primera palabra de una línea se considera un nombre de comando. Luego colocamos los “argumentos”, que también se denominan los “parámetros” del comando, es decir los datos que procesará, un archivo por ejemplo. Finalmente podemos agregar "opciones" que modificarán el comportamiento estándar del comando. Estas opciones son introducidas por "-", el guión corto, luego por el nombre de la opción, o una sola letra como atajo. No colocamos un espacio entre el guión y el nombre de la opción.
Cada interpretación de una línea respeta las siguientes restricciones:
Hay varios tipos de nombres de comando asociados con diferentes grados de prioridad. Siguiendo el orden decreciente de prioridades, al interpretar esta primera palabra, encontramos:
Si Bash no encuentra ninguna coincidencia en los alias, los comandos internos o los comandos externos con la primera palabra de la línea, devuelve un mensaje de error con command not foundla palabra escrita al principio de la línea que la precede .
En el caso de un comando externo, el shell debe encontrar el programa correspondiente a este comando antes de que pueda ejecutarse. Una búsqueda exhaustiva, para cada comando, de todo el sistema de archivos llevaría demasiado tiempo e inutilizaría el sistema en la práctica. Solo se consulta un pequeño conjunto de directorios cuando se busca el programa que permite ejecutar el comando. Estos directorios se definen en una variable de entorno llamada " $ PATH ". Si el comando no se encuentra en uno de los directorios enumerados en esta variable, "la RUTA", la ejecución da como resultado un mensaje de error del tipo command not found.
A diferencia de lo que sucede en Windows, por razones de seguridad, los shells de Unix, incluido Bash, no incluyen implícitamente el directorio actual en el PATH, pero se puede colocar allí explícitamente. Esto es para evitar que una persona instale un programa malicioso en el directorio actual que, con el mismo nombre que un comando externo, podría ejecutarse en su lugar si un usuario ingresara este comando.
Un metacarácter es un carácter que tiene un significado diferente al literal. "*" No representa para Bash el personaje estrella, lo lee como una representación de cualquier secuencia de caracteres o una ausencia de caracteres. Los metacaracteres se dividen en dos clases, los que sustituyen a otros personajes y los que permiten proteger a los personajes. Estos, usados solos como en el caso de la barra invertida, o en parejas, obligan a Bash a leer los caracteres literalmente, es decir que si está protegido, el personaje "*" pierde. Su condición de metacarácter para convertirse en una "estrella " de nuevo.
Hay dos metacaracteres sustitutos:
Hay tres formas de proteger un carácter o una cadena de caracteres:
Al final de una línea, una barra invertida indica que el comando continúa en la siguiente línea. Esta función es particularmente útil para pedidos grandes para facilitar su lectura.
Barra invertida para formar uno de los caracteres especiales de CLas cadenas que tienen un formato similar a $'\n', en el que notamos la presencia de la barra invertida, son interpretadas de una manera particular por Bash. Tenga en cuenta que la barra invertida va seguida de una letra y que el grupo está rodeado de apóstrofos. En este caso, no se trata de escapar al significado de un metacarácter. Esta es una forma de indicarle a Bash que la combinación de la barra invertida y la letra representa un carácter especial del lenguaje C para ser interpretado de acuerdo con las reglas establecidas por ANSI . Por lo tanto 'echo $'\a'provocará un " bip ".
La siguiente tabla enumera estos caracteres especiales:
Barra invertida de escape |
Transformación bash |
---|---|
\a | Bip |
\ B | Espaciado posterior |
\ e | Cansada |
\ f | Salto de página (el nombre en inglés de este carácter es formulario ) |
\no | Salto de línea |
\ r | Retorno de carro |
\ t | Carácter de tabulación horizontal |
\ v | Carácter de tabulación vertical |
\\ | Barra invertida |
\ ' | Un apóstrofe (el nombre en inglés de este personaje es una cita ) |
\ nnn | El carácter de 8 bits cuyo valor octal es nnn |
\ xHH | El carácter de 8 bits cuyo valor hexadecimal es HH |
\ cx | El personaje de control-X |
Ver ASCII
Barra invertida antes de uno de los metacaracteres de BashLos metacaracteres, incluido "*" (estrella), no son interpretados por Bash como literales, lo que es inconveniente en algunos casos. Los comandos find , sed ejemplifican este delicado punto. Si usando el comando findquisiéramos buscar en el directorio actual, representado por “. ", Y sus subdirectorios, todos los archivos cuyo nombre comienza con" mi ", uno estaría tentado a escribir la siguiente línea de comando find . -name my*Pero el comando volverá Find: Les chemins doivent précéder l'expression.
De hecho, Bash reemplazará la cadena "my *" con la lista de archivos contenidos en el directorio actual, que se findconsidera una lista de rutas, que deben especificarse primero, y no como el nombre de los archivos a buscar.
Una solución es usar una barra invertida antes del carácter "*" para escapar y forzar a Bash a interpretarlo como literal. Que da find . -name my\*.
Otra solución sería utilizar comillas. Podríamos, por ejemplo, escribirfind . -name "my*"
Pedidos | Operaciones | Explicaciones |
---|---|---|
A & | Cree un nuevo proceso emitiendo el comando A ( dependiente de la consola), permitiendo que se ingresen otros comandos en la misma consola. | |
( A & ) | Igual que el comando anterior, pero esta vez el proceso creado es independiente de la consola. | |
A && B | AND lógico ( && ) | Ejecute B, si A tiene éxito .
B si A está bien |
A || B | Ejecute B solo si A falla .
B si A KO |
|
A `B` | parámetros dinámicos | A usa los resultados de ejecutar B |
A $(B) |
Cada orden está asociada a tres flujos:
Opcionalmente, se pueden asociar descriptores de archivo adicionales con un comando.
Metodo de uso:
Pedidos | Operaciones | Explicaciones |
---|---|---|
A > fichier | salir ( > ) | Ejecute el comando A y redirija su salida estándar ( stdout ) a un archivo sobrescribiendo su contenido o creando un archivo si no existe |
A >> fichier | salir ( >> ) | Ejecute el comando A y redirija su salida estándar al final del archivo |
A 2> fichier | salir ( 2> ) | Ejecute el comando A y redirija su salida de error estándar ( stderr ) al archivo sobrescribiendo su contenido o creando un archivo si no existe |
A 2>> fichier | salir ( 2 >> ) | Ejecute el comando A y redirija su salida de error estándar al final del archivo |
A 2>&1 | salida ( 2> & 1 ) | Ejecute el comando A y redirija su salida de error estándar a su salida estándar |
A < fichier | entrada ( < ) | Ejecute el comando A pasándole el contenido del archivo en su entrada estándar ( stdin ) |
A | B | salida, entrada ( | ) | Ejecute A y envíe el contenido de su salida estándar a la entrada estándar de B |
Usar
Se hace referencia a las variables precediéndolas con el signo $ (ejemplo echo $ HOME ).
Algunas variables de entorno : USER , PID , HOME , PATH y SHELL .
En una línea de comando, reemplazamos un comando como argumento por su resultado (en stdout ) rodeándolo con comillas inversas `nombre del comando` o usando $ () ( $ (nombre del comando) ).
Las expresiones regulares o las expresiones regulares se utilizan para describir cadenas de caracteres. Entre ellas se pueden distinguir dos categorías. Los literales , que son caracteres normales tratados como tales, y los comodines que son símbolos que tienen significado para una búsqueda. Ya hemos hablado de los personajes *y más ?. Es posible refinar la descripción del patrón que está buscando y especificar su ubicación.
Entonces ^representa el comienzo de una línea y $el final. Por ejemplo, ^terrepresenta todas las líneas que comienzan con tery ter$todas las que terminan con ter.
Los metacaracteres también representan clases de caracteres. Por ejemplo, en sci[ea]nceel contenido de los corchetes representa un OR lógico. Están representados sciencey sciance. Usando los corchetes, también es posible definir intervalos, es necesario agregar un guión. De ello se deduce que es [0-9]equivalente a todos los dígitos del 0 al 9, [a-z]todas las letras minúsculas y [A-Z]todas las letras mayúsculas. Dentro de los corchetes, se pueden combinar varias clases de caracteres: por ejemplo, epsilon[0-9A-Z]especifica que epsilonpuede ir seguido de un número entre 0 y 9 o de una letra mayúscula.
El ^ interior de los corchetes significa negación. Entonces [^eo]( ^es el segundo carácter) no define ni "e" ni "o".
Las expresiones entre corchetes no se pueden usar para describir una cadena de caracteres, solo corresponden a un solo carácter. Para describir una cadena, debe utilizar paréntesis, que son una subexpresión regular. A continuación, el tubo | indica las alternativas. lou(p|ch)erdescrito así loupercomo loucher.
El modo vi es activado por el comando set -o viy desactivado por set +o vi. Al comienzo de una línea, está en modo de inserción , para cambiar al modo de comando debe presionar la tecla Escape .
Aquí hay un resumen de los comandos, para una descripción completa, vaya a la página vi .
Desplazamiento:
Acción:
Reemplazo de patrón:
Al presionar la tecla "n" se repite la búsqueda / sustitución en la siguiente ocurrencia, "N" le permite repetir / sustituir en la ocurrencia anterior.
Repita los comandos:
Editando la línea actual: