Kitabı oku: «Raspberry Pi® a fondo para desarrolladores», sayfa 5
Cómo comunicarse con el RPi
Después de conectar el RPi a la red, lo siguiente sería comunicarnos con él. Podemos conectar con el RPi usando, o bien una conexión serie USB a TTL, o bien una nueva conexión de red, como se ha descrito anteriormente. La conexión de red debería ser nuestro objetivo principal porque es el tipo de conexión que proporciona acceso pleno a Internet al RPi. La conexión serie sirve generalmente como conexión de respaldo para el caso de que surjan problemas con la de red. Por tanto, el lector puede obviar si lo desea la sección siguiente, pero la información estará ahí como referencia.
NOTA La cuenta de usuario predeterminada de la imagen Raspbian es: username pi (nombre de usuario pi) y password raspberry (contraseña raspberry).
Conexión serie con el cable USB a TTL de 3,3 V
Las conexiones serie resultan especialmente útiles cuando tenemos el RPi muy cerca de nuestro ordenador y conectado mediante un cable USB a TTL (como vimos en la figura 1-7(a) del capítulo 1). Es un método de comunicación de seguridad habitual para el caso de que fallen las comunicaciones a través de la red o los servicios en el RPi. También sirve para configurar la conectividad de red inalámbrica en un dispositivo RPi que carezca de toma para cable de red. Podemos conectar el cable al RPi, como se mostró en la figura 1-7(b) del capítulo 1.
Para conectarse al RPi a través de la conexión serie, necesitamos un programa de terminal. Existen varias aplicaciones de este tipo para Windows, por ejemplo RealTerm (tiny.cc/erpi205) o PuTTY (www.putty.org). La mayoría de las distribuciones Linux incluyen un programa de terminal. En Debian pulse Ctrl+Alt+T o Alt+F2 y escriba: gnome-terminal. Mac OS X incluye un emulador de terminal de forma predeterminada, donde puede escribir, por ejemplo, el comando screen /dev/cu.usbserial-XXX 115200). También puede instalar el programa Z-Term (véase dalverson.com/zterm/).
Para conectarse al RPi a través de la conexión serie USB a TTL, necesitamos la información siguiente:
❏Número de puerto: para averiguarlo en Windows, abra el gestor de dispositivos o equivalente según versiones y busque en la sección "Puertos". En la figura 2-3(a) podemos observar una ventana de ejemplo del gestor de dispositivos, donde el dispositivo aparece como puerto COM11. Esta información será diferente en cada ordenador
❏Velocidad de conexión: de forma predeterminada, introduciremos 115.200 baudios para conectar con el RPi.
❏Otra información que podría ser necesaria para otros programas de terminal: Data bits (bits de datos) = 8, Stop bits (bits de parada) = 1, Parity (paridad) = none y Flow control (control de flujo) = XON/XOFF.
Figura 2-3: (a) Identificación de dispositivo en el gestor de dispositivos de Windows.
(b) Una configuración de conexión serie con PuTTY. (c) Un adaptador USB a TTL de bajo coste.
Guarde la configuración con un nombre de sesión, por ejemplo "RPi USB-to-TTL", como se puede ver en la figura 2-3(b), de manera que esté disponible cada vez que desee utilizarla. Haga clic en "Abrir" y, luego, pulse Intro cuando aparezca la ventana. Esto es muy importante. Cuando se conecte a Raspbian, debería observar la salida siguiente:
Raspbian GNU/Linux 8 erpi ttyAMA0
erpi login: pi
Password: raspberry
Last login: Fri Dec 18 02:12:32 GMT 2015 from ...
Linux erpi 4.1.13-v7+ #826 SMP PREEMPT Fri Nov 13 20:19:03 GMT 2015 armv7l
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
pi@erpi:~$
El proceso de conexión nos permite conectar con el nombre de usuario "pi" y la contraseña "raspberry". Observe cómo, cuando reinicia la placa, también puede ver toda la salida por la consola durante el inicio del RPi. Esta es la conexión de respaldo definitiva, puesto que nos permite observar lo que sucede durante el proceso de inicio, como veremos en el capítulo 3.
NOTA Existen alternativas baratas al cable USB a TTL de 3,3 V, por ejemplo el dispositivo USB mostrado en la figura 2-3(c), que cuesta alrededor de un euro. Sin embargo, en general carecen de carcasa o proteción de seguridad alguna. En todo caso, antes de comprar un dispositivo de este tipo, asegúrese de que soporta niveles lógicos TTL de 3,3 V. El que aparece en la figura 2-3(c) incorpora un conmutador que permite intercambiar los niveles lógicos entre 3,3 y 5 V. Estos dispositivos se emplean en el capítulo 9 para ampliar el número de dispositivos UART disponibles en el RPi.
En un ordenador con Linux, podrá instalar el programa Screen y conectarse con el dispositivo USB a TTL con los comandos siguientes:
molloyd@debian:~$ sudo apt-get install screen
molloyd@debian:~$ screen /dev/cu.usbserial-XXX/ 115200
Conexión segura con SSH (Secure Shell)
El protocolo de red SSH (Secure Shell) se emplea para establecer conexiones cifradas seguras entre dispositivos en una red. Podemos utilizar un cliente de terminal SSH para conectar con un servidor SSH a través del puerto 22 del RPi, lo que nos permitirá hacer lo siguiente:
❏Conectar en remoto con el RPi y ejecutar comandos.
❏Transferir archivos desde y hacia el RPi usando el protocolo SFTP (SSH File Transfer Protocol, protocolo de transferencia de archivos SSH).
❏Redireccionar conexiones X11, lo que permite la computación en redes virtuales.
De forma predeterminada, las distribuciones Linux para RPi ejecutan un servidor SSH (sshd en Debian) vinculado al puerto 22. Contar con un servidor SSH disponible como medio predeterminado para iniciar sesión remota en el RPi tiene ciertas ventajas.
En particular, nos permite abrir el puerto 22 del RPi a Internet mediante la funcionalidad de redirección de puertos (port forwarding) de nuestro router. Por favor, asegúrese de modificar la contraseña predeterminada para la cuenta de usuario "pi" antes de hacerlo. Después podremos iniciar sesión en nuestro RPi de forma remota desde cualquier lugar del mundo, siempre que conozcamos su dirección IP. El servicio de DNS dinámico (Dynamic DNS, DDNS o DynDNS), permite a la los routers que lo ofrecen (la mayoría) registrar su dirección IP más reciente en un servicio en línea. Acto seguido, dicho servicio en línea hace corresponder un nombre de dominio de nuestra elección con la última dirección IP que nuestro proveedor de acceso nos haya asignado, es decir, los mapea. El servicio de DNS dinámico suele tener un coste anual, a cambio del que obtendremos una dirección con la forma dereksRPi.servicename.com.
Conexiones SSH (Secure Shell) mediante PuTTY
Anteriormente mencionamos PuTTY como un método para conectar con el RPi a través de una conexión serie. PuTTY es una pequeña aplicación, gratuita y de código abierto, emuladora de terminal, consola serie y cliente SSH, que podemos emplear para conectar con el RPi a través de una red local. PuTTY posee varias características útiles:
❏Admite conexiones serie y SSH.
❏Instala una aplicación llamada psftp que permite transferir archivos hacia y desde el RPi por la red desde nuestro ordenador.
❏Acepta el redireccionamiento SSH X11 (exigido en el capítulo 14).
La figura 2-4 muestra los ajustes de configuración de PuTTY. Seleccione SSH como tipo de conexión, introduzca la dirección IP de su RPi (o el nombre de Zeroconf), acepte el puerto 22 (predeterminado) y guarde la sesión con un nombre significativo. Haga clic en "Open" ("Abrir") e inicie sesión con su nombre de usuario y contraseña. Si observa una alerta de seguridad que le advierte de posibles "ataques de intermediario" (man-in-the-middle attacks), que pueden resultar preocupantes en redes inseguras, acepte la huella de clave (fingerprint) ofrecida y continúe. Los usuarios de Mac OS X pueden abrir la aplicación Terminal con una configuración similar (por ejemplo, ssh -XC pi@192.168.1.116 o ssh -XC pi@raspberrypi.local).
Figura 2-4: Ajustes de configuración SSH de PuTTY sobre una ventana de conexión de terminal SSH.
Más adelante en este mismo capítulo veremos los comandos básicos que se pueden enviar al RPi, pero antes es necesario examinar cómo podemos transferir archivos desde y hacia el RPi.
Chrome Apps: cliente Secure Shell
El navegador web Chrome de Google permite la instalación de Chrome Apps. Se trata de aplicaciones que operan igual que las instaladas en el propio ordenador (nativas), pero escritas en HTML5, JavaScript y CSS. Muchas de estas aplicaciones utilizan el cliente nativo Google Native Client (NaCl), que no es otra cosa que una tecnología de aislamiento de procesos, sandbox para abreviar, que permite ejecutar aplicaciones compiladas C/C++ directamente en el navegador, con independencia del sistema operativo (SO) subyacente. La ventaja de NaCl es que posibilita que las aplicaciones alcancen niveles de rendimiento casi iguales a las nativas del SO, puesto que pueden contener código fuente capaz de utilizar instrucciones de bajo nivel.
Existe una aplicación Chrome App capaz de emular un terminal SSH que resulta extremadamente útil. Para instalarla en Chrome, abra una nueva pestaña y haga clic en el icono "Apps". Si en su versión de Chrome no aparece el acceso a Chrome Web Store, escriba "chrome web store" en la barra de direcciones y pulse Intro. En el campo de búsqueda de dicha página, escriba "Secure Shell". Localice la App e instálela. Acabado el proceso, la App Secure Shell aparecerá junto con las demás aplicaciones para Chrome. Si no puede acceder a ellas por su versión o configuración de Chrome, escriba "chrome://apps" en la barra de direcciones y podrá acceder a sus iconos. Cuando inicie la App Secure Shell deberá configurar los ajustes de conexión como en la figura 2-4 y la aplicación se ejecutará en una pestaña como en la figura 2-5.
Figura 2-5: La App Secure Shell para Chrome.
Como transferir archivos mediante PuTTY/psftp sobre SSH
La instalación de PuTTY incluye también compatibilidad con el protocolo FTP (File Transfer Protocol) de transferencia de archivos. Este nos permite transferir archivos hacia y desde el RPi utilizando nuestra conexión de red. Puede iniciar la aplicación PuTTY Secure File Transfer Protocol escribiendo psftp en el intérprete de comandos de Windows. No olvide que para que esto funcione debe incluir el directorio del ejecutable putty.exe en la variable de entorno PATH de su sistema.
En el prompt psftp> , escriba open pi@raspberrypi.local (o la dirección IP) para conectar con el RPi. Nuestro ordenador se identifica ahora como máquina local, local machine, y el RPi, como máquina remota (remote machine). Cuando emita un comando, normalmente lo hará en la máquina remota. Después de conectar, nos encontraremos en la carpeta de usuario (o directorio home directory) de la cuenta que hayamos utilizado. Por lo tanto, bajo la distribución RPi Raspbian, si nos conectamos como "pi", estaremos en el directorio /home/pi/.
Para transferir un solo archivo c:\temp\test.txt desde el ordenador local hasta el RPi, seguiremos los pasos que se detallan a continuación:
psftp: no hostname specified; use "open host.name" to connect
psftp> open pi@erpi.local
Using username "pi".
pi@erpi.local's password: raspberry
Remote working directory is /home/pi
psftp> lcd c:\temp
New local directory is c:\temp
psftp> mkdir test
mkdir /home/pi/test: OK
psftp> cd test
Remote directory is now /home/pi/test
psftp> put test.txt
local:test.txt => remote:/home/pi/test/test.txt
psftp> dir test.*
Listing directory /home/pi/test
-rw-r--r-- 1 pi pi 8 Dec 18 16:45 test.txt
psftp>
Los comandos que contienen el prefijo l se dirigen a la máquina local, por ejemplo lcd (local change directory) para cambiar el directorio local o lpwd (local print working directory) para el directorio de impresión local. Para transferir un solo archivo desde la máquina local a la máquina remota, empleamos el comando put. Para realizar la operación inversa, traer un archivo de la máquina remota a la máquina local, usamos get. Para enviar o traer múltiples archivos están los comandos mput y mget. Si nos olvidamos de un comando, escribimos help para obtener ayuda.
Si utilizamos una máquina cliente con Linux, podemos emplear el comando sftp en lugar de psftp. Casi todo lo demás queda igual. La aplicación cliente sftp también está instalada en la distribución del RPi de manera predeterminada, así que podrá invertir el orden de las comunicaciones, es decir: podremos hacer que el RPi actúe como servidor y otra máquina como cliente.
Aquí mostramos algunos trucos y consejos útiles para el uso de los comandos psftp y sftp :
❏El comando mget -r * realiza una recuperación recursiva de todo un directorio. Esto resulta útil cuando queremos transferir una carpeta que contenga a su vez varias carpetas. También podemos utilizar la opción -r con los comandos get, put y mput.
❏El comando dir *.txt aplica un filtro para mostrar solo los archivos acabados en ".txt" del directorio actual.
❏El comando mv mueve un archivo o directorio de la máquina remota a una nueva ubicación en la propia máquina remota.
❏El comando reget reinicia una recuperación de archivos que se hubiera interrumpido. El archivo recuperado parcialmente debe continuar existiendo en la máquina local.
El comando psftp se puede enviar como una sola línea o como un script local desde el símbolo del sistema. Puede crear un archivo de prueba, test.scr, que contenga un conjunto de comandos psftp que necesite enviar. Ejecute después psftp desde el símbolo del sistema, pasando la contraseña con -pw y el archivo de script con -b (o -be para continuar aun con errores y -bc para mostrar los comandos a medida que se ejecutan), del siguiente modo:
c:\temp>more test.scr
lcd c:\temp\down
cd /tmp/down
mget *
quit
c:\temp>psftp pi@erpi.local -pw mypassword -b test.scr
Using username "pi".
Remote working directory is /home/pi ...
Control del Raspberry Pi
En este punto, deberíamos ser capaces de comunicarnos con el RPi mediante una aplicación cliente SSH. Esta sección analiza los comandos que podemos emitir para interaccionar con el RPi.
Comandos básicos de Linux
Cuando se conecte por primera vez con el RPi mediante SSH, se le pedirá que inicie sesión. Podrá hacerlo la primera vez con el usuario "pi" y la contraseña "raspberry":
login as: pi
pi@erpi.local's password: raspberry
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
pi@erpi:~$
Ya estamos conectados al RPi y tenemos la ventana de terminal en Linux lista para recibir los comandos. El símbolo del sistema, $ ,indica que hemos iniciado sesión como un usuario estándar. Por su parte, # indica que hemos iniciado la sesión en la cuenta de superusuario o root (véase el capítulo 3). Para un nuevo usuario de Linux, este paso puede resultar un desafío, puesto que es difícil hacerse con todo el arsenal de comandos a nuestra disposición. En esta sección intentaremos que el lector alcance un nivel de Linux suficiente para empezar con confianza. Se ha escrito como referencia y acompañada de ejemplos, de manera que pueda regresar a ella cuando necesite ayuda.
Primeros pasos
Lo primero que podríamos hacer nada más conectarnos es averiguar la versión de Linux que estamos ejecutando. Esta información resulta muy útil a la hora de publicar preguntas en foros de usuario.
pi@erpi ~ $ uname -a
Linux erpi 4.1.13-v7+ #826 SMP PREEMPT Nov 13 20:19:03 2015 armv7l GNU/Linux
Hemos utilizado Linux 4.1.13, compilado para la arquitectura ARMv7 en la fecha listada.
La versión del núcleo de Linux se describe por tres números, separados por puntos, de la forma: X.Y.Z. El número X cambia muy de tarde en tarde; la versión 2.0, por ejemplo, se publicó en 1996, y la 4.0, en abril de 2015. El número Y cambia un poco más a menudo, pero tampoco demasiado, cada dos años más o menos. Sin embargo, en el núcleo más reciente ha cambiado con bastante frecuencia: la versión 4.1 se publicó en junio de 2015. El número Z sí que cambia frecuentemente.
Después podemos utilizar el comando passwd para establecer una contraseña nueva para la cuenta de usuario "pi".
pi@erpi ~ $ passwd
Changing password for pi.
(current) UNIX password: raspberry
Enter new UNIX password: supersecretpasswordthatImayforget
Retype new UNIX password: supersecretpasswordthatImayforget
La tabla 2-3 lista otros comandos muy útiles.
Tabla 2-3: Esos primeros comandos de Linux tan útiles.
Comando | Descripción |
more /etc/issue | Informa sobre la distribución Linux que se está ejecutando. |
ps -p $$ | Informa del shell o intérprete de comandos que estamos ejecutando (por ejemplo, bash). |
whoami | Informa del usuario que ha iniciado sesión en el sistema. |
uptime | Devuelve el tiempo que el sistema lleva en ejecución. |
top | Lista todos los procesos y programas en ejecución. Pulse Control+C para cerrar la vista. |
Por último, podrá encontrar información concreta sobre su RPi usando la aplicación host- namectl . También sirve para consultar y realizar cambios en los ajustes del sistema, como la descripción del chasis o el nombre de host:
pi@erpi ~ $ sudo hostnamectl set-chassis server
pi@erpi ~ $ hostnamectl
Static hostname: erpi
Icon name: computer-server
Chassis: server
Machine ID: 3882d14b5e8d408bb132425829ac6413
Boot ID: ea403b96c8984e37820b7d1b0b3fbd6d
Operating System: Raspbian GNU/Linux 8 (jessie)
Kernel: Linux 4.1.18-v7+
Architecture: arm
Comandos básicos del sistema de archivos
Esta sección describe los comandos básicos que nos permiten movernos y manipular el sistema de archivos de Linux. Cuando utilizamos cuentas de usuario Raspbian/Debian y Ubuntu, a menudo debemos anteponer el modificador sudo (superuser do o substitute user do). Lo hacemos porque sudo es un programa que permite a un usuario ejecutar programas que requieran privilegios de seguridad de superusuario, o también de otras cuentas restringidas. Las cuentas de usuario se describen en el capítulo 3. La tabla 2-4 lista los comandos básicos del sistema de archivos.
Tabla 2-4: Comandos básicos del sistema de archivos.
Nombre | Comando | Opciones y más información | Ejemplos |
Listar archivos | ls | -a los muestra todos, incluidos los ocultos.-l muestra el formato largo.-R listado recursivo.-r listado inverso (reverse).-t ordena por la última modificación.-S ordena por tamaños.-h muestra el tamaño en formato legible. | ls -alh |
Directorio actual | pwd | Indica el directorio actual.-P muestra la ubicación física. | pwd -P |
Cambiar directorio | cd | Cambia el directorio.cd e Intro o cd ~/ nos lleva al directorio raíz del usuario.cd / nos lleva al directorio raíz del sistema.cd .. nos lleva a un nivel superior en el árbol de directorios. | cd /home/picd / |
Crear un directorio | mkdir | Crea un directorio. | mkdir test |
Borrar un archivo o directorio | rm | Borrar un archivo.-r borrado recursivo (se usa con directorios; sea precavido).-d borra directorios vacíos. | rm bad.txtrm -r test |
Borrar un archivo o directorio | cp | -r copia recursiva.-u copia solo si el origen es más reciente que el destino, o bien si no se encuentra el destino.-v (verbose) muestra la salida durante la copia. | cp a.txt b.txtcp -r test testa |
Borrar un archivo o directorio | mv | -i solicita confirmación antes de sobreescribir.No hay opción -r para directorios. Mover al mismo directorio cambia su nombre. | mv a.txt c.txtmv test testb |
Crear un archivo vacío | touch | Crea un archivo vacío o actualiza la fecha de modificación de un archivo existente. | touch d.txt |
Ver el contenido de un archivo | more | Muestra el contenido de un archivo. Usamos la barra espaciadora para pasar a la siguiente página. | more d.txt |
Obtener calendario | cal | Muestra un calendario basado en carac-teres. | cal 04 2016 |
Con esto cubrimos lo básico, pero hay mucho más. En el capítulo siguiente hablamos de propiedad y permisos de archivos, búsquedas, redirección de la entrada/salida o E/S (input/output o I/O), etc. El propósito de esta sección no es otro que ponernos en marcha. La tabla 2-5 describe unos cuantos atajos de teclado que nos facilitan mucho la vida con la mayoría de shells de Linux.
Tabla 2-5: Algunos atajos de teclado para Linux.
Atajo | Descripción |
Flecha arriba (repetir) | Con la primera pulsación reproduce el comando que acabamos de escribir; luego, va mostrando los anteriores. |
Tecla Tab | Autocompleta el nombre del archivo, del directorio o incluso del comando ejecutable. Por ejemplo, para cambiar al directorio /tmp de Linux, podemos escribir cd /t y, luego, pulsar Tab, que autocompleta el comando: cd /tmp/. Si aparecen demasiadas opciones, pulse Tab de nuevo y vea todas las opciones en forma de lista. |
Ctrl+A | Lleva el cursor al principio de la línea que estamos escribiendo. |
Ctrl+E | Lleva el cursor al final de la línea que estamos escribiendo. |
Ctrl+U | Elimina el texto desde el cursor hasta el principio de la línea. Ctrl+E y, luego, Ctrl+U borran toda la línea. |
Ctrl+L | Borra la pantalla. |
Ctrl+C | Cierra cualquier proceso en ejecución en el momento de pulsar. |
Ctrl+Z | Pasa el proceso actual a un segundo plano. Escribir bg después lo deja en ejecución en segundo plano, y con fg lo volvemos a traer al primer plano. |
Veamos un ejemplo que utiliza varios de los comandos de la tabla 2-4 para crear un directorio llamado test en el que creamos un archivo de texto vacío llamado hello.txt. Después copiamos todo el directorio test en el directorio /tmp/test2, que cuelga del directorio /tmp:
pi@erpi ~ $ cd /tmp
pi@erpi /tmp $ pwd
/tmp
pi@erpi /tmp $ mkdir test
pi@erpi /tmp $ cd test
pi@erpi /tmp/test $ touch hello.txt
pi@erpi /tmp/test $ ls -l hello.txt
-rw-r--r-- 1 pi pi 0 Dec 17 4:34 hello.txt
pi@erpi /tmp/test $ cd ..
pi@erpi /tmp $ cp -r test /tmp/test2
pi@erpi /tmp $ cd /tmp/test2
pi@erpi /tmp/test2 $ ls -l
total 0
-rw-r--r-- 1 pi pi 0 Dec 17 04:35 hello.txt
ADVERTENCIA Linux asume que sabemos muy bien lo que hacemos. Así, puede muy bien dejarnos hacer un borrado recursivo de todo nuestro directorio raíz si hemos iniciado sesión como root. ¡Piénselo dos veces siempre antes de escribir nada cuando haya iniciado sesión como root!
NOTA A veces es posible recuperar archivos que se hayan perdido por borrados accidentales usando el comando extundelete inmediatamente después del borrado.
Lea cuidadosamente la página del manual para dicho comando y, luego, use los pasos siguientes:
pi@erpi ~ $ sudo apt install extundelete
pi@erpi ~ $ mkdir ~/undelete
pi@erpi ~ $ cd ~/undelete/
pi@erpi ~/undelete $ sudo extundelete --restore-all --restore-directory
. /dev/mmcblk0p2
pi@erpi ~/undelete $ ls -l
drwxr-xr-x 6 root root 4096 Dec 17 04:39 RECOVERED_FILES
pi@erpi ~/undelete $ du -sh RECOVERED_FILES/
100M RECOVERED_FILES/
En este ejemplo se recuperan hasta 100 MB de archivos, que suelen ser archivos temporales borrados como resultado de la instalación de paquetes de software.
Variables de entorno
Las variables de entorno (environment variables) son valores con nombre que describen la configuración de nuestro entorno Linux, por ejemplo la ubicación de archivos ejecutables o el editor de texto predeterminado. Para hacernos una idea de las variables de entorno configuradas en el RPi, ejecute el comando env y verá una lista de dichas variables en nuestra cuenta de usuario. En este caso, env se invoca en la imagen Raspbian:
pi@erpi ~ $ env
TERM=xterm
SHELL=/bin/bash
SSH_CLIENT=fe80::50b4:eb95:2d00:ac3f%eth0 2599 22
USER=pi
MAIL=/var/mail/pi
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:...
PWD=/home/pi
HOME=/home/pi ...
Puede ver y modificar las variables de entorno de acuerdo con el ejemplo siguiente, que añade el directorio /home/pi a la variable de entorno PATH:
pi@erpi ~ $ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
pi@erpi ~ $ export PATH=$PATH:/home/pi
pi@erpi ~ $ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/pi
Este cambio se perderá después de reiniciar. Establecer las variables de entorno de manera definitiva requiere modificaciones en el archivo .profile, con los shells sh, ksh o bash, y en el archivo .login cuando usemos csh o tcsh. Para ello, necesitamos saber cómo realizar una edición básica de archivos en una ventana de terminal en Linux.
Edición básica de archivos
Contamos con una variedad de editores de texto, pero uno de los más fáciles de usar es también el más potente: el editor GNU nano editor. Iniciamos el editor escribiendo nano seguido del nombre de un archivo existente, o bien de uno nuevo; por ejemplo, nano hello.txt muestra la vista capturada en la figura 2-6 (una vez se ha introducido el texto). Escribir nano -c hello.txt muestra el número de línea actual, lo que puede resultar muy útil durante la corrección de errores (debug). Podemos movernos libremente por el archivo mediante las teclas de cursor y modificar o escribir nuevo texto a partir de la ubicación del cursor. Puede observar algunos de los atajos de teclado en la barra que ocupa la parte inferior de la ventana del editor, pero existen muchos más, algunos de los cuales mostramos en la tabla 2-6.
Figura 2-6: El GNU nano editor en acción durante la edición de un archivo de ejemplo,
dentro de una ventana de terminal PuTTY en Linux.
Tabla 2-6: Atajos de teclado para Nano. Referencia rápida.
Teclas | Comando | Teclas | Comando |
Ctrl+G | Ayuda | Ctrl+Y | Página anterior |
Ctrl+C | Encuentra el número de línea actual | Ctrl+_ o Ctrl+/ | Va a un número de línea |
Ctrl+X | Salir (¿guardar archivo?) | Alt+/ | Va al final de una línea |
Ctrl+L | Facilita el ajuste de líneas largas | Ctrl+6 | Comienza a marcar texto (usamos las teclas de cursor para el marcado) |
Ctrl+O | Guardar | Ctrl+K o Alt+6 | Corta el texto marcado |
Teclas de cursor | Mueven el cursor | Ctrl+U | Pega texto |
Ctrl+A | Va al inicio de una línea | Ctrl+R | Introduce el contenido de otro archivo (pide la ubicación de dicho archivo) |
Ctrl+E | Va al final de una línea | Ctrl+W | Busca una cadena de texto |
Ctrl+Barra espaciadora | Palabra siguiente | Alt+W | Encuentra el siguiente |
Alt+Barra espaciadora | Palabra anterior | Ctrl+D | Borra el carácter del cursor |
Ctrl+V | Página siguiente | Ctrl+K | Borra una línea entera |
NOTA Ctrl+K parece eliminar toda una línea, pero en realidad la envia a un buffer desde el que podemos pegarla con el atajo Ctrl+U. Es una forma ágil de repetir múltiples Asimismo, los usuarios de Mac podrían tener que establecer una metatecla en Terminal para obtener la funcionalidad de la tecla Alt, que no tienen los Mac. Seleccione Terminal ➪ Preferencias ➪ Ajustes ➪ Teclado; luego, seleccione "Usar tecla Opción como metatecla".
¿Qué hora es?
Una pregunta tan sencilla como "¿qué hora es?" causa más problemas de los que uno puede imaginar. Por ejemplo, escribir date después del símbolo del sistema puede mostrar lo siguiente:
pi@erpi ~ $ date
Thu 17 Dec 16:26:59 UTC 2015
Que resulta ser correcto esta vez porque la placa está conectada a una red. Si fuera erróneo, podríamos preguntarnos por qué los fabricantes no han puesto en hora el reloj de la placa. La respuesta es que no pueden. A diferencia de un ordenador personal, el RPi carece de batería que asegure que los ajustes de la BIOS se conservan; de hecho, ni tiene BIOS. Este tema se examina con detalle en el capítulo siguiente, mas por el momento usaremos el protocolo NTP (Network Time Protocol, protocolo de hora de red) para establecer la hora. NTP es un protocolo de red que permite sincronizar relojes entre ordenadores. Si nuestro RPi da fecha y hora correctamente, es porque las obtiene desde la red utilizando un servicio NTP que se ejecuta en la placa:
pi@erpi ~ $ systemctl status ntp
• ntp.service - LSB: Start NTP daemon
Loaded: loaded (/etc/init.d/ntp)
Active: active (running) since Sat 2015-12-19 07:18:04 GMT; 22h ago
Process: 499 ExecStart=/etc/init.d/ntp start (code=exited, status=0/SUCCESS)
CGroup: /system.slice/ntp.service
└─544 /usr/sbin/ntpd -p /var/run/ntpd.pid -g -u 107:112
El servicio NTP está configurado mediante el archivo /etc/ntp.conf, y las líneas que empiezan con la palabra server identifican los servidores con los que se está comunicando nuestro RPi para obtener la fecha y la hora actuales (de ahí el carácter ^ en la llamada a grep):
pi@erpi ~ $ more /etc/ntp.conf | grep ^server
server 0.debian.pool.ntp.org iburst
server 1.debian.pool.ntp.org iburst
server 2.debian.pool.ntp.org iburst
server 3.debian.pool.ntp.org iburst
Para ser un buen ciudadano NTP, hay que ajustar estas entradas para que hagan referencia al grupo de servidores NTP más próximo. Para ello, diríjase a la web www.pool.ntp.org (el servidor más próximo al autor es ie.pool.ntp.org, para Irlanda) y actualice las entradas según corresponda. Si desea comprobar primero los ajustes, puede instalar y ejecutar el comando ntpdate:
pi@erpi ~ $ sudo apt install ntpdate
pi@erpi ~ $ sudo ntpdate -b -s -u ie.pool.ntp.org
pi@erpi ~ $ date
Sun 20 Dec 16:02:39 GMT 2015
Después de ajustar fecha y hora, podemos establecer nuestra zona horaria. Utilice el comando siguiente, que proporciona una interfaz de usuario de texto para seleccionar nuestra ubicación. El RPi, en este caso, está configurado para Irlanda con el IST (Irish Standard Time, hora estándar de Irlanda):
pi@erpi ~ $ sudo dpkg-reconfigure tzdata
Current default time zone: 'Europe/Dublin'
Local time is now: Sun Dec 20 16:37:48 GMT 2015.
Universal Time is now: Sun Dec 20 16:37:48 UTC 2015.
NOTA Si su RPi no está conectado a Internet, puede configurar fecha y hora manualmente con la herramienta timedatectl:
pi@erpi ~ $ sudo timedatectl set-time '2017-1-2 12:13:14'
pi@erpi ~ $ date
Mon 2 Jan 12:13:16 GMT 2017
Desgraciadamente, tanto la fecha como la hora se perderán cuando reinicie el RPi. En el capítulo 8, se describe cómo conectar al RPi un reloj de tiempo real (RTC, Real Time Clock) con batería para resolver el problema.