VIM 01 – Entrer et sortir de Vim et Vimtutor

Beaucoup de choses ont déjà été publiés sur le sujet, j’en suis conscient, j’espère faire découvrir Vim d’une façon différente et c’est surtout un prétexte pour m’y replonger, me redonner le reflex Vim et certainement me perfectionner.

Ce premier billet sur le sujet est très basique, le but est de savoir entrer et sortir de vim d’apprendre le minimum syndical au niveau des commandes pour éviter de revenir sur certaines commandes dans les articles qui suivront.

Je ne compte pas parler des versions graphiques, ni comment installer Vim car il me semble que cela l’est par défaut sur toutes les distributions linux (je n’ai pas souvenir d’avoir fait un jour « apt-get [ou apt] install vim », mais bon.)[voir les commentaires en fin de billet]. Je ne rentrerai pas dans la bataille Vim contre Emacs, ni dans les comparaisons avec d’autres éditeurs de textes que j’utilise régulièrement « Gedit« , « Nano » qui ont aussi toute leur utilité.

Là c’est simple, ouvrez une console et tapez « vim » :

$ vim
Capture d'écran de l'éditeur Vim en version 8.0.707, affichant les informations de version, les crédits (Bram Moolenaar et al.) et les instructions d'aide pour les utilisateurs. L'interface est en mode terminal avec un fond noir et du texte vert.
Cette image montre l’écran de démarrage de Vim, un éditeur de texte puissant et populaire dans le monde du logiciel libre. On y voit la version 8.0.707, les crédits des contributeurs, et des instructions pour obtenir de l’aide ou quitter le programme.

Comment sortir de l’éditeur Vim ?

Vous êtes coincé dans l’éditeur de Vim et vous ne savez pas comment en sortir ? Vous n’êtes pas le seul à qui cela est arrivé !

Pourtant c’est écrit à l’ouverture de vim.

Mais cela arrive au débutant, surtout si pour une raison quelconque, un fichier a été ouvert dans l’éditeur Vim (que vous découvrez) et que vous souhaitez quitter mais ne trouvez pas comment le faire, nous allons maintenant voir la solution. Mais ne soyez pas frustré, vous n’êtes pas le premier.

Une question banale ?

Le site web Stack Overflow est l’une des communautés de développeurs importantes et réputées qui cherchent des solutions, de l’aide sur la façon de résoudre les différents problèmes rencontrés par les programmeurs de nombreux domaines et langages.
Et pourtant il y a la question d’un utilisateur qui demande à la communauté comment sortir de l’éditeur de Vim ? Alors une question plutôt banale… ou pas tant que ça ! il suffit de lire le fil pour voir l’importance de la question.
Pendant des années, cette question a été une blague récurrente sur certains réseaux sociaux.

Alors que personne ne se moque de ceux qui pose la question et ne retardons pas plus longtemps la solution. Voici la réponse à la question « comment sortir de l’éditeur Vim? » :

  • Appuyez sur la touche Echap ou Esc. Le curseur va se placer en bas (la zone de commande)
  • Appuyez sur la séquence de touches :q
  • Vous pouvez également appuyer sur :q! pour quitter l’éditeur sans enregistrer les modifications
  • Appuyez sur la touche Entrée

Résumé des commandes. D’abord, nous appuyons sur Echap ou Esc pour nous placer dans le tampon inférieur en mode normal, et :

  • : q → quitte le fichier, si nous n’avons aucune modification sans l’enregistrer, il suffit de quitter.
  • : q! → quitte le fichier en supprimant les modifications non enregistrées.
  • : w → enregistre les modifications apportées au fichier, mais ne quitte pas Vim pour continuer à modifier le fichier.
  • : wq → enregistrer les modifications et quitter Vim.
  • : x → identique à la précédente.

Bien, vous savez entrer et sortir de l’éditeur Vim. Bon, finalement rien de compliqué jusque-là, alors passons à la suite, c’est encore plus simple.

VimTutor

Une application pour apprendre pas à pas les premières commandes sur Vim, avec cela vous allez vous familiariser avec Vim.
Bah, pourquoi tu n’as pas commencé par ça Sima78 ?
Commencer par quelques difficultés lorsque l’on découvre une application (bon, ce n’était pas non plus l’enfer…) et que l’on passe soudainement à quelque chose de plus ludique, celui qui n’a pas décroché va se dire « bah, moi aussi je peux utiliser Vim »… Du moins j’espère que ce sera la réaction du débutant.

Donc Vimtutor pour apprendre pas à pas, il faut commencer par l’installer (sur Debian et dérivées) :

# apt install vimtutor

ou

$ sudo apt install vimtutor

Puis on lance Vimtutor

$ vimtutor

Le résultat :

Capture d'écran du tutoriel Vim en français, affichant une introduction au logiciel Vim, ses objectifs pédagogiques, et des instructions pour configurer son clavier avant de commencer le cours.
Cette image montre la première page du tutoriel Vim en français, version 1.7. Elle explique l’objectif du cours, la durée estimée, et donne des conseils pour bien démarrer, notamment en vérifiant l’état du clavier.

