Pense Bête du Geek

Paradoxe de l’euro qui disparaît

BUT :

Expliquer simplement le célèbre paradoxe de l’euro qui disparaît, une énigme mathématique qui semble faire “disparaître” 1 €

La situation de départ :

Trois amis arrivent à l’hôtel et réservent une chambre affichée à 30 €.
Ils paient donc chacun 10 €, soit 30 € au total.

Les trois amis montent ensuite dans leur chambre.

La correction du prix et l’intervention du groom :

L’hôtelier réalise qu’il a fait une erreur : la chambre ne coûte pas 30 €, mais 25 €.
Il décide donc de corriger le prix et de restituer 5 € aux clients.

Il confie la somme de 5 € au groom et lui demande de la rendre aux trois amis.

Mais le groom se trouve face à un problème : comment partager 5 € entre 3 personnes ?
Impossible de faire une répartition équitable.

Le groom choisit donc une solution simple :

  • il rend 1 € à chaque ami (soit 3 € au total),
  • et garde 2 € pour lui, discrètement (son pourboire).

Le raisonnement paradoxal :

À ce stade, on peut constater plusieurs faits :

  • Chaque ami a payé initialement 10 €.
  • Le groom leur rend 1 €, donc chacun a réellement payé 9 €.
  • À trois, cela fait 3 × 9 € = 27 €.
  • Le groom a gardé 2 €.

Et c’est ici que l’illusion apparaît :

27 + 2 = 29 €, alors que les amis avaient payé 30 € au départ.
Où est passé l’euro manquant ?

Ce raisonnement semble logique… mais il est faux.

Où est l’erreur dans le calcul ?

L’erreur provient du fait qu’on additionne des montants qui ne représentent pas la même chose.

Les 27 € représentent déjà :

  • 25 € pour la chambre,
  • 2 € pour le groom.

Les 2 € du groom ne doivent pas être ajoutés aux 27 €, car ils sont déjà inclus dans ces 27 € !

La vraie relation correcte est :

  • 25 € → prix réel de la chambre
  • 3 € → rendus aux amis
  • 2 € → gardés par le groom

Soit :
25 + 3 + 2 = 30 €
Donc aucun euro n’a disparu.

Autre façon de le formuler :
Les amis ont payé 27 € au total, qui se décomposent en :
25 € pour l’hôtel + 2 € pour le groom
Les comptes sont exacts.

Conclusion :

Le paradoxe de l’euro qui disparaît n’est pas un vrai paradoxe, mais une illusion fondée sur un raisonnement volontairement trompeur. En mélangeant des montants qui ne représentent pas les mêmes choses, on crée l’impression qu’un euro manque.

En réalité, les 30 € sont parfaitement distribués :
25 € pour l’hôtel, 3 € rendus, 2 € gardés.
L’histoire montre l’importance d’analyser correctement ce que représentent les chiffres avant de les additionner ou de les comparer.

Lancement d’une Machine Virtuelle en ligne de commande sans affichage

BUT : Lancer une Machine Virtuelle sous VirtualBox en ligne de commande en tache de fond

Parfois nous avons besoin de lancer une machine virtuelle sans passer par l’interface graphique et surtout sans afficher l’écran de la machine virtuelle. Par exemple vous avez créé un serveur virtuel sous VirtualBox et vous n’avez pas besoin de voir son écran puisque vous y accédez via ssh. Un autre exemple est l’utilisation d’une machinedont le bureau est accessible via un logiciel de prise de contrôle à distance (RDP, vnc, TeamViewer, mesh Central, etc).

La première chose à faire c’est de connaitre le nom de la machine virtuelle à lancer. Le plus simple est de regarder son nom dans l’interface de VirtualBox

Nous avons ici un serveur virtuel que nous avons appelé ‘ovh’
Pour lancer ce serveur tapons dans un terminal ‘vboxmanage startvm NomDeLaMachineVirtuelle –type headless’
ATTENTION : dans le cas où vous voulez afficher l’écran de la machine virtuelle ne pas mettre l’option ‘–type headless’

# ici la machine virtuelle se nomme 'ovh'
vboxmanage startvm ovh --type headless
vboxmanage startvm ovh --type headless
Waiting for VM "ovh" to power on...
VM "ovh" has been successfully started.

