====== Commandes utiles avec Linux ======
===== Obtenir l'explication d'une commande =====
copiez/collez une commande sur [[https://explainshell.com/]] et vous aurez une explication de sa syntaxe et de son effet.
===== Envoyer le résultat d'une commande en ligne ====
''ls | nc termbin.com 9999''
===== Système =====
=== Rendre un fichier éxécutable ===
''chmod +x script.sh'' # Rend le fichier script.sh executable
=== Caractéristiques du système ===
''inxi -Fxxxrz''\\
''inxi -ACMSxxz'' https://smxi.org/docs/inxi-options.htm
=== Caractéristiques processeur ===
''cat /proc/cpuinfo''
=== Taille de la RAM ===
''grep MemTotal /proc/meminfo''
=== Type de linux ===
''uname -srm''
=== Type de système d'affichage (X11, Wayland) ===
''echo $XDG_SESSION_TYPE''
=== Version d'OS ===
''lsb_release -a''
=== Connaître l'environnement de bureau ===
''echo "${XDG_CURRENT_DESKTOP}"''
=== Espace disque ===
''df -h''
=== Version OpenGL ===
  sudo apt install mesa-utils
  glxinfo | grep "OpenGL version"
  
=== Quelle version de GCC ? ===
GCC : GNU C Compiler, comprend différents compilateurs : C (gcc), C++ (g++), etc. \\
''gcc -v'' ou ''g++ -v'' \\
''ldd --version'' # pour trouver la version de glibc
=== Localiser un exécutable ===
''which nom_de_la_commande''
=== Changer date et heure ===
  sudo date +%T -s "10:13:13"
  sudo date +%Y%m%d -s "20081128"
  
  
===== Customisation =====
==== Installer une police de caractères (avec Debian) ====
Copier les fichiers de la fonte (.ttf ou .otf) dans :
  /usr/local/share/fonts (system-wide)
  ~/.local/share/fonts (user-specific)
  ~/.fonts (user-specific)
Vérifier que les fichiers ont bien les droits 644 (-rw-r–r–)
  fc-cache -v   # pour mettre à jour les cache des fontes
  fc-list       # pour vérifier
On peut aussi utiliser acessoires/font-manager ou fontconfig (cf. https://wiki.debian.org/Fonts )
===== Écran =====
=== Changer la luminosité de l'écran ===
  xrandr|grep ' connected '|awk '{print $1}'    # renvoie le nom de l'écran, par ex. VGA-1
  # ou, variante : xrandr -q |grep " connected"
  xrandr --output VGA-1 --brightness 0.5
===== Stockage (Disques/Dossiers/Fichiers) =====
==== Clé USB en read-only ====
  mount # pour voir le statut des clés (ro : read-only, rw : read-write)
  sudo mount -o remount,rw /media/$USER/*
Une autre possibilité
  df -h                     // repérer le nom du volume correspondant à la carte SD
  sudo umount /dev/sdx1     // démonter le volume au préalable
  sudo fsck -aV /dev/sdx1   // réparer le volume 
==== Liste de fichiers ====
La commande ''tree'' est très pratique pour afficher une arborescence ou rechercher certains fichiers dans une arborescence, quelques exemples
sudo apt install tree
tree ./sketchbook/2013B                    # fichiers, sous-dossiers à partir du chemin donné
tree -a ./sketchbook/2013B                 # idem, en affichant les fichiers/dossiers cachés
tree --du ./sketchbook/2013B               # afficher la taille des sous-dossiers
tree --du ./sketchbook/2013B -o liste.txt  # envoyer le résultat de la commande dans un fichier texte
==== Copie/déplacement de fichiers/dossiers ====
=== Copie ===
la commande ''cp'' permet de copier un fichier (''cp -r'' pour un dossier)\\
''cp /un/fichier /un/autre/fichierAvecUnNouveauNom''\\
''cp /un/fichier /un/dossier**/**''\\
''cp -r /un/dossier /un/autre/''\\
=== Raccourcis ===
  ln -s /chemin/vers/dossier /home/user/Desktop/dossier_raccourci
  
=== Déplacement ====
==== Espace disque ====
=== Afficher l'espace libre ===
''df -h''
  Sys. de fichiers Taille Utilisé Dispo Uti% Monté sur
  dev                7,7G       0  7,7G   0% /dev
  run                7,7G    2,0M  7,7G   1% /run
  /dev/nvme0n1p2     922G    457G  418G  53% /
  tmpfs              7,7G    314M  7,4G   5% /dev/shm
  tmpfs              7,7G     61M  7,6G   1% /tmp
  /dev/nvme0n1p1     300M    312K  300M   1% /boot/efi
  tmpfs              1,6G     76K  1,6G   1% /run/user/1000
=== Afficher la taille d'un dossier ===
''du -sh ~/tmp/''
  17M     /home/jumbef/tmp/
=== Afficher l'utilisation de l'espace disque ===
Sous forme d'une arborescence dans laquelle on peut se déplacer interactivement. La commande démarre à partir du répertoire d'où elle est exécutée. \\
''ncdu      # pour "NCurses Disk Usage, q pour quitter ncdu'' \\
''ncdu -x / # afficher uniquement la partition racine aka slash''
===== Réseau =====
=== Quelle est l'adresse IP de la machine ? ===
  hostname -I
  
=== Quelle est l'adresse IP de la passerelle ? ===
  ip r
  
=== Quel est le masque de sous-réseau ? ===
En clair
  sudo ifconfig
Le masque de sous-réseau est aussi affiché par les commandes ''ip a'' et autres en [[https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing|notation CIDR]]
=== Quelle machine est visible sur le réseau local ? ===
À adapter en fonction de l'adresse IP de la passerelle/routeur
  sudo nmap -sP 192.168.1.*
=== Trouver une IP libre sur le réseau ===
(Pour la donner à un ESP32)
  sudo arp-scan -I wlp3s0 192.168.1.1/24
ou
  sudo nmap -sP -PR 192.168.1.* # (plus complet)
=== Afficher l'état des connexions réseaux (dont les adresses IP) ===
''ip addr'' (Debian >= 8 | Ubuntu >= 14.04 )
  1: lo:  mtu 65536 qdisc noqueue state UNKNOWN group default
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
  2: eth0:  mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:4f:41:81 brd ff:ff:ff:ff:ff:ff
    inet 192.168.56.101/28 brd 192.168.56.255 scope global eth1
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fe4f:4181/64 scope link
       valid_lft forever preferred_lft forever
''ifconfig'' (Debian < 8 | Ubuntu < 14.04 )
  eth0    Link encap:Ethernet  HWaddr 9x:xx:xx:xx:xx:xx  
          inet adr:192.168.1.xx  Bcast:192.168.1.255  Masque:255.255.255.0
          adr inet6: fe80::x:xx:xx:xx:xx:xx104/64 Scope:Lien
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:2182 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2144 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:1000 
          RX bytes:1323295 (1.2 MiB)  TX bytes:426001 (416.0 KiB)
          Interruption:252 Adresse de base:0xa000 
  lo      Link encap:Boucle locale  
          inet adr:127.0.0.1  Masque:255.0.0.0
          adr inet6: ::1/128 Scope:Hôte
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:70 errors:0 dropped:0 overruns:0 frame:0
          TX packets:70 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:0 
          RX bytes:5628 (5.4 KiB)  TX bytes:5628 (5.4 KiB)
=== Serveurs DNS ===
''sudo nano /etc/resolv.conf'' (voir https://debian-facile.org/doc:systeme:resolv.conf )
==== Wi-Fi ====
=== Renvoyer le nom du point d'accès wifi ===
  sudo iwgetid wlp3s0 --raw
=== Identification et puissance du signal des points d'accès wifi ===
  nmcli dev wifi
Pour des informations continuellement mises à jour, on peut utiliser wavemon
  sudo apt install wavemon
  wavemon
=== Trouver le protocole de sécurité et le type de chiffrement d'un point d'accès ===
''ip link'' voir les interfaces réseau (repérer l'interface wifi)
  1: lo:  mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
      link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  2: eth0:  mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
      link/ether 50:7b:9d:4d:61:c4 brd ff:ff:ff:ff:ff:ff
  3: wlan0:  mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default qlen 1000
      link/ether dc:53:60:fd:2b:db brd ff:ff:ff:ff:ff:ff
''sudo iwlist wlp3s0 scan'' donne les infos sur points d'accès, protocoles de sécurité (WPA, WPA2, etc.) et modes de chiffrement (TKIP, AES)
  wlan0     Scan completed :
          Cell 01 - Address: 08:87:C6:22:1D:78
                    Channel:11
                    Frequency:2.462 GHz (Channel 11)
                    Quality=66/70  Signal level=-44 dBm  
                    Encryption key:on
                    ESSID:"Proxi-29"
                    Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 6 Mb/s
                              9 Mb/s; 12 Mb/s; 18 Mb/s
                    Bit Rates:24 Mb/s; 36 Mb/s; 48 Mb/s; 54 Mb/s
                    Mode:Master
                    Extra:tsf=0000046728a98587
                    Extra: Last beacon: 244ms ago
                    ...
                    IE: IEEE 802.11i/WPA2 Version 1
                        Group Cipher : TKIP
                        Pairwise Ciphers (2) : CCMP TKIP
                        Authentication Suites (1) : PSK
                    IE: WPA Version 1
                        Group Cipher : TKIP
                        Pairwise Ciphers (2) : CCMP TKIP
                        Authentication Suites (1) : PSK
          Cell 02 - Address: 2A:3A:4D:52:0E:70
                    Channel:6
                    Frequency:2.437 GHz (Channel 6)
                    Quality=70/70  Signal level=-39 dBm  
                    Encryption key:on
                    ESSID:"DIRECT-70-HP M118 LaserJet"
                    Bit Rates:6 Mb/s; 9 Mb/s; 12 Mb/s; 18 Mb/s; 24 Mb/s
                              36 Mb/s; 48 Mb/s; 54 Mb/s
                    Mode:Master
                    Extra:tsf=000000561c448ded
                    Extra: Last beacon: 684ms ago
                    ...
                    IE: IEEE 802.11i/WPA2 Version 1
                        Group Cipher : CCMP
                        Pairwise Ciphers (1) : CCMP
                        Authentication Suites (1) : PSK
                    ...
          Cell 03 - Address: 44:CE:7D:BF:1B:A4
                    Channel:1
                    Frequency:2.412 GHz (Channel 1)
                    Quality=26/70  Signal level=-84 dBm  
                    Encryption key:on
                    ESSID:"SFR_1BA0"
                    Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 18 Mb/s
                              24 Mb/s; 36 Mb/s; 54 Mb/s
                    Bit Rates:6 Mb/s; 9 Mb/s; 12 Mb/s; 48 Mb/s
                    Mode:Master
                    Extra:tsf=00000787c58fbc64
                    Extra: Last beacon: 1116ms ago
                    ...
                    IE: IEEE 802.11i/WPA2 Version 1
                        Group Cipher : CCMP
                        Pairwise Ciphers (1) : CCMP
                        Authentication Suites (1) : PSK
                    ...
=== Identifier les machines sur un réseau local ===
  # 20240917 testé sur Debian12 / kirin
  sudo apt install nmap
  sudo nmap -sn 192.168.1.1/24
Sans nmap, on peut utiliser ''ip neigh'' ou ce script python ([[https://superuser.com/a/1195142|source]]) mais ça ne renvoie pas autant de résultats que nmap
Avec **arp** «//Address Resolution Protocol (ARP) is a fundamental part of IP networking. ARP’s primary function is to convert 32-bit IP addresses to 48-bit Ethernet MAC addresses. This conversion is crucial because while IP networking requires IP addresses, the underlying Ethernet hardware can only understand MAC addresses.//»
  sudo arp -a  # 
Avec **arp-scan**
  sudo apt install arp-scan
  arp-scan -l
Avec **ip**
  ip neigh show
#!/usr/bin/python3
"""List all hosts with their IP adress of the current network."""
import os
out = os.popen('ip neigh').read().splitlines()
for i, line in enumerate(out, start=1):
    ip = line.split(' ')[0]
    h = os.popen('host {}'.format(ip)).read()
    hostname = h.split(' ')[-1]
    print("{:>3}: {} ({})".format(i, hostname.strip(), ip))
 
===== Résolution de problèmes =====
==== AppImage et sandbox ====
Un message d'erreur assez commun lorsqu'on essaie de démarrer un fichier Appimage, créé avec electron : ''The SUID sandbox helper binary was found, but is not configured correctly. Rather than run without sandboxing I'm aborting now. You need to make sure that /tmp/.../chrome-sandbox is owned by root and has mode 4755.'' \\
On peut le résoudre en démarrant l'application .Appimage avec l'option '--no-sandbox', exemple :
  chmod +x ./gb-studio-linux.AppImage 
  ./gb-studio-linux.AppImage --no-sandbox
Il existe d'autres possibilités pour résoudre ce problème : https://stackoverflow.com/a/63788999
==== Réparer une clé USB en lecture seule ====
  findmnt                     # chercher le nom du volume et son type de formatage, ici VFAT
  sudo umount /dev/sdb1       # démonter le volume avant de travailler dessus
  sudo dosfsck -a /dev/sdb1   # analyse et réparation d'un volume VFAT