Raspberry Pi OS es el sistema operativo oficial para Raspberry Pi basado en Debian.
Usar Linux en Raspberry Pi: https://www.raspberrypi.com/documentation/computers/using_linux.html
El Kernel de Linux: https://www.raspberrypi.com/documentation/computers/linux_kernel.html
Qué es Linux
GNU/Linux es un conjunto de sistemas operativos libres multiplataforma, multiusuario y multitarea basados en Unix. El sistema es la combinación de varios proyectos, entre los cuales destacan GNU, encabezado por Richard Stallman y la Free Software Foundation junto con el núcleo o kernel «Linux», programado por Linus Torvalds.
Linux es un sistema operativo que puede incluir desde pequeños dispositivos embebidos como open-wrt hasta grandes clusters de servidores.
Introducción a Linux: http://www.tldp.org/LDP/intro-linux/html/index.html
Fundamentos de Linux: https://www.raspberrypi.com/documentation/computers/using_linux.html
Distribuciones Linux: https://es.wikipedia.org/wiki/Distribuci%C3%B3n_Linux
Raspberry Pi OS
Raspberry Pi OS es una distribución del sistema operativo GNU/Linux basado en Debian, y por lo tanto libre para la SBC Raspberry Pi, orientado a la enseñanza de informática. El lanzamiento inicial fue en junio de 2012. Desde 2015, la Raspberry Pi Foundation lo ha proporcionado de forma oficial como el sistema operativo primario para la familia de placas SBC de Raspberry Pi. Hay varias versiones de Raspbian, siendo la actual Raspbian Bullseye.
Raspberry Pi OS: https://www.raspberrypi.com/documentation/computers/os.html
Configuración: https://www.raspberrypi.com/documentation/computers/configuration.html
Acceso Remoto: https://www.raspberrypi.com/documentation/computers/remote-access.html
Fundamentos de Linux: https://www.raspberrypi.com/documentation/computers/using_linux.html
Terminal. CLI (Command Line Interface)
Lo primero es familiarizarse con la línea de comandos (también conocido como «terminal»).
Para acceder podemos usar el emulador de terminal que hay en el escritorio de Raspberry Pi OS o usar un cliente para conectarnos por SSH como PuTTY.
Herramienta interesante alternativa a Putty: https://mremoteng.org/download
Probar lo siguiente en la línea de comandos o terminal:
- Navegar por directorios con comandos como ls, cd y pwd
- Crea, elimina y cambia el nombre de los directorios con los comandos mkdir, rm , mv y cp
- Crea un archivo de texto con un editor de línea de comandos como Vi, Vim, Emacs o Nano.
- Prueba otros comandos útiles como: chmod , chown , w , cat , more , less , tail , free , df , ps , uname y kill
- Para saber las opciones de los comandos usar <comando> –help o man <comando>
Absolutamente Básico: http://www.tldp.org/LDP/intro-linux/html/sect_02_02.html
Ayuda: http://www.tldp.org/LDP/intro-linux/html/sect_02_03.html
La mejor manera de obtener ayuda con un comando es leer su «página de uso» (abreviatura de manual); escribe man <comando> en la línea de comando para acceder a la descripción detallada del comando.
La línea de comando https://www.luisllamas.es/consola-de-comandos-raspberry-pi/
Práctica: ejecutar los comandos y crear un nuevo fichero info.txt que contenga un texto corto y leerlo.
Comandos Útiles
Es importante conocer y practicar con los comandos para trabajar con Raspberry Pi.
Comandos básicos: https://www.raspberrypi.com/documentation/computers/using_linux.html#other-useful-commands
Comandos útiles:
- apt-get update: Actualiza tu versión de Raspbian.
- apt-get upgrade: Actualiza todos los paquetes que tienes instalados en el sistema.
- rm: borra fichero
- cat: visualiza un fichero de texto
- clear: limpia la ventana del terminal.
- date: Muestra la fecha actual.
- find / -name prueba.txt: Busca en todo el sistema el archivo prueba.txt y genera una lista de todos los directorios que contienen el archivo.
- nano prueba.txt: Abre el archivo prueba.txt en “Nano”, el editor de texto de Linux.
- poweroff: Apaga el sistema de forma inmediata.
- raspi-config: Abre el menú de configuración.
- reboot: Reinicia el sistema de forma inmediata.
- shutdown -h now: Apaga el sistema de forma inmediata.
- shutdown -h 18:34: Apaga el sistema a las 18:34.
- startx: Abre el interfaz gráfico de usuario.
- ps: mostrar procesos
- pstree: mostrar árbol de procesos del sistema
- kill -9 PID: matar proceso por PID obtenido con ps
- top o htop: mostrar tareas y recurso
- free -h: ver consumo de memoria
- df -h: espacio libre en disco
- tail /var/log/messages: mostrar últimos eventos del sistema
Usar apt: https://www.luisllamas.es/raspberry-pi-instalar-actualizar-programas-apt/
Apagado correcto de Raspberry Pi: https://www.luisllamas.es/como-apagar-o-reiniciar-correctamente-raspberry-pi/
Práctica: descargar el fichero https://raw.githubusercontent.com/aprendiendonodered/DEMO-WEBAPP-DASHBOARD/master/package.json y hacer varias manipulaciones.
- ir al directorio /home/pi/documentos
- wget https://raw.githubusercontent.com/aprendiendonodered/DEMO-WEBAPP-DASHBOARD/master/package.json
- ver el contenido de fichero con cat
- editar en nano
- cambiar nombre
- borrar el fichero
Buena web con comandos de todo tipo: https://ss64.com/
Buen listado de comandos útiles de Linux: https://www.luisllamas.es/listado-comandos-linux-utiles/
Editores de Texto
Editores de texto en terminal:
- nano
- vi
- emacs
Editores de texto:
- https://www.raspberrypi.com/documentation/computers/using_linux.html#text-editors
- http://www.tldp.org/LDP/intro-linux/html/chap_06.html
Manual de uso de nano: https://www.luisllamas.es/raspberry-pi-nano/
Usuarios y Grupos
El sistema operativo Linux es un sistema operativo multiusuario que permite que varios usuarios inicien sesión y usen la computadora. Para proteger la computadora (y la privacidad de otros usuarios), las capacidades de los usuarios están restringidas.
Hay un usuario especial en Linux conocido como superusuario, al que generalmente se le asigna el nombre de usuario root. El superusuario tiene acceso ilimitado a la computadora y puede hacer casi cualquier cosa. No es aconsejable trabajar con el usuario root por razones de seguridad.
Linux Users: https://www.raspberrypi.com/documentation/computers/using_linux.html#linux-users
Root y sudo: https://www.raspberrypi.com/documentation/computers/using_linux.html#root-and-sudo
Normalmente no iniciará sesión como root, pero puede usar el comando sudo para proporcionar acceso como superusuario. Si inicia sesión en su Raspberry Pi como usuario pi, entonces está iniciando sesión como un usuario normal. Puede ejecutar comandos como usuario raíz usando el comando sudo antes del programa que desea ejecutar.
Sudo: https://www.luisllamas.es/raspberry-pi-sudo/
El usuario pi predeterminado en el sistema operativo Raspberry Pi es miembro del grupo sudo. Esto brinda la capacidad de ejecutar comandos como root cuando están precedidos por sudo, y cambiar al usuario root con sudo su.
Usuarios y contraseñas: https://www.luisllamas.es/como-gestionar-usuarios-y-contrasenas-en-raspberry-pi/
Grupos de usuarios: https://www.luisllamas.es/como-gestionar-grupos-de-usuarios-en-raspberry-pi/
Práctica: crear un usuario con vuestro nombre y añadir al grupo sudo
- sudo useradd -c «Nombre Usuario» -g sudo -d /home/usuario -s /bin/bash nombreUsuario
- sudo passwd nombreUsuario
- Entrar como usuario creado: su nombreUsuario
- whoami
- who
- lastlog
Sistema de Ficheros y Directorios
Linux File System: https://www.raspberrypi.com/documentation/computers/using_linux.html#the-linux-file-system
Estándar sistema de ficheros:
- https://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard
- Arbol de directorios: https://www.debian.org/releases/etch/amd64/apcs02.html
- https://www.luisllamas.es/organizacion-sistema-de-archivos-en-linux/
Home en Raspberry Pi: https://www.raspberrypi.com/documentation/computers/using_linux.html#home
Comandos para ficheros y directorios:
- cat prueba.txt: Muestra el contenido del archivo prueba.txt.
- cd /abc/xyz: Cambia el directorio actual al directorio /abc/xyz.
- cp XXX: Copia el archivo o directorio XXX y lo pega en una ubicación especificada. Un ejemplo de esta orden sería: cp fichero.txt /home/pi/fichero.txt en el directorio actual y lo pega en el directorio /home/pi/. Si el archivo no está en el directorio actual debes poner la dirección donde se encuentra.
- ls -l: Muestra una lista con los archivos presentes en el directorio actual además de otros datos interesantes como el tamaño del archivo, la fecha de modificación y los permisos.
- mkdir carpeta_prueba: Crea una nueva carpeta carpeta_prueba dentro de la carpeta actual.
- mv XXX: Mueve el archivo o carpeta llamado XXX a una localización específica. Un ejemplo de esta orden sería: mv fichero.txt /home/pi que movería fichero.txt presente en la actual carpeta a la dirección /home/pi. Si el fichero que queremos mover no se encuentra en la carpeta donde nos encontramos tenemos que añadir la dirección completa del mismo. Este comando también puede ser utilizado para renombrar archivos o carpetas, lo único que debemos hacer es moverlos en el mismo directorio pero con distinto nombre, por ejemplo: mv fichero.txt prueba.txt renombraría el fichero fichero.txt como prueba.txt.
- rm prueba.txt: Borra el fichero prueba.txt
- rmdir carpeta_prueba: Borra la carpeta carpeta_prueba. Esta acción solo puede efectuarse si la carpeta está vacía.
- scp user@10.0.0.32:/some/path/file.txt: Copia un archivo a través de SSH. Se puede utilizar para descargar un archivo de un ordenador remoto a nuestra Raspberry Pi. Usuario@10.0.0.32 es el nombre de usuario y la dirección es la IP local del ordenador remoto y /ruta/path/archivo.txt es la ruta y el nombre de archivo del archivo en el ordenador remoto.
- touch: Crea un fichero nuevo vacío en el directorio actual.
WinSCP: https://www.luisllamas.es/winscp-transfiere-archivos-entre-windows-y-rasperry-pi/
Más información: http://www.tldp.org/LDP/intro-linux/html/chap_03.html
Permisos de Ficheros
En GNU/Linux, los permisos o derechos que los usuarios pueden tener sobre determinados archivos contenidos en él se establecen en tres niveles claramente diferenciados. Estos tres niveles son los siguientes:
- Permisos del propietario.
- Permisos del grupo.
- Permisos del resto de usuarios (o también llamados “los otros”).
El comando chmod («change mode») permite modificar la máscara para que se puedan realizar más o menos operaciones sobre archivos o directorios, dicho de otra forma, con chmod puedes quitar o eliminar derechos a cada tipo de usuarios. Si no se especifica el tipo de usuario al que queremos quitar, poner o asignar privilegios, lo que sucederá al realizar la operación es afectar a todos los usuarios simultáneamente.
Dar permiso de ejecución al dueño: chmod u+x script.sh
Quitar permiso de ejecución a todos los usuarios: chmod -x script.sh
Representación octal de permisos. Uso: chmod 700 archivo/directorio
Para cambiar el usuario propietario de un fichero o carpeta usamos la orden chown (change owner). Uso: chown usuario:grupo archivo
Seguridad de los ficheros: http://www.tldp.org/LDP/intro-linux/html/sect_03_04.html
Más información:
- https://www.luisllamas.es/permisos-de-ficheros-y-carpetas-en-raspberry-pi/
- https://blog.desdelinux.net/permisos-y-derechos-en-linux/
Configuración Redes en Linux
- ifconfig: Sirve para comprobar el estado de la conexión inalámbrica que estamos utilizando, por ejemplo para ver si wlan0 tiene asignada o no una dirección IP.
- iwconfig: Para comprobar a qué red estamos conectados de forma inalámbrica.
- iwlist wlan0 scan: Muestra una lista con todas las redes inalámbricas disponibles.
- iwlist wlan0 scan | grep ESSID: Si a la orden anterior añadimos | grep junto con el nombre de un campo, el sistema nos mostrará por pantalla tan sólo el campo que necesitamos. Utilizando la orden de ejemplo tan sólo se listará el campo ESSID.
- nmap: Escanea tu red y lista los dispositivos conectados, el número de puerto, el protocolo, el sistema operativo, las direcciones MAC…
- ping: Prueba la conectividad entre dos dispositivos conectados a una misma red. Por ejemplo, ping 10.0.0.32 enviará un paquete al dispositivo con IP 10.0.0.32 y esperará una respuesta. También funciona con las direcciones de sitios web lo que nos puede ayudar a saber si tenemos conexión a la red o no utilizando, por ejemplo, ping http://www.google.es
- wget http://www.miweb.com/prueba.txt: Descarga el archivo prueba.txt desde la página web http://www.miweb.com y lo guarda en el directorio actual.
Networking: http://www.tldp.org/LDP/intro-linux/html/chap_10.html
Comandos Sistema
- cat /proc/meminfo: Muestra información sobre nuestro sistema de memoria.
- cat /proc/partitions: Muestra el tamaño y el número de particiones de la tarjeta SD o del disco duro.
- cat /proc/version: Nos muestra la versión de la Raspberry Pi que estamos utilizando.
- df -h: Muestra el espacio disponible en el disco.
- df /: Muestra cuánto espacio libre en disco hay disponible.
- dpkg –get-selections | grep XXX: Muestra todos los paquetes instalados relacionados con XXX.
- dpkg –get-selections: Da información sobre todos los paquetes instalados.
- free: Muestra la cantidad de memoria libre de la que dispone el sistema.
- hostname -I: Muestra la dirección IP de nuestra Raspberry Pi.
- top: Muestra los recursos del sistema
- lsusb: Nos ofrece información sobre todos los dispositivos USB conectados a nuestra Raspberry Pi.
- UP key: Al pulsar la tecla UP se introduce el último comando ingresado en el símbolo del sistema. Esta es una manera rápida de corregir los comandos que se hicieron en error.
- vcgencmd measure_temp: Muestra la temperatura de la CPU.
- vcgencmd get_mem arm && vcgencmd get_mem gpu: Muestra la memoria dividida entre la CPU y la GPU.
Más información sobre vcgencmd: https://www.raspberrypi.com/documentation/computers/os.html#vcgencmd
Systemd. Para que un comando o programa se ejecute cuando se inicia Raspberry Pi, puede agregarlo como un servicio. Una vez hecho esto, puede iniciar/detener habilitar/deshabilitar desde el indicador de Linux. https://www.raspberrypi.com/documentation/computers/using_linux.html#the-systemd-daemon
Todo sobre procesos: http://www.tldp.org/LDP/intro-linux/html/chap_04.html
Más información:
- https://www.hwlibre.com/estos-los-comandos-mas-comunes-utilizados-una-raspberry-pi/
- https://www.programoergosum.com/cursos-online/raspberry-pi/243-terminal-de-linux-en-raspberry-pi/comandos-del-sistema
- https://www.luisllamas.es/tutoriales-de-raspberry-pi-linux/
Kernel
Kernel Raspberry Pi OS: https://www.raspberrypi.com/documentation/computers/linux_kernel.html
Kernel es un software que constituye la parte más importante del sistema operativo. Es el principal responsable de facilitar a los distintos programas acceso seguro al hardware de la computadora o en forma básica, es el encargado de gestionar recursos, a través de servicios de llamada al sistema.
Las principales funciones del Kernel son las siguientes:
- Administra la memoria RAM, para que todos los programas y procesos en ejecución puedan funcionar.
- Administra el tiempo del procesador, que se utiliza al ejecutar procesos.
- Administra el acceso y uso de los diferentes periféricos conectados a la computadora.
Kernel Raspberry Pi: https://www.raspberrypi.com/documentation/computers/linux_kernel.html
Bash Básico
Una Shell de Unix o también shell, es el término usado en informática para referirse a un intérprete de comandos, el cual consiste en la interfaz de usuario tradicional de los sistemas operativos basados en Unix y similares, como GNU/Linux.
GNU Bash o simplemente Bash (Bourne-again shell) es un lenguaje de comandos y shell de Unix escrito por Brian Fox para el Proyecto GNU. GNU Bash es el CLI implementado de forma mayoritaria en las distribuciones de Linux. Ejemplos de distribuciones que emplean Bash como CLI por defecto son Debian, openSUSE, Ubuntu, Fedora, Slackware, Mandriva.
Bash es el CLI incluido por defecto en Raspberry Pi.
Lanzado por primera vez en 1989, se ha utilizado ampliamente como el shell de inicio de sesión predeterminado para la mayoría de las distribuciones de Linux y MacOS Mojave de Apple y versiones anteriores.
Bash es un procesador de comandos que generalmente se ejecuta en una ventana de texto donde el usuario escribe comandos que causan acciones. Bash también puede leer y ejecutar comandos desde un archivo, llamado script de shell.
Autocompletado con Tabulación
Uno de los grandes «trucos» a la hora de emplear Bash y que nos ahorrará una enorme cantidad de tiempo es la función de autocompletado con la tecla tabulación.
Si en cualquier momento mientras escribimos un comando, un nombre de archivo, o algunos argumentos, pulsamos la tecla tabulación Bash sugiere la opción que empieza por lo que hemos escrito. En caso de haber más de una ocurrencia, se recorren cíclicamente las opciones disponibles.
Si existen muchas ocurrencias, al pulsar tabulación no aparecerá nada. Al pulsarla una segunda vez nos mostrará un listado con los comandos disponibles. Podemos añadir algunas letras más y pulsar tabulación para terminar el comando.
bashrc file: https://www.raspberrypi.com/documentation/computers/using_linux.html#the-bashrc-file
Ejemplo de bashrc: http://raspberrypimaker.com/my-bashrc-file-and-what-it-does/
Historial de Comandos
Otra función que nos ahorrará mucho tiempo y que es una de las mejoras que introdujo Bash respecto a su antecesor SH, es el histórico de comandos.
En cualquier momento podemos recuperar un comando escrito con anterioridad pulsando la tecla «arriba» del teclado de flechas. Pulsar sucesivamente nos irá trayendo el comando anterior, hasta el inicio de la sesión del terminal. Si nos hemos pasado, podemos pulsar la tecla «abajo» para pasar al comando posterior.
Si ejecutamos el comando history aparecerán los últimos comandos ejecutados en terminal
Más Información:
- https://es.wikipedia.org/wiki/Bash
- https://es.wikipedia.org/wiki/Shell_de_Unix
- https://wiki.debian.org/Shell
- https://www.luisllamas.es/consola-de-comandos-raspberry-pi/
- https://learn.pimoroni.com/tutorial/bash/getting-started-with-bash
Scripting:
- https://www.raspberrypi.org/documentation/linux/usage/scripting.md
- https://www.raspberrypi.org/documentation/linux/usage/bashrc.md
Hello Word Bash: https://www.circuitbasics.com/how-to-write-and-run-a-shell-script-on-the-raspberry-pi/
Shell scripts utilizados: https://elpuig.xeill.net/Members/rborrell/articles/los-archivos-bashrc-bash_profile-etc-bashrc-etc-profile-los-archivos-bashrc-bash_profile-etc-bashrc-etc-profile-cual-utilizar
Shell script: https://www.raspberrypi.com/documentation/computers/using_linux.html#shell-scripts
Práctica
Hello word de bash http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-5.html
Crear alias:
- https://askubuntu.com/questions/17536/how-do-i-create-a-permanent-bash-alias
- https://linuxize.com/post/how-to-create-bash-aliases/
- https://opensource.com/article/19/7/bash-aliases
- https://www.cyberciti.biz/tips/bash-aliases-mac-centos-linux-unix.html
Redirecciones: http://www.tldp.org/LDP/intro-linux/html/sect_05_01.html
Filtros: http://www.tldp.org/LDP/intro-linux/html/sect_05_03.html
Enviroment y Bash: http://www.tldp.org/LDP/intro-linux/html/sect_07_02.html
Más información: https://www.luisllamas.es/bash-cli-raspberry-pi/
Programar Bash:
Automatizar Procesos
Cron es una herramienta para configurar tareas programadas en sistemas Unix. Se utiliza para programar comandos o scripts para que se ejecuten periódicamente ya intervalos fijos. Las tareas van desde la copia de seguridad de las carpetas de inicio del usuario todos los días a la medianoche hasta el registro de información de la CPU cada hora.
Automatizar Raspberry Pi con cron:
- https://www.raspberrypi.com/documentation/computers/using_linux.html#scheduling-tasks-with-cron
- https://www.raspberrypi.org/documentation/linux/usage/cron.md
- http://www.jormc.es/2014/06/30/raspi-automatizacion-con-cron-crontab/
Log errores cron: https://raspberrypi.stackexchange.com/questions/3741/where-do-cron-error-message-go
OJO editar crontab con crontab -e y no editando /etc/crontab!!!!
Troubleshooting crontab: https://garyhall.org.uk/troubleshooting-cron-raspberry-pi.html
Hay varias formas de ejecutar un programa al inicio en la Raspberry Pi.
- rc.local es un archivo administrado por el sistema ubicado en /etc/rc.local que se ejecuta después de que se hayan iniciado todos los servicios del sistema, es decir, después de la transición a un nivel de ejecución multiusuario. Es la forma más sencilla de hacer que los programas se ejecuten al inicio en sistemas Linux. Solo puede usar este método para programas sin elementos GUI (interfaz gráfica de usuario), ya que rc.local se ejecuta antes de que arranque el sistema de ventanas Raspberry Pi.
- Usando cron, añadiendo el comando @reboot /ruta/a/script
- Mediante un servicio de systemd
Monitorizar Linux
Monitorizar Linux:
- http://www.ivankristianto.com/beginners-guide-monitoring-linux-system-command/
- Herramientas de monitorización: http://www.thegeekstuff.com/2011/07/iostat-vmstat-mpstat-examples
Linux Cheat Sheets
Guia de uso de linux (buenas cheatsheet):
Cheat sheet completa: https://www.linuxtrainingacademy.com/linux-commands-cheat-sheet/
Cheat Sheets:
- http://www.cheat-sheets.org/saved-copy/python-cheat-sheet-v1.pdf
- http://www.microcasts.tv/img/port/Unleash_The_Pi_Cheat_Sheet_v1.pdf
- Otras cheat sheets: https://itsfoss.com/linux-commands-cheat-sheets/
Instalar Webmin
Webmin es una herramienta de configuración de sistemas accesible vía web para sistemas Unix, como GNU/Linux y OpenSolaris. Con él se pueden configurar aspectos internos de muchos sistemas operativos, como usuarios, cuotas de espacio, servicios, archivos de configuración, apagado del equipo, etcétera, así como modificar y controlar muchas aplicaciones libres, como el servidor web Apache, PHP, MySQL, DNS, Samba, DHCP, entre otros.
Además de webmin disponemos de virtualmin que es más tipo plesk:
Instalación:
- wget http://prdownloads.sourceforge.net/webadmin/webmin_1.941_all.deb o desdecargar desde http://www.webmin.com/download.html el paquete de debian
- sudo dpkg –install webmin_1.941_all.deb o doble click en el fichero
Es posible que haya que instalar algunas dependencias con:
- sudo apt-get install perl libnet-ssleay-perl openssl libauthen-pam-perl libpam-runtime libio-pty-perl apt-show-versions python
Para comprobar que se ha instalado acceder desde un navegador a https://ip_address:10000
Más información:
- Instalar en debian: http://www.webmin.com/deb.html
- https://www.instructables.com/id/Adding-Webmin-to-manage-a-Raspberry-Pi/ y muy intersante para usar con SSH tunneling
- https://www.deacosta.com/instala-webmin-y-administra-tu-raspberry-pi-desde-una-consola-web/
- Otro https://www.raspberrypizaragoza.es/webmin/
- Usando repositorio apt-get: http://www.ubuntufacil.com/2015/03/script-para-instalar-webmin-en-ubuntu-raspberry-pi-debian/
Otra alternativa a webmin: https://cockpit-project.org/
Para Saber más Linux
Ampliar información de Linux:
- Curso de 6 horas en vídeo: https://www.freecodecamp.org/news/linux-server-course-system-configuration-and-operation/amp/
- Curso básico: https://www.udemy.com/course/gnulinux-desde-cero/
Certificaciones Linux: https://www.genbeta.com/linux/que-certificaciones-lpic-como-podemos-obtenerlas-para-demostrar-nuestro-conocimiento-linux
Libros:
- LPIC-1
- LPIC-2: http://lpic2.unix.nl/
- Debian Handbook: https://debian-handbook.info/browse/stable/
Pingback: Conceptos Básicos de Linux -
Pingback: Diario Curso: Raspberry Pi y Node-RED. 2ª ed | Aprendiendo Arduino