GNU Bourne-Again SHell

La línea de comando puede ser tu mejor amigo o tu peor enemigo. Simplemente depende de cómo lo use y para qué lo use. Si eres una de las muchas personas que se encogen ante la sola idea de usar la línea de comando, entonces has venido al lugar correcto.

Interfaz de línea de comando?
Sí, es ese blanco (o verde) en la pantalla negra, donde fluyen textos misteriosos y se ejecutan comandos extraños. Conozco grandes programadores que nunca usan la CLI; sin embargo, también conozco usuarios básicos de computadoras que hacen todo en la CLI en lugar de la interfaz gráfica de usuario (GUI). Tienen aplicaciones de consola para navegar por la web y el sistema de archivos, leer correo, ver imágenes y editar texto. ¡Incluso miran videos de YouTube y leen archivos PDF sin una GUI!

Depende de cada persona encontrar su mejor flujo de trabajo. Algunos prefieren la GUI, mientras que otros disfrutan de la CLI.

Tenga en cuenta: la CLI real tiene poco o nada que ver con lo que ve en la televisión. Raramente la CLI es retratada de manera realista en películas o programas de televisión.

 

 

Terminología

Los recién llegados al mundo Unix / Linux generalmente se confunden cuando se trata de la diferencia entre un terminal, una consola y un shell.

 

bash

 

Desde la perspectiva del usuario, puede haber poca o ninguna diferencia entre ellos, pero en realidad, el usuario usa una consola para conectarse a un terminal, a fin de observar el shell que se ejecuta en la computadora.

Depende de cada persona encontrar su mejor flujo de trabajo.

En los viejos tiempos, estos tres artículos eran hardware separado. La consola no era más que un monitor y un teclado; No tenía capacidades informáticas. Se conecta a un terminal, a través de una interfaz en serie, el más común es el conector RS-232.

Una terminal es similar a un punto final de un mainframe. Por lo general, tenía algunas capacidades informáticas y podía comunicarse a través de una red, o alguna forma de conexión especializada, a una unidad central. Una terminal también proporcionaba derechos administrativos al sistema, por lo que generalmente se mantenía en una habitación cerrada. Las consolas del área de los empleados se conectan a estos terminales, lo que les permite trabajar sin tener acceso administrativo a la unidad central.

Las consolas y terminales finalmente se fusionaron en un solo dispositivo, siendo los más notorios los terminales VT emulados en las distribuciones modernas de Linux.

 

El shell es el programa real capaz de leer la entrada del usuario y proporcionar el resultado en la pantalla. Un shell puede ser textual (como la CLI) o gráfico (como la GUI de Windows). En la informática actual, un shell es mucho más que una simple interfaz entre el usuario y el sistema. Es responsable de administrar procesos, ventanas, aplicaciones, comandos y otros aspectos del sistema.

La CLI es un shell que ofrece una interfaz basada en texto para el usuario.

El intérprete interpreta los comandos ingresados a través de la línea de comandos, y un usuario puede combinar múltiples comandos en un solo script. Los proyectiles modernos tienen un lenguaje propio de secuencias de comandos, lo que proporciona la capacidad de realizar decisiones complejas.

La mayoría de las distribuciones modernas de Linux, así como Mac OSX, usan un shell, llamado BASH. Solaris y OpenIndiana usan KornShell por defecto, que es otra variante de BASH. Tenga en cuenta que este tutorial se centrará en BASH.

Los usuarios de Windows también pueden usar BASH. Se distribuye con Cygwin y MinGW.

 

Hablemos de BASH

 

La mayoría de las distribuciones modernas de Linux, así como Mac OSX, usan un shell, llamado BASH.

BASH significa Bourne Again Shell. Fue lanzado en 1989 como una reencarnación de Bourne Shell, el shell predeterminado en los sistemas Unix. Fue programado por Stephen Bourne y vino como un reemplazo para Thompson Shell, el primer software de shell para UNIX. El viejo Bourne Shell todavía está presente en algunos sistemas Unix. Por lo general, puede encontrarlo como / bin / sh. Sin embargo, incluso eso ha sido reemplazado por BASH en la mayoría de las distribuciones modernas; Ambos / bin / sh y / bin / bash son ejecutables para BASH.

