En este tutorial, veremos algunos de los comandos Linux esenciales para utilizar una máquina Linux y una Raspberry Pi en particular.
Información sobre la máquina
uname permet d’obtenir les information système (nom du noyau, version kernel, OS, etc.)
pi@raspberrypi:~ $ uname Linux pi@raspberrypi:~ $ uname -a Linux raspberrypi 4.19.97+ #1294 Thu Jan 30 13:10:54 GMT 2020 armv6l GNU/Linux pi@raspberrypi:~ $ uname --all Linux raspberrypi 4.19.97+ #1294 Thu Jan 30 13:10:54 GMT 2020 armv6l GNU/Linux pi@raspberrypi:~ $
lshw permet d’obtenir la configuration matériel. Vous pouvez utiliser l’option -short pour afficher le résumé. (ne fonctionne pas avec Raspberry Pi)
Sur Raspberry Pi, vous pouvez utiliser la commande cat /proc/cpuinfo
pi@raspberrypi:~ $ cat /proc/cpuinfo processor : 0 model name : ARMv7 Processor rev 4 (v7l) BogoMIPS : 38.40 Features : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32 CPU implementer : 0x41 CPU architecture: 7 CPU variant : 0x0 CPU part : 0xd03 CPU revision : 4
df -h permite conocer el espacio libre en la tarjeta de memoria (muy útil con raspberry pi)
pi@raspberrypi:~ $ df -h Sys. de fichiers Taille Utilisé Dispo Uti% Monté sur /dev/root 3,3G 3,1G 13M 100% / devtmpfs 181M 0 181M 0% /dev tmpfs 185M 0 185M 0% /dev/shm tmpfs 185M 5,2M 180M 3% /run tmpfs 5,0M 4,0K 5,0M 1% /run/lock tmpfs 185M 0 185M 0% /sys/fs/cgroup /dev/mmcblk0p6 253M 53M 200M 21% /boot tmpfs 37M 0 37M 0% /run/user/1000
Comando de Super Usuario de Linux
sudo est la commande qui permet de passer en super utilisateur ou administrateur. Généralement, utiliser avec une autre commande et le mot de passe de la session.
Se utiliza cuando el comando devuelve el error «13: Permiso denegado».
Comandos de instalación de Linux
El comando apt-get se utiliza para instalar software y paquetes en la máquina.
En particular, la descarga e instalación de actualizaciones del sistema operativo
sudo apt-get update
sudo apt-get upgrade
apt-get también se utiliza para instalar o eliminar paquetes
sudo apt-get install
sudo apt-get remove
sudo apt-get purge -y
Por último, dos comandos para liberar espacio en la memoria
sudo apt-get autoremovesudo apt-get clean
La commande wget permet le téléchargement de fichier distant et peut aussi permettre de télécharger des packages à installer
Ejemplo: para descargar el software de Arduino
cd /tmp
wget https://downloads.arduino.cc/arduino-1.8.9-linux64.tar.xz
mkdir -p ~/opt/
tar -xf arduino-1.8.9-linux64.tar.xz -C ~/opt/
cd $HOME/opt/arduino-1.8.9
./install.sh
Comandos de Linux para navegar por una carpeta
El comando pwd le permite saber en qué directorio se encuentra
pi@raspberrypi:~ $ pwd /home/pi
ls lista todas las carpetas y archivos del directorio actual
pi@raspberrypi:~ $ ls 2020-05-27-144933_1824x984_scrot.png Desktop MagPi Public 2020-05-27-144941_1824x984_scrot.png Documents Modèles Téléchargements Applications Images Musique Vidéos
cd le permite desplazarse a una carpeta :
pi@raspberrypi:~ $ cd Desktop pi@raspberrypi:~/Desktop $ W
La sintaxis de este comando es la siguiente: pones «cd», luego un espacio y finalmente el nombre de la carpeta a la que quieres ir. Hay varios añadidos que modifican el comando básico:
cd .. ##Permet de revenir dans le dossier précédent
cd ##Permet de revenir à la racine
cd Bureau/Work ##Permet d'aller dans le dossier Work qui se trouve dans le dossier Bureau
cd ../.. ##Permet de remonter deux dossiers plus haut dans l'arborescence
Para crear directorios
mkdir para crear una carpeta
pi@raspberrypi:~/Desktop $ ls reset_usb.py rpi-arduino-i2c.py rpi-arduino-serial.py rpi-pca9685.py pi@raspberrypi:~/Desktop $ mkdir Work pi@raspberrypi:~/Desktop $ ls reset_usb.py rpi-arduino-i2c.py rpi-arduino-serial.py rpi-pca9685.py Work
rmdir para eliminar una carpeta
pi@raspberrypi:~/Desktop $ rmdir Work pi@raspberrypi:~/Desktop $ ls reset_usb.py rpi-arduino-i2c.py rpi-arduino-serial.py rpi-pca9685.py
rm -R para borrar una carpeta y todo su contenido
Para reproducir un archivo
cat para visualizar el archivo completo
pi@raspberrypi:~ $ cat /var/log/syslog Mar 18 15:40:32 raspberrypi rsyslogd: [origin software="rsyslogd" swVersion="8.1901.0" x-pid="300" x-info="https://www.rsyslog.com"] rsyslogd was HUPed Mar 18 15:40:34 raspberrypi rsyslogd: [origin software="rsyslogd" swVersion="8.1901.0" x-pid="300" x-info="https://www.rsyslog.com"] rsyslogd was HUPed Mar 18 15:40:34 raspberrypi systemd[1]: logrotate.service: Succeeded. Mar 18 15:40:34 raspberrypi systemd[1]: Started Rotate log files. Mar 18 15:40:37 raspberrypi systemd[1]: systemd-hostnamed.service: Succeeded. Mar 18 15:40:45 raspberrypi systemd[1]: man-db.service: Succeeded. Mar 18 15:40:45 raspberrypi systemd[1]: Started Daily man-db regeneration.
head para leer la cabecera de un fichero
pi@raspberrypi:~ $ head -n 10 /var/log/syslog Mar 18 15:40:32 raspberrypi rsyslogd: [origin software="rsyslogd" swVersion="8.1901.0" x-pid="300" x-info="https://www.rsyslog.com"] rsyslogd was HUPed Mar 18 15:40:34 raspberrypi rsyslogd: [origin software="rsyslogd" swVersion="8.1901.0" x-pid="300" x-info="https://www.rsyslog.com"] rsyslogd was HUPed Mar 18 15:40:34 raspberrypi systemd[1]: logrotate.service: Succeeded. Mar 18 15:40:34 raspberrypi systemd[1]: Started Rotate log files. Mar 18 15:40:37 raspberrypi systemd[1]: systemd-hostnamed.service: Succeeded. Mar 18 15:40:45 raspberrypi systemd[1]: man-db.service: Succeeded. Mar 18 15:40:45 raspberrypi systemd[1]: Started Daily man-db regeneration. Mar 18 15:40:47 raspberrypi dbus-daemon[633]: [session uid=1000 pid=633] Activating via systemd: service name='org.gtk.vfs.UDisks2VolumeMonitor' unit='gvfs-udisks2-volume-monitor.service' requested by ':1.7' (uid=1000 pid=750 comm="pcmanfm --desktop --profile LXDE-pi ") Mar 18 15:40:47 raspberrypi systemd[531]: Starting Virtual filesystem service - disk device monitor... Mar 18 15:40:50 raspberrypi dbus-daemon[633]: [session uid=1000 pid=633] Successfully activated service 'org.gtk.vfs.UDisks2VolumeMonitor'
tail para leer el final del archivo
pi@raspberrypi:~ $ tail -f /var/log/syslog Mar 18 16:00:09 raspberrypi kernel: [ 1254.094894] ICMPv6: NA: bc:a8:a6:e7:a1:c6 advertised our address 2001:861:3742:78b0:76b1:2f81:bb6e:5bd1 on wlan0! Mar 18 16:10:06 raspberrypi kernel: [ 1850.887447] ICMPv6: NA: bc:a8:a6:e7:a1:c6 advertised our address 2001:861:3742:78b0:76b1:2f81:bb6e:5bd1 on wlan0! Mar 18 16:10:07 raspberrypi kernel: [ 1851.909164] ICMPv6: NA: bc:a8:a6:e7:a1:c6 advertised our address 2001:861:3742:78b0:76b1:2f81:bb6e:5bd1 on wlan0! Mar 18 16:14:14 raspberrypi kernel: [ 2098.887584] ICMPv6: NA: bc:a8:a6:e7:a1:c6 advertised our address 2001:861:3742:78b0:76b1:2f81:bb6e:5bd1 on wlan0! Mar 18 16:14:15 raspberrypi kernel: [ 2099.925466] ICMPv6: NA: bc:a8:a6:e7:a1:c6 advertised our address 2001:861:3742:78b0:76b1:2f81:bb6e:5bd1 on wlan0! Mar 18 16:14:16 raspberrypi kernel: [ 2100.949293] ICMPv6: NA: bc:a8:a6:e7:a1:c6 advertised our address 2001:861:3742:78b0:76b1:2f81:bb6e:5bd1 on wlan0! Mar 18 16:17:01 raspberrypi CRON[1461]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly) Mar 18 16:18:38 raspberrypi kernel: [ 2362.996869] ICMPv6: NA: bc:a8:a6:e7:a1:c6 advertised our address 2001:861:3742:78b0:76b1:2f81:bb6e:5bd1 on wlan0! Mar 18 16:18:39 raspberrypi kernel: [ 2364.016852] ICMPv6: NA: bc:a8:a6:e7:a1:c6 advertised our address 2001:861:3742:78b0:76b1:2f81:bb6e:5bd1 on wlan0! Mar 18 16:18:40 raspberrypi kernel: [ 2365.040711] ICMPv6: NA: bc:a8:a6:e7:a1:c6 advertised our address 2001:861:3742:78b0:76b1:2f81:bb6e:5bd1 on wlan0!
Para crear y editar un archivo
Es posible crear y editar archivos directamente desde el terminal. Esto es particularmente útil cuando se accede al microcontrolador de forma remota, como una Raspberry Pi Headless.
touch MON_FICHIER.py ##Permet de créer un fichier
nano MON_FICHIER.py ##Permet de créer un fichier (si il n'existe pas encore) et d'ouvrir un éditeur de texte intégré à la console Linux
En primer lugar, el comando «nano» permite abrir un archivo mediante un editor de texto integrado en la consola del terminal. El comando «nano» abre este archivo y lo crea si el archivo no existe.
Para copiar, mover, borrar un archivo
mv to delete a file or a folder
mv [fichier_répertoire_source] [fichier_répertoire_cible]
cp copiar un archivo
cp [option]
Ejemplo:
cp -r /path/to/source/ /destination/ #Pour copier le dossier source dans le dossier destination
cp -r /path/to/source/* /destination/ #Pour copier le contenu du dossier source dans le dossier destination
rm eliminar un archivo o carpeta
rm /répertoire/nom_du_fichier
Para buscar una cadena de caracteres en un archivo o directorio
find Para buscar un fichero
pi@raspberrypi:~ $ sudo find / -name syslog find: ‘/run/user/1000/gvfs’: Permission non accordée /run/systemd/journal/syslog /var/log/syslog
Para buscar texto en un archivo, utilice el comando grep o fgrep
pi@raspberrypi:~ $ grep Arduino /var/log/syslog Mar 18 17:10:22 raspberrypi kernel: [ 5466.943038] usb 1-1: Product: Arduino Uno Mar 18 17:10:22 raspberrypi kernel: [ 5466.943049] usb 1-1: Manufacturer: Arduino (www.arduino.cc) pi@raspberrypi:~ $ grep tty /var/log/syslog Mar 18 17:10:22 raspberrypi kernel: [ 5467.184359] cdc_acm 1-1:1.0: ttyACM0: USB ACM device
Para realizar una búsqueda recursiva de texto del directorio actual, utilice fgrep -ri
fgrep -ri mystring * # Pour rechercher "mystring" dans tous les types de fichiers de manière récursive
N.B.: Grep utiliza expresiones regulares (regexp), lo que significa que puede especificar su búsqueda. Para practicar con las expresiones regulares puedes utilizar este sitio.
Gestión de procesos
top (o htop) es el equivalente al administrador de tareas de Windows. Da una idea de la salud de la máquina y de los procesos activos.
ps -aux para visualizar los procesos en ejecución
pi@raspberrypi:~ $ ps -aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.2 2.0 32724 7832 ? Ss 15:39 0:10 /sbin/init spla root 2 0.0 0.0 0 0 ? S 15:39 0:00 [kthreadd] root 4 0.0 0.0 0 0 ? I< 15:39 0:03 [kworker/0:0H-k root 6 0.0 0.0 0 0 ? I< 15:39 0:00 [mm_percpu_wq] root 7 0.0 0.0 0 0 ? S 15:39 0:01 [ksoftirqd/0] root 8 0.0 0.0 0 0 ? S 15:39 0:00 [kdevtmpfs] root 9 0.0 0.0 0 0 ? I< 15:39 0:00 [netns] root 11 0.0 0.0 0 0 ? S 15:39 0:00 [khungtaskd] root 12 0.0 0.0 0 0 ? S 15:39 0:00 [oom_reaper] root 13 0.0 0.0 0 0 ? I< 15:39 0:00 [writeback]
Combinar con grep para encontrar procesos concretos
pi@raspberrypi:~ $ ps -aux | grep python pi 1817 0.8 1.5 12660 5860 pts/1 S+ 17:21 0:00 python pi 1820 0.0 0.4 7348 1880 pts/0 S+ 17:21 0:00 grep --color=auto python
kill/killall para borrar un proceso una vez que has encontrado el pid usando grep (aquí 1817 para el proceso python)
pi@raspberrypi:~ $ ps -aux | grep python pi 1817 0.8 1.5 12660 5860 pts/1 S+ 17:21 0:00 python pi 1820 0.0 0.4 7348 1880 pts/0 S+ 17:21 0:00 grep --color=auto python pi@raspberrypi:~ $ kill -9 1817
Resultado si se abre una sesión de python en otro terminal
pi@raspberrypi:~ $ python Python 2.7.16 (default, Oct 10 2019, 22:02:15) [GCC 8.3.0] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> Processus arrêté pi@raspberrypi:~ $
Identificación de los puertos USB
lsusb para obtener la lista de dispositivos usb
pi@raspberrypi:~ $ lsusb Bus 001 Device 003: ID 2341:0001 Arduino SA Uno (CDC ACM) Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
dmesg | grep tty para obtener los dispositivos detectados
dmesg | grep tty [ 0.000000] console [tty0] enabled [ 1.537553] serial8250: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A [ 1.537762] 00:07: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
ls /dev/tty* para obtener la lista de dispositivos (incluidos los puertos USB)
pi@raspberrypi:~ $ ls /dev/tty* /dev/tty /dev/tty16 /dev/tty24 /dev/tty32 /dev/tty40 /dev/tty49 /dev/tty57 /dev/tty8 /dev/tty0 /dev/tty17 /dev/tty25 /dev/tty33 /dev/tty41 /dev/tty5 /dev/tty58 /dev/tty9 /dev/tty1 /dev/tty18 /dev/tty26 /dev/tty34 /dev/tty42 /dev/tty50 /dev/tty59 /dev/ttyACM0 /dev/tty10 /dev/tty19 /dev/tty27 /dev/tty35 /dev/tty43 /dev/tty51 /dev/tty6 /dev/ttyAMA0 /dev/tty11 /dev/tty2 /dev/tty28 /dev/tty36 /dev/tty44 /dev/tty52 /dev/tty60 /dev/ttyprintk /dev/tty12 /dev/tty20 /dev/tty29 /dev/tty37 /dev/tty45 /dev/tty53 /dev/tty61 /dev/ttyS0 /dev/tty13 /dev/tty21 /dev/tty3 /dev/tty38 /dev/tty46 /dev/tty54 /dev/tty62 /dev/tty14 /dev/tty22 /dev/tty30 /dev/tty39 /dev/tty47 /dev/tty55 /dev/tty63 /dev/tty15 /dev/tty23 /dev/tty31 /dev/tty4 /dev/tty48 /dev/tty56 /dev/tty7
Comandos Linux para la red
hostname se utiliza para obtener el nombre o la dirección IP de la máquina
pi@raspberrypi:~ $ hostname raspberrypi pi@raspberrypi:~ $ hostname -i 127.0.1.1 pi@raspberrypi:~ $ hostname -I 192.168.1.43 2001:861:3742:78b0:76b1:2f81:bb6e:5bd1
El comando ifconfig se utiliza para obtener información sobre la red, incluidas las direcciones IP.
pi@raspberrypi:~ $ ifconfig lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1000 (Boucle locale) RX packets 17 bytes 1004 (1004.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 17 bytes 1004 (1004.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.1.43 netmask 255.255.255.0 broadcast 192.168.1.255 inet6 2001:861:3742:78b0:76b1:2f81:bb6e:5bd1 prefixlen 64 scopeid 0x0<global> inet6 fe80::1d5d:81c0:3c34:73cd prefixlen 64 scopeid 0x20<link> ether b8:27:eb:d5:83:aa txqueuelen 1000 (Ethernet) RX packets 13878 bytes 1570890 (1.4 MiB) RX errors 0 dropped 1 overruns 0 frame 0 TX packets 6020 bytes 1933262 (1.8 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ping es útil para probar la comunicación en red. Puede poner una dirección IP o una dirección web como argumento (añada la opción -c 10 para ejecutar sólo 10 peticiones)
ping -c 10 192.168.1.43 PING 192.168.1.43 (192.168.1.43) 56(84) bytes of data. 64 bytes from 192.168.1.43: icmp_seq=1 ttl=64 time=0.393 ms 64 bytes from 192.168.1.43: icmp_seq=2 ttl=64 time=0.300 ms 64 bytes from 192.168.1.43: icmp_seq=3 ttl=64 time=0.276 ms 64 bytes from 192.168.1.43: icmp_seq=4 ttl=64 time=0.278 ms 64 bytes from 192.168.1.43: icmp_seq=5 ttl=64 time=0.278 ms 64 bytes from 192.168.1.43: icmp_seq=6 ttl=64 time=0.280 ms 64 bytes from 192.168.1.43: icmp_seq=7 ttl=64 time=0.344 ms 64 bytes from 192.168.1.43: icmp_seq=8 ttl=64 time=0.339 ms 64 bytes from 192.168.1.43: icmp_seq=9 ttl=64 time=0.355 ms 64 bytes from 192.168.1.43: icmp_seq=10 ttl=64 time=0.356 ms --- 192.168.1.43 ping statistics --- 10 packets transmitted, 10 received, 0% packet loss, time 318ms rtt min/avg/max/mdev = 0.276/0.319/0.393/0.046 ms
arp devuelve una lista de dispositivos conectados a la red
pi@raspberrypi:~ $ arp -a bbox.lan (192.168.1.254) at 48:83:c7:59:27:8c [ether] on wlan0 pi@raspberrypi:~ $ arp -e Adresse TypeMap AdresseMat Indicateurs Iface bbox.lan ether 48:83:c7:59:27:8c C wlan0
Apagado de la máquina
shutdown para apagar el sistema limpiamente
halt apagar el sistema deteniendo todos los procesos en ejecución
sudo reboot para reiniciar