Shell Bash

¡Gracias por leer! Si tiene alguna pregunta o comentario, no dude en comunicarse. ¡Happy Hacking! 🚀💻
Los informáticos sabemos que las computadoras son geniales en ayudarnos con tareas repetitivas. Sin embargo, olvidamos que tenemos un gran numero de herramientas disponibles a nuestro alcance para ser más productivos y resolver problemas complejos relacionados con la computación. Todaviá muchos de nosotros utilizamos un pequeño conjunto de esas herramienta: en ocaciónes llegamos a sobrevivir con ayuda de tutoriales y copipegando comandos de internet.
Hoy aprenderemos a utilizar al máximo las herramientas y espero infundirte emoción para explorar (y tal vez construir) otras por tu propia cuenta
¿Qué es la shell?
Las computadoras en estos días tienen una variedad de interfaces: sofisticadas interfaces gráficas de usuarios, interfaces de voz, AR/VR y muchas otras. Éstas son geniales para el 80% de los casos de uso, pero ellas fundamentalmente te restringen de lo que puedes hacer: tú no puedes presionar un botón que no exista o dar una instrucción por voz que no esté programada. Para aprovechar por completo las herramientas que tu computadora provee, tenemos que ir a la vieja escuela y ejecutar una intarfaz textual: la shell
Básicamente, es la interfaz de línea de comandos con la que los usuarios avanzados (de ahora en adelante, eso te incluye a ti) controlan el sistema operativo de su computadora
Tanto Linux como Windows tienen CLI ( Command Line Interface ) con las que operaremos como usuarios avanzados.
Linux:
- Hay una variedad de shells que existen en el ecosistema Linux, pero el predeterminado para muchos sistemas operativos se conoce como Bash (Bourne Again SHell). Eventualmente serás el mejor amigo de esto.
Windows:
CDM
Una interfaz heredada que permite el acceso a comandos de DOS
MS-DOS fue el primer sistema operativo de Microsoft y contenía muchas funciones básicas a las que todavía se puede acceder a través de CMD
Power Shell
- Una interfaz y un lenguaje con todas las funciones que permiten secuencias de comandos complejas mediante cmdlets y canalizaciones. Como todo el lenguaje fue escrito para trabajar con Windows, permite un control detallado y una fácil manipulación del sistema operativo.
Subsistema de Windows para Linux (WSL): solo Windows 10
El Subsistema de Windows para Linux permite a los desarrolladores ejecutar un entorno Linux, incluida la mayoría de las herramientas, utilidades y aplicaciones de línea de comandos, directamente en Windows, sin modificaciones, sin la sobrecarga de una máquina virtual tradicional o una configuración de arranque dual.
Básicamente, es una máquina virtual mini-Linux, con acceso a los mismos archivos en la máquina host de Windows.
No trabajaremos con Windows en este curso.
En esta lección, nos enfocamos en la “Bourne Again Shell”, o “bash” para abreviar.
Diseño de comando
Entonces, veamos cómo el verdadero hacker usa la línea de comando, comenzando con una escena de Matrix, una gran película de hacker de todos los tiempos.
Esa escena es bastante realista y muchos de los comandos que ejecuta son cosas reales que usarás a lo largo de este curso.
Entremos en el formato de los comandos. Primero, habrá un $ o un #, en el futuro. Por ahora usaré $ para indicar el comienzo de un comando.
Usando la shell
cuando lanzas tu terminal, ves un promp que frecuentemente luce así:
┌──(Sapce㉿monkey)-[~]
└─$
La terminal nos dice el nombre de usuario monkey-space, tambien nos dice el directorio de trabajo actual que es: ~ ( abrevia "Home"). El $ cuenta que no eres el usuario administrador (root). En este prompt tú puedes escribir un comando, el cual será interpretado por la shell.
El primer comando que vamos a escribir nos dirá quiénes somos, lo cual es claramente rudo :
┌──(Space㉿monkey)-[~]
└─$ whoami
monkey
El siguiente comando nos dirá nuestra ruta dentro el directorio, también conocido como nuestro directorio de trabajo. En linux, llamamos directorios a las carpetas porque suena mejor, no te dejes llevar.
┌──(Space㉿monkey)-[~]
└─$ pwd
/home/monkey
pwd ( print working directory )
home : La primer carpeta (directorio) es la que almacena a los usuarios
monkey : en este caso es un directorio que almacena todos los datos del usuario
El proximo comando que vamos a ver es el comando ls (List) este comando imprime todo lo que se encuentra en nuestro director de trabajo actual, que en nuestro caso es el direcotorio /monkey
┌──(Space㉿monkey)-[~]
└─$ ls
Desktop Public Documents Music
Templates Downloads Pictures Videos
┌──(Space㉿monkey)-[~]
└─$ ls -l
total 32
drwxr-xr-x 2 monkey monkey 4096 mar 9 18:41 Desktop
drwxr-xr-x 2 monkey monkey 4096 mar 12 18:16 Documents
drwxr-xr-x 2 monkey monkey 4096 mar 12 09:49 Downloads
drwxr-xr-x 2 monkey monkey 4096 mar 9 18:41 Music
drwxr-xr-x 2 monkey monkey 4096 mar 9 18:41 Pictures
drwxr-xr-x 2 monkey monkey 4096 mar 9 18:41 Public
drwxr-xr-x 2 monkey monkey 4096 mar 9 18:41 Templates
drwxr-xr-x 2 monkey monkey 4096 mar 9 18:41 Videos
El comando ls no solo muestra los nombres sino también puede mostrarnos un poco más y todo esto gracias a los indicadores (flags). El indicador -l es un indicador que imprime la informacion del archivo en un formato largo en donde nos muestra mas datos :
**drwxr-xr-x :**Permisos no te preocupes si aun no lo entiendes lo veremos mas a delante.
monkey : Despues tenemos el nombre el Usuario a quien le pertenece el archivo.
monkey : Despues tenemos el grupo.
4096 : Tamaño que esta utilizando.
9 18:41 : Fecha con la cual fue creado el archivo o directorio
También podemos ejecutar un comando con argumentos :
┌──(Space㉿monkey)-[~]
└─$ echo hello
En este caso, le ordenamos a la shell ejecutar el programa echo con el argumento hello, lo que hace echo es simplemente imprir sus argumentos. La shell analiza el comando dividiéndolo por espacios en blanco, y entonces corre el programa indicando en la primer palabra, dando a cada palabra siguiente como un argumento al que el programa puede acceder. Si tú quieres proveer un argumento que contiene espacios u otro carácter especial (por ejemplo, un directorio nombrado Mis fotos), puedes citarlo con comillas simples 'Mis fotos' o con comillas dobles "Mis fotos", o ejecutarlo solamente con el carácter \ (*este caracter eleminia el espacio delante de el ) barra invertida *Mis\ fotos.
Vamos a crearlo para entender más el ejemplo utilizando otro comando que tambien requiere de argumentos, el siguiente comando es mkdir (make directory):
┌──(Space㉿monkey)-[~]
└─$ mkdir "Mis fotos"
Ahora que ya creamos el directorio vamos a ver si existe utilizando el comando ls
┌──(Space㉿monkey)-[~]
└─$ ls
Desktop Public Documents Music
Templates Downloads Pictures Videos
'Mis fotos'
Y ahí se encuentra el directorio 'Mis fotos'. Ahora para ingresar a ese directorio especial lo hacemos con el comando cd + las iniciales de la ruta relativa Mis y precionando el tabulador nos arrojara la ruta.
┌──(Space㉿monkey)-[~]
└─$ cd Mis\ fotos
Preciona Enter y listo esta dentro.
Una pregunta importante es ¿cómo logra la shell encontrar los programas date, whoami, mkdir, ls y echo? Bueno, la shell es un entorno de programación, como Python o Ruby tiene variables, condiciones, bucles y funciones. Cuando corres un comando en tu shell, tú realmente escribes una pequeña porción de código que tu shell interpreta. Si pides a la shell ejecutar un comando que no coincide con las palabras reservadas de su lenguaje te marcara un error.
┌──(Space㉿monkey)-[~]
└─$ fñofnfjkn
fñofnfjkn: no se encontró la orden
Navegando en la shell
Una ruta en la shell es una lista de directorios separados por un / (slash) en Linux y Mac Os la ruta / (slash) es el principio del arbol del sistema de archivos, bajo la cual se encuentran el resto de archivos, mientras que en Widows hay una raíz para cada partición ( ejemplo: C:\ ).
Cuando una ruta que empieza con / es llamada ruta absoluta. Cualquier otra ruta es una ruta relativa. Las rutas relativas son relativas con respecto al directorio de trabajo actual.
Veamos ahora una flag del comando ls -a esta flag nos muestra las entradas que comienzan con ( . ) un punto estos archivos o directorios que empiezan con un punto al inicio son archivos ocultos:
┌──(Space㉿monkey)-[~]
└─$ ls -a
. .. .dmrc .local
Videos bDocuments .mozilla .Xauthority
.bash_logout Downloads Music .xsession-errors
.bashrc .face Pictures .xsession-errors.old
.bashrc.original .face.icon .pki .zsh_history
bootcamp .gnupg .profile .zshrc
.cache .ICEauthority Public
.config .java .sudo_as_admin_successful
Desktop .lesshst Templates
Si prestamos atención al listar el directorio actual nos muestra un directorio que es un . punto y un segundo directorio que son dos .. puntos. En la ruta, . un punto hace referencia al directorio actual y .. dos puntos al directorio padre. Utilicemos otro comando muy importante que es cd (change directory):
┌──(Space㉿monkey)-[~]
└─$ cd ..
┌──(Space㉿monkey)-[/home]
└─$ ls
monkey
como te das cuenta acabamos de pasar del directorio monkey al directorio /home y tirando de un ls podemos ver listado el directorio monkey. Si continuamos más arriba encontraremos
┌──(Space㉿monkey)-[/home]
└─$ cd ..
┌──(Space㉿monkey)-[/]
└─$ ls
bin etc initrd.img.old lib64 mnt root srv usr vmlinuz.old
boot home lib lost+found opt run sys var
dev initrd.img lib32 media proc sbin tmp vmlinuz
El directorio raiz / aqui encontraremos todas las ramas a las cuales nosotros podemos acceder :



