Fix linting, and added a main Header with the title
This commit is contained in:
parent
583a0ee80a
commit
bd915436e5
|
@ -1,4 +1,6 @@
|
||||||
# Como funcionan los fees
|
# Bitcoin
|
||||||
|
|
||||||
|
## Como funcionan los fees
|
||||||
|
|
||||||
Cada ~10m (varia mucho, muchas veces hasta se tarda mas de 30m) se genera un bloque que como máximo puede pesar hasta 1Mb de informacion.
|
Cada ~10m (varia mucho, muchas veces hasta se tarda mas de 30m) se genera un bloque que como máximo puede pesar hasta 1Mb de informacion.
|
||||||
|
|
||||||
|
@ -6,39 +8,41 @@ La transaccion mas común y simple es de 2 entradas y 2 salidas, y esa pesa mas
|
||||||
|
|
||||||
Lo mineros son los encargados de decidir cuales transacciones entran o no en un bloque, y por lo general, ellos le dan prioridad a las que tengan mejor fee (la que tenga la mayor densidad de BTC, osea la mayor **BTC/vbyte**)
|
Lo mineros son los encargados de decidir cuales transacciones entran o no en un bloque, y por lo general, ellos le dan prioridad a las que tengan mejor fee (la que tenga la mayor densidad de BTC, osea la mayor **BTC/vbyte**)
|
||||||
|
|
||||||
En esta pagina https://bitcoinfees.earn.com puedes ver estimaciones de los fees actuales. Ahorita están absurdamente bajos, osea una transaccion normal te puede estar costando menos de 300 satoshis(0.025$) menos de 2,5 centavos de dolar. Con una wallet en la que tu tengas el control, tú decides cuantos fees vas a pagar. Si no pagas comision, corres el riesgo de que ni uno de los mineros meta tu transaccion en la blockchain y nunca se confirme. En la práctica los fees dependen principalmente de 2 cosas:
|
En esta pagina <https://bitcoinfees.earn.com> puedes ver estimaciones de los fees actuales. Ahorita están absurdamente bajos, osea una transaccion normal te puede estar costando menos de 300 satoshis(0.02# Bitcoin5$) menos de 2,5 centavos de dolar. Con una wallet en la que tu tengas el control, tú decides cuantos fees vas a pagar. Si no pagas comision, corres el riesgo de que ni uno de los mineros meta tu transaccion en la blockchain y nunca se confirme. En la práctica los fees dependen principalmente de 2 cosas:
|
||||||
|
|
||||||
- Congestión de la red, cuantas transacciones tienes haciendote competencia en el valor del fee (BTC/vbyte)
|
- Congestión de la red, cuantas transacciones tienes haciendote competencia en el valor del fee (BTC/vbyte)
|
||||||
- Cuanto estás dispuesto a esperar
|
- Cuanto estás dispuesto a esperar
|
||||||
|
|
||||||
Fijate en la página, cada fila es un rango de fee/byte medido en **satoshis/byte**, el tamaño de la barra indica cuantas transacciones hay/habido en ese rango, y a la derecha, al final, hay una estimacion de minutos de espera (En la práctica varía)
|
Fijate en la página, cada fila es un rango de fee/byte medido en **satoshis/byte**, el tamaño de la barra indica cuantas transacciones hay/habido en ese rango, y a la derecha, al final, hay una estimacion de minutos de espera (En la práctica varía)
|
||||||
|
|
||||||
El peso de una transaccion no solo depende de la cantidad de entradas y salidas, tambien depende del tipo de direcciones de las salidas (y quizas tambien de las entradas, not sure). Y existen 3 tipos de direcciones:
|
El peso de una transaccion no solo depende de la cantidad de entradas y salidas, tambien depende del tipo de direcciones de las salidas (y quizas tambien de las entradas, not sure). Y existen 3 tipos de direcciones:
|
||||||
|
|
||||||
- 1... (clásica)
|
- 1... (clásica)
|
||||||
- 3... (Segwit envuelto en un script, para hacerlo compatible con la clásica)
|
- 3... (Segwit envuelto en un script, para hacerlo compatible con la clásica)
|
||||||
- bc1... (Segwit nativo)
|
- bc1... (Segwit nativo)
|
||||||
|
|
||||||
El primero es el mas ineficiente (el que pesa mas en una transaccion), y el último es el mas eficiente.
|
El primero es el mas ineficiente (el que pesa mas en una transaccion), # Bitcoiny el último es el mas eficiente.
|
||||||
Ya todos los servicios se han adaptado al mas eficiente, asi que asegurate de que la wallet que uses tenga direcciones que empiecen por **bc1...**
|
Ya todos los servicios se han adaptado al mas eficiente, asi que asegurate de que la wallet que uses tenga direcciones que empiecen por **bc1...**
|
||||||
|
|
||||||
|
## Wallets centralizadas vs descentralizadas
|
||||||
# Wallets centralizadas vs descentralizadas
|
|
||||||
|
|
||||||
Las wallet descentralizadas modernas al momento de creacion generan un número aleatorio, que es básicamente el alma de tu wallet, de hecho, ese número **es** tu wallet, y quien lo tenga puede gastar tus BTC. Ese número te lo muestran en el formato **seed/semilla**, que es una lista de 12-24 palabras, es simplemente una forma mas presentable de mostrar el numero, ya que es mas facil de memorizar, y de transcribir.
|
Las wallet descentralizadas modernas al momento de creacion generan un número aleatorio, que es básicamente el alma de tu wallet, de hecho, ese número **es** tu wallet, y quien lo tenga puede gastar tus BTC. Ese número te lo muestran en el formato **seed/semilla**, que es una lista de 12-24 palabras, es simplemente una forma mas presentable de mostrar el numero, ya que es mas facil de memorizar, y de transcribir.
|
||||||
Y muchas wallet van un paso mas allá e implementan el estandar **BIP39**, para encriptar esa **seed** con un **password** que tú escojas, y en estos casos para recuperar tu wallet vas a necesitar tanto la seed, como el password. Esta opcion es la que uso yo, porque entonces yo guardo tranquilamente mi **seed** en todos lados, sin preocuparme si alguien la llega a obtener, y solo me preocupo de guardar bien la clave, que es mas corta y aún mas fácil de memorizar y de guardar. (Es importante escoger una buena clave, mas q todo q sea larga, o te le pueden hacer bruteforce)
|
Y muchas wallet van un paso mas allá e implementan el estandar **BIP39**, para encriptar esa **seed** con un **password** que tú escojas, y en estos casos para recuperar tu wallet vas a necesitar tanto la seed, como el password. Esta opcion es la que uso yo, porque entonces yo guardo tranquilamente mi **seed** en todos lados, sin preocuparme si alguien la llega a obtener, y solo me preocupo de guardar bien la clave, que es mas corta y aún mas fácil de memorizar y de guardar. (Es importante escoger una buena clave, mas q todo q sea larga, o te le pueden hacer bruteforce)
|
||||||
|
|
||||||
La necesidad de guardar bien esa clave es la desventaja que tienen las wallet descentralizadas vs las centralizadas/custodeadas, es muy facil cagarla, desde dejar muy a la vista la clave secreta a guardarla tan bien que se te pierde. O tambien si tienes muchos ahorros, tambien tienes que pensar en tener backups que tu familia pueda recuperar si te llega a pasar algo.
|
La necesidad de guardar bien esa clave es la desventaja que tienen las wallet descentralizadas vs las centralizadas/custodeadas, es muy facil cagarla, desde dejar muy a la vista la clave secreta a guardarla tan bien que se te pierde. O tambien si tienes muchos ahorros, tambien tienes que pensar en tener backups que tu familia pueda recuperar si te llega a pasar algo.
|
||||||
|
|
||||||
|
## lightning
|
||||||
# lightning
|
|
||||||
|
|
||||||
Está construido encima de Bitcoin. Y está basado en una especie de contrato entre 2 partes, y cada parte puede decidir meter X cantidad de BTC para usarlos dentro de ese canal, y mientras ese canal está abierto ambas partes pueden tranzar sin comision alguna, porque no son transacciones que se guardan en la blockchain, son transacciones totalmente privadas.
|
Está construido encima de Bitcoin. Y está basado en una especie de contrato entre 2 partes, y cada parte puede decidir meter X cantidad de BTC para usarlos dentro de ese canal, y mientras ese canal está abierto ambas partes pueden tranzar sin comision alguna, porque no son transacciones que se guardan en la blockchain, son transacciones totalmente privadas.
|
||||||
Y aquí es donde entra lightning como tal, porque bajo ciertas condiciones, se pueden conectar los canales entre sí para así poder transferirle a entidades con las que no tengas canales abierto directamente.
|
Y aquí es donde entra lightning como tal, porque bajo ciertas condiciones, se pueden conectar los canales entre sí para así poder transferirle a entidades con las que no tengas canales abierto directamente.
|
||||||
|
|
||||||
Ventajas:
|
Ventajas:
|
||||||
|
|
||||||
- Transacciones son casi instantáneas.
|
- Transacciones son casi instantáneas.
|
||||||
- Fees son aún mas bajos. Gratis si con quien abriste el canal de lightning es el mismo a quien le vas a pagar.
|
- Fees son aún mas bajos. Gratis si con quien abriste el canal de lightning es el mismo a quien le vas a pagar.
|
||||||
|
|
||||||
Desventajas:
|
Desventajas:
|
||||||
|
|
||||||
- No es suficiente con guardar la **seed** y **password**, tu aplicacion tambien necesita guardar cada cambio que se haga en tus canales abiertos. (La única aplicacion que probé creo que tenia para configurar Google Drive para guardar todos esos cambios).
|
- No es suficiente con guardar la **seed** y **password**, tu aplicacion tambien necesita guardar cada cambio que se haga en tus canales abiertos. (La única aplicacion que probé creo que tenia para configurar Google Drive para guardar todos esos cambios).
|
||||||
- Tu aplicacion tiene que estar pendiente de la red cada cierto tiempo (dependiendo de cuando tiempo se le configuró al canal, por lo general varios días)
|
- Tu aplicacion tiene que estar pendiente de la red cada cierto tiempo (dependiendo de cuando tiempo se le configuró al canal, por lo general varios días)
|
||||||
- Capacidad limitada de cantidad de Bitcoins que puedes enviar, depende de la capacidad de los canales de la ruta que atraviesa la transacción.
|
- Capacidad limitada de cantidad de Bitcoins que puedes enviar, depende de la capacidad de los canales de la ruta que atraviesa la transacción.
|
||||||
|
|
|
@ -38,7 +38,7 @@ END
|
||||||
|
|
||||||
Al ejecutar ese procedimiento almacenado, se abre una transacción, se ejecuta la **Consulta 1**, y al intentar la **Consulta 2** falla.
|
Al ejecutar ese procedimiento almacenado, se abre una transacción, se ejecuta la **Consulta 1**, y al intentar la **Consulta 2** falla.
|
||||||
|
|
||||||
Hay un problema aquí, la transacción no se deshace, sino que queda abierta, osea, tiene cambios hechos de la **Consulta 1**, pero no se han hecho permanentes en la BD (`COMMIT`), ni tampoco se han devuelto los cambios (`ROLLBACK`). Y puede ocurrir cualquiera de los dos escenarios. Por ejemplo si se cierra la conexión, la BD ejecuta un `ROLLBACK` y si se ejecuta cualquiera de estas consultas https://dev.mysql.com/doc/refman/8.0/en/implicit-commit.html se genera un `COMMIT` implicitamente.
|
Hay un problema aquí, la transacción no se deshace, sino que queda abierta, osea, tiene cambios hechos de la **Consulta 1**, pero no se han hecho permanentes en la BD (`COMMIT`), ni tampoco se han devuelto los cambios (`ROLLBACK`). Y puede ocurrir cualquiera de los dos escenarios. Por ejemplo si se cierra la conexión, la BD ejecuta un `ROLLBACK` y si se ejecuta cualquiera de estas consultas <https://dev.mysql.com/doc/refman/8.0/en/implicit-commit.html> se genera un `COMMIT` implicitamente.
|
||||||
|
|
||||||
Si en este estado de la BD se hace un `SELECT` para verificar si en la BD se hicieron los cambios de la **Consulta 1**, se va a obtener distintas respuestas dependiendo de si el `SELECT` se ejecuta desde la misma conexión/sesión o no.
|
Si en este estado de la BD se hace un `SELECT` para verificar si en la BD se hicieron los cambios de la **Consulta 1**, se va a obtener distintas respuestas dependiendo de si el `SELECT` se ejecuta desde la misma conexión/sesión o no.
|
||||||
|
|
||||||
|
@ -77,7 +77,7 @@ Esto sirve para que cualquier otra consulta que quiera leer o modificar los elem
|
||||||
|
|
||||||
Los `SELECT` normales no generan ningun bloqueo, para eso existen el `SELECT ... FOR SHARE` y el `SELECT ... FOR UPDATE`.
|
Los `SELECT` normales no generan ningun bloqueo, para eso existen el `SELECT ... FOR SHARE` y el `SELECT ... FOR UPDATE`.
|
||||||
|
|
||||||
En términos simples el **FOR SHARE** bloquea los elementos seleccionados para que otra consulta no pueda escribir sobre ellos hasta que se cierre la transacción, y el **FOR UPDATE** adicionalmente impide que tampoco puedan leerlos (igual que los `INSERT`, `UPDATE` o `DELETE`). Mas información https://dev.mysql.com/doc/refman/8.0/en/innodb-locking-reads.html
|
En términos simples el **FOR SHARE** bloquea los elementos seleccionados para que otra consulta no pueda escribir sobre ellos hasta que se cierre la transacción, y el **FOR UPDATE** adicionalmente impide que tampoco puedan leerlos (igual que los `INSERT`, `UPDATE` o `DELETE`). Mas información <https://dev.mysql.com/doc/refman/8.0/en/innodb-locking-reads.html>
|
||||||
|
|
||||||
### Recomendaciones
|
### Recomendaciones
|
||||||
|
|
||||||
|
|
|
@ -1,18 +1,19 @@
|
||||||
*copiado sin verguenza alguna de https://www.techrepublic.com/article/how-to-run-an-ssh-connection-through-tor/*
|
# Configurar a un servicio onion
|
||||||
|
|
||||||
|
*copiado sin verguenza alguna de <https://www.techrepublic.com/article/how-to-run-an-ssh-connection-through-tor/>*
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# Instalar Tor
|
## Instalar Tor
|
||||||
|
|
||||||
Instalar Tor en el cliente y en el servidor:
|
Instalar Tor en el cliente y en el servidor:
|
||||||
|
|
||||||
sudo apt-get install tor -y
|
sudo apt-get install tor -y
|
||||||
|
|
||||||
# Configurar Tor
|
## Configurar Tor
|
||||||
|
|
||||||
1. En el servidor vamos a editar el archivo de configuración de tor `/etc/tor/torrc`:
|
1. En el servidor vamos a editar el archivo de configuración de tor `/etc/tor/torrc`:
|
||||||
|
|
||||||
|
|
||||||
sudo nano /etc/tor/torrc
|
sudo nano /etc/tor/torrc
|
||||||
|
|
||||||
2. Al final del archivo vamos a agregar esto:
|
2. Al final del archivo vamos a agregar esto:
|
||||||
|
@ -26,7 +27,7 @@ Instalar Tor en el cliente y en el servidor:
|
||||||
|
|
||||||
sudo systemctl restart tor
|
sudo systemctl restart tor
|
||||||
|
|
||||||
# Obtener la direccion .onion
|
## Obtener la direccion .onion
|
||||||
|
|
||||||
Estará en el archivo `hostname` en la carpeta configurada anteriormente `/var/lib/tor/ssh/`
|
Estará en el archivo `hostname` en la carpeta configurada anteriormente `/var/lib/tor/ssh/`
|
||||||
|
|
||||||
|
@ -34,18 +35,15 @@ Estará en el archivo `hostname` en la carpeta configurada anteriormente `/var/l
|
||||||
|
|
||||||
Deberia arrojarte algo así: `riludi2kstjwmlzn.onion`
|
Deberia arrojarte algo así: `riludi2kstjwmlzn.onion`
|
||||||
|
|
||||||
# Conectarse al servidor ssh con la direccion .onion
|
## Conectarse al servidor ssh con la direccion .onion
|
||||||
|
|
||||||
```bash
|
|
||||||
torify ssh ... # reemplazar el dominio/ip por la direccion .onion`
|
|
||||||
```
|
|
||||||
|
|
||||||
|
torify ssh ... # reemplazar el dominio/ip por la direccion .onion`
|
||||||
|
|
||||||
Por ejemplo:
|
Por ejemplo:
|
||||||
|
|
||||||
torify ssh jack@riludi2kstjwmlzn.onion
|
torify ssh jack@riludi2kstjwmlzn.onion
|
||||||
|
|
||||||
## Opcional
|
### Opcional
|
||||||
|
|
||||||
Para no tener que recordar la direccion **.onion** puedes configurar los parámetros de conexión en el archivo `~/.ssh/config`
|
Para no tener que recordar la direccion **.onion** puedes configurar los parámetros de conexión en el archivo `~/.ssh/config`
|
||||||
|
|
||||||
|
@ -58,7 +56,6 @@ Ingresar configuracion:
|
||||||
HostName riludi2kstjwmlzn.onion
|
HostName riludi2kstjwmlzn.onion
|
||||||
Port 22
|
Port 22
|
||||||
|
|
||||||
|
|
||||||
Ahora puedes conectarte así:
|
Ahora puedes conectarte así:
|
||||||
|
|
||||||
torify ssh serverTor
|
torify ssh serverTor
|
|
@ -1,14 +1,16 @@
|
||||||
*Shamelessly copied from https://www.techrepublic.com/article/how-to-run-an-ssh-connection-through-tor/*
|
# Configure an onion service
|
||||||
|
|
||||||
|
*Shamelessly copied from <https://www.techrepublic.com/article/how-to-run-an-ssh-connection-through-tor/>*
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# Install Tor
|
## Install Tor
|
||||||
|
|
||||||
Install Tor on both client and server:
|
Install Tor on both client and server:
|
||||||
|
|
||||||
sudo apt-get install tor -y
|
sudo apt-get install tor -y
|
||||||
|
|
||||||
# Configure Tor
|
## Configure Tor
|
||||||
|
|
||||||
1. In the server let's edit tor's config file `/etc/tor/torrc`:
|
1. In the server let's edit tor's config file `/etc/tor/torrc`:
|
||||||
|
|
||||||
|
@ -25,7 +27,7 @@ Install Tor on both client and server:
|
||||||
|
|
||||||
sudo systemctl restart tor
|
sudo systemctl restart tor
|
||||||
|
|
||||||
# Get .onion address
|
## Get .onion address
|
||||||
|
|
||||||
It will be in the file `hostname` in the previously configured folder `/var/lib/tor/ssh`
|
It will be in the file `hostname` in the previously configured folder `/var/lib/tor/ssh`
|
||||||
|
|
||||||
|
@ -33,17 +35,15 @@ It will be in the file `hostname` in the previously configured folder `/var/lib/
|
||||||
|
|
||||||
You should get something like `riludi2kstjwmlzn.onion`
|
You should get something like `riludi2kstjwmlzn.onion`
|
||||||
|
|
||||||
# Connect to the Tor hidden ssh server
|
## Connect to the Tor hidden ssh server
|
||||||
|
|
||||||
```bash
|
torify ssh ... # replace the domain/ip with the .onion address
|
||||||
torify ssh ... # replace the domain/ip with the .onion address
|
|
||||||
```
|
|
||||||
|
|
||||||
For example:
|
For example:
|
||||||
|
|
||||||
torify ssh jack@riludi2kstjwmlzn.onion
|
torify ssh jack@riludi2kstjwmlzn.onion
|
||||||
|
|
||||||
## Optional
|
### Optional
|
||||||
|
|
||||||
You don't need to remember the **.onion** address, you can write an entry to your user's ssh config file `~/.ssh/config`:
|
You don't need to remember the **.onion** address, you can write an entry to your user's ssh config file `~/.ssh/config`:
|
||||||
|
|
||||||
|
@ -56,7 +56,6 @@ Set configuration:
|
||||||
HostName riludi2kstjwmlzn.onion
|
HostName riludi2kstjwmlzn.onion
|
||||||
Port 22
|
Port 22
|
||||||
|
|
||||||
|
|
||||||
Now you can simply connect with:
|
Now you can simply connect with:
|
||||||
|
|
||||||
torify ssh serverTor
|
torify ssh serverTor
|
|
@ -1,57 +1,66 @@
|
||||||
# Shortcuts
|
# Terminal Shortcuts
|
||||||
|
|
||||||
*For Ubuntu's default keybinding settings (i.e Emacs keybindings)*
|
## Default shortcuts
|
||||||
|
|
||||||
## Insert previous arguments
|
For Ubuntu's default keybinding settings (i.e Emacs keybindings)
|
||||||
- <kbd>Alt</kbd>+<kbd>.</kbd>: insert last argument from last command.
|
|
||||||
- <kbd>Alt</kbd>+<kbd>number</kbd>+<kbd>.</kbd>: insert #nth last argument from last command.
|
|
||||||
- <kbd>Alt</kbd>+<kbd>-</kbd> , <kbd>number</kbd> , <kbd>Alt</kbd>+<kbd>.</kbd>, **zsh:** <kbd>Alt</kbd>+<kbd>-</kbd>+<kbd>number</kbd>+<kbd>.</kbd>: insert #nth first argument from last command.
|
|
||||||
|
|
||||||
*In Linux you can repeat commands to go back in history*
|
### Insert previous arguments
|
||||||
|
|
||||||
### Example:
|
- <kbd>Alt</kbd>+<kbd>.</kbd>: insert last argument from last command.
|
||||||
|
- <kbd>Alt</kbd>+<kbd>number</kbd>+<kbd>.</kbd>: insert #nth last argument from last command.
|
||||||
|
- <kbd>Alt</kbd>+<kbd>-</kbd> , <kbd>number</kbd> , <kbd>Alt</kbd>+<kbd>.</kbd>, **zsh:** <kbd>Alt</kbd>+<kbd>-</kbd>+<kbd>number</kbd>+<kbd>.</kbd>: insert #nth first argument from last command.
|
||||||
|
|
||||||
|
In Linux you can repeat commands to go back in history
|
||||||
|
|
||||||
|
#### Example
|
||||||
|
|
||||||
Last command is:
|
Last command is:
|
||||||
|
|
||||||
mv foo bar
|
mv foo bar
|
||||||
|
|
||||||
- <kbd>Alt</kbd>+<kbd>0</kbd>+<kbd>.</kbd>: insert first argument of last command = `mv`
|
- <kbd>Alt</kbd>+<kbd>0</kbd>+<kbd>.</kbd>: insert first argument of last command = `mv`
|
||||||
- <kbd>Alt</kbd>+<kbd>2</kbd>+<kbd>.</kbd>: insert last 2nd argument of last command = `foo`
|
- <kbd>Alt</kbd>+<kbd>2</kbd>+<kbd>.</kbd>: insert last 2nd argument of last command = `foo`
|
||||||
- <kbd>up</kbd> , <kbd>Ctrl</kbd>+<kbd>w</kbd>: last command without the last word = `mv foo`
|
- <kbd>up</kbd> , <kbd>Ctrl</kbd>+<kbd>w</kbd>: last command without the last word = `mv foo`
|
||||||
|
|
||||||
|
### Cut/Paste commands
|
||||||
|
|
||||||
## Cut/Paste commands
|
(relative to cursor's position)
|
||||||
*(relative to cursor's position)*
|
|
||||||
- <kbd>Ctrl</kbd>+<kbd>w</kbd>: cuts last word
|
|
||||||
- <kbd>Alt</kbd>+<kbd>d</kbd>: cuts next word
|
|
||||||
- <kbd>Ctrl</kbd>+<kbd>k</kbd>: cuts everything after
|
|
||||||
- <kbd>Ctrl</kbd>+<kbd>u</kbd>, **zsh:** <kbd>Alt</kbd>+<kbd>w</kbd>: cuts everything before
|
|
||||||
- **zsh:** <kbd>Ctrl</kbd>+<kbd>u</kbd>: cuts the entire command *(In bash you can combine <kbd>Ctrl</kbd>+<kbd>u</kbd> , <kbd>Ctrl</kbd>+<kbd>k</kbd>)*
|
|
||||||
- <kbd>Ctrl</kbd>+<kbd>y</kbd>: paste characters previously cut with any **Cut command**. *In bash you can chain **cut commands**, and <kbd>Ctrl</kbd>+<kbd>y</kbd> will paste them all.*
|
|
||||||
|
|
||||||
|
- <kbd>Ctrl</kbd>+<kbd>w</kbd>: cuts last word
|
||||||
|
- <kbd>Alt</kbd>+<kbd>d</kbd>: cuts next word
|
||||||
|
- <kbd>Ctrl</kbd>+<kbd>k</kbd>: cuts everything after
|
||||||
|
- <kbd>Ctrl</kbd>+<kbd>u</kbd>, **zsh:** <kbd>Alt</kbd>+<kbd>w</kbd>: cuts everything before
|
||||||
|
- **zsh:** <kbd>Ctrl</kbd>+<kbd>u</kbd>: cuts the entire command *(In bash you can combine <kbd>Ctrl</kbd>+<kbd>u</kbd> , <kbd>Ctrl</kbd>+<kbd>k</kbd>)*
|
||||||
|
- <kbd>Ctrl</kbd>+<kbd>y</kbd>: paste characters previously cut with any **Cut command**. *In bash you can chain **cut commands**, and <kbd>Ctrl</kbd>+<kbd>y</kbd> will paste them all.*
|
||||||
|
|
||||||
## Move cursor
|
### Move cursor
|
||||||
- <kbd>Ctrl</kbd>+<kbd>left</kbd>: move to last word
|
|
||||||
- <kbd>Ctrl</kbd>+<kbd>right</kbd>: move to next word
|
|
||||||
- <kbd>home</kbd> or <kbd>Ctrl</kbd>+<kbd>a</kbd>: move to start of command
|
|
||||||
- <kbd>end</kbd> or <kbd>Ctrl</kbd>+<kbd>e</kbd>: move to end of command
|
|
||||||
|
|
||||||
|
- <kbd>Ctrl</kbd>+<kbd>left</kbd>: move to last word
|
||||||
|
- <kbd>Ctrl</kbd>+<kbd>right</kbd>: move to next word
|
||||||
|
- <kbd>home</kbd> or <kbd>Ctrl</kbd>+<kbd>a</kbd>: move to start of command
|
||||||
|
- <kbd>end</kbd> or <kbd>Ctrl</kbd>+<kbd>e</kbd>: move to end of command
|
||||||
|
|
||||||
## Other
|
### Other
|
||||||
- <kbd>Ctrl</kbd>+<kbd>_</kbd>: undo last edit *(very useful when exceeding <kbd>Ctrl</kbd>+<kbd>w</kbd>)*
|
|
||||||
|
|
||||||
## To see all shortcuts available
|
- <kbd>Ctrl</kbd>+<kbd>_</kbd>: undo last edit *(very useful when exceeding <kbd>Ctrl</kbd>+<kbd>w</kbd>)*
|
||||||
- **bash:** `bind -lp`
|
|
||||||
- **zsh:** `bindkey -L`
|
|
||||||
|
|
||||||
# Custom shortcuts
|
### To see all shortcuts available
|
||||||
## Iterate through arguments
|
|
||||||
*only works in zsh, and probably only Linux*
|
- **bash:** `bind -lp`
|
||||||
|
- **zsh:** `bindkey -L`
|
||||||
|
|
||||||
|
## Custom shortcuts
|
||||||
|
|
||||||
|
### Iterate through arguments
|
||||||
|
|
||||||
|
only works in zsh, and probably only Linux
|
||||||
|
|
||||||
|
#### Description
|
||||||
|
|
||||||
### Description
|
|
||||||
Insert any argument of a previous command by iterating one by one until selection
|
Insert any argument of a previous command by iterating one by one until selection
|
||||||
|
|
||||||
### Setup Instructions
|
#### Setup Instructions
|
||||||
|
|
||||||
run this:
|
run this:
|
||||||
|
|
||||||
autoload -Uz copy-earlier-word
|
autoload -Uz copy-earlier-word
|
||||||
|
@ -62,7 +71,8 @@ run this:
|
||||||
|
|
||||||
Now use <kbd>Alt</kbd>+<kbd>.</kbd> to go as back as you want, then use <kbd>Alt</kbd>+<kbd>:</kbd> to iterate through the arguments
|
Now use <kbd>Alt</kbd>+<kbd>.</kbd> to go as back as you want, then use <kbd>Alt</kbd>+<kbd>:</kbd> to iterate through the arguments
|
||||||
|
|
||||||
### Example:
|
#### Example
|
||||||
|
|
||||||
Last command is
|
Last command is
|
||||||
|
|
||||||
echo 1 2 3 4 5
|
echo 1 2 3 4 5
|
||||||
|
@ -74,12 +84,12 @@ Last command is
|
||||||
- <kbd>Alt</kbd>+<kbd>.</kbd>+<kbd>:</kbd>+<kbd>:</kbd>+<kbd>:</kbd>+<kbd>:</kbd>: `1`
|
- <kbd>Alt</kbd>+<kbd>.</kbd>+<kbd>:</kbd>+<kbd>:</kbd>+<kbd>:</kbd>+<kbd>:</kbd>: `1`
|
||||||
- <kbd>Alt</kbd>+<kbd>.</kbd>+<kbd>:</kbd>+<kbd>:</kbd>+<kbd>:</kbd>+<kbd>:</kbd>+<kbd>:</kbd>: `echo`
|
- <kbd>Alt</kbd>+<kbd>.</kbd>+<kbd>:</kbd>+<kbd>:</kbd>+<kbd>:</kbd>+<kbd>:</kbd>+<kbd>:</kbd>: `echo`
|
||||||
|
|
||||||
source: https://stackoverflow.com/a/34861762/3163120
|
source: <https://stackoverflow.com/a/34861762/3163120>
|
||||||
|
|
||||||
|
## Other examples
|
||||||
|
|
||||||
# Other examples
|
### Common usecases
|
||||||
|
|
||||||
## Common usecases
|
|
||||||
Let's consider the last command to be:
|
Let's consider the last command to be:
|
||||||
|
|
||||||
mv foo bar
|
mv foo bar
|
||||||
|
@ -88,7 +98,8 @@ Let's consider the last command to be:
|
||||||
|
|
||||||
<kbd>Alt</kbd>+<kbd>0</kbd>+<kbd>.</kbd>: first argument of last command = `mv`
|
<kbd>Alt</kbd>+<kbd>0</kbd>+<kbd>.</kbd>: first argument of last command = `mv`
|
||||||
|
|
||||||
# Limitations
|
## Limitations
|
||||||
|
|
||||||
"words" only includes `a-zA-Z` characters, so any symbol character will stop word-shortcuts.
|
"words" only includes `a-zA-Z` characters, so any symbol character will stop word-shortcuts.
|
||||||
|
|
||||||
So if last argument was a url and you want to erase it with <kbd>Ctrl</kbd>+<kbd>w</kbd> it will be a pain.
|
So if last argument was a url and you want to erase it with <kbd>Ctrl</kbd>+<kbd>w</kbd> it will be a pain.
|
||||||
|
@ -97,8 +108,6 @@ E.g: `curl -I --header "Connection: Keep-Alive" https://stackoverflow.com/questi
|
||||||
|
|
||||||
To erase that **url** using <kbd>Ctrl</kbd>+<kbd>w</kbd>, you'd have to repeat it 12 times.
|
To erase that **url** using <kbd>Ctrl</kbd>+<kbd>w</kbd>, you'd have to repeat it 12 times.
|
||||||
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
||||||
It would be great to have similar shortcuts that only stops at the **space character**
|
It would be great to have similar shortcuts that only stops at the **space character**
|
|
@ -1,17 +1,18 @@
|
||||||
[//]: # "Ctrl+K,V o Ctrl+Shift+V - Para ver vista previa en VSCode"
|
[//]: # "Ctrl+K,V o Ctrl+Shift+V - Para ver vista previa en VSCode"
|
||||||
|
|
||||||
Tutorial to install [youtube-dl](https://github.com/ytdl-org/youtube-dl/) in android via [termux](https://termux.com/), and configure it to download links shared from another app.
|
# Tutorial to install [youtube-dl](https://github.com/ytdl-org/youtube-dl/) in android
|
||||||
|
|
||||||
*Based on https://www.reddit.com/r/Piracy/comments/baufql/youtubedl_the_easy_way_on_android/*
|
Based on <https://www.reddit.com/r/Piracy/comments/baufql/youtubedl_the_easy_way_on_android/>
|
||||||
|
|
||||||
# Usage
|
## Usage
|
||||||
|
|
||||||
Click **Share**, select **Termux**, choose video or audio, and that's it!, it will be saved to `Downloads/{Provider}/` e.g `Downloads/Youtube/`
|
Click **Share**, select **Termux**, choose video or audio, and that's it!, it will be saved to `Downloads/{Provider}/` e.g `Downloads/Youtube/`
|
||||||
|
|
||||||
# Install Termux
|
## Install Termux
|
||||||
https://termux.com/
|
|
||||||
|
|
||||||
# Open Termux and run one of these:
|
<https://termux.com/>
|
||||||
|
|
||||||
|
## Open Termux and run one of these
|
||||||
|
|
||||||
1. [Youtube-dl + sharing + dialog **(Recommended)**](#youtube-dl--sharing--dialog-recommended)
|
1. [Youtube-dl + sharing + dialog **(Recommended)**](#youtube-dl--sharing--dialog-recommended)
|
||||||
2. [Youtube-dl + sharing](#youtube-dl--sharing)
|
2. [Youtube-dl + sharing](#youtube-dl--sharing)
|
||||||
|
@ -19,7 +20,7 @@ https://termux.com/
|
||||||
4. [Termux extras](#termux-extras)
|
4. [Termux extras](#termux-extras)
|
||||||
5. [All-In-One](#all-in-one)
|
5. [All-In-One](#all-in-one)
|
||||||
|
|
||||||
## Youtube-dl + sharing + dialog **(Recommended)**
|
### Youtube-dl + sharing + dialog **(Recommended)**
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Ask for storage permission
|
# Ask for storage permission
|
||||||
|
@ -60,13 +61,13 @@ https://termux.com/
|
||||||
- A prompt to enable storage will appear, press <kbd>y</kbd> then <kbd>Enter</kbd>
|
- A prompt to enable storage will appear, press <kbd>y</kbd> then <kbd>Enter</kbd>
|
||||||
- That's all!, just wait for it to finish upgrading/installing
|
- That's all!, just wait for it to finish upgrading/installing
|
||||||
|
|
||||||
### Usage:
|
#### Usage
|
||||||
|
|
||||||
Share an URL to termux, a dialog will ask you to choose if download **video** or just **audio**
|
Share an URL to termux, a dialog will ask you to choose if download **video** or just **audio**
|
||||||
|
|
||||||
## Youtube-dl + sharing
|
### Youtube-dl + sharing
|
||||||
|
|
||||||
### Usage:
|
#### Usage
|
||||||
|
|
||||||
Share URL to termux, this will automatically download the video.
|
Share URL to termux, this will automatically download the video.
|
||||||
|
|
||||||
|
@ -89,7 +90,7 @@ But if you always want to download just audio, replace `youtube-dl $url` with `y
|
||||||
chmod +x ~/bin/termux-url-opener
|
chmod +x ~/bin/termux-url-opener
|
||||||
```
|
```
|
||||||
|
|
||||||
## Youtube-dl
|
### Youtube-dl
|
||||||
|
|
||||||
This will only install youtube-dl in termux, sharing a URL to Termux will not work, you'll need to run the command manually from the terminal, e.g `youtube-dl https://youtu.be/blahblahblah`
|
This will only install youtube-dl in termux, sharing a URL to Termux will not work, you'll need to run the command manually from the terminal, e.g `youtube-dl https://youtu.be/blahblahblah`
|
||||||
|
|
||||||
|
@ -100,8 +101,7 @@ This will only install youtube-dl in termux, sharing a URL to Termux will not wo
|
||||||
apt update && apt upgrade -y && apt install -y python ffmpeg && pip install youtube-dl
|
apt update && apt upgrade -y && apt install -y python ffmpeg && pip install youtube-dl
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Termux extras
|
||||||
## Termux extras
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Add special keys to keyboard
|
# Add special keys to keyboard
|
||||||
|
@ -115,7 +115,7 @@ This will only install youtube-dl in termux, sharing a URL to Termux will not wo
|
||||||
apt install -y nano
|
apt install -y nano
|
||||||
```
|
```
|
||||||
|
|
||||||
## All-In-One
|
### All-In-One
|
||||||
|
|
||||||
Youtube-dl + sharing + dialog + Termux extras
|
Youtube-dl + sharing + dialog + Termux extras
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,13 @@
|
||||||
|
# Ubuntu install guide
|
||||||
|
|
||||||
## Update & Upgrade
|
## Update & Upgrade
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
sudo apt update && sudo apt upgrade -y
|
sudo apt update && sudo apt upgrade -y
|
||||||
```
|
```
|
||||||
|
|
||||||
## Install Packages
|
## Install Packages
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
sudo apt-get install python3-pip zsh curl wget git
|
sudo apt-get install python3-pip zsh curl wget git
|
||||||
sudo apt-get install p7zip-full smplayer cmus speedtest-cli git-gui filezilla pavucontrol ufw servefile nmap fail2ban gimp most colordiff mosh dconf-editor ncdu qcalc jq tor fonts-noto &
|
sudo apt-get install p7zip-full smplayer cmus speedtest-cli git-gui filezilla pavucontrol ufw servefile nmap fail2ban gimp most colordiff mosh dconf-editor ncdu qcalc jq tor fonts-noto &
|
||||||
|
@ -14,31 +18,38 @@ pip3 install youtube-dl tldr
|
||||||
## External Repositories
|
## External Repositories
|
||||||
|
|
||||||
### Antimicro
|
### Antimicro
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
sudo add-apt-repository ppa:mdeguzis/libregeek
|
sudo add-apt-repository ppa:mdeguzis/libregeek
|
||||||
```
|
```
|
||||||
As of today, a bionic package is still not available, but the artful works!. https://github.com/AntiMicro/antimicro/issues
|
|
||||||
|
As of today, a bionic package is still not available, but the artful works!. <https://github.com/AntiMicro/antimicro/issues>
|
||||||
|
|
||||||
`sudo nano /etc/apt/sources.list.d/mdeguzis-ubuntu-libregeek-bionic.list` Replace `bionic` with `artful`
|
`sudo nano /etc/apt/sources.list.d/mdeguzis-ubuntu-libregeek-bionic.list` Replace `bionic` with `artful`
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
sudo apt update
|
sudo apt update
|
||||||
sudo apt install antimicro
|
sudo apt install antimicro
|
||||||
```
|
```
|
||||||
Put config file https://gist.github.com/madacol/19f8c71ba98f484a4294ccfe90e88e6e in `~/.config/antimicro`
|
|
||||||
|
Put config file <https://gist.github.com/madacol/19f8c71ba98f484a4294ccfe90e88e6e> in `~/.config/antimicro`
|
||||||
|
|
||||||
### SinkSwitcher
|
### SinkSwitcher
|
||||||
|
|
||||||
https://github.com/madacol/sinkSwitcher
|
<https://github.com/madacol/sinkSwitcher>
|
||||||
|
|
||||||
## Web installs
|
## Web installs
|
||||||
- docker: https://download.docker.com
|
|
||||||
- VSCode: https://code.visualstudio.com/
|
- docker: <https://download.docker.com>
|
||||||
- chrome: https://www.chrome.com/
|
- VSCode: <https://code.visualstudio.com/>
|
||||||
- syncthing: https://apt.syncthing.net/
|
- chrome: <https://www.chrome.com/>
|
||||||
- Zsh-syntax-highlighting: https://github.com/zsh-users/zsh-syntax-highlighting/blob/master/INSTALL.md
|
- syncthing: <https://apt.syncthing.net/>
|
||||||
|
- Zsh-syntax-highlighting: <https://github.com/zsh-users/zsh-syntax-highlighting/blob/master/INSTALL.md>
|
||||||
|
|
||||||
## Edit ~/.zshrc
|
## Edit ~/.zshrc
|
||||||
|
|
||||||
### Add shortcut "Alt+:" [to iterate through arguments](https://stackoverflow.com/questions/4009412/how-to-use-arguments-from-previous-command/55069846#55069846)
|
### Add shortcut "Alt+:" [to iterate through arguments](https://stackoverflow.com/questions/4009412/how-to-use-arguments-from-previous-command/55069846#55069846)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
autoload -Uz copy-earlier-word
|
autoload -Uz copy-earlier-word
|
||||||
zle -N copy-earlier-word
|
zle -N copy-earlier-word
|
||||||
|
@ -46,19 +57,23 @@ bindkey "^[:" copy-earlier-word
|
||||||
```
|
```
|
||||||
|
|
||||||
### Enable most
|
### Enable most
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
export PAGER=most
|
export PAGER=most
|
||||||
```
|
```
|
||||||
|
|
||||||
## Gnome extensions
|
## Gnome extensions
|
||||||
|
|
||||||
- Caffeine
|
- Caffeine
|
||||||
- Dash to dock https://extensions.gnome.org/extension/307/dash-to-dock/ `sudo apt remove gnome-shell-extension-ubuntu-dock` https://github.com/micheleg/dash-to-dock/issues/643
|
- Dash to dock <https://extensions.gnome.org/extension/307/dash-to-dock/> `sudo apt remove gnome-shell-extension-ubuntu-dock` <https://github.com/micheleg/dash-to-dock/issues/643>
|
||||||
- suspend button NetSpeed https://extensions.gnome.org/extension/104/netspeed/
|
- suspend button NetSpeed <https://extensions.gnome.org/extension/104/netspeed/>
|
||||||
- NetSpeed https://extensions.gnome.org/extension/104/netspeed/
|
- NetSpeed <https://extensions.gnome.org/extension/104/netspeed/>
|
||||||
|
|
||||||
## Custom shortcuts
|
## Custom shortcuts
|
||||||
|
|
||||||
- `systemctl suspend`
|
- `systemctl suspend`
|
||||||
- Cmus https://medium.com/@madacol/configure-cmus-music-player-on-the-terminal-in-ubuntu-3c513d2d2cd0
|
- Cmus <https://medium.com/@madacol/configure-cmus-music-player-on-the-terminal-in-ubuntu-3c513d2d2cd0>
|
||||||
|
|
||||||
## StartUp
|
## StartUp
|
||||||
|
|
||||||
- Cmus `gnome-terminal -- cmus`
|
- Cmus `gnome-terminal -- cmus`
|
Loading…
Reference in New Issue
Block a user