Bienvenidos a este capítulo de este Curso de Linux para Hackers – La Interfaz de Línea de Comandos. Comparte este articulo y síguenos para recibir más capítulos, guías y cursos gratis.

Esta guía es parte de un curso mucho más grande en donde te enseñamos a convertirte en hacker de 0 a 100. Desde los conocimientos más básicos hasta conseguir empleo.

En esta guía veremos desde cero un tema tan amplio como es Linux y lo haremos desde el punto de vista del hacking y la ciberseguridad.

Para saber más comente a continuación, respondemos todos y cada uno de los comentarios.

¿Te gustaría enterarte de cuando lanzamos descuentos y nuevos cursos?

GUI «Graphical User Interface»

Los sistemas operativos suelen tener dos tipos de interfaces: GUI (Interfaz gráfica de usuario) y CLI (Interfaz de línea de comandos), a través de las cuales nos comunicamos con el sistema operativo. Lo mismo ocurre con los sistemas operativos basados ​​en Linux.

Los sistemas operativos Linux generalmente incluyen paquetes de emuladores de terminal para el funcionamiento basado en CLI (o interfaz de línea de comandos) y paquetes de entorno de escritorio para el funcionamiento basado en GUI (interfaz gráfica de usuario). A continuación se muestran algunas de las CLI y GUI estándar:

Si eres como la mayoría de las personas, probablemente estés familiarizado con el uso de la Interfaz Gráfica de Usuario (o GUI «Graphical User Interface») para controlar tu computadora. La GUI proporciona una forma fácil de descubrir y administrar tu sistema.

Sin una GUI, algunas herramientas para gráficos y video no serían prácticas. Antes de la popularidad de la GUI, la Interfaz de Línea de Comandos (o CLI «Command Line Interface») era la forma preferida para controlar una computadora. La CLI se basa únicamente en la entrada por teclado. Todo lo que quieres que tu computadora haga, se retransmite escribiendo comandos en lugar de ir haciendo clics en los iconos.

Modo Gráfico Vs CLI

Linux puede usarse de dos maneras: en modo gráfico y modo no gráfico. En modo gráfico las aplicaciones corren en las ventanas que puedes cambiar el tamaño y mover. Tienes menús y herramientas que te ayudan a encontrar lo que buscas. Aquí es donde vas a usar un navegador web, tus herramientas de edición de gráficos y tu correo electrónico. 

En modo gráfico puedes tener varios shells abiertos, que resulta muy útil cuando se están realizando tareas en múltiples equipos remotos. Incluso puedes iniciar la sesión con tu usuario y contraseña a través de una interfaz gráfica. Después de iniciar la sesión pasarás al escritorio donde puedes cargar las aplicaciones. 

Comienza con una sesión basada en texto. Simplemente se te pedirá tu nombre de usuario y luego tu contraseña. Si el inicio de sesión tiene éxito pasarás directamente al shell. No hay ventanas para navegar. A pesar de esto tienes editores de texto, navegadores web y clientes de correo electrónico, pero son sólo de texto. La mayoría de los servidores también se ejecutarán en este modo, ya que la gente no entra en ellos directamente, lo que hace que una interfaz gráfica sea un desperdicio de recursos. Aquí hay un ejemplo de la pantalla que se puede ver después de iniciar la sesión.

Entornos de escritorio:

  • Xfce/Xfce server Desktop
  • GNOME3
  • KDE plasma 5
  • cinnamon Desktop
  • MATE Desktop

CLI «Command Line Interface»

La línea de comandos es una entrada de texto simple, que te permite ingresar cualquier cosa, desde un comando de una sola palabra hasta scripts complicados. Si inicias la sesión a través de modo de texto te encuentras inmediatamente en la consola. Si inicias la sesión de forma gráfica, entonces necesitarás iniciar un shell gráfico, que es solo una consola de texto con una ventana a su alrededor para que puedas cambiar su tamaño y posición.

Terminales:

  • Q terminal
  • gnome-terminal
  • MATE Terminal
  • xterm
  • Terminator
  • Konsole

Cada escritorio de Linux es diferente, por lo que tienes que buscar en tu menú una opción llamada terminal. Las dos son shells gráficos, diferenciadas sobre todo en aspectos más que funcionalidad. Si tienes una herramienta de búsqueda como Ubuntu Dash, puedes buscar un terminal como se muestra aquí. Estas herramientas te permiten buscar rápidamente en tu sistema exactamente lo que quieres ejecutar en lugar de perderte en los menús.

Por lo tanto, al ser uno de los sistemas operativos basados ​​en Linux , Kali también viene con algunos de estos terminales y entornos de escritorio. Por lo general, Kali 2020.2 Linux viene con el terminal Q y su entorno de escritorio predeterminado es Xfce/Xfce server.

