Mastering lightning
Contenido:

Fundamentos de línea de comandos

El presente es un tutorial básico para usar la terminal o más comúnmente llamada línea de comandos - command line - tan habitual en sistemas Unix y Linux.

Está orientado a cubrir sólo los comandos que suelen ser más utilizados al momento de interactuar con nodos de Bitcoin y Lightning Network.

Autor

Gustavo Torres. Twitter para correcciones o comentarios: @bitao36 y @libdesatoshi

El presente tutorial fue elaborado para el Seminario socrático de Mastering Lightning a través de @libdesatoshi.

Requerimientos

◻️ Tener instalada una distribución de Linux basada en Debian, como Mint, Kali, Parrot o preferiblemente Ubuntu.

◻️ En caso de que no dispongas de Linux abre el siguiente link https://killercoda.com/playgrounds/scenario/ubuntu

Qué es la terminal o línea de comandos

La terminal es una interfaz que se utiliza para interactuar con el shell y el shell es el intérprete de comandos. Hay varios intérpretes de comandos. El más usado es el shell Bash (Bourne-again shell).

Para saber qué shell estás usando abre una terminal y escribe:

$echo $SHELL

Usuarios normales y root

Linux es un sistema operativo multiusuario, existe un usuario llamado root que es superadministrador con todos los permisos de escritura y ejecución.
Como norma de seguridad no es aconsejable emplear el usuario root para trabajar en sesiones habituales.

El prompt de la terminal indica si es la sesión de root o no. Si el prompt que ves es el siguiente símbolo:

$

Es un usuario normal.

Si es el siguiente símbolo:

#

Entonces es la sesión de root.

Para saber qué usuario estás usando puedes ejecutar el comando

$whoami

Cuando veas tutoriales que usen la terminal, siempre presta atención al prompt que tiene antes del comando, ya que este te indica si necesita ser ejecutado como root.

Lo que debemos hacer para trabajar en sesiones habituales es crear otros usuarios y en caso de que se necesite ejecutar algún comando que requiera permisos especiales, otorgamos permisos a ese usuario añadiéndolo al grupo sudo en el caso de Ubuntu o con el comando visudo si estamos en Debian.

El comando para crear un usuario es:

$adduser usuario

y el comando para añadir un usuario a un grupo si estás en Ubuntu es:

$usermod -a -G grupo usuario

Si estás en Debian como root ejecuta:

sudo visudo

y vas hasta donde dice:

#User privilege specification

Y colocas lo siguiente:

usuario ALL=(ALL:ALL) ALL

Cómo moverse por el árbol de directorios

El directorio  .   es el directorio actual
El directorio  ..  es el directorio padre
El directorio  ~  es el directorio home del usuario actual y se puede obtener presionando F5.

Para mirar el listado de archivos y directorios mostrando todos los atributos y el tamaño en un formato que pueda ser entendida por humanos, usa el comando ls con el modificador h.

ls -lah

Para cambiar de directorio usa el comando:

cd directorio

Para crear un directorio usa el comando:

mkdir

Para saber la ruta en la que te encuentras, usa el comando:

pwd
Ejercicio 1:
Ubícate en tu carpeta home y crea una carpeta llamada “proyectos”, y dentro de esa carpeta crea otras dos carpetas, una llamada “documentos” y otra “desarrollo”.

Permisos de archivos

Los tipos de archivo más comunes son:
-: Archivo regular
d: Directorio
l: Enlace simbólico
Los permisos son:
r: Lectura
w: Escritura
x: Ejecución

Manejo de archivos

Para:

▪️ Crear o editar: para editar archivos puedes usar nano o vim. Por lo general, nano es más sencillo de usar. Vim es más complejo de usar y es usado por lo general por usuarios avanzados, ya que con buenos plugins puedes convertirlo en un editor de código de programación.
En este taller utilizaremos nano por simplicidad.

$nano archivo

▪️ Copiar: se usa el comando cp. Hay un modificador muy importante cuando debe copiar una carpeta para que se copie con todos los archivos que tiene dentro a la nueva ruta.

$cp -r subcarpeta /home/user/nuevaruta

▪️ Cambiar el nombre de un archivo se usa:

$mv nombrearchivo

▪️ Borrar un archivo se usa:

$rm archivo

▪️ Mirar logs:

$tail -f archivolog.log
Ejercicio 2
Dentro de la carpeta “proyectos”, creada en el ejercicio 1, crea los archivos “tarea1.txt” y “data.dat”. Cópialos en la carpeta “documentos” que también fue creada previamente.

Canalización o pipes

Los pipes son muy poderosos y por lo general la usan mucho los usuarios avanzados.
En esencia, un pipe (tubería) envía la salida de un comando a la entrada de otro comando.

Por ejemplo, hay un comando llamado cat que sirve para mirar el contenido de archivos y hay un comando que sirve para paginar llamado less.

Vamos a ir a la carpeta /var/log y vamos a visualizar el archivo

$cd /var/log$cat dpkg.log

Como puedes ver el archivo tiene demasiadas líneas y no puedes ver las primeras. Por eso a continuación usaremos un pipe para poder mirar el archivo página por página:

$cat dpkg.log | less

Para ir avanzando se hace con espaciadora y para salir se presiona q

El siguiente comando envía el listado de archivos en el directorio a un archivo llamado listado.txt

$ls -lah > listado.txt

Si miramos el archivo listado observaremos que toda la salida del comando ls -lah fue almacenado en el archivo listado.txt

$cat listado.txtyou
Ejercicio 3
Crea un archivo con los siguientes números y ordénalos usando una canalización con el comando sort.
5
3
8
7
1

Gestión de procesos

Qué son y como listarlos

Linux asigna a cada proceso que se ejecuta en el sistema un número entero llamado PID.

A veces es importante listar los procesos del usuario o simplemente conocer de algún proceso en particular.

Para tener un listado de procesos del sistema, ejecuta:

$ps -fe

Si solo deseas procesos del usuario actual ejecuta

$ps fu

Si deseas buscar el proceso asociado a algún programa que has ejecutado, puedes pasárselo con un pipe a grep para que lo busque.
Por ejemplo, si quieres saber si Python3 está corriendo en tu sesión, ejecuta el siguiente comando:

$ps -fe | grep python
Cómo monitorear procesos y rendimiento

Es muy importante saber como mirar los procesos que está ejecutando el sistema, para saber que tan cargado está y saber que proceso en particular está gastando más recursos.

El comando más usado es htop, en caso de que no esté instalado ejecuta:

$sudo apt install htop

y luego lo ejecutas:

$htop

Este comando arroja el listado de procesos y algunos parámetros. Hay un parámetro llamado “Load average” que nos indica que tan cargado está el sistema. Su valor debe ser inferior al número de núcleos que tenga tu procesador.

En caso de que el sistema esté muy cargado puede que ni siquiera abra htop. En este caso puedes usar el comando:

$cat /proc/loadavg

En caso de que veamos que un proceso está consumiendo todo el procesador o la memoria, podemos matarlo usando su PID con el siguiente comando:

$kill PID

Gestión de varias terminales con tmux

Usualmente, cuando empezamos a trabajar con la línea de comandos, surge la necesidad de usar varias ventanas. Para no tener que abrir múltiples terminales, podemos usar una herramienta llamada tmux que nos permite dividir la terminal actual sin necesidad de abrir terminales extra.

Lo primero que debemos hacer es instalar tmux:

$sudo apt install tmux

Ahora ejecuta:

$tmux

Si quieres dividir la ventana de forma horizontal presionas: Ctrl+B y SHIFT+"

Y si quieres dividir la ventana de forma vertical presionas: Ctrl+B y Shift+%

Si deseas pasar de una ventana a otra, presiona Ctrl+B y flecha (arriba o abajo o izquierda o derecha) dependiendo de como te quieras mover.

Ejercicio 4
◼️ Crea un script en el home llamado msj.sh:
$cd ~
$nano msj.sh
$chmod +x msj.sh

◼️ Y añade el siguiente contenido:
#!/bin/bash

while true; do
   echo "$(date '+%H:%M:%S') Bitcoin es libertad"
   sleep 2  # Pausa de 1 segundo antes de imprimir el siguiente mensaje
done

◼️ Usando tmux abre una terminal y ejecuta el script creado de la siguiente forma:
$./msj.sh > salida.txt &

◼️ Ejecuta el siguiente comando para ver como se va llenando el archivo salida.txt:
tail -f salida.txt

◼️ Abre otra terminal usando tmux y obtén el PID del proceso que ejecuta msj.sh y a continuación mata ese proceso