StringManolo
hackingTermux101
HTML

Libro sobre hacking básico/avanzado en Termux

Last updated Jul 10, 2026
774
Stars
64
Forks
19
Issues
+3
Stars/day
Attention Score
87
Language breakdown
HTML 100.0%
Files click to expand
README

Portada Libro


Languages

ESP
Este libro está escrito originalmente en español. Puedes acceder en otros lenguajes usando el traductor de Google, si bien no es perfecto puede ser de utilidad.
EN
This book is original writen in spanish. You can access it in other languages too using google translator. Even if not perfect may be usefull. English Translation

Tabla de Contenidos

  • Glosario
  • Apéndice

Prefacio

Bienvenido a la primera edición del libro Termux Hacking 101. Aquí vas a aprender a instalar Termux en Android, su uso básico, virus, programación y hacking.

Termux es un emulador de terminal para Android y un entorno de Linux que funciona directamente sin necesidad de rootear el dispositivo o configurarlo. Un sistema base mínimo se instala automáticamente - Y muchos paquetes adicionales están disponibles desde su gestor de paquetes.

Un pequeño inciso antes de comenzar. Este libro es 100% gratuito y se financia a través e donaciones. Si quieres contribuir a la creación de este libro, puedes realizar una tranferencia a la cuenta

2080 5029 1630 0011 2266
indicando como motivo de la transferencia "Libro Termux". Por donaciones de 20$ o más, se ofrece un día de clases particulares por Telegram. Indica tu nombre de Telegram en el asunto de la tranferencia. DONAR ES OPCIONAL, puedes leer el libro aunque no dones. Por qué deberías donar entonces? Si obtengo múltiples donaciones, me animará a seguir escribiendo el libro o a sacar nuevos libros. Disfrútalo!

Tabla de Contenidos


Capítulo 0: Requisitos y Programas Extra

Para poder utilizar Termux, necesitas un dispositivo Android. Termux soporta versiones de android comprendidas entre la versión 7 y la última version de Android.

Necesitas un mínimo de 300 megas de espacio en disco. Yo te recomiendo como mínimo 8 gigas disponibles de memoria interna. 64 Gigas está genial y suele ser mas que suficiente, depende del uso que le des. Antes de empezar, algunos programas extra son recomendados, aunque no necesarios.

Este sencillo teclado offline funciona de marabilla en la mayoría de dispositivos. No vende tus datos, ya que no se conecta nunca a internet y te ofrece un teclado como el del PC, aunque no es necesario. Yo no utilizo esta característica en concreto, pero si este es el único teclado que utilizo en Android por seguridad. Los que vienen preinstalados suelen vender tus datos aunque los configures para que no lo hagan.

Explorador de ficheros para Android que te permite el acceso a las carpetas de Termux. No lo he probado pero es recomendado por los desarrolladores de Termux.

Tabla de Contenidos


Capítulo 1: Qué es Termux?

Termux es una aplicación para Android de código abierto que trae todo el poder Linux a tu dispositivo móvil. Puedes realizar prácticamente cualquier tarea que realices en tu PC con un Linux instalado. Todo se realiza directamente desde la terminal escribiendo comandos, aunque también es posible instalar un entorno gráfico como X11. Termux instala por defecto un sistema base con comandos y paquetes comunes que suelen ser imprescindibles en cualquier distribución de Linux. Los paquetes se compilan de forma cruzada con Android NDK y en la mayoría de casos solo necesitan añadirle pequeños parches para que sean totalmente compatibles con Android. Hay miles de paquetes disponibles y cada día la comunidad añade nuevos paquetes. Es seguro, ya que todo es código abierto y miles de profesionales revisan el código y los nuevos cambios a diario.

Tiene un montón de características extra, como poder ver los SMS, los archivos del dispositivo, etc. Esto te premite automatizar un montón de tareas, hacer interfaces con distintas tecnologías y todo lo que se te ocurra. Totalmente customizable. Puedes modificar la apariencia, añadir atajos de teclado, nuevas funcionalidades...

Soporta teclado y ratón externos. Puedes conectar Termux a una pantalla externa y utilizar un teclado y un ratón.

Cómo funciona?

La terminal emulada es básicamente una aplicación que arranca los programas de linea de comandos usando una llamada del sistema execve(2) y redirige la entrada y la salida de datos de la función, hacia la pantalla. La mayoría de terminales para Android, trabajan con conjuntos de herramientas pobres que ya trae Android. Termux porta una gran cantidad de herramientas de GNU/Linux hacia Android.

Termux no es una máquina virtual ni otro tipo de sistema/entorno emulado. Todos los paquetes son compilados en cruce con Android NDK y solo se parchean para que funcionen en Android/Termux. El sistema operativo no proporciona acceso completo al sistema de ficheros, por lo cual Termux no puede instalar los paquetes en las rutas típicas /bin, /etc, /usr, /var. Termux traslada este sistema de ficheros a un directorio privado de la aplicación en la ruta /data/data/com.termux/files/usr Este directorio se llama prefix y su ruta se puede visualizar en la variable de entorno "$PREFIX". Esta ruta se hardcodea directamente en muchos de los binarios/paquetes disponibles para Termux. Esto es uno de los típicos parches que se añaden.

Tabla de Contenidos


Capitulo 2: Descarga e Instalación

Descarga

Puedes instalar Termux descargando la última release directamente desde el repositorio del proyecto en github. O desde la tienda de F-Droid. La descarga también está disponible en Play Store, pero descargar la app de la Play Store NO SE RECOMIENDA. El motivo está relacionado con políticas de Google con respecto a dar soporte a nuevas versiones de Android. Si se cumpliese con dichas políticas, habría que dejar de dar soporte a versiones anteriores. Aquí mas detalles. Si no conoces la arquitectura de tu dispositivo, puedes pinchar aquí.

Instalacion

  • Abre F-Droid en tu Android pinchando aquí
  • Pincha en el primer enlace que dice [Descargar Apk]()
  • Pincha en el archivo descargado para iniciar la instalación
  • Pincha en Permitir instalación de aplicaciones desde orígenes desconocidos
  • Espera a que se complete la instalación
  • Cuando finalice la instalación tendrás el icono de Termux en tu escritorio, haz click para arrancar la app.
Tabla de Contenidos

Capítulo 3: Configuración Básica

Una vez tienes la consola de comandos ante ti, lo primero es configurar el acceso al sistema interno de ficheros de Android. Para ello debes correr el comando