Testons la connexion avec le serveur ici l’adresse du serveur est ‘ovh.local’ ou 192.168.0.100 car nous l’avons définie par avance

# ssh ovh.local
# ou si l'adresse du serveur est 192.168.0.100
ssh 192.168.0.100
bzg@uc:~$ ssh 192.168.0.100
bzg@192.168.0.100's password:
Welcome to Ubuntu 20.04.5 LTS (GNU/Linux 5.4.0-126-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

  System information as of ven. 07 oct. 2022 14:20:21 UTC

  System load:  0.86               Processes:               126
  Usage of /:   42.8% of 39.07GB   Users logged in:         0
  Memory usage: 33%                IPv4 address for enp0s3: 192.168.9.240
  Swap usage:   0%

 * Super-optimized for small spaces - read how we shrank the memory
   footprint of MicroK8s to make it the smallest full K8s around.

   https://ubuntu.com/blog/microk8s-memory-optimisation

0 updates can be applied immediately.



The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.

To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

bzg@ovh:~$ 

Vous voici sur votre serveur virtuel

Les applications « snaps »

BUT : Installer/Désinstaller des logiciels en mode « snap » et/ou supprimer le magasin des snaps sur Ubuntu

Les snaps sont des paquets permettant d’installer des logiciels contenant leurs propres dépendances et un environnement indépendant du reste des autres programmes.

Si cela est un gros avantage pour les utilisateurs novices, le prix a payer est un gouffre de puissance processeur et d’espace disque

Pour voir quels sont les snaps installés :
snap list

bzg@uc:~$ snap list 
Nom               Version             Révision     Suivi           Éditeur           Notes 
bare              1.0                 5            latest/stable   canonical✓        base 
core20            20220304            1376         latest/stable   canonical✓        base 
gnome-3-38-2004   0+git.1f9014a       99           latest/stable/… canonical✓        - 
gtk-common-themes 0.1-59-g7bca6ae     1519         latest/stable/… canonical✓        - 
snap-store        3.38.0-66-gbd5b8f7  558          latest/stable/… canonical✓        - 
snapd             2.54.4              15177        latest/stable   canonical✓        snapd

Pour installer un snap :
sudo snap install {logiciel}
exemple avec « chromium »

bzg@uc:~$ sudo snap install chromium 
chromium 99.0.4844.84 par Canonical✓ installé 
bzg@uc:~$ snap list
Nom               Version             Révision     Suivi           Éditeur           Notes 
bare              1.0                 5            latest/stable   canonical✓        base 
chromium          99.0.4844.84        1945         latest/stable   canonical✓        -
core20            20220304            1376         latest/stable   canonical✓        base 
gnome-3-38-2004   0+git.1f9014a       99           latest/stable/… canonical✓        - 
gtk-common-themes 0.1-59-g7bca6ae     1519         latest/stable/… canonical✓        - 
snap-store        3.38.0-66-gbd5b8f7  558          latest/stable/… canonical✓        - 
snapd             2.54.4              15177        latest/stable   canonical✓        snapd

Pour supprimer un snap :
snap remove {logiciel}
exemple avec « chromium »

bzg@uc:~$ sudo snap remove chromium 
chromium supprimé 
bzg@uc:~$ snap list
Nom               Version             Révision     Suivi           Éditeur           Notes 
bare              1.0                 5            latest/stable   canonical✓        base 
core20            20220304            1376         latest/stable   canonical✓        base 
gnome-3-38-2004   0+git.1f9014a       99           latest/stable/… canonical✓        - 
gtk-common-themes 0.1-59-g7bca6ae     1519         latest/stable/… canonical✓        - 
snap-store        3.38.0-66-gbd5b8f7  558          latest/stable/… canonical✓        - 
snapd             2.54.4              15177        latest/stable   canonical✓        snapd

La suppression totale des snaps :
sudo snap remove gtk-common-themes
sudo snap remove snap-store
Il est donc possible de désinstaller tous les snaps puis via un :
sudo apt autoremove snapd
on fini la désinstallation de snap et de son magasin

Pour empêcher la réinstallation de snapd il faut créer un fichier
sudo nano /etc/apt/preferences.d/nosnapd
contenant :
Package: snapd
Pin: release *
Pin-Priority: -1

Et voilà un ubuntu sans snaps

En résumé : snap permet d’installer des logiciels facilement mais au prix de beaucoup de ressources, il est possible de supprimer entièrement le magasin « snap »

Visioconférence / Vidéoconférence

En 2020 les confinements firent exploser la demande en visioconférence ce qui provoqua un questionnement totalement justifié : quel outil doit on utiliser ?

Il existe beaucoup d’outils de visioconférence, des solutions hardware avec des caméras et des micros spécialisés qui s’adaptent automatiquement à l’environnement (salle de conférence, studio d’enregistrement, etc) ou des solutions purement logicielles plus adapté au télétravail ou à des communications privées familiale ou entre amis. Parmi ces logiciels de visioconférences nous trouvons des programmes gratuits, payants, propriétaires, open source, pour windows, mac, linux, chiffrés ou non, etc.

Quels sont donc les critères pour choisir le logiciel à installer sur son ordinateur, sa tablette ou son téléphone ?

Le premier critère : le choix déjà fait et donc imposé par l’administrateur de la visioconférence. En effet s’il est demandé de se connecter sur une solution, il sera impossible d’utiliser une autre solution pour rejoindre la conférence. Mais peut-être que vous utilisez déjà un outil que vous maîtrisez ou qui vous est imposé par votre entreprise, là aussi le choix est tout fait.

Vous n’avez pas encore de logiciel de visioconférence et vous devez créer la réunion, comment choisir la meilleur solution ?

Les critères à prendre en compte sont les suivants :
– terminaux utilisés par les invités de la réunion : Téléphones (iPhone, Android, autre), Tablettes (iPad, Android, Windows, autres), Ordinateurs (Windows, Mac, Linux, autre), matériel de visioconférence
– le niveau de sécurité et d’ingérence du logiciel
– payant ou non : ici nous ne verrons que les solutions gratuites (donc pas de GoToMeeting, BlueJeans et autres solutions uniquement payantes)
– nombre maximum de connections simultanée

Recalés dans ce test :
Facetime : limité dans l’environnement Apple
Hangouts : limité à 10 personnes
Zoom : malgré beaucoup de points positifs suite à des problèmes de sécurité début 2020, perte de confiance totale dans la solution
GoToMeeting, BlueJeans : uniquement en version payante

Nous retiendrons 3 solutions :
– Teams : Fonctionne sur Windows, Mac, Linux (Beta à fin 2020), iPhone, Android, via le Web (Google Chrome) ou une communication téléphonique, il y a une version gratuite, et le flux est sécurisé, il faut cependant se connecter via un compte Microsoft
– Skype : Fonctionne sur Windows, Mac, Linux, iPhone, Android, ou via le Web, gratuit, et le flux est sécurisé, il faut cependant se connecter via un compte Microsoft
– Jitsi : Sûrement la solution la plus simple à mettre en œuvre, nous allons détailler son usage ci-après

Jitsi :
Simple, gratuit, pas de compte à créer
– Création d’un salon / d’une visioconférence
1) aller sur le site
https://meet.jit.si
2) dans la case finissant par « Start Meeting », donner un nom de conférence

