Commandes Linux utiles pour Raspberry Pi et le Terminal Raspbian (configurer, installer, mettre à jour) • Domotique et objets connectés à faire soi-même

La plupart des logiciels que l’on va installer sur le Raspberry Pi OS (ou une autre distribution Linux) disposent d’une interface graphique. Cependant le Terminal de commande reste omni présent dans l’univers Linux. Vous aurez à un moment ou l’autre besoin de lui pour configurer, mettre à jour ou installer un logiciel.

Article actualisé le 1er juin 2020

A force de chercher les commandes sur internet, j’ai fini par écrire un petit article qui concentre pas mal de choses utiles au quotidien lorsqu’on travail s’amuse avec un Raspberry

Commandes utiles pour utiliser le Terminal de commande de Raspbian

Raccourcis clavier

  • Copier : Ctrl + Maj + c (Attention à ne pas confondre avec Ctrl + C qui arrête la commande en cours)
  • Coller : Ctrl + Maj + v
  • Tab : Autocompletion du nom de répertoire ou du nom de commande
  • Ctrl + w : Supprime le mot précédant le curseur
  • Alt + d : Supprime le mot suivant le curseur
  • Ctrl + u : Supprime tout ce qui est avant le curseur
  • Ctrl + y : Colle ce qui vient d’être supprimé à l’endroit ou le curseur est positionné

Se déplacer dans l’historique des commandes

Le système enregistre

  • history : affiche l’historique des commandes exécutées
  • Ctrl + flèche droite/gauche : Déplace le curseur d’un mot à l’autre
  • Ctrl + a : Positionne le curseur au début de la ligne de commande
  • Ctrl + e : Positionne le curseur à la fin de la ligne de commande
  • Ctrl + r : Rechercher dans l’historique
  • Flèche haut/bas : Naviguer dans l’historique des commandes exécutées

Comment récupérer les caractéristiques du Raspberry Pi

La commande cat permet de récupérer de nombreuses caractéristiques du Raspberry Pi. Voici ce que vous allez pouvez savoir sur votre Raspberry :

  • cat /proc/cpuinfo : caractéristiques du microprocesseur, modèle, fréquence, numéro de version, nombre de coeurs…
  • cat /proc/meminfo : affiche les informations sur la mémoire du Raspberry Pi (mémoire totale, libre…)
  • cat /proc/partitions : pour connaitre la taille des partitions (y compris la taille de la carte SD)
  • cat /proc/version : version du linux installé

Comment trouver l’adresse IP du Raspberry Pi

Voici les principales méthodes pour trouver facilement l’adresse IP du Raspberry PI sur le réseau local.

L’utilitaire réseau du bureau Pixel permet de connaitre l’adresse IP qui a été attribuée au Raspberry Pi. Pour cela, il suffit de survoler l’icône (WiFi ou Ethernet) située dans le coin supérieur droit pour le faire apparaître.

Depuis le Terminal, il existe plusieurs commandes linux. La plus facile à retenir est la commande ip a.

Cette commande renvoi énormément d’informations techniques assez rebutante lorsqu’on vient du monde Windows ou macOS. Je vous conseille d’utiliser la commande hostname -I qui renvoi s’implement l’adresse IP.

Comment lister les appareils connectés en USB

Si vous faites un peu de domotique, il est parfois nécessaire de connaitre le port USB sur lequel est branché un appareil. Voici une liste de commandes bien utiles. Pour rédiger l’article, j’ai connecté un vieux clavier DELL ainsi qu’un ESP8266 qui me sert de Gateway MySensors.

Commençons tout simplement par lister les appareils connectés en USB avec la commande lsusb. On récupère tous les appareils connectés en USB. Dans mon cas, on retrouve donc le clavier DELL (qui peut aussi être un hub USB) et la Wemos qui est connectée sur le device 6. C’est intéressant de voir que l’adaptateur Ethernet et lui même connecté en USB au RPI.

Liste des appareils connectés en USB (lsusb)

C’est bien mais on ne connais toujours pas le port tty sur lequel est mappé l’appareil USB. Il existe plusieurs solutions mais la plus simple consiste à débrancher l’accessoire puis le retrancher de nouveau. Ensuite exécutez la commande dmesg -s 1024.

Cette commande permet de récupérer les derniers messages système. Voici ce qu’on obtient par exmple lorsqu’on branche un ESP8266 sur le port USB du Raspberry Pi.

Si votre appareil communique via le port série (usb-serial) avec le Raspberry. C’est le cas pour de nombreux appareils domotique DIY (RFXCom, Gateway MySensors, Arduino…), vous pouvez vérifier grâce à la commande ls -l /sys/bus/usb-serial/devices.