termux-setup-storage
Y permitir el acceso de termux al sistema interno de ficheros.

Imagen de Android que pide permisos de acceso al espacio interno de ficheros El comando termux-setup-storage va a configurar el acceso a las siguientes carpetas.

  • ~/storage/shared
Carpeta utilizada por las aplicaciones de Android para compartir archivos
  • ~/storage/downloads
La carpeta por defecto de descargas, por ejemplo donde tu navegador descarga los archivos.
  • ~/storage/dcim
Aquí la cámara suele almacenar las fotos y videos del dispositivo
  • ~/storage/pictures
En esta carpeta se suelen almacenar imágenes del dispositivo
  • ~/storage/music
Esta es la carpeta que Android suele utilizar para guardar la música del usuario
  • ~/storage/movies
Donde se suelen almacenar las películas
  • ~/storage/external-1
Carpeta especial creada por Termux en el almacenamiento externo (si este está disponible), normalmente una tarjeta micro-sd, aunque se permite también el acceso a pendrives y otro tipo de dispositivos de memoria externos. No instales paquetes, programas o archivos de programas aquí (como puedan ser logs de un servidor, archivos de configuración, ...) , ya que Android no proporciona permisos de escritura/lectura directamente y es necesario utilizar una API a la que los programas no tienen acceso.

Si utilizas Android 11 y se muestra el error Permission denied (Permiso denegado) cuando intentas acceder a la carpeta shared, aún cuando le diste permisos, sigue los pasos siguientes:

  • Ve a Ajustes -> Aplicaciones -> Termux -> Permisos
  • Revoca el permiso de acceso a ficheros (Storage permission)
  • Autoriza de nuevo el permiso de acceso a ficheros.
Este es un bug de Android 11, no de Termux.

Nunca elimines Termux directamente desde Android, ya que si tienes archivos en la tarjeta sd, todo su contenido será eliminado, incluyendo archivos que no tienen ninguna relación con Termux

Tabla de Contenidos


Capítulo 4: Uso básico de la terminal

Una terminal es una interfaz conducida por comandos capaz de realizar todo tipo de tareas. Usualmente realizamos las tareas utilizando interfaces, esto es, pulsando botones, arrastrando carpetas, viendo la información en forma de imágenes e iconos... La terminal utiliza un modelo completamente distinto, remplazando los iconos, las imágenes, los botones y toda la gestión de ficheros por comandos y texto que se muestra en pantalla.

Utilizar una terminal en lugar de una interfaz gráfica, nos permite realizar tareas de todo tipo de forma mas ágil y rápida.

Todas las terminales de GNU/Linux, así como Termux, incluyen una gran variedad de comandos básicos que nos permiten realizar estas tareas. Este capítulo se enfoca en los comandos más básicos de Linux. Al entrar en Termux, veremos un $ que indica el "prompt" de la terminal, en Bash se guarda en la variable de entorno "$PS1". Este caracter del dolar, nos indica que podemos escribir comandos en la terminal. La sintaxis es $ comando, para enviar el comando y que este sea procesado, pulsamos la tecla Enter. En caso de Hacker's Keyboard, esta tecla se representa como una flecha situada en la esquina inferior derecha .

Comandos básicos de Linux

pwd

El comando pwd nos va a mostrar la ruta completa de la carpeta en la cual nos encontramos. Salida del comando pwd
pwd son las siglas de Print Working Directory (Imprime Directorio de Trabajo)

cd

El comando cd sirve para cambiar el directorio en el cual estamos trabajando. Es el equivalente a moverse a una carpeta haciendo doble-click en ella desde cualquier interfaz gráfica. Si escribes el comando cd sin mas, se cambiará el directorio a la variable de entorno "$HOME", por defecto /data/data/com.termux/files/home.
Existe un símbolo especial ~ que sirve para indicar explícitamente que nos mueva a la carpeta home. Esto nos será útil cuando queramos crear o referenciar un archivo en home desde otro directorio.
Podemos movernos a cualquier directorio alcanzable poniendo su ruta relativa tras el comando cd, o poniendo su ruta absoluta desde cualquier lugar. En la siguiente imagen puedes comprobar como se cambia el directorio a la carpeta ejemplo, que existe dentro de la carpeta home, y como después se imprime el directorio actual de trabajo. Indicándonos la terminal, que nos encontramos dentro de la carpeta ejemplo que existe en home.

Cuando quieras moverte al directorio anterior utiliza dos puntos.

cd ..
Salida del comando cd ejemplo y pwd

cd son las siglas de Change Directory (Cambia Directorio),

ls

El comando ls muestra la lista de archivos y carpetas que contiene el directorio actual de trabajo. Salida del comando ls y pwd En este ejemplo nos movemos al directorio home, desde ahí al directorio ejemplo que está dentro de home y con ls listamos todo lo que contiene el directorio actual. En blanco se muestran los archivos comunes (foto_perfil.jpg, listaDeLaCompra.txt), en azul/violeta se muestran los directorios que contiene el directorio ejemplo. En este caso hay un directorio llamado documentosDelTrabajo. En verde se muestran archivos con permisos de ejecución, en esta imagen no hay ninguno.
ls es una abreviatura de List (Listar)

cat

El comando cat muestra el contenido de un fichero. Salida del comando cat En este ejemplo se muestra el contenido del fichero listaDeLaCompra.txt. Es simplemente un texto que escribí en un fichero. La escritura de ficheros se detalla en el capítulo 6: Uso de VI y de VIM.
cat viene de concatenate (concatenar)

touch

El comando touch crea ficheros vacios en el directorio actual.
touch miListaDeLaCompra.txt
Con este comando crearás un archivo miListaDeLaCompra.txt en el directorio actual, que podras ver en el listado del directorio en el que crees el archivo. Por ejemplo si quisieses crear el archivo en home y listar el contenido de home, usarías los siguientes comandos:
cd
touch miListaDeLaCompra.txt
ls
touch significa tocar

mkdir

El comando mkdir crea directorios/carpetas vacias en el directorio actual.
cd
mkdir ejemplo
Con estes comandos crearás una carpeta (puedes usar el nombre de carpeta/directorio indistintamente) llamada ejemplo dentro de la carpeta home. Puedes listarla con ls.

Si intentas crear un nuevo directorio y un directorio hijo directamente, puede usar el argumento -p (de parents, en español directorios padres)