test_de_conference (mettre ici le nom de la conférence)
puis appuyer sur « Start Meeting »
3) Une page apparaît avec :



Rejoindre la réunion
meet.jit.si/test_de_conference (suivi d’un logo « copier »), en cliquant sur ce lien on copie le lien que l’on pourra mettre d’un un e-mail ou un SMS pour que les autres personnes puissent se connecter
une case « Merci de saisir votre nom ici« , c’est ici que chacun donne son nom
un bouton « Rejoindre la réunion » avec une option sur la droite pour couper son micro en arrivant dans la réunion
deux icônes permettant de savoir si le micro et la caméra sont actifs ou non
une fois le nom saisi dans la case « Merci de saisir votre nom ici » cliquer sur le bouton « Rejoindre la réunion » et la réunion commence
4) Vous êtes seul(e) dans la réunion
s’affiche puisque vous êtes arrivé en premier
en bougeant la souris un bouton « Inviter d’autres personnes » apparaît, en cliquant dessus on retrouve le lien de la conférence mais aussi un menu « Partager l’invitation à la réunion » qui permet soit de copier le lien, soit d’envoyer un e-mail, enfin un numéro de téléphone apparaît pour ce qui se connecterons uniquement par téléphone, un numéro français (+33.1.87.21.0005) est disponible en cliquant sur « Plus de numéros »