La interfaz de línea de comandos de Linux es absolutamente sorprendente. Sin embargo, no hay nada que no puedas hacer con la terminal en casi cualquier sistema operativo Linux cons los comandos adecuados.

Prompt

a del comando se ha desplegado en la pantalla. El prompt está diseñado para decirle al usuario que introduzca un comando. La estructura del prompt puede variar entre las distribuciones, pero por lo general contiene información sobre el usuario y el sistema como: laprovittera@DESKTOP-1GB29SV:~$

El prompt anterior proporciona el nombre del usuario registrado en (laprovittera), el nombre del sistema (DESKTOP-1GB29SV) y el directorio actual (~). El símbolo ~ se utiliza como abreviación para el directorio principal del usuario (el directorio principal del usuario viene bajo el directorio /home y con el nombre de la cuenta de usuario, por ejemplo: /home/sysadmin).

Cómo trabajar con la terminal Kali Linux

Veamos algunas cosas básicas que podemos hacer con la terminal Kali Linux.

Personalización de la terminal

Para personalizar la terminal de Kali Linux, puede abrir la pestaña de preferencias consultando el menú Archivo y seleccionando la opción Preferencias. Hay muchas opciones disponibles que pueden ayudarlo a personalizar su terminal.

Ejecutar un comando a través de la terminal

Para ejecutar cualquier comando en la terminal de Kali Linux, solo tienes que ingresar o escribir el comando específico y proporcionar la entrada adecuada. Luego, todo lo que tienes que hacer es presionar la tecla Enter. En respuesta, la terminal ejecutará ese comando a través del shell y devolverá el resultado.

Comentarios en la terminal

Para poner un comentario en la terminal, podemos utilizar el carácter “#”. Para entenderlo con más detalle, puede considerar el siguiente ejemplo: A continuación se muestra el ejemplo de un comentario

Funciones

Un shell es el intérprete que traduce los comandos introducidos por un usuario en acciones a realizar por el sistema operativo. El shell más comúnmente utilizado para las distribuciones de Linux se llama el BASH shell. Es un shell que ofrece muchas funciones avanzadas, tales como el historial de comandos, que te permite fácilmente volver a ejecutar comandos previamente ejecutados. 

El BASH shell tiene también otras funciones populares:

• Scripting: La capacidad de colocar los comandos en un archivo y ejecutar el archivo, resultando en todos los comandos siendo ejecutados. Esta función también tiene algunas características de programación, tales como las instrucciones condicionales y la habilidad de crear funciones.
• Los Alias: La habilidad de crear “nicknames” (o «sobrenombres» en español) cortos para más comandos más largos.
 Las Variables: se utilizan para almacenar información para el BASH shell. Estas variables pueden utilizarse para modificar cómo las funciones y los comandos trabajan y proporcionan información vital sobre el sistema.

Nota: La lista anterior es sólo un breve resumen de algunas de las muchas funciones proporcionadas por el BASH shell.

El formato

Muchos comandos se pueden utilizar por sí mismos sin más entradas. Algunos comandos requieren entradas adicionales para funcionar correctamente. Esta entrada adicional viene en dos formas: opciones y argumentos. El formato típico de un comando es el siguiente:

comando [opciones] [argumentos]

Las opciones se utilizan para modificar el comportamiento básico de un comando y los argumentos se utilizan para proporcionar información adicional (tal como un nombre de archivo o un nombre de usuario). Cada opción y argumento vienen normalmente separados por un espacio, aunque las opciones pueden a menudo ser combinadas. Recuerda que Linux es sensible a mayúsculas y minúsculas. Comandos, opciones, argumentos, variables y nombres de archivos deben introducirse exactamente como se muestra.

Estructura de mando:

  • Cambia el comportamiento de las herramientas.
  • Letra precedida de guión
  • Se pueden agrupar
  • Por ejemplo, ls -alt
  • Palabra precedida de doble guión
  • Por ejemplo, ls-help

Argumentos

El comando ls proporciona ejemplos útiles. Por sí mismo, el comando ls listará los archivos y directorios contenidos en el directorio de trabajo actual. 

Un argumento lo puedes pasar también al comando ls para especificar contenido de qué directorio hay que listar. Por ejemplo, el comando ls /etc/ppp listará el contenido del directorio /etc/ppp en lugar del directorio actual

Puesto que el comando ls acepta múltiples argumentos, puede listar el contenido de varios directorios a la vez, introduciendo el comando ls /etc/ppp /etc/ssh

Es una pieza de información adicional que le indica al comando qué acción debe tomar. Si estamos usando una opción, el argumento viene después de ella. Por ejemplo: ls -l /Desktop