mkdir ~/ejemplo/hijoDeEjemplo/hijoDeHijoDeEjemplo
mkdir es una abreviatura de Make Directory (Crea Directorio)

cp

El comando cp permire copiar archivos. Puedes copiarlos en el mismo directorio o en otro directorio. Tambien puedes modificar el nombre de destino.
cp miListaDeLaCompra.txt miSegundaListaDeLaCompra.txt
El primer argumento del comando cp es el nombre del fichero del que deseamos realizar una copia. El segundo argumento es el nuevo nombre que tendrá la copia. Si el archivo contiene texto o cualquier otro contenido, este estará presente en ambos archivos, tanto en el original como en la copia. La mayoría de comandos nos permite especificar las ruta junto al nombre de los ficheros. Si nos encontramos en la carpeta home, y dentro de esta tenemos una carpeta llamada ejemplo que contiene un archivo miListaDeLaCompra.txt, podemos copiar este archivo directamente desde la carpera home. El comando para realizar esta acción sería:
cd
cp ejemplo/miListaDeLaCompra.txt listaDeLaCompra.txt

Tras este comando tendremos una copia del archivo miListaDeLaCompra.txt (que se encuentra en la carpeta ejemplo) en la carpeta home con el nombre de listaDeLaCompra.txt

cp es una abreviatura de copy (copiar)

mv

El comando mv permite mover archivos. El funcionamiente es exactamente igual al del comando cp, con la diferencia de que el archivo original es eliminado y solo se conserva la nueva copia. Esto hace de mv el comando ideal para mover archivos entre directorios.
mv es una abreviatura de move (mover)

rm

El comando rm se utiliza para eliminar archivos de forma permanente.
cd
rm listaDeLaCompra.txt
rm es una abreviatura de remove (eliminar)

clear

El comando clear, limpia el contenido de la pantalla.
clear
clear significa limpiar

pkg

El comando pkg es único de Termux, no existe en GNU/Linux, aunqie si existen sus equivalentes. Este comando se encarga de gestionar por nosotros toda la instalación de paquetes, sus versiones, actualizaciones, dependencias, ... Si corres el comando:
pkg

Te mostrará la lista de subcomandos que soporta y una breve descripción de que hace cada uno. Aquí me limito a explicar los subcomandos mas básicos:

  • ##### pkg list-all
Muestra un listado todos los comandos/programas/paquetes disponibles para instalar. El listado es bastante grande.
pkg list-all
  • ##### pkg list-installed
Muestra el listado de los comandos que ya están instalados en tu Termux. Este listado solo hace referencia a paquetes que se han instalado por pkg. Esto significa que no verás en la lista comandos como cp, cat, mv, ls, ... También significa que puedan aparecer algunos paquetes que tu no instalases. Por ejemplo si instalas una herramienta que utiliza una base de datos, es común que en el listado te aparezcan tanto la herramienta que descargaste como la base de datos. Esto sucede porque pkg se encarga de bajar las dependencias necesarias (para que las herramientas funcionen) por su cuenta.
pkg list-installed
  • ##### pkg show
Muestra información adicional incluyendo una breve descripción sobre el paquete que se indique. Puedes utilizar el nombre de cualquiera de los paquetes listados con los 2 anteriores subcomandos
pkg show unzip

El comando pkg show unzip nos muestra esta descripción para el comando unzip.

Package: unzip Version: 6.0-7 Maintainer: Termux members @termux Installed-Size: 340 kB Depends: libbz2 Homepage: https://sourceforge.net/projects/infozip/ Download-Size: 115 kB APT-Manual-Installed: yes APT-Sources: https://termux.org/packages stable/main aarch64 Packages Description: Tools for working with zip files

En este ejemplo la información que se nos muestra indica:

  • El nombre del paquete
  • La versión del programa
  • Las personas/organización que se encargan de gestionar este paquete
  • El tamaño que ocupará en el sistema una vez instalado
  • Otros paquetes que necesita para funcionar
  • La página oficial del programa (o repositorio de su código fuente)
  • El tamaño de la descarga comprimida
  • Si se instaló manualmente
  • Repositorio donde está el paquete listado
  • Descripción de que es el paquete
Si tienes la opción de buscar en Google el paquete, te será de mas ayuda para saber exactamente para que sirve.

  • ##### pkg install
Instala un comando en Termux.
pkg install tree

Una vez instalado, ya podras utilizarlo. Es posible que se muestre un error si el repositorio por defecto no está disponible. Si este es tu caso, corre el comando termux-change-repo. Presiona enter sobre Main Repository para poder ver un listado de los servidores disponibles y cambia el servidos moviéndote por el listado hacia abajo, presionando espacio para marcar tu selección y enter para guardar los cambios.

Tree es similar a ls pero también muestra todos los subdirectorios.

tree

  • ##### pkg uninstall
Desinstala un comando en Termux.
pkg uninstall tree

Una vez desinstalado, se borrará permanentemente del sistema el comando que hayas escrito en este caso tree. Si intentas volver a utilizarlo tras desinstalarlo, verás que ya no existe. Puedes borrarlo si quieres, siempre podrás volver a instalarlo si lo necesitas.

  • ##### pkg upgrade
Actualiza todos los paquetes instalados.
pkg update
Si tienes espacio de sobra, es recomendado que todos los días actualices tus comandos usando pkg upgrade Las actualizaciones, sirven principalmente para mantener tus paquetes seguros.
Cuando un programador o hacker, encuentra un fallo de seguridad en un programa, se programa un código (parche de seguridad). Cuando tu le das a actualizar, se instalan estos parches automáticamente. También se instalan parches de mejoras de rendimiento para que los comandos se ejecuten mas rápido o utilicen menos batería, asi como también nuevas funcionalidades.

man

El comando man sirve para mostrar el manual de un comando, si lo tiene.
man ls

Con man ls se nos muestra el manual para el comando ls, con todas sus opciones extra.

man son la iniciales de manual

Para salir de man utiliza la combinación de teclas ESC : q

exit

Cierra la terminal

Argumentos

Los comandos de GNU/Linux aceptan argumentos especiales que van precedidos de guiones. Hay 2 formas de argumentos con guiones. La forma corta y la forma léxica del argumento. La forma corta es siempre una letra, normalmente la inicial de la forma léxica. Uno de los argumentos que vamos a encontrar presentes en prácticamente todos los comandos es -h. Versión corta de --help. Normalmente podemos acompañar nuestros comandos de cualquiera de estos indistintamente, aunque no hay ninguna norma escrita y muchos desarrolladores muestran distintos mensajes de ayuda según utilizas la versión corta o la léxica. Yo suelo dar prioridad a las opción léxica del argumento help.
ls --help