El aviso de BASH

Lo único que siempre tendrá es el aviso de BASH. Es una historia en sí misma, y podríamos pasar este tutorial completo sobre cómo configurarlo y personalizarlo. En cambio, solo discutiremos los conceptos básicos en este tutorial.

 

1
csaba@csaba-pc ~/Personal/Programming/NetTuts $

 

This is what my prompt looks like. The first word, csaba is my username, followed by @ and my computer’s hostname, and then the current folder. The character “~” stands for the current user’s home directory – /home/csaba, in my case. The line ends with $. Whatever I type after the $ is the command that I want my shell to execute.

La raíz es especial: si es root, la solicitud finaliza con # en lugar de $.

Por supuesto, este es solo un ejemplo simple; puede poner mucha más información en su línea de solicitud. Exploremos algunos ejemplos básicos.

BASH tiene un conjunto de variables especiales, PS1, PS2, PS3 y PS4, que controlan los contenidos en el indicador en diferentes etapas de la ejecución de un programa. Solo hablaremos de PS1 en este tutorial. Puede verificar qué contiene la variable PS1 con el siguiente comando:

macbook:Downloads roota$ echo $PS1

\h:\W \u\$

Lo que ves aquí es mi mensaje, seguido de un comando echo $ PS1 y la salida del comando. En BASH, coloca el signo de dólar antes del nombre de la variable cuando desea leer su contenido. El comando echo simplemente genera lo que recibe como parámetro. Si el parámetro es una variable, su valor se muestra en la pantalla.