5) Utilisation de la visioconférence :
en bas il y a des icônes qui apparaissent lorsqu’on bouge la souris
à gauche :
– un rectangle en forme de bulle de BD pour ouvrir/fermer le chat (discutions texte)
– un petit écran pour partager son écran ou une fenêtre
– une main pour demander la parole
au milieu :
un micro : pour couper / allumer le micro
un combiné téléphonique rouge : pour raccrocher / sortir de la conférence
une caméra : pour couper / allumer la webcam
à droite :
– un utilisateur avec le signe + : pour inviter d’autres participant
– un bouclier : sécurité, c’est ici que l’on peut rajouter un mot de passe à la salle de réunion
– trois points verticaux : menu avec diverses options

En résumé :
soit on passe par le site pour créer son salon / sa conférence, puis pour envoyer les liens : https://meet.jit.si
soit on crée un lien directement avec un nom de conférence puis on l’envoi par messagerie aux participants : https://meet.jit.si/nom_de_la_conference

Savoir si un paquet (un programme) est installé

BUT : Savoir si un paquet (un logiciel) est installé ou non

Il existe plusieurs méthode pour savoir si un paquet est installé, en passant bien sûr par l’interface graphique « Logiciel Ubuntu », mais parfois il est utile dans un code de vérifier si un paquet est déjà installé. Afin d’évité de perdre du temps et utilisant « apt install » pour un logiciel déjà installé.
Si le paquet est déjà installé, apt install vous l’indiquera sinon il l’installera ou le mettra à jour si nécessaire.

voici donc deux méthodes simples pour savoir si un paquet/logiciel est installé ou non :

En utilisant dpkg, avec l’option l (list) :
dpkg -l {package}

exemple pour « thunderbird »

bzg@uc:~$ dpkg -l thunderbird 
Souhait=inconnU/Installé/suppRimé/Purgé/H=à garder 
| État=Non/Installé/fichier-Config/dépaqUeté/échec-conFig/H=semi-installé/W=attend-traitement-déclenchements 
|/ Err?=(aucune)/besoin Réinstallation (État,Err: majuscule=mauvais) 
||/ Nom     Version     Architecture     Description 
+++-==============-================================-============-======================================================> 
ii     thunderbird     1:91.5.0+build1-0ubuntu0.20.04.1 amd64     Email, RSS and newsgroup client with integrated spam f>

Nous pouvons voir que le logiciel est installé ainsi que la version du programme

exemple avec le logiciel « truc »

bzg@uc:~$ dpkg -l truc 
dpkg-query: aucun paquet ne correspond à truc

Visiblement le logiciel n’est pas installé

En utilisant apt-cache (ou apt) :
apt-cache policy {package} | grep Installé
apt policy {package} | grep Installé

bzg@uc:~$ apt-cache policy thunderbird | grep Installé 
  Installé : 1:91.5.0+build1-0ubuntu0.20.04.1 
bzg@uc:~$ apt-cache policy vlc | grep Installé 
  Installé : (aucun)

Nous voyons que « Thunderbird » est installé mais pas « vlc »

En résumé : les commandes « apt-cache policy {package} | grep Installé » ou « dpkg -l {package} » permettent de savoir si un logiciel est installé sans passer par l’interface graphique

Personnalisation d’un CD Ubuntu

BUT : Créer un CD live d’Ubuntu modifié afin de le personnaliser avec nos outils ou nos configurations

L’idéal est d’utiliser une machine virtuelle sur laquelle est installé un Ubuntu 20.04 LTS et sur laquelle toutes les mises à jour ont été effectuées

Installation des outils :

sudo apt-get install -y squashfs-tools schroot genisoimage xorriso

Mise en place de l’environnement :

bzg@uc:~$ mkdir cdlive 
bzg@uc:~$ cd cdlive 
bzg@uc:~/cdlive$ mkdir iso squashfs

Copie du CD ou de l’ISO du CD dans le répertoire « iso » :

Dans le cas où le CD est monté automatiquement