Suivez le tuto pendant 25, 30 minutes. Recommencez jusqu’à bien maîtriser ces commandes de bases, vous aurez l’essentiel pour commencer à utiliser basiquement Vim et surtout pour aller plus loin.

Fin de ce billet sur Entrer et sortir de Vim et Vimtutor.

Pour retrouver les billets concernant la série Vim:
Application Vim sur le tag Vim

Iptables – insserv: warning: script ‘moniptables’ missing LSB tags and overrides

Ces derniers temps j’avais le message suivant:

insserv: warning: script 'moniptables' missing LSB tags and overrides

Ceci-dit, cela n’empêchait pas de fonctionner.
Je jette un oeil sur l’entête:

$ more /etc/init.d/moniptables | less
#!/bin/bash

## BEGIN INIT INFO
# Provides:          moniptables
# Required-Start:
# Required-Stop:
# Default-Start:
# Default-Stop:
### END INIT INFO

J’arrête le service:

# service moniptables stop

Avec un éditeur je le modifie ainsi:

#!/bin/bash
### BEGIN INIT INFO
# Provides:          moniptables
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Démarre les règles iptables
# Description:       Charge la configuration du pare-feu iptables
### END INIT INFO

Je relance le service

# service moniptables start

Je vérifie:

# service moniptables status
● moniptables.service
   Loaded: loaded
   Active: active (exited) since dim. 2019-07-07 17:59:10 CEST; 36s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 2048 ExecStart=/etc/init.d/moniptables start (code=exited, status=0/SUCCESS)

J’automatise le démarrage.

# update-rc.d -f moniptables default

Tout fonctionne correctement!

Petit clin d’oeil à Tutox pour son update-rc.d (on se comprend, c’est entre nous…).

Renouvellement des certificats LetsEncrypt et message d’erreur.

Arrive le moment du renouvellement de mes certificats Let’s Encrypt. Oui, je sais, il suffit de le faire de façon automatique par une tâche cron… Mais cela n’aurait pas empêché les messages d’erreurs.

Il faut dire que j’avais un peu « bricolé » mon serveur ses derniers temps et activé de nouveaux sites et autres bricoles.

Bref, je lance le renouvellement des certificats par:

# /opt/letsencrypt/letsencrypt-auto renew

Et là j’ai le message d’erreur suivant:

(...)
Attempting to renew cert (chispa.fr/) from /etc/letsencrypt/renewal/chispa.fr.conf produced an unexpected error: Unable to find a virtual host listening on port 80 which is currently needed for Certbot to prove to the CA that you control your domain. Please add a virtual host for port 80.. Skipping.
All renewal attempts failed. The following certs could not be renewed:
  /etc/letsencrypt/livechispa.fr/fullchain.pem (failure)
(...)

Et plus d’accès en https
Suite à cela, je vous fais grâce de toutes mes tentatives de réparation plus laborieuses les unes que les autres multipliant les messages d’erreur.

Il y a un moment où il faut savoir se lever de sa chaise, prendre un thé…

Il y a un moment où il faut savoir se lever de sa chaise, prendre un thé avec des biscuits pour prendre du recul et appréhender le problème la tête reposée.

Je décide donc de faire le ménage, sur le serveur, la maison ça attendra.

Je désactive tous les sites dans /etc/apache2/sites-enabled/ avec la commande a2dissite

# a2dissite nom-du-site.fr

Je refais le site 000-default.conf dans /etc/apache2/sites-available/

# nano /etc/apache2/sites-available/000-default.conf

Configuration au plus simple :

<VirtualHost *:80>
# Redirect permanent / https://sima78.chispa.fr/
        ServerName chispa.fr/
        ServerAdmin mon-mail@truc.fr
        DocumentRoot /var/www/
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

Redémarrage d’Apaches2

# systemctl restart apache2

Je recrée des certificats tout neufs

# /opt/letsencrypt/letsencrypt-auto --apache --renew-by-default -d monsite.fr

Au message :

1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.

J’ai choisi l’option 2

Tout c’est bien passé, pas de message d’erreur.

Reste à modifier le fichier de configuration Stunnel, car j’ai Geneweb qui tourne en service en passant par Stunnel pour un accès en https à Geneweb.

# nano /etc/stunnel/stunnel.conf

Je modifie les lignes pour mettre le chemin des nouveaux certificats

cert=/etc/letsencrypt/livechispa.fr/-0002/fullchain.pem
key=/etc/letsencrypt/livechispa.fr/-0002/privkey.pem

Un « reboot » et tout fonctionne de nouveau jusqu’à la prochaine aventure.
Pour info, la configuration réécrite de 000-default.conf lors de la création des nouveaux certificats :

<VirtualHost *:80>
# Redirect permanent / https://sima78.chispa.fr/
        ServerName chispa.fr/
        ServerAdmin chispa.admin@free.fr
        DocumentRoot /var/www/
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
RewriteEngine on
RewriteCond %{SERVER_NAME} =chispa.fr/
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noete

Pour automatiser le renouvellement de certificats, je vous invite à lire l’excellent billet de Tutox « Renouveler automatiquement son certif Let’s Encrypt (one shot)« 

Wget – Aspirer un site n’est pas un crime

Aspirer un site n’est pas un crime, ni un vol, tout dépend le but !