pi@raspberrypi:/sys/class/tty/ttyUSB0 $ ls -l /sys/bus/usb-serial/devices
total 0
lrwxrwxrwx 1 root root 0 sep 16 07:42 ttyUSB0 -> ../../../devices/platform/soc/3f980000.usb/usb1/1-1/1-1.2/1-1.2:1.0/ttyUSB0

On retrouve bien l’ESP8266 connectée au port ttyUSB0.

Si vous voulez récupérer plus d’informations, faites utilisez la commande udevadm. Dans l’exemple ci-dessous, on récupère les infos sur le port /dev/ttyUSB0. Si aucun appareil n’est connecté, vous aurez le retour device node not found.

pi@raspberrypi:~ $ udevadm info -a -p  $(udevadm info -q path -n /dev/ttyUSB0)

Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.

  looking at device '/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.2/1-1.2:1.0/ttyUSB0/tty/ttyUSB0':
    KERNEL=="ttyUSB0"
    SUBSYSTEM=="tty"
    DRIVER==""

  looking at parent device '/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.2/1-1.2:1.0/ttyUSB0':
    KERNELS=="ttyUSB0"
    SUBSYSTEMS=="usb-serial"
    DRIVERS=="ch341-uart"
    ATTRS{port_number}=="0"

  looking at parent device '/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.2/1-1.2:1.0':
    KERNELS=="1-1.2:1.0"
    SUBSYSTEMS=="usb"
    DRIVERS=="ch341"
    ATTRS{bInterfaceClass}=="ff"
    ATTRS{bInterfaceSubClass}=="01"
    ATTRS{bInterfaceProtocol}=="02"
    ATTRS{bNumEndpoints}=="03"
    ATTRS{authorized}=="1"
    ATTRS{supports_autosuspend}=="1"
    ATTRS{bAlternateSetting}==" 0"
    ATTRS{bInterfaceNumber}=="00"

  looking at parent device '/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.2':
    KERNELS=="1-1.2"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bDeviceProtocol}=="00"
    ATTRS{devpath}=="1.2"
    ATTRS{idVendor}=="1a86"
    ATTRS{speed}=="12"
    ATTRS{bNumInterfaces}==" 1"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bMaxPacketSize0}=="8"
    ATTRS{busnum}=="1"
    ATTRS{devnum}=="6"
    ATTRS{configuration}==""
    ATTRS{bMaxPower}=="96mA"
    ATTRS{authorized}=="1"
    ATTRS{bmAttributes}=="80"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{maxchild}=="0"
    ATTRS{bcdDevice}=="0254"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{quirks}=="0x0"
    ATTRS{version}==" 1.10"
    ATTRS{urbnum}=="20"
    ATTRS{ltm_capable}=="no"
    ATTRS{removable}=="removable"
    ATTRS{idProduct}=="7523"
    ATTRS{bDeviceClass}=="ff"
    ATTRS{product}=="USB2.0-Serial"

  looking at parent device '/devices/platform/soc/3f980000.usb/usb1/1-1':
    KERNELS=="1-1"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bDeviceProtocol}=="02"
    ATTRS{devpath}=="1"
    ATTRS{idVendor}=="0424"
    ATTRS{speed}=="480"
    ATTRS{bNumInterfaces}==" 1"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{busnum}=="1"
    ATTRS{devnum}=="2"
    ATTRS{configuration}==""
    ATTRS{bMaxPower}=="2mA"
    ATTRS{authorized}=="1"
    ATTRS{bmAttributes}=="e0"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{maxchild}=="5"
    ATTRS{bcdDevice}=="0200"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{quirks}=="0x0"
    ATTRS{version}==" 2.00"
    ATTRS{urbnum}=="56"
    ATTRS{ltm_capable}=="no"
    ATTRS{removable}=="unknown"
    ATTRS{idProduct}=="9514"
    ATTRS{bDeviceClass}=="09"

  looking at parent device '/devices/platform/soc/3f980000.usb/usb1':
    KERNELS=="usb1"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bDeviceProtocol}=="01"
    ATTRS{devpath}=="0"
    ATTRS{idVendor}=="1d6b"
    ATTRS{speed}=="480"
    ATTRS{bNumInterfaces}==" 1"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{authorized_default}=="1"
    ATTRS{busnum}=="1"
    ATTRS{devnum}=="1"
    ATTRS{configuration}==""
    ATTRS{bMaxPower}=="0mA"
    ATTRS{authorized}=="1"
    ATTRS{bmAttributes}=="e0"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{maxchild}=="1"
    ATTRS{interface_authorized_default}=="1"
    ATTRS{bcdDevice}=="0404"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{quirks}=="0x0"
    ATTRS{serial}=="3f980000.usb"
    ATTRS{version}==" 2.00"
    ATTRS{urbnum}=="25"
    ATTRS{ltm_capable}=="no"
    ATTRS{manufacturer}=="Linux 4.4.11-v7+ dwc_otg_hcd"
    ATTRS{removable}=="unknown"
    ATTRS{idProduct}=="0002"
    ATTRS{bDeviceClass}=="09"
    ATTRS{product}=="DWC OTG Controller"

  looking at parent device '/devices/platform/soc/3f980000.usb':
    KERNELS=="3f980000.usb"
    SUBSYSTEMS=="platform"
    DRIVERS=="dwc_otg"
    ATTRS{hnp}=="HstNegScs = 0x0"
    ATTRS{srp}=="SesReqScs = 0x1"
    ATTRS{regvalue}=="invalid offset"
    ATTRS{hsic_connect}=="HSIC Connect = 0x1"
    ATTRS{guid}=="GUID = 0x2708a000"
    ATTRS{mode}=="Mode = 0x1"
    ATTRS{srpcapable}=="SRPCapable = 0x1"
    ATTRS{regdump}=="Register Dump"
    ATTRS{gpvndctl}=="GPVNDCTL = 0x00000000"
    ATTRS{ggpio}=="GGPIO = 0x00000000"
    ATTRS{hprt0}=="HPRT0 = 0x00001005"
    ATTRS{wr_reg_test}=="Time to write GNPTXFSIZ reg 10000000 times: 380 msecs (38 jiffies)"
    ATTRS{driver_override}=="(null)"
    ATTRS{hcd_frrem}=="HCD Dump Frame Remaining"
    ATTRS{mode_ch_tim_en}=="Mode Change Ready Timer Enable = 0x0"
    ATTRS{gnptxfsiz}=="GNPTXFSIZ = 0x01000306"
    ATTRS{remote_wakeup}=="Remote Wakeup Sig = 0 Enabled = 0 LPM Remote Wakeup = 0"
    ATTRS{busconnected}=="Bus Connected = 0x1"
    ATTRS{hcddump}=="HCD Dump"
    ATTRS{gotgctl}=="GOTGCTL = 0x001c0001"
    ATTRS{spramdump}=="SPRAM Dump"
    ATTRS{grxfsiz}=="GRXFSIZ = 0x00000306"
    ATTRS{gsnpsid}=="GSNPSID = 0x4f54280a"
    ATTRS{gusbcfg}=="GUSBCFG = 0x20001700"
    ATTRS{hptxfsiz}=="HPTXFSIZ = 0x02000406"
    ATTRS{devspeed}=="Device Speed = 0x0"
    ATTRS{fr_interval}=="Frame Interval = 0x1d4c"
    ATTRS{rem_wakeup_pwrdn}==""
    ATTRS{bussuspend}=="Bus Suspend = 0x0"
    ATTRS{buspower}=="Bus Power = 0x1"
    ATTRS{hnpcapable}=="HNPCapable = 0x1"
    ATTRS{rd_reg_test}=="Time to read GNPTXFSIZ reg 10000000 times: 950 msecs (95 jiffies)"
    ATTRS{enumspeed}=="Device Enumeration Speed = 0x1"
    ATTRS{inv_sel_hsic}=="Invert Select HSIC = 0x0"
    ATTRS{regoffset}=="0xffffffff"

  looking at parent device '/devices/platform/soc':
    KERNELS=="soc"
    SUBSYSTEMS=="platform"
    DRIVERS==""
    ATTRS{driver_override}=="(null)"

  looking at parent device '/devices/platform':
    KERNELS=="platform"
    SUBSYSTEMS==""
    DRIVERS==""