bzg@uc:~/cdlive$ sudo cp -va /media/bzg/Ubuntu\ 20.04.4\ LTS\ amd64/. iso

Il faut remplacer « bzg » par votre nom d’utilisateur et « Ubuntu\ 20.04.4\ LTS\ amd64 » par le nom du CD qui apparaît au montage du CD
Attention à ne pas oublier les « \ » devant les espaces

Dans le cas où c’est l’image « iso » qui est utilisée il faut monter l’image avant la copie puis la démonter

bzg@uc:~/cdlive$ sudo mount -o loop /home/bzg/Téléchargements/Ubuntu\ 20.04.4\ LTS\ amd64.iso /mnt
bzg@uc:~/cdlive$ sudo cp -av /mnt/. iso 
bzg@uc:~/cdlive$ sudo umount /mnt

Montage et copie du « squafs » dans le répertoire squahfs puis démontage
C’est le contenu système du CD

bzg@uc:~/cdlive$ sudo mount -t squashfs -o loop iso/casper/filesystem.squashfs /mnt bzg@uc:~/cdlive$ sudo cp -va /mnt/. squashfs 
bzg@uc:~/cdlive$ sudo umount /mnt

Passage en mode « chroot »

bzg@uc:~/cdlive$ sudo mount --bind /proc squashfs/proc 
bzg@uc:~/cdlive$ sudo mount --bind /sys squashfs/sys 
bzg@uc:~/cdlive$ sudo mount -t devpts none squashfs/dev/pts 
bzg@uc:~/cdlive$ sudo mount --bind /dev squashfs/dev 
bzg@uc:~/cdlive$ sudo mount --bind /dev/pts squashfs/dev/pts 
bzg@uc:~/cdlive$ sudo cp /etc/resolv.conf squashfs/etc/resolv.conf 
bzg@uc:~/cdlive$ sudo chroot squashfs root@uc:/#

Vous remarquerez que nous sommes en mode « root », mais dans un environnement cloisonné à cdlive/squashfs
Pour notre exemple nous aurons besoin d’installer des programmes qui sont dans « universe »
Installons le dépôt « universe » puis faisons une mise à jour du système qui se trouve dans le chroot

root@uc:/# echo 'deb http://fr.archive.ubuntu.com/ubuntu/ focal universe' >> /etc/apt/sources.list 
root@uc:/# apt update

Vous pouvez faire les mise à jour, mais je ne vais pas le faire afin de garder le même niveau que la version d’origine (avec : apt dist-upgrade)
Sélectionnons le clavier français (azerty / french)

root@uc:/# apt install console-data

S’il y a des erreurs au sujet de ‘zsys’ c’est normal et nous allons le corriger en supprimant les programmes inutiles

root@uc:/# apt purge zsys

Puis les langues inutiles (à vous de voir)

root@uc:/# apt purge libreoffice-help-ru libreoffice-help-de libreoffice-help-pt-br libreoffice-help-it libreoffice-help-es libreoffice-help-pt language-pack-gnome-ru-base language-pack-pt-base language-pack-gnome-de-base language-pack-de-base language-pack-ru-base language-pack-gnome-es-base language-pack-es-base gnome-getting-started-docs-de gnome-getting-started-docs-es gnome-getting-started-docs-ru gnome-getting-started-docs-it gnome-getting-started-docs-pt language-pack-gnome-zh-hans-base language-pack-zh-hans-base language-pack-it-base

Enfin installons quelques programmes utiles (utilisez atp instal )
ssh : pour activer la connection en ssh
chntpw : pour supprimer les mots de passe Windows
grub-customizer : pour gérer les boots EFI

root@uc:/# apt install ssh chntpw grub-customizer

Nous faisons à présent un peu de ménage

root@uc:/# apt autoremove
root@uc:/# apt autoclean
root@uc:/# rm /etc/resolv.conf
root@uc:/# rm /etc/hosts

Puis nous démontons les répertoires

root@uc:/# umount -lf /sys 
root@uc:/# umount -lf /proc
root@uc:/# umount -lf /dev/pts

Nous sortons du mode ‘chroot’

root@uc:/# exit
bzg@uc:~/cdlive$