Tabla de Contenidos


Capítulo 5: Introducción a Bash

Bash es una shell de comandos. Todos los comandos que usamos hasta ahora, han sido enviados a Bash y Bash es quien se ha encargado de interpretarlos y llamar a los paquetes correspondientes. Se encarga de procesar el texto que le introducimos y el símbolo dolar $ nos está indicando que se trata de una Shell normal.
En Linux cuando eres root usando el comando sudo su el dolar se cambia por un hash (asterisco) #. En Android no disponemos de root por defecto, y este libro asume que no eres root. Es posible obtenerlo, pero yo no lo recomiendo en Android por motivos de seguridad del sistema.
Bash no es un simple intérprete, si no que admite un gran número de instrucciones muy diversas y tambien algunas complejas, dando lugar a un lenguaje de programación potente ampliamente utilizado para configurar sistemas GNU/Linux, crear comandos y otro tipo de utilidades.

Variables

Las variables te permiten almacenar valores para poder utilizarlos mas adelante. Para almacenar texto en una variable usaremos la siguiente sintaxis nombreDeLaVariable="valorDeLaVariable"
miNombre="Manolo"
También es posible almacenar el resultado de un comando en la variable utilizando la sintaxis nombreDeLaVariable=$(comando argumentos)
listaArchivosEnHome=$(ls ~)

Podremos referenciar la variable anteponiendo el símbolo del dolar al nombre de la variable, como veremos en el siguiente apartado.

Imprimir en pantalla

Para imprimir texto o el contenido de variables (en este caso en pantalla) podemos utilizar echo o printf.
echo
echo es un comando sencillo para imprimir texto
miNombre="Manolo"
echo "Hola, mi nombre es $miNombre"

Puedes usar variables como en el ejemplo anterior, y también comandos:

echo "Hola, te encuentras en el directorio $(pwd)"
Si quieres que se imprima un salto de linea, puedes anteponer el argumento simple -e del texto. Y en el texto incluyes la secuencia de caracteres \n para indicar un salto de linea.
echo "$(clear)\n\n\n\n\n\n\n\n\n\nHola, te encuentras en el directorio\n$(pwd)\nNo es genial\n?\n\n"
Salida del comando echo en multiples lineas
printf
printf hace lo mismo que echo pero se ejecuta mas rápido y permite mas opciones para formatear el texto.
miNombre="Manolo" printf "Hola, mi nombre es %s" "$miNombre"

Con respecto a echo, puedes apreciar que no se añade el salto de linea al final de la frase. Tienes que añadirla manualmente. También ves en el comando que las variables se separan en otros argumentos a parte. En este caso %s indica que la variable es un string (cadena de texto). Otra de las ventajas de printf, es que nos avisa de errores. Por ejemplo %d sirve para imprimir numeros enteros. Si le pasamos como argumento un numero que no es entero, nos avisará del error

numeroPI="3.1416" printf "El numero PI es %d" "$numeroPI"

Bash nos indicará el error: bash: printf: 3.1416: invalid number e imprimirá solo la parte entera. Esta es la lista de tipos que acepta:

| secuencia | tipo | descripción | | --- | --- | --- | | %d | digit | Números enteros | | %f | float | Números flotantes (numeros con decimales) | | %s | string | Cadena de texto | | %x | hexadecimal | Imprime un número en hexadecimal | | %X | hexadecimal | Imprime un número en hexadecimal (letras en mayúsculas) |

Leer de la terminal

Podemos interactura con el usuario de múltiples formas.
read
El comando read nos permite leer datos de la entrada de la terminal. Nosotros usaremos read con el argumento simple -p (la p es de la palabra prompt, en español sugerencia) y nos srive para sugerir al usuario el tipo de datos que queremos que introduza. Si por ejemplo queremos preguntarle el nombre al usuario
read -p "Cómo te llamas? " nombre
echo "Tu nombre es $nombre"
En este ejemplo vemos que readme se parece a echo, pero admite un argumento extra, que será el nombre de la variable en la cual queremos que se guarden los datos que introduzca el usuario.
read significa leer

Condicionales

Los condicionales permiten realizar acciones si se cumple una condición. if [ condición ]; then comando fi. En español se traduciría a algo similar a sì [ seCumpleEstaCondición ]; entonces ejecutaEsteComando fin. Podemos ver un ejemplo.
read -p "Introduce tu edad y pulsa enter: " edad
if [ "$edad" -gt 17 ]; then
  echo "Eres mayor de edad"
fi

En este ejemplo tenemos:

  • Un read
Almacena la edad que introduce el usuario en la variable edad.
  • La palabra clave if
Indica que la expresión es un condicional
  • Unos corchetes (que también son comandos, aunque no lo parezcan)
Evaluan la siguiente expresión y delimitan donde empieza ([) y acaba (]) la condición
  • El punto y coma (;)
Sirve para indicar el final de los comandos asociados a if
  • La palabra then
Indica que a continuación vienen las instrucciones que queremos que se ejecuten si se ha cumplido la condición.
  • Un echo que imprime un texto
Aunque podría ser cualquier otro comando, asignación de variables, etc.
  • Y la palabra fi (es if al revés)
Indica el final del condicional La condición "$edad" -gt 17 está compuesta de 3 elementos:
  • "$edad"
Es una variable que contiene la edad del usuario
  • -gt
Es un operador especial de Bash, siglas de Greater Than (Mayor Que). Sería equivalente al operador matemático >
  • 17