Avant de donner les lignes de commande, l’anecdote qui m’a poussé a utiliser wget pour aspirer un site.
Pour la petite histoire
Je m’intéresse à la généalogie et j’ai moi-même un site sur la généalogie de ma famille sous geneweb.
Il y a quelques années déjà j’ai découvert un site qui regroupe une branche de ma famille. Pour ce qui concerne la branche de ma famille rien de vraiment nouveau sauf quelques cousins très éloignés.
Par contre le travail effectué sur cet arbre généalogique est pharaonique.
Soit, le site est un cms dépassé et plus suivi depuis déjà plus de deux ans à l’époque. J’alerte donc le gestionnaire du site des risques, j’échange avec lui, une sympathie s’installe et surtout un gros respect de ma part. Je parcours même de milliers de kilomètres pour le rencontrer. Ce fût pour moi une rencontre mémorable.
Nous avons continuer d’échanger mais il est resté sur ce cms de généalogie complètement dépassé malgré mes avertissements.

Puis, un jour, et les jours suivants, plus de nouvelles, plus de réponses à mes mails… j’insiste de nombreux mois, rien, pas de signe de vie.
Inquiet, je décide d’aspirer son site pour que tout le travail qu’il a effectué ne soit pas perdu (je mets plus bas la ligne de commande utilisée).

Je me suis fait traité de tous les noms d’oiseaux

Pour tenter de faire mieux je vais sur un forum et demande si quelqu’un n’aurait pas connaissance d’un script permettant de créer un fichier Gedcom depuis le site aspiré… J’ai été traité de voleur, d’escroc et autres allégations désagréables. Ça m’a rappelé ma jeunesse, lorsque je trollais sur les forums, sauf que là, je ne trollais pas. Bon, après quelques explications, nombreux m’ont soutenu dans ma démarche, quelques rares obtus ont continué leurs réprobations, de plus en plus timidement pour finalement s’éteindre.

Bref ! Je n’ai pas de script pour créer un gedcom mais j’ai le travail d’une personne dans un coin de mon disque dur que je remettrai à un de ses descendants, du moins j’espère car il n’a de valeur que pour eux.

Passons à Wget et quelques commandes

Aspirer un site web

Le mieux est de contacter le gestionnaire du site pour lui demander si l’on peut vous envoyer les informations qui vous intéressent. L’intérêt de l’aspiration est d’avoir les infos du site Off-Line. Mais évitez d’en abuser, utilisez-le que lorsqu’il n’y a vraiment pas d’autres solution (ou pour télécharger des fichiers, c’est un autre usage et c’est aussi plus bas).
Certains serveurs sont protégés contre l’aspiration de site et il se peut que cela ne fonctionne pas.

Wget et aspirer un site

# wget -r -k -E -np --limit-rate=100k https://site-aspired.com

Cible est https://site-aspired.com.
Options :
-r pour parcourir tous les liens du sites.
-k conversion des liens en liens locaux.
-E conversion php vers HTML, facilite la lecture depuis votre navigateur.
-np pour ne pas remonter dans l’arborescence du site
–limit-rate=100k limite la vitesse de téléchargement à 100k/s

Toutes les lignes de commande ci-dessous m’ont été inspirées par le site de TecMint et plus particulièrement par le billet traitant wget

Utiliser wget pour télécharger des fichiers

Téléchargement d’un fichier

# wget http://ftp.gnu.org/gnu/wget/wget-1.19.5.tar.gz

La commande téléchargera le fichier dans un répertoire actuel. Il montre aussi le progrès de téléchargement, la taille, la date et heure.

Télécharger un fichier en le renommant

# wget -O wget.zip http://ftp.gnu.org/gnu/wget/wget-1.19.5.tar.gz

L’utilisation-O l’option (majuscule), télécharge le fichier en le renommant. Ici nous avons choisi le nom « wget.zip » comme exemple.

Téléchargez plusieurs fichiers avec les protocoles ftp et http

# wget http://ftp.gnu.org/gnu/wget/wget-1.19.5.tar.gz ftp://ftp.gnu.org/gnu/wget/wget-1.19.5.tar.gz.sig

Ici nous voyons comment télécharger de multiples fichiers en utilisant les protocoles HTTP et FTP avec la commande de wget.
Téléchargez depuis plusieurs URLs d’un fichier
Vous pouvez stocker plusieurs URLs dans un fichier texte et les télécharger avec l’option -i. Ci-dessous nous avons créé tmp.txt dans le répertoire wget où nous mettons la série d’URL (1 par ligne).
Exemple :

nano /wget/tmp.txt

Ajoutez les lignes:

http://ftp.gnu.org/gnu/wget/wget-1.19.5.tar.gz
ftp://ftp.gnu.org/gnu/wget/wget-1.19.5.tar.gz.sig

Il suffit de lancer:

# wget -i /wget/tmp.txt

Reprenez un téléchargement inachevé

En cas de téléchargement de gros fichiers, il peut arriver que le téléchargement s’interrompre pour une raison quelconque. Avec l’option -c le téléchargement reprendra là où il s’est arrêté.
Sans cet option le téléchargement reprendra depuis le début et wget ajoutera « .1 » à la fin du nouveau fichier.
L’option -c est donc la bonne pratique.