Nous pouvons copier des fichiers qui apparaîtrons dans le ‘home’ de l’utilisateur dans l’arborescence ‘squashfs/etc/skel’
Pour copier un fichier tuto pour la configuration du wifi, téléchargeons une page web que nous mettrons dans ~Téléchargement et que nous appellerons ‘wifi.html’, puis lançons sa copie par

bzg@uc:~/cdlive$ sudo cp ~/Téléchargements/wifi.html squashfs/etc/skel/

Pour lancer des commandes au démarrage il suffit de modifier le fichier .profile

bzg@uc:~/cdlive$ sudo nano squashfs/etc/skel/.profile
GNU nano 4.8 squashfs/etc/skel/.profile Modifié 
# Mettre à la fin du fichier .profile 
# test si connexion internet sinon ffichage d'un fichier html 
test="$(ping -c 2 google.com | grep '2 re')" 
if [ ! "$test" ] 
then 
   # Pas de connection internet affichage d'un tuto sur le wifi 
   firefox ~/wifi.html 
   fi 
   
^G Aide     ^O Écrire     ^W Chercher     ^K Couper     ^J Justifier     ^C Pos. cur.    M-U Annuler    M-A Marquer 
^X Quitter  ^R Lire fich. ^\ Remplacer    ^U Coller     ^T Orthograp.    ^_ Aller ligne M-E Refaire     M-6 Copier

Puis sortir par ctrl-X

Pour utiliser le Français par défaut

bzg@uc:~/cdlive$ echo "fr" | sudo tee iso/isolinux/lang

Création du CDLIVE

bzg@uc:~/cdlive$ sudo chmod a+w iso/casper/filesystem.manifest 
bzg@uc:~/cdlive$ sudo chroot squashfs dpkg-query -W --showformat='${Package} ${Version}\n' > iso/casper/filesystem.manifest 
bzg@uc:~/cdlive$ sudo chmod go-w iso/casper/filesystem.manifest 
bzg@uc:~/cdlive$ sudo rm iso/casper/filesystem.squashfs

Création du squashfs puis reconstruction de l’ISO

bzg@uc:~/cdlive$ cd squashfs 
bzg@uc:~/cdlive/squashfs$ sudo mksquashfs . ../iso/casper/filesystem.squashfs -info bzg@uc:~/cdlive/squashfs$ cd ../iso 
bzg@uc:~/cdlive/iso$ sudo bash -c "find . -path ./isolinux -prune -o -type f -not -name md5sum.txt -print0 | xargs -0 md5sum | tee md5sum.txt" 
bzg@uc:~/cdlive/iso$ sudo mkisofs -U -A "ubuntu-20-04-efi" -V "ubuntu-20-04-efi" -volset "ubuntu-20-04-efi" -J -joliet-long -r -v -T -o ../ubuntu-20-04-efi.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -eltorito-alt-boot -e boot/grub/efi.img -no-emul-boot . 
bzg@uc:~/cdlive/iso$ cd .. 
bzg@uc:~/cdlive$ sudo apt install syslinux-utils 
bzg@uc:~/cdlive$ sudo isohybrid -u ubuntu-20-04-efi.iso

Comparer deux répertoires sous Ubuntu

BUT : retrouver rapidement les différences existantes entre deux répertoires sous Ubuntu en ligne de commande

S’il est facile en mode graphique de comparer deux répertoires contenant peu de fichiers, cela devient vite compliqué lorsque que nous devons comparer plusieurs dizaines de fichiers

En ligne de commande il suffit d’utiliser la commande « diff » ainsi :
diff -rq repertoire1 repertoire2

bzg@uc:~$ diff -rq Images/src Images/dst
Seulement dans Images/dst: 10403.jpg
Seulement dans Images/dst: 11687.jpg

Dans ce premier exemple nous constatons que deux fichiers ne se trouvent que dans le répertoire « Images/dst »

Prenons un deuxième exemple avec des différences plus importantes

bzg@uc:~$ cd Images
bzg@uc:~/Images$ diff -rq src dst
Les fichiers src/10403.jpg et dst/10403.jpg sont différents
Seulement dans dst: 10927.jpg
Seulement dans dst: 11687.jpg
Seulement dans src: 12231.jpg

Nous sommes rentré dans le répertoires « Images » afin de simplifier le chemin des répertoires à comparer
Cette fois ci, nous constatons qu’un fichier existe dans les deux répertoires mais n’a pas le même contenu (fichiers différents)
Deux fichiers n’existent que dans le répertoire « dst » alors qu’un fichier n’existe que dans le répertoire « src »