Si la edad del usuario es mayor que 17, entonces es mayor de edad (18 años o más en mi país) Recuerdas que te dije que [ era un comando mas? Igual que echo o printf. Pues [ también tiene argumentos. Hay distintos tipos de condiciones, aquí un listado de las mas comunes:
[ -a listaDeLaCompra.txt ]
Se cumple si el archivo existe  
[ -d ejemplo ]
Se cumple si la carpeta existe  
[ -f listaDeLaCompra.txt ]
Se cumple si el archivo existe y es un archivo normal  

[ -s listaDeLaCompra.txt ]
Se cumple si el archivo existe y no está vacio  
[ listaDeLaCompra.txt -nt otraListaDeLaCompra.txt ]
Se cumple si el primer archivo es mas reciente que el segundo
nt abreviado de newer than (mas nuevo que)
 
[ listaDeLaCompra.txt -ot recetaChurros.txt ]
Se cumple si el primer archivo es mas viejo que el segundo
ot abreviado de older than (mas viejo que)
 
[ -z "$nombre" ]
Se cumple si la variable está vacia  
[ -n "$nombre" ]
Se cumple si la variable no está vacia  
[ "$nombre" = "Paco" ]
Se cumple si el contendio de la variable $nombre es Paco  
[ "$nombre" != "Paco" ]
Se cumple si el contenido de la variable $nombre no es Paco  
[ "$nombre" < "Paco" ]
Se cumple si el contenido de la variable $nombre se posiciona antes que Paco, alfabéticamente  
[ "$nombre" > "Paco" ]
Se cumple si el contenido de la variable $nombre se posiciona después que Paco, alfabéticamente  
[ -v "$nombre" ]
Se cumple si la variable existe  
[ ! condicion ]
Se cumple si la condición no se cumple  
[ condicion -o otraCondicion ]
Se cumple si cualquiera de las 2 condiciones se cumple (o ambas se cumplen)  
[ condicion -a otraCondicion ]
Se cumple solo si ambas condiciones se cumplen  
[ 7 -eq 7 ]
Se cumple si el primer número es igual al segundo (recuerda que puedes usar variables)
eq de equals (igual a)
 
[ 7 -ne 7 ]
Se cumple si el primer número es distinto al segundo
ne de not equal (no igual a)
 
[ 7 -lt 7 ]
Se cumple si el primer numero es menor que el segundo
lt de less than (menor que)
 
[ 7 -le 7 ]
Se cumple si el primer número es menor o igual al segundo
le de less equal (menor o igual a)
 
[ 7 -gt 7 ]
Se cumple si el primer número es mayor que el segundo
gt de greater than (mayor que)
 
[ 7 -ge 7 ]
Se cumple si el primer número es mayor o igual que el segundo
ge de greater equal (mayor o igual a)
 

A parte de if, hay un par de palabras mas que podemos utilizar en los condicionales. El comando else permite ejecutar comandos si la condición no se ha cumplido. Queda mas claro con un ejemplo:

read -p "Introduce tu edad y pulsa enter: " edad if [ "$edad" -gt 17 ]; then   echo "Eres mayor de edad" else    echo "Eres menor de edad" fi

Si pruebas el ejemplo pegándolo en tu terminal y pulsando enter, verás que si se cumple la condición mostrará el texto indicando que eres mayor de edad, y si no se cumple, te dirá que eres menor de edad. La última palabra clave es elif, y sirve para introducir mas if, que se ejecutarán solo si el anterior if no se cumple. Ejemplo:

read -p "Introduce tu edad y pulsa enter: " edad if [ "$edad" -lt 12 ]; then   echo "Eres un niño" elif [ "$edad" -lt 18 ]; then   echo "Eres un adolescente" elif [ "$edad" -lt 65 ]; then   echo "Eres un adulto" else    echo "Eres un anciano" fi

En español esto viene diciendo:

si (tienes menos de 12 años) entonces   muestra "Eres un niño" en caso contrario, si (tienes menos de 18 años) entonces   muestra "Eres un adolescente" en caso contrario, si (tienes menos de 65 años) entonces   muestra "Eres un adulto" en caso contrario    muestra "Eres un anciano"

El comando case es una forma distinta de crear condicionales, en otros lenguajes se le conoce como switch o también switch case y se utiliza principalmente cuando quieres comprobar la variable con valores concretos

printf "1. Imprimir Directorio Actual\n2. Listar ficheros \n3. Crear Archivo\n4. Crear Carpeta\n\n0. Salir\n\nSelecciona el número correspondiente a tu opción -> " read opcion case $opcion in    1)     echo $(pwd)    ;;

2) echo $(ls) ;;

3) read -p "Introduce el nombre que tendrá el nuevo fichero: " nombreFichero touch $nombreFichero ;;

4) read -p "Introduce el nombre que tendrá el nuevo directorio: " nombreDirectorio mkdir $nombreDirectorio ;;

0) echo "Adios" ;; *) echo "La opción que elegiste no existe" ;; esac

Bucles

Los bucles nos permiten correr un comando/realizar una tarea de forma repetida. Existen 4 tipos de bucles basicos en Bash. Los bucles while, until, for y select.
while
El comando while permite ejecutar comandos mientras la condición sea verdadera. Su sintaxis es similar a la del condicional if. Ejemplo:
read -p  "Introduce tu contraseña: " contra
while [ "$contra" != "admin123" ]; do
  read -p "La contraseña '$contra' es incorrecta. Inténtalo de nuevo: " contra
done
echo "Acceso Permitido"
Si no supieses la contraseña, no sabrías como salir del programa. Cuando quieras cancelar la ejecución de un programa que está en bucle, presiona las teclas CTRL y c. Si no funciona, prueba con las teclas CTRL y d.

Otro tipo de bucles comunes son los bucles infinitos

while [ true ]; do   date   sleep 8s done
En este ejemplo vamos a mostrar la fecha cada 8 segundos.
until
El bucle until es prácticamente igual al bucle while, con la diferencia de que se ejecutará mientras no se alcance la condición.
read -p  "Introduce tu contraseña: " contra until [ "$contra" = "admin123" ]; do   read -p "La contraseña '$contra' es incorrecta. Inténtalo de nuevo: " contra done echo "Acceso Permitido"

Puedes usar while o until indistintamente. Until existe simplemente porque puede ser mas sencilla de leer la expresión en inglés.
Los ejemplos anteriores en español dirían; Para while:
Mientras (laContraseña no es igual a "admin123") haz ...
Para until:
Hasta que (laContraseña no sea igual a "admin123") haz ...
for
El bucle for sirve principalmente para recorrer elemenos. Los elementos pueden ser frases, palabras, secuencias numéricas, etc.
frase="Hola me llamo Manolo"
echo "La frase '$frase' tiene las siguientes palabras:"
for palabra in $frase; do
  echo "$palabra"
done

Lo mismo que haces con palabras, puedes hacerlo directamente con la salida de comandos. Da mucho juego

for archivo in $(ls ~); do   echo "$archivo" done
  También puedes recorrer rangos de números