# wget -c https://cdimage.debian.org/debian-cd/current/amd64/iso-dvd/debian-9.5.0-amd64-DVD-1.iso

Si « .1 » existe déjà il ajoutera « .2 », etc.

Télécharger en arrière-plan

Avec l’option -b, envoyez le téléchargement en arrière-plan immédiatement après le début du téléchargement, les journaux sont écrits dans le fichier /wget/log.txt.

# wget -b /wget/log.txt ftp://ftp.iinet.net.au/debian/debian-cd/6.0.5/i386/iso-dvd/debian-6.0.5-i386-DVD-1.iso
Continuing in background, pid 3550.

Limiter la vitesse de téléchargement
Avec Option –limit-rate = 100k, le téléchargement est limitée à 100k/s et les journaux sont créés sous /wget/log.txt, comme indiqué ci-dessous.

# wget -c --limit-rate=100k  /wget/log.txt https://cdimage.debian.org/debian-cd/current/amd64/iso-dvd/debian-9.5.0-amd64-DVD-1.iso

Téléchargent FTP ou HTTP avec identification
Avec des Options -http-user=username, -http-password=password et -ftp-user=username, -ftp-password=password, vous pouvez télécharger avec Login/mot_de_passe

# wget --http-user=narad --http-password=password http://mirrors.fantome.in/truc/machin-LiveDVD.iso
# wget --ftp-user=narad --ftp-password=password ftp://ftp.fantome.net.au/truc/machin-LiveDVD.iso

WGET – Version et aide

$ wget --version
$ wget --help
$ man wget

Script pour supprimer les doublons dans un fichier

Il s’agit d’un petit script, qui m’est bien utile, que j’avais pompé je ne sais où et que j’avais légèrement modifié à ma sauce.

Je vous le mets plus bas, à vous de le remodifier, améliorer à votre sauce.

echo -n "Entrez le chemin du fichier (ex. /home/user/.bash_history) : "
read fichier
doublons="$(cat $fichier | sort | uniq -d)"
if [ "$doublons" != "" ]; then
for line in $(seq 1 $(echo "$doublons" | wc -l)); do
texteAsuppr=$(echo "$doublons" | sed $line!d)
lignesAsuppr=$(grep -n "$texteAsuppr" $fichier | sed -e 1d -e 's/\([0-9]*\):.*/-e \1d/')
sed $lignesAsuppr -i $fichier
done
fi 
echo "TERMINÉ !"echo

N’oubliez pas de faire un petit « chmod +x » sur le fichier pour le rendre éxecutable.

Comment installer VM VirtualBox sur Debian 9 (Stretch) ou autres distributions

VM VirtualBox est un logiciel libre et open source de virtualisation publié par Oracle. Bien entendu il est disponible pour GNU/Linux mais aussi pour Windows.

Par défaut, les packages de VM VirtualBox ne sont pas disponibles dans les dépôts de paquets de la Debian 9 (nom de code « Stretch« ).

Nous allons donc voir comment installer la dernière version de Oracle VM Virtualbox sur debian.

Allez déjà faire un tour du côté d’Oracle pour connaître quelle est la dernière version de VM Virtualbox. À ce stade, en cliquant sur l’onglet « Downloads » vous pouvez voir les différents « paquets ou sources » au téléchargement proposés aux diverses distributions et systèmes d’exploitations.

Mais si on souhaite avoir un suivi des mises-à-jour… Sous linux il nous suffit de configurer les dépôts, pour Debian c’est là… Voyons comment faire :
Rappel : $=User    #=Root

Étape 1 : Ajout du dépôt VM VirtualBox

Ouvrez le terminal et exécutez la commande suivante pour ajouter le dépôt.

# apt-add-repository 'deb http://download.virtualbox.org/virtualbox/debian stretch contrib'

Étape : 2 Ajouter une clé publique de VirtualBox

# curl -O https://www.virtualbox.org/download/oracle_vbox_2016.asc
# apt-key add oracle_vbox_2016.asc

Étape 3 : Installez VirtualBox avec la commande apt-get

# apt-get update
# apt-get install virtualbox

La version n’étant pas spécifiée vous aurez un message comme ci-dessous

Le paquet virtualbox est un paquet virtuel fourni par :
  virtualbox-5.2 5.2.2-119230~Debian~stretch
  virtualbox-5.1 5.1.30-118389~Debian~stretch
  virtualbox-5.0 5.0.40-115130~Debian~stretch
Vous devez explicitement sélectionner un paquet à installer.
E: Le paquet « virtualbox » n'a pas de version susceptible d'être installée

C’est le moment de choisir la dernière version…

# apt-get install virtualbox-5.2 5.2.2

Une fois l’installation terminée, essayez maintenant d’y accéder.

Accéder à VirtualBox

Interface de recherche du système d'exploitation affichant VirtualBox comme résultat pour "vm virtualbox".
Cette capture montre l’interface de recherche du système d’exploitation, où l’utilisateur a saisi « vm virtualbox ». L’icône de VirtualBox est visible dans les résultats, indiquant que l’application est installée et prête à être lancée.

Cliquez sur l’icône de la VM VirtualBox