En savoir encore plus avec la commande vcgencmd

La commande vcgencmd permet de récupérer de nombreuses informations sur le firmware du Raspberry. Exécutez la commande vcgencmd commands pour récupérer la liste complète des commandes disponible. La liste peut évoluer à chaque mise à jour du Firmware. Certaines commandes nécessitent un argument complémentaire.

Pour connaître en détail le fonctionnement de chaque commande, allez visiter cette page.

pi@raspberrypi:/sys/class/tty/ttyUSB0 $ vcgencmd commands
commands="vcos, ap_output_control, ap_output_post_processing, vchi_test_init, vchi_test_exit, pm_set_policy, pm_get_status, pm_show_stats, pm_start_logging, pm_stop_logging, version, commands, set_vll_dir, set_backlight, set_logging, get_lcd_info, arbiter, cache_flush, otp_dump, test_result, codec_enabled, get_camera, get_mem, measure_clock, measure_volts, scaling_kernel, scaling_sharpness, get_hvs_asserts, get_throttled, measure_temp, get_config, hdmi_ntsc_freqs, hdmi_adjust_clock, hdmi_status_show, hvs_update_fields, pwm_speedup, force_audio, hdmi_stream_channels, hdmi_channel_map, display_power, read_ring_osc, memtest, dispmanx_list, get_rsts, schmoo, render_bar, disk_notify, inuse_notify, sus_suspend, sus_status, sus_is_enabled, sus_stop_test_thread, egl_platform_switch, mem_validate, mem_oom, mem_reloc_stats, file, vctest_memmap, vctest_start, vctest_stop, vctest_set, vctest_get"