echo "Los números del 1 al 20 son:" for numero in {1..20}; do   printf "%d, " $numero done
  Si queremos omitir la última coma tras el 20, podemos usar un condicional:
echo "Los números del 1 al 20 son:" for numero in {1..20}; do   if [ "$numero" -ne 20 ]; then     printf "%d, " $numero   else      printf "%d" $numero   fi done

Hay otra forma de usar el for que le será familiar a quien utilice el for en otros lenguajes de programación. Esta versión del for se le conoce como for clásico

for ((i=1; i <= 10; i++)) do   echo "$i" done

Algunos lenguajes de programación no disponen del bucle for clásico, pero si tienen el while. Hay una forma simple de conseguir esta misma funcionalidad con el bucle while

i=1 while [ $i -le 10 ]; do   echo "$i"   ((++i)) done

select
El bucle select es un tipo de bucle ideal para hacer menus de forma sencilla.
opci
select opcion in $opciones; do
  if [ "$opcion" = "Salir" ]; then
    echo "Adios"
    break
  fi

read -p "Introduce el primer número: " primerNumero read -p "Introduce el segundo número: " segundoNumero if [ "$opcion" = "Sumar" ]; then resultado=$(( $primerNumero + $segundoNumero )) elif [ "$opcion" = "Restar" ]; then resultado=$(( $primerNumero - $segundoNumero )) elif [ "$opcion" = "Multiplicar" ]; then resultado=$(( $primerNumero * $segundoNumero )) elif [ "$opcion" = "Dividir" ]; then resultado=$(( $primerNumero / $segundoNumero )) else resultado="Opcion incorrecta." fi

echo "El resultado es $resultado"; done

En este ejemplo podemos ver una calculadora simple en Bash. A destacar la palabra break que sirve para salir de cualquier tipo de bucle.

funciones
Las funciones en Bash nos permiten agrupar varias instrucciones bajo el mismo nombre y son similares a los comandos en su uso. Para crear una función:
saludar() {
  echo "hola $1, bienvenido a mi programa"
}

De esta forma creamos una función que podremos reusar las veces que queramos. La principal utilidad de las funciones es reducir el tamaño del código.

saludar() {   echo "hola $1, bienvenido a mi programa" }

saludar "Manolo" saludar "Arturo"

Como puedes ver, puedes saludar a tantos usuarios como quieras sin necesidad de tener que escribir el mismo texto una y otra vez. Puedes poner cualquier tipo de comandos dentro de las funciones.

Si quieres que quede mas claro que estás creando una función, puedes usar la palabra clave function y omitir los paréntesis:

function saludar {   echo "hola $1, bienvenido a mi programa" }

saludar "Manolo" saludar "Arturo"

Puedes usar cualquier de las 2 formas, la que tu prefieras. A destacar el uso del dolar. Sirve para referenciar argumentos. $1 referencia el primer argumento. Puedes utilizar todos los que tu quieras:

saludar() {   echo "Quiero dar la bienvenida a $1, $2 y $3"  }

saludar "Manolo" "Arturo" "Jose"

Miscelanea (otros operadores)

Bash permite realizar redirecciones entre comandos, salida a pantalla, entrada a comandos y ficheros. Una redirección es el envio de texto desde un fichero a otro. Todo lo que vemos en pantalla en realidad es enviado a un fichero de texto y Bash se encarga de imprimir su contenido para que lo veamos.
>
El caracter > nos permite enviar la salida de un comando hacia un fichero. Si el nombre del fichero no existe, se creará uno nuevo.
echo -e "Lista de la compra:\n2 paquetes de letejas\n1 cartón de leche" > ~/miListaDeLaCompra.txt

Con el > indicamos que en lugar de mostrar el texto en pantalla queremos que se mande al archivo miListaDeLaCompra.txt que está ubicado en la carpeta ~ (home). Si el archivo no existe > se encarga de crearlo antes de volcar la salida del comando echo, y si este archivo ya existía en home, se le borrará todo el contenido antes de añadir el nuevo contenido Ahora puedes imprimir su contenido cuando quieras

cat ~/miListaDeLaCompra.txt

La extensión .txt no hace nada, ninguna extensión hace nada en particular. Solo se añaden para ayudar al usuario o a otros programas a intuir que tipo de datos puede contener el fichero.
Otro uso común es ocultar la salida de un comando. Para ello redirigimos la salida a un archivo especial diseñado para ello.
echo "Hola" > /dev/null

Redirigir a /dev/null es una práctica común cuando queremos correr un comando pero no nos interesa lo que nos muestre. Puede ser el caso de un servidor de una página web cuando muestra los logs en pantalla y no nos interesan.

Aunque redirigas la salida a /dev/null los comandos siguen mostrando los errores en pantalla si estos se dan. Si quieres ocultar los errores, debes redirigir un archivo especial hacia /dev/null

cat esteArchicoNoExiste.txt 2>/dev/null
>>
Qué pasa si quiesieses añadir un nuevo producto a tu lista de la compra sin eliminar el contenido del fichero? Se utiliza el operador >> en lugar de >. Al igual que >, si no existe el fichero también se creará, pero si ya existe el fichero, en lugar de remplazar su contenido por el nuevo que indiquemos, se añadirá al que ya existe.
echo -e "\n6 latas de mejillones" >> ~/miListaDeLaCompra.txt
Puedes redirigir la salida de cualquier comando, no solo de echo
|
El operador | sirve para redirigir la salida de un comando hacia otro comando. Existen una multitud de utilidades que son perfectas para su uso con |
echo "Hola qué tal?" | wc
El comando wc (word counter en español, contador de palabras) muestra el número de lineas, palabras y caracteres que tiene un texto. En este caso el texto lo pasamos del comando echo hacia el comando wc utilizando |
||
El operador || (OR) sirve para ejecutar un comando si el anterior falla.
cat esteArchivoNoExiste.txt || echo "El archivo no existe"

Es común redirigir los errores a /dev/null y mostrar nuestros errores personalizados

cat archivoQueNoExiste 2>/dev/null || echo "No se pudo mostrar el contenido del archivo"

&
El operador & sirve para crear jobs (trabajos en español) mandando a comandos que se están ejecutando a un segundo plano hasta que estos finalicen por si mismos o nosostros los finalicemos de alguna de las múltiples formas que existen.
despedirse() {
  sleep 5s
  printf "Adios"
  sleep 5s
  printf ", ha sido un placer!"
}

despedirse &