Creación de directorios en Kali Linux

  • Para crear directorios, escriba mkdir /tmp/testdir dentro de la terminal. Se creará un directorio con el nombre tetsdir.
  • Para crear un directorio padre, escriba mkdir -p /tmp/dir1/dir2.
  • Para crear un archivo dentro de un directorio, escriba touch /tmp/testfile.
  • Para ver el directorio utilice el comando ls.

Listado de contenidos del directorio

  • -l -listado largo
  • -a -lista de archivos ocultos
  • -r -lista en nombre inverso
  • -t -lista los archivos nuevos primero
  • -rt -lista en tiempo inverso (lo más antiguo primero)

Opciones

Las opciones pueden utilizarse con comandos para ampliar o modificar el comportamiento de un comando. Las opciones son a menudo de una letra; sin embargo, a veces serán “palabras”. Por lo general, los comandos viejos utilizan una letra, mientras los comandos nuevos utilizan palabras completas para las opciones. Opciones de una letra son precedidas por un único guión -. Opciones de palabra completa son precedidas por dos guiones –.

Puedes utilizar la opción -l con el comando ls para ver más información sobre los archivos que se listan. El comando ls -l lista los archivos contenidos dentro del directorio actual y proporciona información adicional, tal como los permisos, el tamaño del archivo y otra información.

En la mayoría de los casos, las opciones pueden utilizarse conjuntamente con otras opciones. Los comandos ls -l -h o ls -lh listarán los archivos con sus detalles, pero se mostrará el tamaño de los archivos en formato de legibilidad humana en lugar del valor predeterminado (bytes).  Se pueden combinar opciones de una letra: -lh . El orden de las opciones combinadas no es importante.

La opción -h también tiene la forma de una palabra completa: –human-readable (–legibilidad-humana). Las opciones a menudo pueden utilizarse con un argumento. Algunas de las opciones requieren sus propios argumentos. Puedes utilizar los argumentos y las opciones con el comando ls para listar el contenido de otro directorio al ejecutar el comando ls -l/etc/ppp.

Historial de los Comandos

Al ejecutar un comando en una terminal, el comando se almacena en “history list”. Esto está diseñado para que más adelante puedas ejecutar el mismo comando más fácilmente puesto que no necesitarás volver a introducir el comando entero. Para ver la lista de historial de una terminal, utiliza el comando history. Pulsando la tecla de Flecha Hacia Arriba ↑ se mostrará el comando anterior en tu línea de prompt. Puedes presionar arriba repetidas veces para moverte a través del historial de comandos que hayas ejecutado. Presionando la tecla Entrar se ejecutará de nuevo el comando visualizado.

Cuando encuentres el comando que quieres ejecutar, puedes utilizar las teclas de Flecha Hacia Izquierda ← y Flecha Hacia Derecha → para colocar el cursor para edición. Otras teclas útiles para edición incluyen Inicio, Fin, Retroceso y Suprimir. Si ves un comando que quieres ejecutar en la lista que haya generado el comando history, puedes ejecutar este comando introduciendo el signo de exclamación y luego el número al lado del comando, por ejemplo: !3

Algunos ejemplos adicionales del history:

EjemploSignificado
history 5Muestra los últimos cinco comandos de la lista del historial
!!Ejecuta el último comando otra vez
!-5Ejecuta el quinto comando desde la parte inferior de la lista de historial
!lsEjecuta el comando ls más reciente

Variables del BASH shell

Una variable del shell BASH es una función que te permite a ti o al shell almacenar los datos. Esta información puede utilizarse para proporcionar información crítica del sistema o para cambiar el comportamiento del funcionamiento del shell BASH (u otros comandos).
Las variables reciben nombres y se almacenan temporalmente en la memoria.

Al cerrar una ventana de la terminal o shell, todas las variables se pierden. Sin embargo, el sistema automáticamente recrea muchas de estas variables cuando se abre un nuevo shell.
Para mostrar el valor de una variable, puedes utilizar el comando echo. El comando echo se utiliza para mostrar la salida en la terminal; en el ejemplo siguiente, el comando mostrará el valor de la variable HISTSIZE.

La variable HISTSIZE define cuántos comandos anteriores se pueden almacenar en la lista del historial. Para mostrar el valor de la variable debes utilizar un carácter del signo de dólar $ antes del nombre de la variable. Para modificar el valor de la variable, no se utiliza el carácter $. 

Variable PATHPATH

El término path se refiere a una lista que define en qué directorios el shell buscará los comandos. Si introduces un comando y recibes el error “command not found”, es porque el shell BASH no pudo localizar un comando por ese nombre en cualquiera de los directorios en la ruta. El comando echo $PATH muestra la ruta del shell actual. 

Basado en la anterior salida, cuando intentas ejecutar un comando, el shell primero busca el comando en el directorio /home/sysadmin/bin. Si el comando se encuentra en ese directorio, entonces se ejecuta. Si no es encontrado, el shell buscará en el directorio /usr/local/sbin. Si el comando no se encuentra en ningún directorio listado en la variable PATH, (lol en el ejemplo) entonces recibirás un error, command not found. 