Faisons quelques tests.

Connaître la température du microprocesseur, vcgencmd measure_temp

La résolution de l’écran branché au Raspberry,  vcgencmd get_lcd_info

Se connecter à distance en SSH

SSH est un protocole de communication sécurisé qui permet de se connecter à distance à un Raspberry Pi via le Terminal (macOS ou Linux) ou par exemple Putty sur Windows.

Par sécurité, SSH est désactivé par défaut. On active SSH depuis le panneau de configuration ou depuis le Terminal

Pour plus de détails

Suivez ce tutoriel pour activer

Pour tout savoir, lisez cet article précédent plus complet. Sinon en résumé, après avoir activé la connexion SSH depuis raspi-config, utilisez Putty (sous Windows) ou ouvrez le Terminal de commande sous Mac et Linux et exécutez

ssh pi@ADRESSE_IP_RPI

ou avec la distribution Raspbian

ssh pi@raspberrypi.local

le mot de passe par défaut est raspberry.

Autres commandes utiles (en vrac)

Connaitre l’état de fonctionnement des services

Un service est un programme qui fonctionne en tâche de fond et qui se lance au démarrage du système (Raspbian ou toute autre distribution Linux).

La commande sudo service --status-all permet de lister les services lancés.

D’autres commandes utiles

sudo service status Etat du service
sudo service start Démarrer le service
sudo service stop Arrêter le service
sudo service  restart Redémarre le service (après une modification d’un fichier de configuration par exemple)

Eteindre le Raspberry (programmer l’heure de l’arrêt)

Ca manque un bouton pour arrêter son Raspberry ! Voici plusieurs commandes bien utiles pour arrêter le Raspberry proprement. N’oublions pas qu’il est impératif d’éteindre le Raspberry avant de le débrancher son peine de détruire la carte SD. Ce serait vraiment dommage de devoir tout réinstaller.

La commande la plus rapide est sudo poweroff qui va arrêter immédiatement le RPI. L’équivalent de poweroff est sudo shutdown now.

sudo poweroff

Si vous avez envie de programmer un arrêt, par exemple à 22h00 avant d’aller vous coucher, utilisez la commande shutdown -h. Par exemple

sudo shutdown –h 22:00

Pour annuler l’heure d’arrêt programmée, sudo shutdown -c.

Empêcher l’écran noir de Raspbian (Jessie ou supérieur)

La mise en veille de l’écran vous agace, voici comment l’empêcher très simplement. Par contre, pensez à la planète, n’oubliez pas d’appuyer sur le bouton de mise sous tension pour arrêter votre écran. Il en a un lui au moins !

Exécutez la commande suivante pour éditer le fichier cmdline.txt et ajoutez consoleblank=0 à la fin de la ligne

sudo nano /boot/cmdline.txt

Redémarrez le Raspberry pour prendre en compte le nouveau paramètre.

Activer le clavier numérique Num Lock dès le démarrage de Raspbian

Chose étrange, le clavier numérique n’est pas activé par défaut au démarrage de Raspbian. Comme il n’y a aucun réglage dans sudo raspi-config pour configurer cela, on va devoir le faire à la main. Ouvrez le fichier configuration du clavier qui se trouve dans le répertoire /etc/kbd/config

sudo nano /etc/kbd/config

Allez presque à la fin du fichier et retirez le # devant LEDS=+num.

Petite astuce au passage, vous pouvez activer l’affichage de l’heure dans le coin supérieur droit de la console en retirant le # devant DO_VCSTIME=yes.

Sauvegardez et redémarrez Raspbian (sudo reboot) pour prendre en compte les nouveaux réglages.

Mettre à jour (update) ou mettre à niveau (upgrade) Raspbian

Il existe deux commandes pour mettre à jour le système.

La commande apt-get update permet de mettre à jour les packages du système (fichiers de traduction…)

sudo apt-get update

La commande apt-get upgrade permet de mettre à niveau les paquets vers la version la plus récente Cette commande permet de mettre à jour le firmware du Raspberry Pi par exemple.

sudo apt-get upgrade

Enfin pour mettre à jour la distribution, à chaque mise à jour de Raspbian par exemple. Par contre il faudra peut être aussi mettre à jour certains composants Python manuellement.

sudo apt-get dist-upgrade

Mises à jour :

15/04/2020 Commandes utiles pour utiliser le Terminal de commande

3/11/2016 Connaître l’état des services

Avez-vous aimé cet article ?