El comando sleep (dormir en español) pausa el programa durante el tiempo que le indiquemos. En este ejemplo son dos intervalos de 5s (segundos) cada uno.

Puedes ver los comandos que tengas corriendo en segundo plano (background) con el comando jobs, la salida para este ejemplo sería:

[1]+  Running                 despedirse &

El número de la izquierda es un identificador. La primera palabra running (corriendo) nos dice el estado actual del job y a la derecha de todo encontramos el comando que ejecutamos. Puedes traer el proceso al frente (foreground) usando el comando fg %1, el número tiene que ser el identificador mostrado en el comando jobs. Y como puede forzar el cierre del proceso con las combinaciones de teclas que vimos en apartados anteriores de este mismo capítulo (CTRL C, CTRL D)

&&
El operador && (AND) sirve para ejecutar un comando si el anterior funcionó correctamente.
cat archivoQueExista && echo "El archivo existe y se imprimió correctamente"

Muy útil cuando queramos que un comando solo se ejecute si el anterior funcionó

pkg install tree && tree

;
El operador ; es útil para indicar el fin de un comando. Es de uso común cuando quieres correr varios comandos en la misma linea independientemente de si el comando anterior falla o no
cat archivo1.txt; cat archivo2.txt; echo "Adios"

help

El comando help nos proporciona ayuda con Bash.
help

Si corres el comando, verás un listado de los comandos internos de Bash que disponen de un mensaje de ayuda. Puedes consultar cada uno de ellos escribiendo help y el nombre del comando que quieres consultar.

help history

Extra

Puedes reutilizar los comandos de una linea de la terminal navegando por el historial si le das a las flecha hacia arriba y hacia abajo.

Si pones # al inicio o final de una linea, estás indicando que la linea a partir del # es un comentario que Bash debe ignorar. Los comentarios son útiles para indicar lo que hace el código. Ejemplo:

# La siguiente linea imprime un texto en pantalla saludando echo "Hola" echo "Adios" # Esta linea imprime Adios en pantalla
Bash te permite autompletar comandos, nombre de carpetas y ficheros... Pulsa la tecla tab para ello. Si hay varios resultados no sucederá nada, pero si vuelves a pulsar otra vez tab, los resultados disponibles se mostraran para que puedas tener una vista previa de que comando o archivo quieres autocompletar. Tendrás que escribir caracteres hasta que el texto que tengas escrito solo coincida con uno de los comandos o archivos disponibles. Si por ejemplo tienes un archivo que se llama miFoto729272927282729172917291919372919172728191928372891.jpg, y quisieses eliminarlo, en lugar de escribir todo el nombre, podrías escribir solo rm miFo y pulsar la tecla tab para que el nombre se autocompletase. Si también existe otro archivo que se llama miFortaleza.txt, cuando pulsas tab, Bash no sabe cual de los 2 archivos autocompletar, ya que ambos empiezan por miFo. Si vuelves a pulsar tab, ambos saldrán en pantalla para indicarte que debes seguir escribiendo. rm miFot sería suciente para que se autocompletase miFoto.... al pulsar tab.

En Termux la tecla tab se representa por 2 flechas y esta ubicada entre ESC y CTRL
En lugar de utilizar secuencias de caracteres para saltos de linea, puedes usar comillas simples
echo 'Hola
Los saltos de linea también se imprimen asì
No es genial?'
Si utilizas comillas simples, todo lo que escribas dentro será interpretado como texto, entre otras cosas esto te inhabilita de utilizar variables dentro. Ejemplo:
nombre=Manolo
echo 'Mi nombre es $nombre'

Si utilizas printf en lugar de echo, si podrás insertar variables de la siguiente forma

nombre=Manolo printf 'Mi nombre es %s' $nombre

Tabla de Contenidos


Capítulo 6: Uso de VI y de VIM

VI y VIM son editores de texto muy completos. VI es la versión mas pequeña y suele venir por defecto instalado en muchos sistemas. VIM es su hermano mayor e incluye cientos de características. Por si fueran pocas, la comunidad de programadores va creando sus plugins, temas y colores para VIM para extender aún mas su funcionalidad. Dado lo extenso de VI y VIM, pondré el foco en los comandos y atajos que yo mas utilizo, dejando de lado muchísima funcionalidad útil. VIM por si solo daría para un libro entero y no es mi idea reinventar la rueda escribiendo un libro de VIM, asique centrando el tiro.

Instalar VIM

VI suele venir instalado, pero VIM no. Es un paquete mas, asique usaremos el comando que ya conocemos para instalar paquetes en Termux
pkg install vim

Abrir un fichero

Para abrir un archivo que ya existe o crear uno nuevo, usaremos el siguiente comando

vim miListaDeLaCompra.txt

Verás que se abre una nueva pantalla desconocida hasta ahora. A lo primero que tenemos que echar ojo es a la barra de estado de VIM. Se encuentra exactamente encima del teclado a la izquierda y si no tocas nada tras abrir el archivo, verás el mensaje: "miListaDeLaCompra.txt" [new] en la barra de estado de VIM. Si el archivo ya existía, el mensaje será: "miListaDeLaCompra.txt" xL xB donde xL mostrará el número de lineas que tiene el archivo y xB el número de Bytes (un caracter suele pesar al menos 1 Byte, asique es un buen indicador del número aproximado de caracteres que tiene el archivo) que tiene.

Escribir en un fichero

Si pulsas la tecla i, verás como el estado cambia a -- INSERT --. Esto nos indica que ahora nos encontramos en modo inserción de texto. Si ahora pulsas las teclas, podrás escribir en el archivo al igual que haces en el mítico bloc de notas de Windows.

Una vez que tengas tu texto escrito, puedes salir del modo inserción pulsando la tecla ESC. Si te fijas ahora, encima de la barra de estado, que se encontrará vacia tras pulsar ESC, se mostrará el símbolo [+] que nos indica que el archivo tiene cambios sin guardar.

Guardar los cambios

Hay varias formas de guardar los cambios. Si queremos guardar los cambios pero continuar usando VIM, usaremos la combinación de teclas ESC :w, verás que se muestra :w en la barra de estado. Pulsa Enter para introducir la secuencia. El [+] desaparecerá, indicando que ya no hay nuevos cambios sin guardar. En la barra de estado verás que se muestra el mismo tipo de mensaje que antes y al final hay una nueva palabra written indicándonos que se han escrito los cambios en el archivo. Si quieres guardar los cambios y cerrar VIM, en lugar de :w, debes utilizar :x