Interface principale de VirtualBox affichant le gestionnaire de machines virtuelles avec un message de bienvenue et des instructions pour créer une nouvelle machine virtuelle.
Cette capture montre l’interface principale de VirtualBox, où aucun machine virtuelle n’a encore été créée. Un message de bienvenue guide l’utilisateur pour créer sa première machine virtuelle en utilisant le bouton « Nouvelle ».

Installer le pack d’extension VirtualBox

Il est recommandé d’installer le module d’extension après l’installation de la VirtualBox. Pour installer le pack d’extension VirtualBox 5.2, nous devons d’abord télécharger le fichier du pack d’extension en utilisant la commande wget suivante :

$ wget http://download.virtualbox.org/virtualbox/5.2.2/Oracle_VM_VirtualBox_Extension_Pack-5.2.2-119230.vbox-extpack

Pour être certain de bien charger la bonne extension pack, vérifiez ici.
Une fois le fichier téléchargé, accédez à l’interface graphique de VirtualBox et allez sur:
Fichier -> Paramètres -> Extensions et sélectionnez le fichier ‘vbox-extpack’ Puis cliquez sur Installer (voir série de screenshots)

Interface des préférences de VirtualBox : onglet Extensions avec une liste vide de paquets d'extension.
Cette capture montre l’onglet « Extensions » dans les préférences de VirtualBox. Aucun paquet d’extension n’est installé ou activé, comme indiqué par la liste vide sous « Paquets d’extension ».
Fenêtre de sélection de fichier d'extension VirtualBox : le fichier Oracle_VM_VirtualBox_Extension_Pack-5.2.22-119230.vbox-extpack est sélectionné dans le dossier Téléchargements.
Cette capture montre la fenêtre de sélection de fichier pour ajouter une extension à VirtualBox. Le fichier Oracle_VM_VirtualBox_Extension_Pack-5.2.22-119230.vbox-extpack est mis en surbrillance dans le dossier Téléchargements, prêt à être installé.
Fenêtre de l'accord de licence pour Oracle VM VirtualBox, affichant les termes et conditions d'utilisation.
Cette capture montre la fenêtre de licence d’Oracle VM VirtualBox. L’utilisateur est invité à accepter les termes et conditions pour continuer l’installation ou l’utilisation du logiciel.
Fenêtre d'avertissement de VirtualBox : détails sur l'extension Oracle VM VirtualBox Extension Pack en cours d'installation, avec un message sur les risques potentiels des extensions.
Cette capture montre une fenêtre d’avertissement de VirtualBox qui informe l’utilisateur des risques potentiels liés à l’installation d’une extension. Elle détaille le nom, la version et les fonctionnalités de l’extension Oracle VM VirtualBox Extension Pack.

Il y a une dernière fenêtre, dont j’ai oublié de faire le screenshot, qui nous indique que le pack d’extension a été installé avec succès.

C’est fini pour ce tutoriel, j’espère que vous avez une idée sur la façon d’installer VM VirtualBox et son extension sur Debian (et autres distributions linux).
En espérant vous avoir été utile et n’hésitez pas à me faire savoir comment faire mieux ou si j’ai commis des coquilles…

Copier-Coller – Danger!

Suite à un petit message de Hoper sur notre mailing liste des membres Root66.net, j’ai décidé de faire un billet sur le sujet.

Rendre à César ce qui appartient à César.

Hoper:
L’un des points fort de Linux c’est la capacité d’absolument tout faire en ligne de commande. Cela permet de dépanner ou d’indiquer quoi faire à une personne assez facilement.
Bien sûr tout le monde dit et répète qu’il ne faut jamais copier/coller sans lire et comprendre au moins un minimum ce qu’on met dans le terminal.

Malheureusement, c’est encore pire que ça… Des petits farceurs peuvent sans problème dissimuler des commandes, rendant la technique du copier/coller encore plus dangereuse.
Un très bon exemple de dissimulation se trouve ici:
https://thejh.net/misc/website-terminal-copy-paste
(essayez de faire un copier/coller de la première ligne dans votre terminal)
Le copier/coller reste très utile. Mais: …

  • Ne faite des copier/coller que depuis un site de confiance
  • Après avoir lu et compris un minimum ce que vous vous apprêtez à faire…

Pour ceux qui l’ignorent, la commande git permet simplement de récupérer le contenu d’un répertoire, elle n’est pas censée exécuter quoi que ce soit et est donc « safe » à priori…

Sima78, donc moi 😉 :
Vérification possible: faites un copier/coller sur un éditeur de texte pour voir ce que cela donne. Exemple ci-dessous:

git clone /dev/null; clear; echo -n "Hello ";whoami|tr -d '\n';echo -e '!\nThat was a bad idea. Don'"'"'t copy code from websites you don'"'"'t trust!
Here'"'"'s the first line of your /etc/passwd: ';head -n1 /etc/passwd
git clone git://git.kernel.org/pub/scm/utils/kup/kup.git

On voit immédiatement que cela ne colle plus au lien proposé…

Ou utilisez les outils Firefox:
Outils –> Dévellopement Web –> Inspecteur
Comme ci-dessous:

Capture d'écran de Firefox avec le menu Outils > Développement web > Inspecteur ouvert, sur une page traitant des dangers du copier-coller depuis un site web vers un terminal.
Pour vérifier le contenu réel d’une commande suspecte, l’Inspecteur de Firefox permet d’examiner le code source de la page.