Si en tu sistema tienes instalado un software personalizado, puede que necesites modificar la ruta PATH para que sea más fácil ejecutar estos comandos. Por ejemplo,

PATH=/usr/bin/custom:$PATH

agregará el directorio /usr/bin/custom a la variable PATH.

Comando export

Hay dos tipos de variables utilizadas en el shell BASH, la local y la de entorno. Las variables de entorno, como PATH y HOME, las utiliza el BASH al interpretar los comandos y realizar las tareas. Las variables locales son a menudo asociadas con las tareas del usuario y son minúsculas por convención. Para crear una variable local, simplemente introduce:

sysadmin@localhost:~$ var1=’Laprovittera’

Para ver el contenido de la variable, te puedes referir a ella iniciando con el signo de $:

sysadmin@localhost:~$ echo $var1
Laprovittera

Para ver las variables de entorno, utiliza el comando env (la búsqueda a través de la salida usando grep, tal como se muestra. En este caso, la búsqueda para variable1 en las variables de entorno resultará en una salida nula:

sysadmin@localhost:~$ env | grep var1
sysadmin@localhost:~$

Después de exportar var1 llegará a ser una variable de entorno. Observa que esta vez, se encuentra en la búsqueda a través de las variables de entorno:

sysadmin@localhost:~$ export var1
sysadmin@localhost:~$ env | grep var1
var1=Laprovittera


El comando export también puede utilizarse para hacer una variable de entorno en el momento de su creación:

sysadmin@localhost:~$ export var2=’Carlos’
sysadmin@localhost:~$ env | grep var2
variable2=Carlos

Para cambiar el valor de una variable de entorno, simplemente omite el $ al hacer referencia a tal valor:

sysadmin@localhost:~$ var1=$var1′ ‘$var2
sysadmin@localhost:~$ echo $var1
Laprovittera Carlos


Las variables exportadas pueden eliminarse con el comando unset:

sysadmin@localhost:~$ unset var3

Comando which

Puede haber situaciones donde diferentes versiones del mismo comando se instalan en un sistema o donde los comandos son accesibles para algunos usuarios y a otros no. Si un comando no se comporta como se esperaba o si un comando no está accesible pero debería estarlo, puede ser beneficioso saber donde el shell encuentra tal comando o que versión está utilizando.  Sería tedioso tener que buscar manualmente en cada directorio que se muestra en la variable PATH. En su lugar, puedes utilizar el comando which para mostrar la ruta completa del comando en cuestión. El comando which busca la ubicación de un comando buscando en la variable PATH.

Comando type

El comando type puede utilizarse para determinar la información acerca de varios comandos. Algunos comandos se originan de un archivo específico.

sysadmin@localhost:~$ type which                                       
which is hashed (/usr/bin/which)

Esta salida sería similar a la salida del comando which muestra la ruta completa del comando).

sysadmin@localhost:~$ which which                         
/usr/bin/which

El comando type también puede identificar comandos integrados en el bash (u otro) shell:

sysadmin@localhost:~$ type echo                                     
echo is a shell builtin

En este caso, la salida es significativamente diferente de la salida del comando which:

sysadmin@localhost:~$ which echo                                        
/bin/echo

Usando la opción -a, el comando type también puede revelar la ruta de otro comando:

sysadmin@localhost:~$ type -a echo                                      
echo is a shell builtin                                                
echo is /bin/echo

El comando type también puede identificar a los aliases para otros comandos:

sysadmin@localhost:~$ type ll                                          
ll is aliased to `ls -alF'                                              
sysadmin@localhost:~$ type ls                                          
ls is aliased to `ls --color=auto'

La salida de estos comandos indican que ll es un alias para ls - alF, incluso ls es un alias para ls --color=auto. Una vez más, la salida es significativamente diferente del comando which:

sysadmin@localhost:~$ which ll                                          
sysadmin@localhost:~$ which ls                                         
/bin/ls

El comando type soporta otras opciones y puede buscar varios comandos al mismo tiempo. Para mostrar sólo una sola palabra que describe al echoll, y a los comandos which, utiliza la opción -t:

sysadmin@localhost:~$ type -t echo ll which                  
builtin
alias
file

Los Alias

Un alias puede utilizarse para asignar comandos más largos a secuencias más cortas. Cuando el shell ve un alias ejecutado, sustituye la secuencia más larga antes de proceder a interpretar los comandos. Por ejemplo, el comando ls -l comúnmente tiene un alias l o ll. Ya que estos comandos más pequeñas son más fáciles de introducir, también es más rápido ejecutar la línea de comandos ls -l. Puedes determinar qué alias se definen en el shell con el comando alias:

sysadmin@localhost:~$ alias   
alias alert='notify-send —urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'                                          
alias egrep='egrep --color=auto'                                       
alias fgrep='fgrep --color=auto'                                        
alias grep='grep --color=auto'                                          
alias l='ls -CF'                                                       
alias la='ls -A'                                                       
alias ll='ls -alF'                                                     
alias ls='ls --color=auto'

Los alias que ves en los ejemplos anteriores fueron creados por los archivos de inicialización. Estos archivos están diseñados para hacer automático el proceso de creación de los alias. Los nuevos alias se pueden crear introduciendo alias name=command, donde nombre es el nombre que quieres dar a el alias y comando es el comando que quieres que se ejecute cuando se ejecuta el alias.

Puedes crear un alias de tal manera que lh muestre una lista larga de archivos, ordenados por tamaño con un tamaño “human friendly” con el comando alias lh='ls -Shl'. Introduciendo lh debe ahora dar lugar a la misma salida que introduciendo el comando ls -Shl:

sysadmin@localhost:~$ alias lh='ls -Shl'                                      
sysadmin@localhost:~$ lh /etc/ppp                                          
total 0                                                                 
drwxr-xr-x 1 root root 10 Jan 29  2015 ip-down.d            
drwxr-xr-x 1 root root 10 Jan 29  2015 ip-up.d 

Los alias creados de esta manera sólo persistirán mientras el shell esté abierto. Una vez que el shell es cerrado, los nuevos alias que hayas creado, se perderán. Además, cada shell posee sus propios alias, así que si creas un alias en un shell y luego lo abres en otro shell, no verás el alias en el nuevo shell.

Globbing

Los caracteres de globbing se denominan a menudo como “comodines”. Estos son símbolos que tienen un significado especial para el shell. A diferencia de los comandos que ejecutará el shell, u opciones y argumentos que el shell pasará a los comandos, los comodines son interpretados por el mismo shell antes de que intente ejecutar cualquier comando. Esto significa que los comodines pueden utilizarse con cualquier comando.

Los comodines son poderosos porque permiten especificar patrones que coinciden con los nombres de archivo en un directorio, así que en lugar de manipular un solo archivo a la vez, puedes fácilmente ejecutar comandos que afectarán a muchos archivos. Utilizando comodines es posible manipular todos los archivos con una cierta extensión o con una longitud de nombre de archivo determinado. Ten en cuenta que estos comodines pueden utilizarse con cualquier comando, ya que es el shell, no el comando que se expande con los comodines a la coincidencia de nombres de archivo.

Asterisco (*)

El asterisco se utiliza para representar cero o más de cualquier carácter en un nombre de archivo. Si quieres visualizar todos los archivos en el directorio /etc que empiecen con la letra t:

sysadmin@localhost:~$ echo /etc/t*                              
/etc/terminfo /etc/timezone                                      
sysadmin@localhost:~$

El patrón t* significa “cualquier archivo que comienza con el carácter t y tiene cero o más de cualquier carácter después de la letra t“.

Puedes usar el asterisco en cualquier lugar dentro del patrón del nombre de archivo. El siguiente ejemplo coincidirá con cualquier nombre de archivo en el directorio /etc que termina con .d:

sysadmin@localhost:~$ echo /etc/*.d                                 
/etc/apparmor.d /etc/bash_completion.d  /etc/cron.d /etc/depmod.d   /etc/fstab.d /etc/init.d /etc/insserv.conf.d /etc/ld.so.conf.d /etc/logrotate.d /etc/modprobe.d /etc/pam.d /etc/profile.d /etc/rc0.d /etc/rc1.d /etc/rc2.d /etc/rc3.d /etc/rc4.d /etc/rc5.d /etc/rc6.d /etc/rcS.d /etc/rsyslog.d /etc/sudoers.d /etc/sysctl.d  /etc/update-motd.d

En el ejemplo siguiente se mostrarán todos los archivos en el directorio /etc que comienzan con la letra r y terminan con .conf:

sysadmin@localhost:~$ echo /etc/r*.conf                             
/etc/resolv.conf /etc/rsyslog.conf

Signo de Interrogación (?)

El signo de interrogación representa cualquier carácter único. Cada carácter de signo de interrogación coincide con exactamente un carácter. Si quieres visualizar todos los archivos en el directorio /etc que comienzan con la letra t y que tienen exactamente 7 caracteres después del carácter de t:

sysadmin@localhost:~$ echo /etc/t???????      
/etc/terminfo /etc/timezone                                  
sysadmin@localhost:~$

Los comodines pueden utilizarse juntos para encontrar patrones más complejos. El comando echo /etc/*???????????????????? imprimirá sólo los archivos del directorio /etc con veinte o más caracteres en el nombre del archivo:

sysadmin@localhost:~$ echo /etc/*????????????????????            
/etc/bindresvport.blacklist /etc/ca-certificates.conf            
sysadmin@localhost:~$

El asterisco y el signo de interrogación también podrían usarse juntos para buscar archivos con extensiones de tres letras ejecutando el comando echo /etc/*.???:

sysadmin@localhost:~$ echo /etc/*.???                
/etc/blkid.tab /etc/issue.net                                
sysadmin@localhost:~$

Corchetes [ ] y Exclamación (!)

Los corchetes se utilizan para coincidir con un carácter único representando un intervalo de caracteres que pueden coincidir con los caracteres.

Por ejemplo, echo /etc/[gu]* imprimirá cualquier archivo que comienza con el carácter g o u y contiene cero o más caracteres adicionales:

sysadmin@localhost:~$ echo /etc/[gu]*                              
/etc/gai.conf /etc/groff /etc/group /etc/group- /etc/gshadow /etc/gshadow- /etc/ucf.conf /etc/udev /etc/ufw /etc/update-motd.d /etc/updatedb.conf            
sysadmin@localhost:~$

Los corchetes también pueden ser utilizados para representar un intervalo de caracteres. Por ejemplo, el comando echo /etc/[a-d]* mostrará todos los archivos que comiencen con cualquier letra entre e incluyendo a y d:

sysadmin@localhost:~$ echo /etc/[a-d]*                             
/etc/adduser.conf /etc/adjtime /etc/alternatives /etc/apparmor.d 
/etc/apt /etc/bash.bashrc /etc/bash_completion.d /etc/bind /etc/bindresvport.blacklist /etc/blkid.conf 
/etc/blkid.tab /etc/ca-certificates /etc/ca-certificates.conf /etc/calendar /etc/cron.d /etc/cron.daily /etc/cron.hourly /etc/cron.monthly /etc/cron.weekly /etc/crontab /etc/dbus-1 /etc/debconf.conf /etc/debian_version /etc/default 
/etc/deluser.conf /etc/depmod.d /etc/dpkg                          
sysadmin@localhost:~$

El comando echo /etc/*[0-9]* mostrará todos los archivos que contienen al menos un número:

sysadmin@localhost:~$ echo /etc/*[0-9]*                            
/etc/dbus-1 /etc/iproute2 /etc/mke2fs.conf /etc/python2.7 /etc/rc0.d
/etc/rc1.d /etc/rc2.d /etc/rc3.d /etc/rc4.d /etc/rc5.d /etc/rc6.d   
sysadmin@localhost:~$

El intervalo se basa en el cuadro de texto de ASCII. Esta tabla define una lista de caracteres disponiéndolos en un orden estándar específico. Si proporcionas un orden inválido, no se registrará ninguna coincidencia:

sysadmin@localhost:~$ echo /etc/*[9-0]*                           
/etc/*[9-0]*                                                       
sysadmin@localhost:~$

El signo de exclamación se utiliza en conjunto con los corchetes para negar un intervalo. Por ejemplo, el comando echo [!DP]* mostrará cualquier archivo que no comienza con D o P.

Las Comillas (“)

Hay tres tipos de comillas que tienen significado especial para el shell Bash: comillas dobles ", comillas simples ' y comilla invertida `. Cada conjunto de comillas indica al shell que debe tratar el texto dentro de las comillas de una manera distinta a la normal.

Las comillas dobles 

Detendrán al shell de la interpretación de algunos metacaracteres, incluyendo los comodines. Dentro de las comillas dobles, el asterisco es sólo un asterisco, un signo de interrogación es sólo un signo de interrogación y así sucesivamente. Esto significa que cuando se utiliza el segundo comando echo más abajo, el shell BASH no convierte el patrón de globbing en nombres de archivos que coinciden con el patrón:

sysadmin@localhost:~$ echo /etc/[DP]*                                         
/etc/DIR_COLORS /etc/DIR_COLORS.256color /etc/DIR_COLORS.lightbgcolor /etc/PackageKit                                                                  
sysadmin@localhost:~$ echo "/etc/[DP]*"                                       
/etc/[DP]*                                                                    
sysadmin@localhost:~$

Esto es útil cuando quieres mostrar algo en la pantalla, lo que suele ser un carácter especial para el shell:

sysadmin@localhost:~$ echo "Los comodines son *, ? y [ ]"      
Los comodines son *, ? y [ ]                                   
sysadmin@localhost:~$

Las comillas dobles todavía permiten la sustitución de comando, sustitución de variable y permiten algunos metacaracteres de shell sobre los que aún no hemos hablado. Por ejemplo, en la siguiente demostración, notarás que el valor de la variable PATH es desplegada:

sysadmin@localhost:~$ echo "path es $PATH"                          
path es /usr/bin/custom:/home/sysadmin/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games                          
sysadmin@localhost:~$

Las comillas simples

Evitan que el shell interprete algunos caracteres especiales. Esto incluye comodines, variables, sustitución de comando y otro metacarácter que aún no hemos visto. Si quieres que el carácter simplemente signifique un $, en lugar de actuar como un indicador del shell para buscar el valor de una variable, puedes ejecutar el segundo comando que se muestra a continuación:

sysadmin@localhost:~$ echo esto cuesta $100                           
Esto cuesta 00                                                        
sysadmin@localhost:~$ echo 'Esto cuesta $100'                        
Esto cuesta $100                                                      
sysadmin@localhost:~$

Las comillas invertidas

Se utilizan para especificar un comando dentro de un comando, un proceso de sustitución del comando. Aunque puede sonar confuso, un ejemplo debe hacer las cosas más claras. Para empezar, fíjate en la salida del comando date:

sysadmin@localhost:~$ date                                           
Mon Nov  2 03:35:50 UTC 2015

Ahora fíjate en la salida de la línea de comandos echo Today is date:

sysadmin@localhost:~$ echo Hoy es date                               
Hoy es date                                                           
sysadmin@localhost:~$

En el comando anterior la palabra date es tratada como texto normal y el shell simplemente pasa date al comando echo. Pero, probablemente quieras ejecutar el comando date y tener la salida de ese comando enviado al comando echo. Para lograr esto, deberás ejecutar la línea de comandos echo Today is `date`:

sysadmin@localhost:~$ echo Hoy es `date`                         
Hoy es Mon Nov 2 03:40:04 UTC 2015                         
sysadmin@localhost:~$

Puedes utilizar una técnica alternativa para citar un carácter con comillas simples. Si que quieres imprimir lo siguiente: “Esto cuesta $100 y path es $PATH“. Si pones esto entre las comillas dobles, $1 y $PATH se consideran variables. Si pones esto entre las comillas simples, $1 y $PATH no son variables. Pero ¿qué pasa si quieres tener $PATH tratado como una variable y no a $1?

La diagonal Inversa (\)

Si colocas una barra diagonal invertida \ antes del otro carácter, tratará al otro carácter como un carácter de “comillas simples”. El tercer comando más abajo muestra cómo utilizar el carácter \, mientras que los otros dos muestran cómo las variables serían tratadas si las pones entre las comillas dobles y simples:

sysadmin@localhost:~$ echo "Esto cuesta $100 y path es $PATH"
Esto cuesta 00 y path es /usr/bin/custom:/home/sysadmin/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games 
sysadmin@localhost:~$ echo 'Esto cuesta $100 y path es $PATH' 
Esto cuesta $100 y path es $PATH                         
sysadmin@localhost:~$ echo Esto cuesta \$100 y path es $PATH
Esto cuesta $100 y path es /usr/bin/custom:/home/sysadmin/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games 
sysadmin@localhost:~$

Instrucciones de Control

Las instrucciones de control te permiten utilizar varios comandos a la vez o ejecutar comandos adicionales, dependiendo del éxito de un comando anterior. Normalmente estas instrucciones de control se utilizan en scripts o secuencias de comandos, pero también pueden ser utilizadas en la Shell.

El punto y coma puede utilizarse para ejecutar varios comandos, uno tras otro. Cada comando se ejecuta de forma independiente y consecutiva; no importa el resultado del primer comando, el segundo comando se ejecutará una vez que el primero haya terminado, luego el tercero y así sucesivamente.

Si quieres imprimir los meses de enero, febrero y marzo de 2022, puedes ejecutar cal 1 2022; cal 2 2022; cal 3 2022 en la línea de comandos.

El símbolo de ampersand doble && 

Actúa como un operador “y” lógico. Si el primer comando tiene éxito, entonces el segundo comando también se ejecutará. Si el primer comando falla, entonces el segundo comando no se ejecutará. Los comandos tienen éxito cuando algo funciona bien y fallan cuando algo sale mal. Por ejemplo, considera la línea de comandos ls /etc/xml. El comando tendrá éxito si el directorio     /etc/xml es accesible y fallará cuando no es accesible. El primer comando tendrá éxito porque el directorio /etc/xml existe y es accesible mientras que el segundo comando fallará porque no hay un directorio /junk:

sysadmin@localhost:~$ ls /etc/xml                  
catalog  catalog.old  xml-core.xml  xml-core.xml.old           
sysadmin@localhost:~$ ls /etc/junk                             
ls: cannot access /etc/junk: No such file or directory
sysadmin@localhost:~$

La manera en que usarías el éxito o fracaso del comando ls junto con && sería ejecutando una línea de comandos como la siguiente:

sysadmin@localhost:~$ ls /etc/xml && echo success          
catalog  catalog.old  xml-core.xml  xml-core.xml.old        
success                                              
sysadmin@localhost:~$ ls /etc/junk && echo success          
ls: cannot access /etc/junk: No such file or directory           
sysadmin@localhost:~$

En el primer ejemplo el comando echo fue ejecutado, porque tuvo éxito el comando ls. En el segundo ejemplo, el comando echo no fue ejecutado debido a que el comando ls falló.

La línea vertical doble || 

Es un operador lógico “o”. Funciona de manera similar a &&; dependiendo del resultado del primer comando, el segundo comando se ejecutará o será omitido. Si el primer comando se ejecuta con éxito, el segundo comando es omitido. Si el primer comando falla, entonces se ejecutará el segundo comando. Le estás diciendo al shell, “O bien ejecuta este primer comando o bien el segundo”. En el ejemplo el comando echo se ejecutará sólo si falla el comando ls:

sysadmin@localhost:~$ ls /etc/xml || echo failed                 
catalog catalog.old xml-core.xml xml-core.xml.old
sysadmin@localhost:~$ ls /etc/junk || echo failed
ls: cannot access /etc/junk: No such file or directory
failed
sysadmin@localhost:~$

No te detengas, sigue avanzando

Aquí tienes un propósito que debes considerar seriamente: si has querido mejorar tus habilidades en hacking, Ciberseguridad y programación ahora es definitivamente el momento de dar el siguiente paso. ¡Desarrolla tus habilidades aprovechando nuestros cursos a un precio increíble y avanza en tu carrera! El mundo necesita más hackers…

¿Te gustaría enterarte de cuando lanzamos descuentos y nuevos cursos?

Sobre los autores

Álvaro Chirou

Yo soy Álvaro Chirou, tengo más de 20 Años de experiencia trabajando en Tecnología, eh dado disertaciones en eventos internacionales como OWASP, tengo más de 1.800.000 estudiantes en Udemy y 100 formaciones profesionales impartidas en la misma. Puedes seguirme en mis redes:

Laprovittera Carlos

Soy Laprovittera Carlos. Con más de 20 años de experiencia en IT brindo Educación y Consultoría en Seguridad de la Información para profesionales, bancos y empresas. Puedes saber más de mi y de mis servicios en mi sitio web: laprovittera.com y seguirme en mis redes:

Hacker de 0 a 100 desde las bases hasta conseguir empleo

¿Quieres iniciarte en hacking y ciberseguridad pero no sabes por dónde empezar? Inicia leyendo nuestra guia gratuita: https://achirou.com/hacker-de-0-a-100-desde-las-bases-hasta-conseguir-empleo/ que te lleva de 0 a 100. Desde los fundamentos más básicos, pasando por cursos, recursos y certificaciones hasta cómo obtener tu primer empleo.

Hemos creado una ruta de 0 a 100. Un plan de desarrollo que va desde las bases: cómo aprender hacking, qué aprender, en qué orden; pasando por las areas técnicas necesarias como Linux, Redes, Programación y los conocimientos necesarios en ciber seguridad, hacking, pentesting hasta la práctica y el inicio laboral: Crear tu propio laboratorio, certificaciones, adquirir experiencia e iniciarse laboralmente.

Este es un mega post. Una guía con más de 250 artículos que te llevaran por el camino del hacker. Esta guía es gratuita y esta creada gracias al esfuerzo y al trabajo combinado de Alvaro Chirou y mío (Laprovittera Carlos).

Creamos esta guía (futuro curso) para que puedas iniciarte en este mundo. Puedes arrancar ahora, GRATIS, solo necesitas un PC, conexión a internet y paciencia (Ser hacker NO ES un camino de la noche a la mañana).

El Hacking y la ciberseguridad es una carrera divertida, emocionante y gratificante que te recompensará y desafiará por igual. Sin embargo, para quienes buscan adentrarse en este campo en auge y en constante evolución, puede resultar difícil saber por dónde empezar. ¡Ahí es donde entra en juego nuestra guía en ciberseguridad!

Esta es la hoja de ruta hacia el trabajo de ciberseguridad de tus sueños. Te ayudará a entender qué conocimientos, habilidades y certificados son necesarios para alcanzar tus metas profesionales y tener una carrera próspera. Si quieres ser consultor de ciberseguridad, analista de malware, evaluador de penetración, analista de SOC o cualquier otro puesto de ciberseguridad, esta guía es lo que necesitas.

SIGUE APRENDIENDO GRATIS CON NUESTRAS GUIAS

Aprende con nuestros más de 100 cursos que tenemos disponibles para vos

Compartimos estos recursos para ayudar a la comunidad de hacking y ciberseguridad. COMPARTE y Siéntete libre de agregar más sugerencias en los comentarios a continuación, respondemos todos y cada uno de los comentarios.

Saludos amigos y happy hacking!!!