Salir de VIM

Si no hay cambios pendientes en el archivo, puedes cerrar VIM utilizando :q. Recuerda que no debes estar en el modo insercion, si estás en ese modo, en su lugar acabarás escribiendo el texto ":q" en el documento. Si tienes cambios en el documento pero quieres salir de todas formas y descartar los cambios que hiciste, debes introducir :q!. Solo se descartarán los cambios que no guardases con :w

Cifrar un archivo

Es posible cifrar un archivo utilizando :X. VIM te pedirá una contraseña y que repitas tu contraseña. Una vez cifrado debes guardar los cambios. Tras guardar los cambios, si no saliste de VIM en la barra de estado se te indicará el algoritmo de cifrado utilizado. En mi caso es blowfish2.

Navegación

En VIM puedes tocar sobre el texto del fichero para posicionar el cursor. Tras tener el cursor posicionado, se puede usar el caracter i para entrar en modo insercion en el caracter en el que esté el cursor. Si quieres posicionarte para escribir delante de donde tienes el cursor utiliza a en lugar de i También puedes entrar en modo inserción al principio de la linea usando I, al inicio de la linea siguiente (añadiendo un salto de linea en el proceso) utilizando o, en la linea anterior (añadiendo un salto de linea en el proceso) utilizando O, en el caracter actual (eliminándolo en el proceso) utilizando x

A parte de moverte tocando el texto e insertar usando teclas, también puedes moverte utilizando distintas teclas. Con w te mueves a la siguiente palabra, con b te mueves a la palabra anterior, con e te mueves al final de la palabra actual, con $ te mueves al final de la linea actual, con 0 te mueves al inicio de la linea.

Si quieres moverte a la linea anterior k, a la linea siguiente j, al caracter anterior h, al caracter siguiente l. Si añades un número antes de cualquiera de estas opciones the moverás la cantidad indicada de caracteres/lineas.

Si quieres moverte al inicio del archivo gg, a la última linea del archivo G. Puedes ir a lineas concretas poniendo : y el número de la linea concreta a la que quires ir. Por ejemplo si quieres ir a la tercera linea del fichero :3 y pulsas enter.

Eliminar contenido

También puedes eliminar palabras, lineas, caracteres o partes concretas del archivo. Los comandos son los mismos que los de mover el cursor, pero anteponiendo d. Ejemplos:

# Recuerda que estos son comentarios, y su única finalidad es que tu los leas

dd # Eliminar la linea en la que está el cursor d$ # Eliminar desde el cursor hasta el final de la linea d0 # Eliminar desde el cursor hasta el inicio de la linea dw # Eliminar desde el cursor hasta el final de la palabra dgg # Eliminar desde el cursor hasta el inicio del archivo dG # Eliminar desde el cursor hasta el final del archivo d16 # Eliminar desde el cursor 16 lineas

Substituir texto

En VIM se pueden substituir todas las palabras de un texto de forma sencilla usando expresiones regulares. Si quieres substituir todas las palabras que digan "hola" por "adios", utilizas el comando

:%s/hola/adios/g   # substituye todos los hola por adios :%s/hola/adios/gi  # substituye todos los hola por adios aunque tengan mayúsculas

Cuando la palabra/texto tenga caracteres especiales, debes escaparlos usando la barra de escape \\.

A veces nos equivocamos y queremos deshacer las últimas acciones, para ello puedes usar u. También puedes rehacer los cambios que hayas eliminado con u utilizando CTRL r. Si cierras VIM, se perderá el historial y no podrás deshacer ni rehacer.

Modo Visual

A parte del modo comando que estamos usando y del modo inserción, también hay un modo visual al que podemos acceder desde el modo comando pulsando v. Una vez estás en el modo visual, podras mover el cursor con las teclas para remarcar un texto. Una vez tienes el texto marcado puedes realizar múltiples acciones sobre él.

y    # Copia el texto seleccionado p    # Pega el texto  x    # Corta el texto seleccionado  >    # Añade identación a las lineas (espacios) <    # Quita identación a las lineas (espacios) u    # Convierte a minúsculas U    # Convierte a mayúsculas

También puedes substituir palabras del texto seleccionado usando expresiones regulares

Manejo de ventanas y pestañas

En VIM también puedes abrir múltiples ventanas con la combinación CTRL w v. Cada vez que pulses esta combinación, abrirás una ventana nueva. Si prefieres que la ventana se abra debajo de la actual en lugar de al lado, utiliza CTRL w s. Puedes combinarlas y tener ambos tipos de ventanas abiertas a la vez.

Puedes modificar el ancho de la ventana usando CTRL w > para aumentar su ancho o CTRL w < para reducirlo.

Puedes modificar la altura de la ventana usando CTRL w + para aumentarla o CTRL w - para reducirla. Si vas a cerrar el archivo actual, para abrir otro distinto, en su lugar puedes hacer directamente :open nombreDelArchivo.txt, sirve tanto para nuevos archivos, como para archivos que ya existen.

Otra opción para abrir un nuevo archivo, esta vez, sin cerrar el actual es :e nombreDelArchivo.txt. Puedes cambiar entre archivos utilizando :bn y :bN

La opción :tabnew ejemplo.txt sirve para abrir el archivo indicado en una nueva pestaña. Puedes moverte entre las pestañas abiertas utilizando :b#

Realizar búsquedas

Puedes buscar palabras si pones una /. Ejemplo:

/hola

Una vez tengas tu palabra resaltada, puedes fijarla usando enter. Al estar la búsqueda fija, podras moverte a la siguiente palabra que cumpla tu búsqueda utilizando el caracter n o a la anterior utilizando N

Tabla de Contenidos


Capitulo 7: Configuración de Bash

Bash tiene múltiples opciones de configuración y hay varias formas de configurarlo dependiendo del sistema. En Termux lo configuraremos utilizando el archivo .bashrc. Este archivo debemos crearlo en la carpeta Home. Usaremos vim para ello.
vim ~/.bashrc

Todos los comandos que escribamos en este archivo se ejecutarán cada vez que iniciemos Termux, o cuando iniciemos una nueva pestaña de Termux.

Al final del capítulo veremos como ac


README truncated. View on GitHub
🔗 More in this category

© 2026 GitRepoTrend · StringManolo/hackingTermux101 · Updated daily from GitHub