Vous obtenez une nouvelle fenêtre sous le visuel de la page web.

Il vous suffit de faire glisser la souris dans la fenêtre « Inspecteur » et développer les « fils » pour voir ce qui s’y trouve. Exemple sur l’image ci-dessous.

Capture d'écran de l'Inspecteur Firefox révélant du code malveillant caché dans une commande apparemment anodine sur une page web.
La commande semble inoffensive à l’écran, mais l’inspecteur révèle ce qui se passe vraiment si on la colle dans un terminal.

Bref! Faites attention à ce que vous « Copier/coller » sur votre terminal !

Sauvegardes au quotidien – Rdiff-Backup et MySqlDump

Rdiff-Backup et sauvegardes

J’avais déjà écrit un billet intitulé « Scripts de sauvegardes journalières et hebdomadaires » et un commentaire de Tetsumaki m’a donner à réfléchir.

Pourquoi je fais compliqué quand ont peut faire simple?

Soit, j’aime les scripts, et du coup il m’arrive de m’emballer et il fallait un disque de sauvegarde assez « gros »… Et j’ai décidé de regarder du côté de Rdiff-Backup. J’ai été séduit !

Je fais donc un nouveau billet sur le sujet de la sauvegarde sans pour autant supprimer l’autre…

Rdiff-Backup existe aussi pour Windows, je suppose qu’il doit exister une interface graphique , j’avoue ne pas avoir cherché puisque je m’en sert pour la sauvegarde d’un serveur, qui n’a pas d’interface graphique et de façon automatisée.

Bien entendu, une sauvegarde ne se fait pas sur une partition du disque dur, pas même sur un autre disque dur sur le même pc, mais sur un disque externe ou un pc distant…

Une modification à été apporté le 07/12/2023 concernant le message d’érreur :

/bin/sh: 1: root: not found

Lire la suite…

Sauvegarde avec Rdiff-Backup et MysqlDump.

Dans un premier temps j’ai défini les répertoires que je souhaitais sauvegarder, puis j’ai créé un fichier texte pour les regrouper.
Dans cet exemple, je décide de sauvegarder « /etc », « /home », « /var »

# nano /root/scripts/include-dir.txt

Copiez ce qu’il y a ci-dessous:

/etc
/home
/var

Maintenant nous allons créer le script dans la « cron.daily »

# nano /etc/cron.daily/backup

Copiez en adaptant ce qui suit.

#!/bin/bash
rdiff-backup --include-globbing-filelist /root/scripts/include-dir.txt --exclude '**' / /dir/de/sauvegarde/backup/

/dir/de/sauvegarde/backup/ est la destination de la sauvegarde, je vous laisse l’adapter selon vos choix.

Le rendre exécutable:

chmod +x /etc/cron.daily/backup

Je souhaite également sauvegarder des bases de données, on peut aussi le faire via Rdiff-backup, personnellement le préfère utiliser « mysqldump » (et oui, je suis un animal d’habitudes) :

# nano /etc/cron.daily/mysql-backup

Copiez en adaptant ce qui suit.

#!/bin/bash
mysqldump -u nextcloud -motdepasse nextcloud > /dir/de/sauvegarde/bd/nextcloud.sql
mysqldump -u dolibarr -motdepasse dolibarr > /dir/de/sauvegarde/bd/dolibarr.sql
mysqldump -u grr -motdepasse grr > /dir/de/sauvegarde/bd/grr.sql

Le rendre exécutable:

chmod +x /etc/cron.daily/mysql-backup

Pour que cela se fasse automatiquement et chaque jour, mettez le tout dans votre crontab:

# crontab -e

Copiez en adaptant ce qui suit.

PATH=/usr/sbin:/usr/bin:/sbin:/bin
SHELL=/bin/sh
MAILTO=""
# m h  dom mon dow   command
0 10 * * * root sh /etc/cron.daily/backup >/var/log/monbackup 2>&1 # JOB_BACKUP
0 15 * * * root sh /etc/cron.daily/mysql-backup >/var/log/monsav-bd 2>&1 # JOB_MYSQL-BACKUP

<Ajout du 07/12/2023>

J’ai le message d’erreur suivant : /bin/sh: 1: root: not found

Il arrive que root n’a pas de Shell et que l’user principal peut utiliser « sudo » sans confirmation de mot de passe, le cas par exemple de Raspberry, d’où un mot de passe fort pour cette user.

# nano /etc/cron.daily/backup

Copiez en adaptant ce qui suit.

#!/bin/bash
sudo rdiff-backup --include-globbing-filelist /root/scripts/include-dir.txt --exclude '**' / /dir/de/sauvegarde/backup/
# crontab -e

Copiez en adaptant ce qui suit.

PATH=/usr/sbin:/usr/bin:/sbin:/bin
SHELL=/bin/sh
MAILTO=""
# m h  dom mon dow   command
0 10 * * * /etc/cron.daily/backup >/var/log/monbackup 2>&1 # JOB_BACKUP
0 15 * * * /etc/cron.daily/mysql-backup >/var/log/monsav-bd 2>&1 # JOB_MYSQL-BACKUP