Les options -r et -q correspondent à :
-r : recursif, explore tous les répertoires et sous répertoires
-q : quick, indique seulement les fichiers différents (sans afficher le contenu des différences)

En résumé :
La commande « diff » qui permet d’afficher les différences entre deux fichiers peut être utilisée pour trouver les différences de contenu de deux répertoires

Trouver des fichiers contenant une chaîne

BUT : trouver les fichiers contenant une chaîne alphanumérique

Méthode avec « find »
find . | xargs grep {chaine} -sl

Méthode avec « grep »
grep -rli {chaine} .

Exemples :

Nous avons créer deux fichiers clients pour faire notre test

Un fichier clients-2020.txt qui contient :

Goland 09/06/20 \ Prospect 
Salist 10/08/20 \ Prospect \ Client
Trucks 20/12/20 \ Prospect

Et un fichier clients-2021.txt qui contient :

Hermat 20/02/21 \ Prospect 
Appres 12/12/21 \ Prospect \ Client

Recherchons les fichiers contenant la chaîne ‘Salist’

bzg@uc:~/Documents$ find . | xargs grep Salist -sl 
./clients-2020.txt 
bzg@uc:~/Documents$ grep -rli Salist . 
./clients-2020.txt 
bzg@uc:~/Documents$ grep -rli 'Salist' . 
./clients-2020.txt 
bzg@uc:~/Documents$ grep -rli "Salist" . 
./clients-2020.txt

La chaîne ‘Salist’ étant simple et sans caractère système, nous pouvons écrire cette chaîne sans délimiteur ou avec les apostrophes simples ou doubles, il n’y aura aucune différence

Recherchons les clients  ou prospects de ‘2020’

bzg@uc:~/Documents$ find . | xargs grep "20" -sl 
./clients-2021.txt 
./clients-2020.txt

Nous constatons que les fichiers 2020 et 2021 sont retournées, en effet la recherche sur « 20 » renvoi aussi le fichier contenant ’20/02/21′ puis 20 s’y trouve
Nous devons donc faire une recherche sur ‘/20’

bzg@uc:~/Documents$ find . | xargs grep "/20" -sl 
./clients-2020.txt

Recherchons les fichiers contenants des clients donc avec la chaîne ‘\ Client’, il faut impérativement délimiter la chaîne à cause de l’espace et échapper le caractère système ‘\’ en le faisant précéder d’un autre caractère ‘\’ soit la chaîne ‘\ Client’

bzg@uc:~/Documents$ find . | xargs grep '\\ Client' -sl 
./clients-2021.txt 
./clients-2020.txt

En résumé : on peut rechercher les fichiers contenant une chaîne en utilisant ‘find’ et / ou ‘grep’

Affichage des sous répertoires

BUT : Afficher les sous répertoires (l’arborescence)

Méthode rapide et simple avec ‘find’
find . -type d

bzg@uc:~$ find . -type d 
. 
./.gnupg 
./.gnupg/private-keys-v1.d 
./Modèles 
./.config 
./.config/gtk-3.0 
./.config/pulse 
[...] 
./.cache 
./.cache/thumbnails 
./.cache/thumbnails/large 
[...] 
./.ssh 
./Bureau 
./Téléchargements 
./Musique 
./Vidéos 
./Public 
./snap 
./snap/snap-store 
./snap/snap-store/558 
[...] 
./.local 
./.local/share 
[...] 
./Documents 
./Images

Nous pouvons voir l’arborescence complète à partir du répertoire ‘home’ de l’utilisateur, les […] servent à raccourcir le listing pour éviter de se dérouler sur 10 pages

Méthode classe avec un petit script
Créer le script suivant via ‘nano arbo’

