Site icon AranaCorp

Quelques commandes du terminal Linux

Dans ce tutoriel, nous allons voir quelques commandes Linux indispensables pour l’utilisation d’une machine Linux et d’un Raspberry Pi en particulier.

Information sur la machine

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 permet de connaitre l’espace libre sur la carte mémoire (très utile avec 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

Il y a quelques informations utiles que vous pouvez obtenir avec vcgencmd

Détection de sous-tension

vcgencmd get_throttled #if answer is 0x50005 under-voltage

Mesure de tension vcgencmd measure_volts <id> (core, sdram_c, sdram_i, sdram_p)

vcgencmd measure_volts core

Mesure de la température

vcgencmd measure_temp

Commande Linux Super utilisateur

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.

A utiliser lorsque la commande renvoie l’erreur « 13 : Permission denied »

Commandes Linux d’installation

La commande apt-get permet d’installer des logiciels et des packages sur la machine.

Notamment, téléchargement et installation des mises à jour de l’OS

sudo apt-get update
sudo apt-get upgrade

apt-get sert aussi à installer ou à supprimer des packages

sudo apt-get install <package_name>
sudo apt-get remove <package_name>
sudo apt-get purge -y <package_name>

Enfin, deux commandes pour libérer de l’espace mémoire

sudo apt-get autoremove
sudo apt-get clean

La commande dpkg, comme apt, permet d’installer des paquets Debian (fichier .deb)

sudo dpkg -i <package_path>
sudo apt install <package_path>

La commande wget permet le téléchargement de fichier distant et peut aussi permettre de télécharger des packages à installer

Exemple: pour télécharger le logiciel 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

Commandes Linux pour naviguer à travers un dossier

La commande pwd permet de savoir dans quel répertoire l’on se trouve

pi@raspberrypi:~ $ pwd
/home/pi

ls permet de lister tous les dossiers et fichiers contenu dans le répertoire où l’on se trouve

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 permet de se déplacer dans un dossier :

pi@raspberrypi:~ $ cd Desktop
pi@raspberrypi:~/Desktop $ W

La syntaxe de cette commande est la suivante : on met « cd », puis un espace et enfin le nom du dossier dans lequel on souhaite aller. Il existe différents ajout qui modifient la commande de base :

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

Pour créer des répertoires

mkdir pour créer un dossier

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 pour supprimer un dossier

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 pour supprimer un dossier et tout son contenu

Pour lire un fichier

cat pour afficher tout le fichier

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 pour lire l’entête d’un fichier

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 pour lire la fin du fichier

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!

Pour créer et éditer un fichier

Il est possible de créer et d’éditer des fichiers directement à partir du terminal. Cela est pratique, notamment, lorsqu’on accède au microcontrôleur à distance comme un 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 premier lieu la commande « nano » permet d’ouvrir un fichier via un éditeur de texte intégré à la console du terminale. La commande « nano » ouvre ce fichier et le crée si le fichier n’existe pas.

Pour copier, déplacer, supprimer un fichier

mv pour déplacer ou renommer un fichier

mv  [fichier_répertoire_source]  [fichier_répertoire_cible]

cp pour copier un fichier

cp [option] <source_directory>  <target_directory>

Exemple:

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

scp pour copier un fichier à partir et/ou vers un serveur (-r recursive, -p keep date)

scp -r -p <source_directory> user@address:<target_directory>

Exemple pour copier le fichier file.txt, contenu dans le dossier Data, vers le dossier Donwloads d’un Raspberry Pi connecté au même réseau:

scp -r -p ./Data/file.txt pi@192.168.1.26:Donwloads

rm to delete a file or a folder

 rm /répertoire/nom_du_fichier

Pour rechercher une chaine de caractère dans un fichier ou un répertoire

find Pour trouver un fichier

pi@raspberrypi:~ $ sudo find / -name syslog
find: ‘/run/user/1000/gvfs’: Permission non accordée
/run/systemd/journal/syslog
/var/log/syslog

find ./ "*.txt" -mtime +7 -print #find and print all txt file older than 7 days (-delete to delete files)

Pour trouver un texte dans un fichier, on utilise la commande grep ou 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

To do a recursive search for text from the current directory, use fgrep -ri

 fgrep -ri mystring * # Pour rechercher "mystring" dans tous les types de fichiers de manière récursive

N.B.: Grep utilise les expressions régulières (regexp) ce qui signifie que vous pouvez préciser votre recherche. Pour vous entrainer avec les expressions régulières vous pouvez utiliser ce site.

Pour comparer des répertoires ou des fichiers

Il est possible de comparer le contenu de deux répertoires avec la commande meld

Si ce n’est pas fait vous pouvez l’installer avec la commande

sudo apt install meld
meld <source_directory> <target_directory>

Un fenêtre double s’affiche vous permettant de comparer les deux répertoires fichier par fichier et d’observer les différences d’un simple coup d’oeil

Lancer un programme en tâche de fond

Lorsque vous lancer un programme bloquant à partir du terminal, comme un éditeur de texte, il est possible de le mettre en tâche de fond afin de garder la main sur le terminal

Lorsque le programme est lancé, retournez sur le terminal puis tapez Ctrl+Z. Cela vous permet de reprendre la main sur le terminal

gedit Makefile
^Z
zsh: suspended  gedit Makefile

Entrez ensuite la commande bg, pour lancer le programme en tâche de fond

bg
[1]  + continued  gedit Makefile

Gestion des processus

top (ou htop) est l’équivalent du gestionnaire de tâche sous Windows. Il permet d’avoir une idée de l’état de santé de la machine et des processus actifs.

ps -aux pour afficher les processus en cours

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]

Combiner avec grep pour trouver des processus particulier

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 pour supprimer un processus une fois que vous avez trouvez le pid à l’aide de grep (ici 1817 pour le processus 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

Résultat si une session python est ouverte dans un autre 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:~ $ 

Identification des ports USB

lsusb pour obtenir la liste des périphérique 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 pour obtenir les appareils détectés

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* pour obtenir la liste des périphériques (dont les ports 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

Commandes Linux pour le réseau

hostname permet d’obtenir le nom ou l’adresse IP de la machine

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 

La commande ifconfig permet d’obtenir des informations sur le réseau et notamment les adresses 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 est utile pour tester la communication réseau. Vous pouvez placer une adresse IP ou une adresse web en argument (ajouter l’option -c 10 pour n’exécuter que 10 requêtes)

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 renvoie une liste d’appareils connectés au réseau

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

Éteindre la machine

shutdown pour arrêter le système proprement

halt pour arrêter le système en arrêtant tous les processus en cours

sudo reboot pour redémarrer

Sources

Quitter la version mobile