</Ajout du 07/12/2023>

Ceci-dit, il faut vérifier les sauvegardes, moi je simule une restauration dans un dossier de test, ici « test-sauv »

rdiff-backup --force -r now /dir/de/sauvegarde/backup/ /home/sima78/backup/rdiff-backup-data/test-sauv/

On peut voir les statistiques de la dernière sauvegarde

rdiff-backup-statistics /dir/de/sauvegarde/backup/

Ou la liste des incréments d’une sauvegarde

rdiff-backup -l /dir/de/sauvegarde/backup/

Vous pouvez aussi spécifier une durée de rétention des sauvegardes, dans le cas ci-dessous je supprime au-delà de 10 jours

rdiff-backup --remove-older-than 10D --force /dir/de/sauvegarde/backup/

Vous pouvez mettre D pour(Day), W pour(Week), M pour (Month) et Y pour (Year).
Donc voilà ma base, maintenant vous pouvez affiner comme par exemple avec mysqldump par lequel il est possible d’exporter plusieurs bases de données en une seule commande:

mysqldump --databases database1 database2 [...] > /home/sima78/my_databases.sql

Bref plein de possibilités il suffit de faire un « man » pour s’en rendre compte

man rdiff-backup
man mysqldump

Scripts de sauvegardes journalières et hebdomadaires

Bin-Bash, scripts, ligne de commande

J’avais pris cela sur un site, je ne sais plus où et ça a bien fonctionné un certain temps puis plus rien lorsque j’ai passé un des serveurs qui était sous Ubuntu serveur 12.04 sous Debian 8.7

J’ai donc repris en grande partie, même si les bases restent les mêmes. Voici donc la version fonctionnelle.

Sur Debian 8.7

Automatiser les sauvegardes.

Dans cet exemple, il s’agit de sauvegarder chaque jour de la semaine (samedi, dimanche, lundi, mardi, etc.), puis le vendredi soir, on sauvegarde sur le n° de la semaine. Puis on repart sur samedi, dimanche, etc.

Avant tout vous devez définir le « lieux » de sauvegarde, s’agit-il d’un disque dur supplémentaire, d’un disque externe, d’un lieu distant (par ssh ou autres)… Bref vous devrez adapter les scripts à vos choix et besoin.

Il s’agit là d’une idée sur le principe, à chacun de se l’approprier.

Ici je vais partir du principe que j’ai un disque dur chiffré supplémentaire monté sur /mnt/
Il est nommé « save » et le répertoire de sauvegarde est « s_server »

ce qui donne le chemin de sauvegarde « /mnt/save/s_server »

Avant tout, vous devez savoir en quelle langue sont vos jours de la semaine (anglais, français, etc.).

date +%A
vendredi

Le résultat est Français.
Connectez-vous en administrateur.

su root

Créer le script qui créera les répertoires des n° de semaine et les jours de la semaine.

#!/bin/bash
for x in lundi mardi mercredi jeudi vendredi samedi dimanche {01..52}
do
mkdir $x
done

Pourquoi {01..52} et non {1..52}? il suffit de lire le man date

man date
(...)
%V     ISO week number, with Monday as first day of week (01..53)
(...)

On voit donc qu’il faut numéroté de 01 à 52, car la 53ème semaine, lorsqu’elle existe est à cheval entre deux années et c’est donc pas dramatique de rater une semaine.

Rendre le script exécutable et on le place (dans notre exemple plus haut) dans « /mnt/save/s_server/ », puis on l’exécute…

./faire_mkdir.sh

Un petit « ls » pour vérifier que tout est ok.

Nous allons créer un fichier des dossiers à exclure. Si votre sauvegarde est locale, il faudra exclure le dossier de sauvegarde 😉 dans notre cas « /mnt/save/s_server/ » vous pouvez exclure tout ce qui ne vous semble pas judicieux, à vous de voir.

cd /etc/
nano rsync.exclude

On y met tout ce que l’on souhaite exclure.
Ci-dessous « /mnt/ » obligatoire dans l’exemple puisque la sauvegarde ce fait sur « /mnt/save/s_server/ », le reste en fonction de vos besoins.
Faites un copié/collé de ce qu’il y a ci-dessous.

# Mettez ici tous les dossiers que vous souhaitez exclure
# - /boot/
- /media/
- /lost+found/
- /mnt/
- /proc/
- /opt/
- /run/
- /srv/
- /tmp/
- /sys/

Créer les deux scripts ci dessous:

nano /etc/cron.daily/jour.sh

Copié/collé de ce qu’il y a ci-dessous

#!/bin/bash
# On va l'appeler "jour.sh"
# Sauvegarde quotidienne
jour=$(date +%A)
source="/"
destination="/mnt/save/s_server"
rsync -aurov -progress --delete --stats --exclude-from=/etc/rsync.exclude $source $destination/$jour

Ce qui donne le chemin /etc/cron.daily/jour.sh et rendez-le exécutable.

chmod +x /etc/cron.daily/jour.sh

Puis:

nano /etc/cron.weekly/semaine.sh

Copié/collé de ce qu’il y a ci-dessous