#!/bin/sh
dir=${1:-.}
cd ${dir};
pwd
find ${dir} -type d -print | sort -f | sed -e « s,^${dir},, » -e « /^$/d » -e « s,[^/]*/\([^/]*\)$,\`—–\1, » -e « s,[^/]*/, | ,g »;

le rendre exécutable grâce à ‘chmod +x arbo’
puis l’exécuter avec le nom du répertoire à explorer comme paramètre

bzg@uc:~/bin$ nano arbo 
bzg@uc:~/bin$ chmod +x arbo 
bzg@uc:~/bin$ ./arbo ~ 
/home/bzg 
`-----bin 
`-----Bureau
`-----.cache 
 |    `-----evolution 
 |     |    `-----addressbook 
 |     |     |     `-----trash 
 |     |    `-----calendar 
 |     |     |     `-----trash 
 |     |    `-----mail 
 |     |     |     `-----trash 
 |     |    `-----memos 
 |     |     |     `-----trash 
 |     |    `-----sources 
 |     |     |     `-----trash 
 |     |    `-----tasks 
 |     |     |     `-----trash 
 |     `-----fontconfig 
 |     `-----gstreamer-1.0 
 |     `-----ibus 
 |     |    `-----bus 
 |     `-----ibus-table 
 |     `-----libgweather 
 |     `-----mesa_shader_cache 
 |     |     `-----01 
 [...] 
 |     |     `-----ff 
 |     `-----thumbnails 
 |     |     `-----large 
 |     `-----tracker 
 |     `-----ubuntu-report 
 |     `-----update-manager-core 
 `-----.config 
 |     `-----dconf 
 |     `-----evolution 
 |     |     `-----sources 
 |     `-----gnome-session 
 |     | `-----saved-session 
 |     `-----goa-1.0 
 |     `-----gtk-3.0 
 |     `-----ibus 
 |     |     `-----bus 
 |     `-----nautilus 
 |     `-----pulse 
 |     `-----update-notifier 
 `-----Documents 
 `-----.gnupg 
 |     `-----private-keys-v1.d 
 `-----Images 
 `-----.local 
 |     `-----share 
 |     |     `-----applications 
 |     |     `-----evolution 
 |     |     |     `-----addressbook 
 |     |     |     |     `-----system 
 [...] 
 |     |     `-----sounds 
 |     |     `-----tracker 
 |     |     |     `-----data 
 |     |     `-----xorg 
 `-----Modèles 
 `-----Musique 
 `-----Public 
 `-----snap 
 |     `-----snap-store 
 |     |     `-----558 
 |     |     |     `-----.config 
 |     |     |     |     `-----autostart 
 [...] 
 |     |     |     |     `-----immodules 
 `-----.ssh 
 `-----Téléchargements 
 `-----Vidéos

Comme pour le premier exemple les […] sont là pour éviter des pages et des pages de listing

En résumé : Nous pouvons afficher une arborescence de répertoire avec la commande ‘find’ en mode simple ou en mode script

Affichage uniquement des répertoires

BUT : N’afficher que les répertoires du niveau actuel

Utiliser l’option -d sur la commande ‘ls’ sans oublier de mettre *
ls -d */
ls -dl */ (pour avoir toutes les informations sur les répertoires)

Exemples :

bzg@uc:~$ ls -d */ 
bin/ Bureau/ cdlive/ Documents/ Images/ Modèles/ Musique/ Public/ snap/ Téléchargements/ 
Vidéos/ 
bzg@uc:~$ ls -dl */ 
drwxrwxr-x 2 bzg bzg 4096 mars 30 00:15 bin/ 
drwxr-xr-x 2 bzg bzg 4096 mars 7 13:41 Bureau/ 
drwxrwxr-x 5 bzg bzg 4096 mars 13 18:07 cdlive/ 
drwxr-xr-x 2 bzg bzg 4096 mars 7 13:41 Documents/ 
drwxr-xr-x 2 bzg bzg 4096 mars 29 19:57 Images/ 
drwxr-xr-x 2 bzg bzg 4096 mars 7 13:41 Modèles/ 
drwxr-xr-x 2 bzg bzg 4096 mars 7 13:41 Musique/ 
drwxr-xr-x 2 bzg bzg 4096 mars 7 13:41 Public/ 
drwx------ 3 bzg bzg 4096 mars 29 14:04 snap/ 
drwxr-xr-x 2 bzg bzg 4096 mars 12 17:58 Téléchargements/ 
drwxr-xr-x 2 bzg bzg 4096 mars 7 13:41 Vidéos/

En résumé : L’option -d de la commande ls permet de visualiser les répertoires contenu dans le répertoire actuel