La salida representa un formato. \ [\ 033 [01; 32m \] es un código de color para verde, y \ u representa el nombre de usuario del usuario actual. El token \ h significa nombre de host, y \ [\ 033 [01; 34m \] es el código de color para el azul. \ w es el directorio actual, y \ [\ 033 [00m \] es un color gris claro para lo que sigue (los comandos que escribo). A continuación se muestra una captura de pantalla, para que pueda visualizar mejor el resultado.

Hay caracteres especiales precedidos por “\” que tienen su propio significado especial. De lo contrario, “\” denota un carácter de escape para lo que sigue (como en los códigos de color). A continuación se muestra la lista completa de caracteres especiales que puede utilizar en el indicador de BASH, citado en el manual oficial de BASH:

\ a - un carácter de campana ASCII (07)
\ d - la fecha en formato "Día de la semana Mes Fecha" (por ejemplo, "martes 26 de mayo")
\ D {format}: el formato se pasa a strftime (3) y el resultado se inserta en la cadena de solicitud; un formato vacío da como resultado una representación de tiempo específica de la localidad. Se requieren las llaves
\ e - un carácter de escape ASCII (033)
\ h - el nombre de host hasta el primer `. '
\ H - el nombre de host
\ j - el número de trabajos administrados actualmente por el shell
\ l - el nombre base del nombre del dispositivo terminal del shell
\ n - nueva línea
\ r - retorno de carro
\ s - el nombre del shell, el nombre base de $ 0 (la porción que sigue a la barra final)
\ T - la hora actual en formato HH: MM: SS de 12 horas
\ t - la hora actual en formato HH: MM: SS de 24 horas
\ @ - la hora actual en formato de 12 horas am / pm
\ A - la hora actual en formato HH: MM de 24 horas
\ u - el nombre de usuario del usuario actual
\ v - la versión de bash (por ejemplo, 2.00)
\ V - el lanzamiento de bash, versión + nivel de parche (por ejemplo, 2.00.0)
\ w - el directorio de trabajo actual, con $ HOME abreviado con una tilde (usa el valor de la variable PROMPT_DIRTRIM)
\ W - el nombre base del directorio de trabajo actual, con $ HOME abreviado con una tilde
\! - el número de historial de este comando
\ # - el número de comando de este comando
\ $ - si el UID efectivo es 0, un #, de lo contrario un $
\ nnn: el carácter correspondiente al número octal nnn
\\ - una barra invertida
\ [- comienza una secuencia de caracteres que no se imprimen, que podrían usarse para incrustar una secuencia de control de terminal en la solicitud
\] - finaliza una secuencia de caracteres que no se imprimen

 

 

The things everyone must do in a command line environment is navigate the file system, create, delete, copy and move file system objects, and execute commands. This may be common knowledge to some of you, but let’s take a quick look:

 

macbook:~ roota$ mkdir /tmp/tutorial
macbook:~ roota$ cd /tmp/tutorial/
macbook:tutorial roota$ mkdir undirectorio
macbook:tutorial roota$ mkdir segundodirectorio
macbook:tutorial roota$ touch segundodirectorio/unarchivo
macbook:tutorial roota$ touch segundodirectorio/otroarchivo
macbook:tutorial roota$ cd segundodirectorio/
macbook:segundodirectorio roota$ pushd /tmp/tutorial/
/tmp/tutorial /tmp/tutorial/segundodirectorio
macbook:tutorial roota$ ls -al
total 0
drwxr-xr-x  4 roota  wheel  128 Aug 24 17:51 .
drwxrwxrwt  5 root   wheel  160 Aug 24 17:50 ..
drwxr-xr-x  4 roota  wheel  128 Aug 24 17:51 segundodirectorio
drwxr-xr-x  2 roota  wheel   64 Aug 24 17:51 undirectorio
macbook:tutorial roota$ popd
/tmp/tutorial/segundodirectorio
macbook:segundodirectorio roota$ ls -al
total 0
drwxr-xr-x  4 roota  wheel  128 Aug 24 17:51 .
drwxr-xr-x  4 roota  wheel  128 Aug 24 17:51 ..
-rw-r--r--  1 roota  wheel    0 Aug 24 17:51 otroarchivo
-rw-r--r--  1 roota  wheel    0 Aug 24 17:51 unarchivo
macbook:segundodirectorio roota$


Una explicación línea por línea

 

Si es root, el mensaje termina con # en lugar de $.

1 – Cree un directorio llamado tutorial en / tmp /.
2 – Cambiar el directorio actual al directorio recién creado.
3 – Cree un directorio llamado “undirectorio” dentro del directorio actual.
4 – Cree un directorio llamado “segundodirectorio” dentro del directorio actual.
5 – Cree dos archivos vacíos dentro de “segundodirectorio” usando el comando táctil.
6 – Cambiar el directorio actual a segundodirectorio.
7 – Use pushd para cambiar el directorio a / tmp / tutorial para colocar nuestro directorio actual en una pila.
8 – Listar todos los archivos en / tmp / undirectorio
9 – Regrese a nuestro directorio anterior emitiendo un comando popd, que recupera (y elimina) el directorio superior de la pila.
10 – Enumere nuevamente el contenido y vea los dos archivos que creamos en los pasos anteriores.


Entrada / salida

 

Cada comando debe comunicarse con el entorno de línea de comando. Los comandos necesitan entrada y proporcionar salida. La entrada estándar se refiere a la fuente desde donde un comando puede leer información. Este es el teclado por defecto, y con frecuencia se lo denomina “stdin”. Salida estándar se refiere al lugar donde se enviará la salida de un comando. Por defecto, esta es la consola actual, y generalmente se conoce como “stdout”. Error estándar se refiere al lugar donde un comando genera sus errores. Esta es la consola actual por defecto, y muchos se refieren a ella como “stderr”.

Lo que definimos hasta ahora simplemente establece que un comando puede leer desde el teclado y mostrar sus resultados, tanto buenos como malos, en la pantalla.

En Unix (y sistemas similares) todo es un archivo. Su teclado es un archivo, su mouse es un archivo, su pantalla es un archivo, los programas están en archivos, el texto está en archivos, etc.

Un descriptor de archivo es un número entero que el núcleo del sistema operativo utiliza para hacer referencia a archivos abiertos. Cada sistema tiene al menos tres descriptores de archivo:

Descriptor no. 0 – entrada estándar.
Descriptor no. 1 – salida estándar.
Descriptor no. 2 – error estándar.

 

Redirecciones

Los sistemas Unix tienen una característica muy poderosa: como todo es un archivo, puede hacer referencia y redirigir todo de un lugar a otro. Los operadores de redirección son <para stdin y> para stdout. Entonces, si desea que un comando lea información desde el teclado, puede hacer algo como esto:

 

$ alguncomando <


Pero, ¿qué pasa si quieres que tu comando lea de un archivo? Bueno, puedes redirigir un archivo a su stdin, así:

 

$ alguncommando < /dir/archivo.txt 

Si desea que la salida de su comando vaya a un archivo, puede usar el operador > . Por ejemplo, hemos visto cómo enumerar archivos en una carpeta:

 

macbook:segundodirectorio roota$ ls -al
total 0
drwxr-xr-x 4 roota wheel 128 Aug 24 17:51 .
drwxr-xr-x 4 roota wheel 128 Aug 24 17:51 ..
-rw-r–r– 1 roota wheel 0 Aug 24 17:51 otroarchivo
-rw-r–r– 1 roota wheel 0 Aug 24 17:51 unarchivo
macbook:segundodirectorio roota$

Puede enviar ese resultado a un archivo con el siguiente comando:

macbook:segundodirectorio roota$ ls -al > ./archivito

El contenido del tercer archivo es :

macbook:segundodirectorio roota$ cat archivito 
total 0
drwxr-xr-x 5 roota wheel 160 Aug 24 22:04 .
drwxr-xr-x 4 roota wheel 128 Aug 24 17:51 ..
-rw-r--r-- 1 roota wheel 0 Aug 24 22:04 archivito
-rw-r--r-- 1 roota wheel 0 Aug 24 17:51 otroarchivo
-rw-r--r-- 1 roota wheel 0 Aug 24 17:51 unarchivo

 

Digamos que queremos navegar a la carpeta principal, enumerar todos sus archivos y usar un comando para agregar la lista al archivo existente. El operador > redirige la salida a un archivo y sobrescribe ese archivo; entonces no podemos usarlo. Sin embargo, podemos usar >> (un doble>) para agregar nuevos datos a un archivo existente.

 

macbook:segundodirectorio roota$ cd ..
macbook:tutorial roota$ ls -al
total 0
drwxr-xr-x 4 roota wheel 128 Aug 24 17:51 .
drwxrwxrwt 5 root wheel 160 Aug 24 18:53 ..
drwxr-xr-x 5 roota wheel 160 Aug 24 22:04 segundodirectorio
drwxr-xr-x 2 roota wheel 64 Aug 24 17:51 undirectorio
macbook:tutorial roota$ ls -al >> ./segundodirectorio/archivito 

Y el contenido de nuestro archivo es:

total 0
drwxr-xr-x 5 roota wheel 160 Aug 24 22:04 .
drwxr-xr-x 4 roota wheel 128 Aug 24 17:51 ..
-rw-r--r-- 1 roota wheel 0 Aug 24 22:04 archivito
-rw-r--r-- 1 roota wheel 0 Aug 24 17:51 otroarchivo
-rw-r--r-- 1 roota wheel 0 Aug 24 17:51 unarchivo
total 0
drwxr-xr-x 4 roota wheel 128 Aug 24 17:51 .
drwxrwxrwt 5 root wheel 160 Aug 24 18:53 ..
drwxr-xr-x 5 roota wheel 160 Aug 24 22:04 segundodirectorio
drwxr-xr-x 2 roota wheel 64 Aug 24 17:51 undirectorio

 

continuaraaaaaa….

Te ayudó?