#!/bin/bash
# On va l'appeler "semaine.sh"
#  Sauvegarde hebdomadaire
semaine=$(date +%V)
source="/"
destination="/mnt/save/s_server"
rsync -aurov -progress --delete --stats --exclude-from=/etc/rsync.exclude $source $destination/$semaine

Ce qui donne le chemin /etc/cron.weekly/semaine.sh et rendez-le exécutable.

Chmod +x /etc/cron.weekly/semaine.sh

Maintenant il suffit juste de créer la crontab

crontab -e

Choisissez votre interprétateur texte « nano » ou « vi » et copiez les lignes ci-dessous:

PATH=/usr/sbin:/usr/bin:/sbin:/bin
SHELL=/bin/sh
MAILTO=""
# m h  dom mon dow   command
0 23 * * * /etc/cron.daily/jour.sh >/dev/null 2>&1 # JOB_1
30 23 * * 5 /etc/cron.weekly/semaine.sh >/dev/null 2>&1 # JOB_2

Pour Ubuntu ce devrait ressembler à cela:

PATH=/usr/sbin:/usr/bin:/sbin:/bin
SHELL=/bin/sh
MAILTO=""
# m h  dom mon dow   command
0 23 * * * sudo /etc/cron.daily/jour.sh >/dev/null 2>&1 # JOB_1
30 23 * * 5 sudo /etc/cron.weekly/semaine.sh >/dev/null 2>&1 # JOB_2

Ensuite vérifier le lendemain si la sauvegarde à bien fonctionné et revérifiez en fin de semaine.

Mettre des bulles sur votre terminal – Cowsay – Fortune

Mettre des bulles sur votre terminal – CowsayFortune.

Ce n’est pas d’une grande utilité, donc indispensable.
Cowsay permet d’afficher un dessin en caractères ASCII dans votre terminal.
Par défaut il représente un animal qui récite le texte de votre choix.

Voyons un peu cela: On installe

# apt-get install cowsay

Voyons ce que cela donne par défaut:

$ cowsay hello
_______
< hello >
-------
  \   ^__^
   \  (oo)\_______
      (__)\       )\/\
          ||----w |
          ||     ||

A l’installation plusieurs dizaines de fichiers « .cow » sont installés dans /usr/share/cowsay/cows/

Testons-en un au hasard histoire de voir la différence:

$ cowsay -f sodomized-sheep.cow hello
 _______
< hello >
 -------
  \                 __ 
   \               (oo)
    \              (  )
     \             /--\
       __         / \  \ 
      UooU\.'@@@@@@`.\  )
      \__/(@@@@@@@@@@) /
           (@@@@@@@@)(( 
           `YY~~~~YY' \\
            ||    ||   >>

Bon, là c’est un peu cochon… Même s’il s’agit d’un mouton…

Si vous souhaitez qu’un dessin apparaisse de façon aléatoire dès l’ouverture de votre console, il suffit d’ajouter dans votre fichier « .bashrc »

cowsay -f `ls /usr/share/cowsay/cows | sort -R | tail -n 1` "votre_texte_d'accueil"

Explications :
Cowsay prend en argument le résultat d’une commande, ici « ls » sur le répertoire qui suit « /usr/share/cowsay/cows« . « sort -R » mélange le résultat, puis on affiche la dernière ligne par « tail -n 1« . S’en suit le texte de votre choix.
L’un des résultats:

 _______________________
< votre_texte_d'accueil >
 -----------------------
    \
     \
    ^__^         /
    (oo)\_______/  _________
    (__)\       )=(  ____|_ \_____
        ||----w |  \ \     \_____ |
        ||     ||   ||           ||

sima78@hohoho:~$

Si vous souhaitez des citations, vous pouvez combiner Cowsay avec Fortunes qui est un générateur aléatoire de citations. Pour avoir les citations Françaises:

# apt-get install fortunes-fr

Modifiez la dernière ligne que vous avez créée dans votre « .bashrc » par :

cowsay -f `ls /usr/share/cowsay/cows | sort -R | tail -n 1` "fortune -s"

L’option « -s » permet de sélectionner que les citations considérées comme « courtes »
Un des résultats:

 _________________________________________
/ Euclide avait-il raison raison de       \
| définir le nombre : collection d'unités |
| de même espèce ?                        |
|                                         |
| -+- Voltaire, Questions sur             |
\ l'encyclopédie -+-                      /
 -----------------------------------------
    \               ,-----._
  .  \         .  ,'        `-.__,------._
 //   \      __\\'                        `-.
((    _____-'___))                           |
 `:='/     (alf_/                            |
 `.=|      |='                               |
    |)   O |                                  \
    |      |                               /\  \
    |     /                          .    /  \  \
    |    .-..__            ___   .--' \  |\   \  |
   |o o  |     ``--.___.  /   `-'      \  \\   \ |
    `--''        '  .' / /             |  | |   | \
                 |  | / /              |  | |   mmm
                 |  ||  |              | /| |
                 ( .' \ \              || | |
                 | |   \ \            // / /
                 | |    \ \          || |_|
                /  |    |_/         /_|
               /__/
sima78@hohoho:~$

Vous pouvez enrichir votre répertoire /usr/share/cowsay/cows/ par vos propres créations ASCII ou d’autres téléchargées sur le web.