Commandes
Commandes
Utilisateurs
Utilisateurs
Ajouter un utilisateur au système
Ajouter un utilisateur au système
Ajouter un utilisateur Samba
Ajouter un utilisateur Samba
Afficher l'UID d'un utilisateur
Afficher l'UID d'un utilisateur
Pour afficher l'UID d'un utilisateur, saisir la commande suivante dans une console :
$ echo `grep root /etc/passwd | cut -d: -f3`
0
$
La commande grep root /etc/passwd affiche la ligne du fichier /etc/passwd contenant l'expression root
$ grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
$
La commande cut -d: -f3 permet d'extraire uniquement la 3ème valeur -f3 après découpage de la ligne en indiquant le délimiteur -d:
Fermer une session utilisateur via la console (Ubuntu)
Fermer une session utilisateur via la console (Ubuntu)
2 sessions GNOME ouverte sur Ubuntu. La seconde session est verrouillée et protégée par un mot de passe.
Pour la fermer, saisir la commande suivante dans une console :
$ sudo skill -KILL -u utilisateur
Pour fermer un terminal dont la connexion a été perdue (ssh par exemple)
Identifier la console à fermer :
$ w
14:32:16 up 12 days, 6:26, 2 users, load average: 0,00, 0,00, 0,00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
toto pts/0 vm-ssh.quennec. 14:28 4:12 0.29s 0.29s -bash
toto pts/1 vm-ssh.quennec. 14:28 0.00s 0.24s 0.00s w
$
La commande w permet de visualiser les utilisateurs connectés et la commande en cours d'exécution.
Dans l'exemple ci-dessus, je suis donc actuellement connecté sur 2 terminaux pts/0 & pts/1.
On voit également que la commande w a été exécutée sur le terminal pts/1 et que le terminal pts/0 est inactif depuis 4 min et 12 sec.
Il faut donc fermer le terminal pts/0.
Identifier le processus lié au terminal à fermer :
$ ps -ef | grep toto@pts/0 | grep -v grep
toto 15236 15224 0 14:28 ? 00:00:00 sshd: toto@pts/0
$
Le terminal pts/0 est donc lié au processus 15236.
Fermer le terminal :
$ kill -s 9 15236
utiliser pkill au lieu de skill
bonjour,
sous 3.2.0-31-generic x86_64 GNU/Linux, le man de skill me dit que cette commande est obsolète et qu'il vaut mieux utiliser pkill à la place.
pkill -u username
Modifier l'interpréteur de commande d'un utilisateur
Modifier l'interpréteur de commande d'un utilisateur
Pour changer l'interpréteur de commande d'un utilisateur, saisir dans une console :
Mettre par défaut l'interpréteur de commande BASH pour l'utilisateur toto
$ chsh -s /bin/bash toto
L'option -s permet d'indiquer l'interpréteur de son choix.
Si cette option n'est pas indiquée, le programme chsh s'appuie sur le fichier /etc/shells pour fournir la liste des interpréteurs à utiliser.
$ cat /etc/shells
# /etc/shells: valid login shells
/bin/csh
/bin/sh
/usr/bin/es
/usr/bin/ksh
/bin/ksh
/usr/bin/rc
/usr/bin/tcsh
/bin/tcsh
/usr/bin/esh
/bin/dash
/bin/bash
/bin/rbash
/usr/bin/screen
/bin/ksh93
/bin/zsh
/usr/bin/zsh
Le nouvel interpréteur est renseigné dans le fichier /etc/passwd pour l'utilisateur indiqué.
$ cat /etc/passwd | grep "toto"
toto:x:1020:1020:toto:/home/toto:/bin/bash
$
Prendre le rôle ROOT en mode console
Prendre le rôle ROOT en mode console
Prendre le rôle d'un user en mode console
Prendre le rôle d'un user en mode console
Partage NFS
Partage NFS
Partage NFS
Pré-requis
$ sudo apt-get install nfs-common
Créer un partage
$ sudo mkdir /opt/partage_nfs
$ sudo cat >> /etc/exports <<EOF
> $_ 192.168.1.56/32(rw)
> EOF
$ sudo /etc/init.d/nfs-kernel-server restart
Ce partage sera accessible uniquement pour l'adresse IP indiquée
Afficher les partages NFS du serveur
$ showmount -e adresse_ip_du_serveur
Démarrer le serveur NFS
$ sudo /etc/init.d/nfs-kernel-server start
Redémarrer le serveur NFS
$ sudo /etc/init.d/nfs-kernel-server restart
Monter un partage NFS
à renseigner dans /etc/fstab
- adresse_ip_serveur : /nom_du_partage_nfs /point_de_montage_sur_client nfs defaults 0 0
Monter un partage NFS via SSH
Installer sshfs
$ sudo apt-get install sshfs
Créer le répertoire servant au montage
$ sudo mkdir /mnt/ssh
Monter le partage NFS distant via SSH
$ sudo sshfs $USER@adresse_de_la_machine_distante:/nom_du_partage_nfs /mnt/ssh
Pour démonter le partage NFS
$ sudo fusermount -u /mnt/ssh
FSTAB
FSTAB
Modifier le fichier FSTAB
$ sudo gedit /etc/fstab
$ sudo nano /etc/fstab
Activer les modifications du fichier FSTAB
$ sudo mount -a
TAR
TAR
Archiver avec TAR
Archiver avec TAR
Archiver avec TAR
$ tar -cvf mon_archive.tar nom_du_fichier_a_archiver
$ tar -cvf mon_archive.tar nom_du_dossier_a_archiver
-c : Create
-v : Verbose
-f : File
Archiver des fichiers avec TAR puis les supprimer
Suppression des fichiers archivés avec l'option --remove-files
$ /bin/tar --create --file=/monDossier/monArchive.tar --remove-files /monDossier/*.jpg
Archive tous les fichiers jpg présents dans le dossier 'monDossier' puis les supprime du dossier
Désarchiver avec TAR
Désarchiver avec TAR
Archivage incrémentiel avec TAR
Archivage incrémentiel avec TAR
Archivage :
Création de la première sauvegarde (sauvegarde complète)
Sauvegarde du dossier /home dans le fichier /backup/archive.1.tar avec détail du contenu dans /backup/backup.list
$ tar --create --file=/backup/archive.1.tar --listed-incremental=/backup/backup.list /home
Création des sauvegardes suivantes (incrémentées uniquement avec les fichiers nouveaux et/ou modifiés)
Sauvegarde des fichiers du dossier /home dans le fichier /backup/archive.2.tar différents de ceux présents dans la liste /backup/backup.list
$ tar --create --file=/backup/archive.2.tar --listed-incremental=/backup/backup.list /home
Utilisation de la date dans le nom de l'archive générée
$ tar --create --file=/backup/archive.`date +%Y_%m_%d_%s`.tar --listed-incremental=/backup/backup.list /home
Restauration :
Restaurer la première archive complète
$ tar --extract --listed-incremental=/dev/null --file archive.1.tar
Puis restaurer les archives suivantes
$ tar --extract --listed-incremental=/dev/null --file archive.2.tar
Sur un historique de sauvegarde de 10 archives, pour restaurer l'archive 4, restaurer les archives 1, 2, 3 & 4 et ce dans le bon ordre. Ne pas restaurer directement l'archive 4, elle serait incomplète.
tar - Compression avec Lzma (.tar.xz)
Peux t-on avec la fonction incrementiel demandé une compression Lzma dans la ligne de commande ? (.tar.xz)
(Lzma ou autres: Bzip2 (.tar.bz2), voir gzip (.tar.gz) )
merci
Il est tout à fait possible ...
... d'ajouter une compression Bzip2 ou Gzip.
Il suffit juste d'ajouter l'option -j (Bzip2) ou -z (Gzip) à la ligne de commande
Top ce script
Intéressant. Néanmoins contrarement un git, si un fichier a changé, le script backup entièrement le nouveau, et non la différence dans le fichier, c'est bien ça ?
MErci!
Paul
Tout à fait
La comparaison se fait sur la dernière date de modification du contenu et non sur le contenu en lui-même
Ce qui permet de traiter également les fichiers binaires, pas que les fichiers textes.
Effectivement, pour les fichiers textes, GIT est beaucoup mieux adapté
suppression fichier archive
Bonjour
Si des fichiers sont supprimés entre 2 archives incrémentales, l'archivage suivant se passera comment ?
Cordialement
Les fichiers supprimés se
Les fichiers supprimés se trouvent forcément dans l'archive précédente à partir du moment où ils ont été créés avant la ou les précédentes archives.
L'archive incrémentale permet de gérer le versionning des fichiers nouveaux et/ou modifiés
Supprimer un fichier dans une archive TAR
Supprimer un fichier dans une archive TAR
TAR & GZIP
TAR & GZIP
Compresser avec TAR & GZIP
Compresser avec TAR & GZIP
Décompresser avec TAR & GZIP
Décompresser avec TAR & GZIP
Variables d'environnement
Variables d'environnement
Afficher les variables d'environnements
Afficher les variables d'environnements
Créer une variable d'environnement
Créer une variable d'environnement
Date & heure
Date & heure
Conversion timestamp
Conversion timestamp
Pour convertir un timestamp en format date :
$ date -d @1320822978 "+%Y-%m-%d %T"
2011-11-09 08:16:18
Pour convertir une date en timestamp :
Date au format AAAAMMJJ
$ date -d "20111109" +%s
1320793200
Effectuer une action à une date et un jour précis de la semaine
Effectuer une action à une date et un jour précis de la semaine
Voici un exemple qui permet d'exécuter une action en fonction d'un jour bien précis.
Comment recevoir automatiquement un mail tous les vendredi 13 de chaque mois :
$ if [[ `date +%u` == 5 && `date +%d` == 13 ]]; then echo "" | mail -s "Vendredi 13 : Jouer au Loto" moi@gmail.com; fi
Explications :
La fonction `date +%u` retourne le numéro du jour de la semaine. Lundi = 1... Dimanche = 7.
La fonction `date +%d` retourne le jour du mois
Les différents formats de date sous Linux
Les différents formats de date sous Linux
Sous Linux, la fonction date permet d'afficher la date du jour ou une date définie sous différentes formes.
Le script suivant (afficheDate.sh), associé au fichier contenant les différentes fonctions utilisées (fonctions.inc.sh) affiche différentes informations sur la date du jour.
$ nl afficheDate.sh
1 #!/usr/bin/bash
2 SCRIPTDIR="."
3 . $SCRIPTDIR/fonctions.inc.sh
4 echo "Date au format aaaa_mm_jj : `getDate`"
5 echo "Année : `getYear`"
6 echo "Mois : `getMonth`"
7 echo "Jour : `getDay`"
8 echo "Nous sommes le `getJourDate` `getDay` `getMoisDate` `getYear`"
9 echo "Nous sommes en semaine `getNumSemaine`"
10 echo "Nous sommes le `getNumDay` jour de l'année"
11 echo "Nous sommes le `getNumDayWeek` jour de la semaine"
12 echo "Cette année il y a `nbJourAnnee` jours"
13 echo "Il reste `nbResteJour` jour(s) avant la fin de l'année"
14 echo "Cette année il y a `nbSemAnnee` semaines"
15 echo "Il reste `nbResteSemaine` semaine(s) avant la fin de l'année"
$
$ nl fonctions.inc.sh
1 function getDate {
2 date '+%Y_%m_%d'
3 }
4 function getYear {
5 date '+%Y'
6 }
7 function getMonth {
8 date '+%m'
9 }
10 function getDay {
11 date '+%d'
12 }
13 function getJourDate {
14 date '+%A'
15 }
16 function getMoisDate {
17 date '+%B'
18 }
19 function getNumSemaine {
20 date '+%V'
21 }
22 function getNumDay {
23 typeset jour
24 jour=`date '+%j'`
25 case "$jour" in
26 1)
27 echo "1 er"
28 ;;
29 *)
30 echo "$jour ème"
31 ;;
32 esac
33 }
34 function getNumDayWeek {
35 typeset jour
36 jour=`date '+%u'`
37 case "$jour" in
38 1)
39 echo "1 er"
40 ;;
41 *)
42 echo "$jour ème"
43 ;;
44 esac
45 }
46 function nbJourAnnee {
47 typeset jour
48 typeset mois
49 typeset annee
50 jour=31
51 mois=12
52 annee=`getYear`
53 date -d $mois'/'$jour'/'$annee '+%j'
54 }
55 function nbResteJour {
56 typeset jour
57 typeset nbJourAnnee
58 typeset nbJourRestant
59 jour=`date '+%j'`
60 nbJourAnnee=`nbJourAnnee`
61 ((nbJourRestant=nbJourAnnee-jour))
62 echo $nbJourRestant
63 }
64 function nbSemAnnee {
65 typeset jour
66 typeset mois
67 typeset annee
68 jour=31
69 mois=12
70 annee=`getYear`
71 date -d $mois'/'$jour'/'$annee '+%V'
72 }
73 function nbResteSemaine {
74 typeset numSem
75 typeset nbSem
76 typeset nbSemReste
77 numSem=`getNumSemaine`
78 nbSem=`nbSemAnnee`
79 ((nbSemReste=nbSem-numSem))
80 echo $nbSemReste
81 }
$
Exécution du script :
$ ./afficheDate.sh
Date au format aaaa_mm_jj : 2011_12_19
Année : 2011
Mois : 12
Jour : 19
Nous sommes le Monday 19 December 2011
Nous sommes en semaine 51
Nous sommes le 353 ème jour de l'année
Nous sommes le 1 er jour de la semaine
Cette année il y a 365 jours
Il reste 12 jour(s) avant la fin de l'année
Cette année il y a 52 semaines
Il reste 1 semaine(s) avant la fin de l'année
$
Fichiers / Dossiers
Fichiers / Dossiers
Convertir un fichier Windows en Linux et inversement
Convertir un fichier Windows en Linux et inversement
Problème de lecture / exécution d'un fichier sous Linux créer sous Windows.
Sous Windows (DOS), les lignes de fichier se terminent par les caractères spéciaux "\r\n".
Sous UNIX, les lignes de fichier se terminent par les caractères spéciaux "\n".
Les caractères spéciaux permettant le retour chariot étant différents sous Windows (DOS) et sous Linux (UNIX), il faut penser à les convertir.
Différentes méthodes permettent de le faire.
Avec la commande sed :
$ sed -i 's/\r//g' /nom_du_fichier
Sinon, le caractère "\r" est représenté par "^M" qui s'obtient par la séquence de touches suivantes : "CTRL-V" + "CTRL-M"
$ sed -i 's/^M//' /nom_du_fichier
Avec la commande tr :
$ tr -d '\r' < /mon_fichier_source > /mon_fichier_destination
A l'inverse, convertir un fichier UNIX vers DOS
$ sed 's/$/^M/' /nom_du_fichier
Source : http://www.commentcamarche.net/faq/5978-sed-conversion-retours-chariots…
Rendre un fichier exécutable
Rendre un fichier exécutable
Afficher la somme MD5 d'un fichier
Afficher la somme MD5 d'un fichier
Pour afficher la somme MD5 d'un fichier afin d'en assurer son intégrité, il suffit d'utiliser la commande md5sum.
Exemple avec le fichier "test.txt" :
$ cat test.txt
ceci est une ligne
$
Calcul de la somme MD5 du fichier "test.txt" :
$ md5sum test.txt
2f378979d16de47b9d439149be5623db test.txt
$
Modification du fichier "test.txt" :
$ echo "une nouvelle ligne" >> test.txt
$ cat test.txt
ceci est une ligne
une nouvelle ligne
$
Re-calcul de la somme MD5 du fichier "test.txt" :
$ md5sum test.txt
5c69442bc1b1084b60a81190a75c6a0e test.txt
$
Après modification du fichier, la somme MD5 du fichier n'est plus la même.
Il est également possible d'enregistrer la somme MD5 d'un fichier dans un fichier :
$ md5sum test.txt > test.md5
$ cat test.md5
5c69442bc1b1084b60a81190a75c6a0e test.txt
$
De cette manière, il est possible de controler la somme MD5 d'un fichier :
Utilisation de la commande md5sum avec l'option -c et le fichier contenant la somme MD5 en paramètre.
$ md5sum -c test.md5
test.txt: OK
$
Attention : Les 2 fichiers (celui à controler et celui contenant la somme MD5) doivent être au même endroit.
Si le fichier à controler a été altéré :
$ md5sum -c test.md5
test.txt: FAILED
md5sum: WARNING: 1 of 1 computed checksum did NOT match
$
BASH: Gérer des fichiers dont les noms comportent des espaces
BASH: Gérer des fichiers dont les noms comportent des espaces
Sous Unix, les fichiers comportant des espaces dans le nom sont très compliqués à gérer sachant que l'espace est interprété comme étant un séparateur.
Voici un exemple qui permet d'afficher la somme MD5 d'une liste de fichiers dont les noms comportent des espaces.
# ls -1
20160524 leclerc 1264.pdf
20160528 boulanger 3290.pdf
20160528 cofiroute 620.pdf
20160529 la mie caline 790.pdf
20160529 le marché aux fleurs 2050.pdf
20160601 cordonnerie leclerc 1000.pdf
20160601 leclerc 990.pdf
20160601 pharmacie 3830.pdf
Les 8 fichiers ci-dessus comportent tous des espaces dans leurs noms.
# while read f; do md5sum "$f"; done <<< $(ls)
57709e696d14838ceeff6500728d1569 20160524 leclerc 1264.pdf
9f870fb12e598c7345cb74c6db15afee 20160528 boulanger 3290.pdf
5bb71357967db84baf6ed4a5fb56c552 20160528 cofiroute 620.pdf
690471607356b9ea798d3d44d69f478d 20160529 la mie caline 790.pdf
519a250059f5d8bc93af22d2ae02512f 20160529 le marché aux fleurs 2050.pdf
a08e6094bc01a34c508761ebbdae6418 20160601 cordonnerie leclerc 1000.pdf
c8f36624113710939365dd0a4daeb30c 20160601 leclerc 990.pdf
387ce36eaa18d383bd1950ee17a4fdff 20160601 pharmacie 3830.pdf
La commande read, dans la boucle while, interprète correctement les noms de fichiers provenant de la commande ls.
Ne pas oublier les 3 chevrons vers la gauche "<<<" entre la commande ls et la boucle while
Chiffrer / Déchiffrer des fichiers
Chiffrer / Déchiffrer des fichiers
mcrypt & mdecrypt sont des programmes qui permettent de chiffrer / déchiffer des fichiers avec un mot de passe.
Le programme mcrypt créé un nouveau fichier portant l'extension .nc avec des permissions 0600
Pour l'installer :
Pour chiffrer un fichier
$ mcrypt monFichier
Enter the passphrase (maximum of 512 characters)
Please use a combination of upper and lower case letters and numbers.
Enter passphrase:
Enter passphrase:
File monFichier was encrypted.
$ ls -l monFichier*
-rw-r--r-- 1 ronan ronan 0 2011-11-05 15:24 monFichier
-rw------- 1 ronan ronan 109 2011-11-05 15:24 monFichier.nc
$
Pour chiffrer un fichier et supprimer le fichier source
$ mcrypt -u monFichier
Enter the passphrase (maximum of 512 characters)
Please use a combination of upper and lower case letters and numbers.
Enter passphrase:
Enter passphrase:
File monFichier was encrypted.
$ ls -l monFichier*
-rw------- 1 ronan ronan 109 2011-11-05 15:24 monFichier.nc
$
Pour chiffrer un fichier avec une compression gzip
$ mcrypt -z monFichier
Enter the passphrase (maximum of 512 characters)
Please use a combination of upper and lower case letters and numbers.
Enter passphrase:
Enter passphrase:
File monFichier was encrypted.
$ ls -l monFichier*
-rw-r--r-- 1 ronan ronan 0 2011-11-05 15:31 monFichier
-rw------- 1 ronan ronan 141 2011-11-05 15:31 monFichier.gz.nc
$
Lister tous les algorithmes utilisable par mcrypt
$ mcrypt --list
cast-128 (16): cbc cfb ctr ecb ncfb nofb ofb
gost (32): cbc cfb ctr ecb ncfb nofb ofb
rijndael-128 (32): cbc cfb ctr ecb ncfb nofb ofb
twofish (32): cbc cfb ctr ecb ncfb nofb ofb
arcfour (256): stream
cast-256 (32): cbc cfb ctr ecb ncfb nofb ofb
loki97 (32): cbc cfb ctr ecb ncfb nofb ofb
rijndael-192 (32): cbc cfb ctr ecb ncfb nofb ofb
saferplus (32): cbc cfb ctr ecb ncfb nofb ofb
wake (32): stream
blowfish-compat (56): cbc cfb ctr ecb ncfb nofb ofb
des (8): cbc cfb ctr ecb ncfb nofb ofb
rijndael-256 (32): cbc cfb ctr ecb ncfb nofb ofb
serpent (32): cbc cfb ctr ecb ncfb nofb ofb
xtea (16): cbc cfb ctr ecb ncfb nofb ofb
blowfish (56): cbc cfb ctr ecb ncfb nofb ofb
enigma (13): stream
rc2 (128): cbc cfb ctr ecb ncfb nofb ofb
tripledes (24): cbc cfb ctr ecb ncfb nofb ofb
$
Chiffrer un fichier en utilisant l'algorithme "DES"
$ mcrypt -a des monFichier
Enter the passphrase (maximum of 512 characters)
Please use a combination of upper and lower case letters and numbers.
Enter passphrase:
Enter passphrase:
File monFichier was encrypted.
$ ls -l monFichier*
-rw-r--r-- 1 ronan ronan 0 2011-11-05 15:31 monFichier
-rw------- 1 ronan ronan 84 2011-11-05 15:31 monFichier.nc
$
Obtenir des infos sur le fichier chiffré
$ file monFichier.nc
monFichier.nc: mcrypt 2.5 encrypted data, algorithm: des, keysize: 8 bytes, mode: cbc,
$
Déchiffrer un fichier
$ ls -l monFichier*
-rw------- 1 ronan ronan 84 2011-11-05 15:31 monFichier.nc
$ mcrypt -d monFichier.nc
Enter passphrase:
File monFichier.nc was decrypted.
$ ls -l monFichier*
-rw------- 1 ronan ronan 0 2011-11-05 15:31 monFichier
-rw------- 1 ronan ronan 84 2011-11-05 15:31 monFichier.nc
$
Ou en utilisant le programme mdecrypt
$ ls -l monFichier*
-rw------- 1 ronan ronan 84 2011-11-05 15:31 monFichier.nc
$ mdecrypt monFichier.nc
Enter passphrase:
File monFichier.nc was decrypted.
$ ls -l monFichier*
-rw------- 1 ronan ronan 0 2011-11-05 15:31 monFichier
-rw------- 1 ronan ronan 84 2011-11-05 15:31 monFichier.nc
$
Comparer les fichiers de deux dossiers distants
Comparer les fichiers de deux dossiers distants
Comment savoir si les fichiers présents dans le dossier "DOSSIERX" du serveur "SERVEURA" sont exactement les mêmes que ceux présents dans le dossier "DOSSIERY" du serveur "SERVEURB" ?
Grâce à la commande sha256sum et une connexion ssh correctement configurée.
Exécuter le commande suivante sur le serveur "SERVEURA".
$ find /DOSSIERX -type f -exec sha256sum {} \; | ssh SERVEURB 'cd /DOSSIERY && sha256sum --quiet -c -'
Idem, mais en excluant un dossier de la recherche (.git par exemple):
$ find /DOSSIERX -type f -not -path */.git/* -exec sha256sum {} \; | ssh SERVEURB 'cd /DOSSIERY && sha256sum --quiet -c -'
Connaitre la taille d'un dossier
Connaitre la taille d'un dossier
Copier des fichiers résultant d'une recherche avec find
Copier des fichiers résultant d'une recherche avec find
Rechercher tous les fichiers *.jpg présents dans le répertoire ~/images (sous-répertoires inclus) et les copier dans le répertoire imagesJPG.
$ find ~/images -name '*.jpg' -print0 | xargs -I '{}' -0 cp {} ~/imagesJPG/
L'option -print0 de la commande find et -0 de la commande xargs permet de prendre en compte les fichiers comportant des espaces dans leurs noms.
Créer un fichier d'une taille précise
Créer un fichier d'une taille précise
La commande dd permet de créer des fichiers d'une taille bien précise.
Créer un fichier vide de 1 Mo (1024 blocs de 1Ko):
$ dd if=/dev/zero of=zzz bs=1k count=1024
1024+0 enregistrements lus
1024+0 enregistrements écrits
1048576 octets (1,0 MB) copiés, 0,0108743 s, 96,4 MB/s
$ ls -l zzz
-rw-r--r-- 1 r.quennec mkpasswd 1,0M 23 mai 10:53 zzz
$
Créer un fichier avec des données aléatoires de 1 Mo (1024 blocs de 1Ko):
$ dd if=/dev/urandom of=zzz bs=1k count=1024
1024+0 enregistrements lus
1024+0 enregistrements écrits
1048576 octets (1,0 MB) copiés, 0,239581 s, 4,4 MB/s
$ wc zzz
4074 23182 1048576 zzz
$
Find: Exécuter des commandes sur les fichiers et formater l'affichage
Find: Exécuter des commandes sur les fichiers et formater l'affichage
Dans l'exemple suivant, je vais rechercher tous les fichiers dans un dossier, exécuter la commande xxh64sum et afficher un tableau de 3 colonnes contenant le nom court du fichier, la valeur du xxh64sum et enfin, le nom complet du fichier (chemin compris).
Le résultat final sera affiché à l'écran et sauvegardé dans un fichier.
$ sudo find /var/log/nginx/ -type f -printf '%p %f\n' | while read -r x y; do xxh64=$(sudo xxh64sum "$x") ; printf "%-45s %-s\n" "$y" "$xxh64"; done | sort | tee /tmpfs/result
En détail:
On recherche tous les fichiers du dossier et on affiche le nom complet du fichier (chemin compris %p) et le nom court (%f)
find /var/log/nginx/ -type f -printf '%p %f\n'
Tant qu'il y a des enregistrements retournés par la commande précédente (boucle while), on lit chaque ligne en affectant chaque élément (le nom complet du fichier et le nom court) à la variable x et y (read -r x y).
Lien vers l'article read
Le calcul de la somme de contrôle xxh64 est exécuté sur le nom complet du fichier (xxh64sum $x).
Le résultat est affiché grâce à la commande printf.
On affiche en premier le nom court du fichier puis le résultat du hash qui contient le hash et le nom complet du fichier.
while read -r x y; do xxh64=$(sudo xxh64sum "$x") ; printf "%-45s %-s\n" "$y" "$xxh64"; done
Le résultat est affiché à l'écran et sauvegardé dans un fichier (et trié).
sort | tee /tmpfs/result
Le résultat final:
access.log-20250204.gz 54c1315ad46e078e /var/log/nginx/access.log-20250204.gz
access.log-20250205.gz 1020da7a66e84c2e /var/log/nginx/access.log-20250205.gz
access.log-20250206.gz 3ff0cf42b19bbef8 /var/log/nginx/access.log-20250206.gz
access.log-20250207.gz e99c510ae86f4661 /var/log/nginx/access.log-20250207.gz
access.log-20250208.gz f7868465f7071e87 /var/log/nginx/access.log-20250208.gz
access.log-20250209.gz 15b776894f620c85 /var/log/nginx/access.log-20250209.gz
access.log-20250210.gz 85b3722e1e1c198d /var/log/nginx/access.log-20250210.gz
access.log-20250211.gz b42bb2e5afa75766 /var/log/nginx/access.log-20250211.gz
access.log-20250212.gz 4317f17985526602 /var/log/nginx/access.log-20250212.gz
access.log-20250213.gz 739dc6d9afc15060 /var/log/nginx/access.log-20250213.gz
access.log 90ecd0288ae898a0 /var/log/nginx/access.log
error.log-20250130.gz cdbbcb3a8cbc152b /var/log/nginx/error.log-20250130.gz
error.log-20250131.gz aaec7df137471019 /var/log/nginx/error.log-20250131.gz
error.log-20250201.gz 146b1bb4ee853137 /var/log/nginx/error.log-20250201.gz
error.log-20250204.gz d6e701381046fedb /var/log/nginx/error.log-20250204.gz
error.log-20250206.gz 74672169e3144efa /var/log/nginx/error.log-20250206.gz
error.log-20250207.gz 92ebe0bf6bc5d022 /var/log/nginx/error.log-20250207.gz
error.log-20250208.gz 97f540ddcb0086fe /var/log/nginx/error.log-20250208.gz
error.log-20250211.gz 7f405c59697f053e /var/log/nginx/error.log-20250211.gz
error.log-20250212.gz b8ae94168abbe021 /var/log/nginx/error.log-20250212.gz
error.log-20250213.gz cd37e963401b42fe /var/log/nginx/error.log-20250213.gz
error.log e7c658673b7028ac /var/log/nginx/error.log
http_json_echo.log-20240927.gz d30a3b619014ba2d /var/log/nginx/http_json_echo.log-20240927.gz
http_json_echo.log-20241029.gz 02e2db0f9bf951a1 /var/log/nginx/http_json_echo.log-20241029.gz
http_json_echo.log ef46db3751d8e999 /var/log/nginx/http_json_echo.log
Lire un fichier PDF en ligne de commande
Lire un fichier PDF en ligne de commande
Lire un fichier PDF en ligne commande est possible grâce à la commande less
$ less Verne-Le_tour_du_monde_en_80_jours.InLibroVeritas.net_oeuvre18616.pdf
Jules Verne
LE TOUR DU
MONDE EN
QUATRE-VINGTS
JOURS
- Collection Romans / Nouvelles -
Retrouvez cette oeuvre et beaucoup d'autres sur
http://www.inlibroveritas.net
^L^LTable des matières
LE TOUR DU MONDE EN QUATRE-VINGTS JOURS......................1
I - DANS LEQUEL PHILEAS FOGG ET PASSEPARTOUT
S'ACCEPTENT RÉCIPROQUEMENT L'UN COMME
MAÎTRE, L'AUTRE COMME DOMESTIQUE...............................2
II - OU PASSEPARTOUT EST CONVAINCU QU'IL A ENFIN
TROUVE SON IDEAL......................................................................8
III - OU S'ENGAGE UNE CONVERSATION QUI POURRA
COUTER CHER A PHILEAS FOGG.............................................12
IV - DANS LEQUEL PHILEAS FOGG STUPEFIE
PASSEPARTOUT, SON DOMESTIQUE.......................................21
V - DANS LEQUEL UNE NOUVELLE VALEUR APPARAÎT
SUR LA PLACE DE LONDRES
...................
$
Modifier le propriétaire d'un fichier ou d'un dossier
Modifier le propriétaire d'un fichier ou d'un dossier
Pour modifier le propriétaire d'un fichier ou d'un dossier
$ sudo chown root /u
change le propriétaire de /u en « root ».
$ sudo chown root:staff /u
même chose en changeant également le groupe en « staff ».
$ sudo chown -hR root /u
change le propriétaire de /u et ses sous-fichiers en « root ».
OPTIONS
Changer le propriétaire et/ou le groupe de chaque FICHIER en PROPRIÉTAIRE et/ou GROUPE. Avec l’option --reference, modifier le propriétaire et le groupe de chaque fichier en celui du FICHIER-R.
-c, --changes utiliser le mode bavard en ne signalant que les modifications --dereference affecter la cible de chaque lien symbolique (comportement par défaut) plutôt que le lien symbolique lui-même -h, --no-dereference modifier les liens symboliques au lieu des fichiers référencés (utile seulement sur les systèmes permettant de changer le propriétaire d’un lien symbolique) --from=PROPRIETAIRE_COURANT:GROUPE_COURANT changer le propriétaire et/ou le groupe de chaque fichier seulement s’il y a concordance avec le propriétaire et/ou le groupe courant spécifié. Les deux peuvent être omis, auquel cas la concordance n’est pas requise pour le paramètre non spécifié --no-preserve-root ne pas traiter « / » de manière spéciale (par défaut) --preserve-root ne pas opérer récursivement sur « / » -f, --silent, --quiet supprimer la plupart des messages d’erreur --reference=FICHIER-R utiliser le propriétaire et le groupe du FICHIER-R au lieu de valeurs explicites PROPRIÉTAIRE:GROUPE -R, --recursive modifier récursivement fichiers et répertoires -v, --verbose afficher un diagnostic pour chaque fichier traité Les options suivantes modifient la façon dont est parcourue la hiérarchie lorsque l’option -R est également spécifiée. Si plus d’une option est spécifiée, seule la dernière est prise en compte. -H si un paramètre de la ligne de commande est un lien symbolique vers un répertoire, le parcourir -L parcourir chaque lien symbolique rencontré menant à un répertoire -P ne parcourir aucun lien symbolique (par défaut) --help afficher l’aide-mémoire et quitter --version afficher le nom et la version du logiciel et quitter Le propriétaire n’est pas modifié s’il n’est pas spécifié. Le groupe reste inchangé s’il n’est pas spécifié, sauf si cela est implicitement demandé avec un « : » suivant un PROPRIÉTAIRE symbolique, auquel cas il sera modifié en ce nom de propriétaire. Le PROPRIÉTAIRE et le GROUPE peuvent être numériques ou symboliques.
Modifier les permissions d'un fichier ou d'un dossier
Modifier les permissions d'un fichier ou d'un dossier
Pour modifier les permissions d'un fichier ou d'un dossier
$ sudo chmod 777 ./nom_du_fichier
modifie les permissions pour le fichier
$ sudo chmod 777 ./nom_du_dossier
modifie les permissions pour le dossier
$ sudo chmod -R 777 ./nom_du_dossier
modifie les permissions pour le dossier et tous les fichiers du dossier
Les permission sont données dans l'ordre user - groupe - autre
La lecture = 4
L'écriture = 2
L'exécution = 1
Tous les droits = 7
Quelques commandes pour les dossiers
Quelques commandes pour les dossiers
Pour connaitre le nom du dossier courant, saisir dans une console la commande :
$ pwd
Pour se rendre dans son répertoire personnel saisir dans une console l'une des 2 commandes suivantes:
$ cd
$ cd ~
Pour retourner au dossier précédent :
$ cd -
Rechercher les dossiers modifiés dans les dernières 24 heures et lister leurs contenus :
$ find /dossier_origine/* -mtime 0 -type d -exec ls -lht {} \;
l'option -mtime permet de spécifier le nombre de période de 24 heures.
l'option -type d permet d'indiquer que la recherche s'effectue uniquement sur les dossiers.
l'option -exec ls -lht {} \; permet d'exécuter la commande ls pour chaque dossier trouvé.
Remplacer les espaces dans les noms de fichiers par des underscores
Remplacer les espaces dans les noms de fichiers par des underscores
Renommer un fichier
Renommer un fichier
Pour renommer un fichier, il suffit d'utiliser la commande mv.
Exemple :
$ mv ./foo ./bar
Cette commande va renommer le fichier foo en bar.
Voici une petite astuce bien sympa qui consiste à renommer un fichier en y ajoutant une extension quelconque.
$ mv ./foo{,.txt}
Cette commande va donc renommer le fichier foo en foo.txt
Supprimer le résultat d'une recherche (console)
Supprimer le résultat d'une recherche (console)
En utilisant l'option -delete
$ sudo find /mon-repertoire -name mon-document -delete
ou en utilisant l'option -exec et la fonction rm
$ sudo find /mon-repertoire -name mon-document -exec rm {} \;
la chaine de caractère "{}" est remplacée par le résultat de la recherche
ou en combinant les commandes find, xargs et rm
$ find /mon-repertoire -name '*.txt' -print0 | xargs -0 rm -f
$ find /mon-repertoire -name '*.txt' -print0 | xargs -I '{}' -0 rm -f {}
L'option -print0 de la commande find et -0 de la commande xargs permet de prendre en compte les fichiers comportant des espaces dans leurs noms.
Synchroniser des dossiers et des fichiers
Synchroniser des dossiers et des fichiers
La synchronisation de dossiers et/ou de fichiers se fait via le programme RSYNC
$ sudo rsync -av --del /source_a_sauvegarder/ /destination_de_la_sauvegarde/
-a : préserve l'intégralité des dossiers et fichiers
-v : verbose (affiche le détail à l'écran)
--del : supprime les fichiers et dossiers de destination qui ne sont plus dans source
rsync via SSH
$ rsync -a /source/ login@serveur.org:/destination/
Transfert de fichiers via SCP
Transfert de fichiers via SCP
SCP (Secure Copy Protocol) est un protocole permettant le transfert de fichiers en toute sécurité d'une machine locale vers une machine distante et inversement. Tous les transferts de fichiers sont effectués via le protocol SSH.
Transférer le fichier local file1.txt vers le répertoire courant de la machine distante 192.168.1.100
$ scp ./file1.txt user@192.168.1.100:./
Transférer le fichier file1.txt de la machine distante vers le répertoire courant de la machine locale
$ scp user@192.168.1.100:./file1.txt ./
Transférer tout le répertoire local /var/test vers le répertoire /tmp de la machine distante 192.168.1.100
$ scp -r /var/test user@192.168.1.100:/tmp/
Transférer un fichier via SSH
Transférer un fichier via SSH
SSH permet d'utiliser des pipelines de commandes, et d'utiliser des tubes d'entrées/sorties comme toute autre commande, a ceci prêt que la redirection se fait vers, ou depuis la machine distante.
Celà peut, entre autre, servir à transférer des fichiers:
$ ssh serveur "cat fichier_distant" > fichier_local
L'utilité d'une telle commande est discutable, la commande scp faisant exactement la même chose.
Maintenant, imaginons un fichier de plusieurs mégas, et une bande passante assez limitée:
$ ssh serveur "gzip -c fichier_distant" > fichier_local.gz
ici, le serveur compresse le fichier, la commande écrit le fichier compressé sur le client.
On peut pousser encore plus loin, si l'on ne veut pas récupérer un fichier gzipé, mais diminuer quand même l'utilisation de la bande passante:
$ ssh serveur "gzip -c fichier_distant" |gunzip > fichier_local
VIM : Supprimer les caractères BOM dans un fichier encodé en UTF-8
VIM : Supprimer les caractères BOM dans un fichier encodé en UTF-8
Imprimer via la console
Imprimer via la console
Pour imprimer un document via la console, il faut utiliser le commande LPR
Impression avec l'imprimante par défaut
$ lpr /mon-document
Impression en choisissant une imprimante
$ lpr -P nom-de-l-imprimante /mon-document
Impression avec un autre USER
$ lpr -U $USER /mon-document
Impression en mode mirroir
$ lpr -o mirror /mon-document
Internet
Internet
Télécharger un fichier d'internet
Télécharger un fichier d'internet
Aspirer un site internet
Aspirer un site internet
Pour aspirer un site internet
$ wget -r -l5 -k -E "http://www.l_adresse_du_site.a_recuperer.com"
-r : récursif sur le site
-l5 : cinq niveaux de récursion au maximum
-k : convertir les destinations des liens pour une lecture locale
-E : convertir les types de fichier au format HTML (pour éviter que la lecture de sites en PHP ne foire en lecture sous Firefox).
A l'aide de l'outil httrack
$ sudo apt-get install httrack
Pour aspirer le site :
$ httrack --mirror http://mon-site.com
Pour mettre à jour le site aspirer (se placer dans le dossier du site):
$ httrack --update
Authentification
Et comment fait-on sur un site où l'on doit s'authentifier au préalable ? Peut-on ajouter les id/pass en ligne de commande ?
Authentification
Je pense que c'est possible.
Avec wget, il est possible d'utiliser des cookies pour la gestion de l'authentification.
Voir la doc ici
Si tu veux aspirer un site
Si tu veux aspirer un site avec authentification, tu peux essayer de passer les identifiants en ligne de commande avec wget en utilisant l'option --http-user et --http-password. Ça devrait ressembler à quelque chose comme :
```bash
wget --http-user=ton_identifiant --http-password=ton_mot_de_passe -r -l5 -k -E "http://www.l_adresse_du_site_a_recuperer.com"
Sinon, une autre méthode consiste à utiliser les cookies d'une session déjà ouverte. Tu démarres une session dans ton navigateur, exportes les cookies, puis les réutilises dans wget avec l'option --load-cookies. C'est un peu plus technique mais ça peut être bien utile si tu as des étapes d'authentification plus complexes.
Pour ceux qui utilisent httrack, je crois qu'il y a aussi moyen de gérer les cookies, mais c’est un peu plus galère. Peut-être que d’autres ici ont déjà testé et pourraient confirmer ?
Je bosse en agence web, et quand le besoin se présente c'est comme cela que je procède.
CURL: Afficher les informations SSL d'un domaine
CURL: Afficher les informations SSL d'un domaine
La commande curl est très utile pour afficher, tester etc... un site internet.
On peut également utiliser la commande curl pour afficher les informations SSL des sites internet.
Par exemple, avec mon site internet https://quennec.fr
# curl -I --verbose https://quennec.fr* Trying 51.159.70.99:443...
* TCP_NODELAY set
* Connected to quennec.fr (51.159.70.99) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
* CAfile: /etc/ssl/certs/ca-certificates.crt
CApath: /etc/ssl/certs
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
* TLSv1.3 (IN), TLS handshake, Certificate (11):
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
* TLSv1.3 (IN), TLS handshake, Finished (20):
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.3 (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384
* ALPN, server accepted to use h2
* Server certificate:
* subject: CN=quennec.fr
* start date: Mar 11 07:02:14 2024 GMT
* expire date: Jun 9 07:02:13 2024 GMT
* subjectAltName: host "quennec.fr" matched cert's "quennec.fr"
* issuer: C=US; O=Let's Encrypt; CN=R3
* SSL certificate verify ok.
...
<
* Connection #0 to host quennec.fr left intact
On peut voir qui a émis le certificat, ses dates de validité etc etc ...
Et sinon, la commande openssl permet de récupérer le certificat complet, voir openssl : Récupérer un certificat distant
CURL: Poster des données et des fichiers via un formulaire
CURL: Poster des données et des fichiers via un formulaire
La commande CURL peut être utilisée pour poster des données via un formulaire WEB.
Exemple avec la commande suivante:
$ curl \
--insecure \
--request POST \
--header 'Content-Type: multipart/form-data' \
'https://www.monsite.com/monformulaire' \
-F 'username=toto' \
-F 'password=pass4toto' \
-F 'date-de-naissance=11-02-82' \
-F "file=@monfichier.txt" \
--include
Détail des options:
--insecure permet d'utiliser une connexion sécurisée (https) avec un certificat auto-signé (non reconnu)
--request POST permet d'indiquer le type de la requête
--header 'Content-Type: multipart/form-data' permet d'indiquer l'en-tête de la requête
-F permet d'indiquer les valeurs pour les différents champs du formulaire
--include permet de récupérer l'en-tête de la réponse
Pour poster un fichier, il est nécessaire de préfixer le nom du fichier avec l'arobase (@)
CURL: appeler un webservice SOAP
CURL: appeler un webservice SOAP
Pour appeler un webservice SOAP avec la commande CURL, il suffit d'indiquer le bon content-type dans le header ainsi que le nom du fichier XML à envoyer.
# curl \
> --header "content-type: application/soap+xml; charset=utf-8" \
> --data @request.xml \
> http://$SERVER:$PORT/$ENDPOINT
Ne pas oublier le symbole '@' devant le nom du fichier XML pour indiquer à la commande CURL qu'il s'agit d'un fichier.
CURL: utiliser un serveur proxy
CURL: utiliser un serveur proxy
Pour utiliser un serveur proxy avec la commande curl, il suffit tout simplement de créer dans son home un fichier .curlrc
Il est possible d'y ajouter différents paramètres liés à la commande curl
$ cat .curlrc
--proxy-user "user_toto:pass_toto"
--proxy "http://proxy.mondomaine.local:3128/"
--noproxy "localhost,127.0.0.1,mondomaine.local"
Ne pas oublier de paramétrer les accès au fichier
$ chmod 0600 .curlrc
Créer un sprite CSS sans se prendre la tête
Créer un sprite CSS sans se prendre la tête
Qu'est ce qu'un sprite CSS ?
En CSS, un sprite est une image unique regroupant plusieurs images différentes.
Cela permet de réduire les requêtes http pour les images insérées dans une page html.
Les positions absolues de chaque images sont indiquées dans un fichier css.
Avec ce procédé, l'insertion d'une image dans une page html ne se fait plus avec la balise <img> mais avec une balise <div> ayant comme nom de "class" celui correspondant à l'image souhaitée et indiqué dans le fichier css.
Il existe sous Debian/Ubuntu, mais également pour Windows et OSX, une commande qui permet de générer un sprite CSS à partir d'un dossier contenant des images.
Cette commande se nomme Glue.
Pour l'installer sous Debian/Ubuntu :
$ sudo apt-get install libjpeg62 libjpeg62-dev zlib1g-dev python-dev python-pip
$ sudo pip install glue
ou
$ sudo apt-get install glue-sprite
Créer un sprite CSS tout simplement
$ glue source_dir output_dir
Par exemple :
$ glue famfamfam_flag_icons/png sprite
Le dossier famfamfam_flag_icons/png contient exactement 247 images PNG et la commande glue va donc créer un unique fichier PNG dans le dossier sprite regroupant toutes les images et un fichier css indiquant les positions de chaque image.
...
Il est possible de générer également la page html permettant de visualiser le résultat en ajoutant l'option --html.
$ glue famfamfam_flag_icons/png sprite --html
$ ls -1 sprite/
png.css
png.html
png.png
La commande glue génère les fichiers css, html et png en fonction du nom du dossier indiqué en source.
Par défaut, le nom des "class" commence par sprite-leNomDuDossierSource-leNomDuFichier.
$ glue famfamfam_flag_icons/png sprite --namespace=monSprite
La liste complète des options est disponible avec l'option -h.
$ glue -h
Voici un exemple de l'image globale générée à l'aide de la commande glue.
Navigateur en ligne de commande
Navigateur en ligne de commande
La commande mount
La commande mount
Monter une clé USB ou un disque dur externe en ligne de commande avec la commande mount.
- Brancher la clé USB ou le disque dur externe
- Avec la commande fdisk et l'option -l, afficher à l'écran la liste des périphériques connectés afin d'obtenir les informations nécessaires au montage.
Rechercher dans la liste le périphérique concerné.
Dans mon cas, il s'agit d'une clé USB de 4 Go et correspondant au dernier périphérique de la liste (/dev/sdd)
$ sudo fdisk -l
...
Disque /dev/sdd: 4009 Mo, 4009754624 octets
23 têtes, 23 secteurs/piste, 14804 cylindres
Unités = cylindres de 529 * 512 = 270848 octets
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Identifiant de disque : 0xc3072e18
Périphérique Amorce Début Fin Blocs Id Système
/dev/sdd1 * 16 14805 3911744 b W95 FAT32
$
- Les infos nécessaires au montage sont celles indiquées en rouge.
C'est à dire, le fichier correspondant à la partition de la clé ou du disque externe (/dev/sdd1).
Dans le cas d'un périphérique ayant plusieurs partitions, la liste des périphériques contiendrait plusieurs lignes (/dev/sddx).
Et enfin, le système de fichiers (FAT32)
La syntaxe de la commande mount est la suivante :
mount -t type device dir
type correspond au système de fichiers du périphérique à monter.
device correspond au fichier de la partition à monter.
dir correspond au répertoire dans lequel sera monté le périphérique.
Pour le paramètre type, il existe différents formats pris en charge :
adfs, affs, autofs, cifs, coda, coherent, cramfs, debugfs, devpts, efs, ext, ext2, ext3, ext4, hfs, hfsplus, hpfs,iso9660, jfs, minix, msdos, ncpfs, nfs, nfs4, ntfs, proc, qnx4,ramfs, reiserfs, romfs, squashfs,smbfs, sysv, tmpfs, ubifs, udf, ufs, umsdos, usbfs, vfat, xenix, xfs,xiafs
- Créer, s'il n'existe pas déjà, le répertoire destiné à recevoir le montage.
$ sudo mkdir /mnt/ma_cle_usb
$
- Pour terminer, procéder au montage de la partition /dev/sdd1 dans le répertoire /mnt/ma_cle_usb avec le système de fichiers vfat.
vfat correspondant au système de fichiers FAT32.
$ sudo mount -t vfat /dev/sdd1 /mnt/ma_cle_usb/
$
Pour vérifier la bonne exécution du montage
$ mount
...
/dev/sdd1 on /mnt/ma_cle_usb type vfat (rw)
$
Avec cette commande, on s'aperçoit que le prériphérique est monté en RW (lecture/écriture).
Pour monter le périphérique en lecture seule, il suffit d'utiliser l'option -r.
$ sudo mount -r -t vfat /dev/sdd1 /mnt/ma_cle_usb/
$ mount
...
/dev/sdd1 on /mnt/ma_cle_usb type vfat (ro)
$
Pour démonter le périphérique
$ sudo umount -f /mnt/ma_cle_usb/
$
L'option -f permet de forcer le démontage
Une erreur souvent rencontrée
Un périphérique est monté et l'erreur suivante apparait lors du démontage
$ sudo umount /mnt/ma_cle_usb/
démontage : /mnt/ma_cle_usb: périphérique occupé.
(Dans certains cas, des infos sur les processus l'utilisant
sont récupérables par lsof(8) ou fuser(1))
$
Vérifier le répertoire dans lequel on se trouve
$ pwd
/mnt/ma_cle_usb
$
La commande pwd indique que je me trouve dans le répertoire que je veux démonter.
Le démontage est donc impossible car le répertoire concerné est en cours d'utilisation.
Il suffit donc de se placer dans un autre répertoire et d'exécuter à nouveau la commande umount.
$ cd
$ sudo umount /mnt/ma_cle_usb/
$
La commande mount utilisée avec l'option -a permet d'exécuter tous les points de montage inscrits dans le fichier /etc/fstab
$ sudo mount -a
Très pratique pour vérifier toutes les modifications effectuées dans le fichier /etc/fstab
Si une partition n'a plus d'espace libre disponible, elle est montée en lecture seule.
# mount
...
/dev/sdb1 on /mnt/datas type ext4 (ro)
...
Pour pouvoir y faire le ménage, il est nécessaire de pouvoir y accéder en écriture.
Pour ce faire, la partition doit être remontée en écriture de cette manière:
# mount -o remount,rw /mnt/datas
# mount
...
/dev/sdb1 on /mnt/datas type ext4 (rw)
...
Clé usb neuve, non reconnue par le système (Linuxmint 21.1)
Depuis ce matin, je me bats avec la console pour faire reconnaître ma clé, achetée ce matin même. (verbatim USB 3.2 Gen 1) 32 GO.
sudo fdisk -l ne me donne que les partitions de mon disque dur.
Je ne sais plus quoi faire. Seriez vous assez aimable de me donner un coup de main ?
Bonjour Jean-Jacques
Quelques pistes à explorer.
1) Question bête, exécutes tu la commande `fdisk -l` avec sudo ?
2) Avant d'insérer ta clé usb, ouvre un terminal et exécute la commande suivante avec sudo `sudo journalctl -f`
Ensuite, insère ta clé usb, en théorie, il devrait s'afficher dans le terminal toutes les infos détectées par le système concernant ta clé usb.
3) As tu essayé avec un autre périphérique usb ? Ta clé usb a peut-être un défaut.
4) As tu essayé ta clé usb sur un autre ordinateur ?
Bon courage
Clé usb neuve, non reconnue par le système (Linuxmint 21.1)
Merci d'avoir répondu
Question 1 : sudo avec fdisk : oui :-)
2 : sudo `sudo journalctl -f` : aucun résultat. j'ai été obligé d'interrompre le processus
3 : non, pas essayé, j'avais peur de casserma machine
4 : essayé aec mon ordi portable : elle fonctionne sous Verbatim. son nom : hp DVDRW GUE1N
Peut être doit-on en conclure que quelque chose ne va pas bien sur mon ordi.
Clé usb neuve, non reconnue par le système (Linuxmint 21.1)
Sur mon pc les 4 ports USB sont occupés. J'en ai réservé 1 pour y mettre un hub comportant 4 ports usb, dont 3 occupés par le système (clavier, souris et ?...).
Sur un pc portable, la clé est immédiatement reconnue sous "Verbatim" qui est la marque de la clé. Peut être que ce hub, justement, ne permet pas de la reconnaître ?
Sur l'autre ordinateur, portable HP, elle est immédiatement reconnue sous Verbatim, sans autre manip'.
Maintenant, je me souviens que l'ordinateur réfractaire a été acheté d'occasion et était destiné à être utilisé sous Microsoft (Windows x?). J'ai fait installer Linux Mint 21.3 Virginia par un professionnel. Peut-être est-ce là la cause du problème ?
En tout cas, merci de m'aider.
Clé usb neuve, non reconnue par le système (Linuxmint 21.1)
il y a de grandes chances pour que ce soit le hub qui empêche la clé de fonctionner correctement.
Il n'est d'ailleurs pas conseillé d'utiliser une clé usb via un hub.
Liens symboliques
Liens symboliques
Créer un lien symbolique
Créer un lien symbolique
Pour créer un lien symbolique
Avant toute chose, se mettre dans le répertoire dans lequel on souhaite créer le lien :
$ ln -s /nom_du_dossier_source nom_du_lien
$ ln -s /emplacement/nom_du_fichier_source nom_du_lien
Ou en utlisant les chemins absolus :
$ ln -s /emplacement/nom_du_fichier_source /emplacement/nom_du_lien
Supprimer un lien symbolique
Supprimer un lien symbolique
Les nombres
Les nombres
Générer une séquence de nombre
Générer une séquence de nombre
Sous GNU/Linux, il existe une commande permettant de générer une séquence de nombre.
Il s'agit de la commande seq.
Cette commande s'utilise avec ou sans options et avec un nombre d'arguments allant de 1 à 3.
Un seul argument indique la fin de la séquence.
Deux arguments indiquent le début et la fin de la séquence.
Trois arguments indiquent le début, le pas et la fin de la séquence.
Générer une séquence simple jusqu'à 10 :
$ seq 10
1
2
3
4
5
6
7
8
9
10
Générer une séquence allant de 5 à 10 :
$ seq 5 10
5
6
7
8
9
10
Générer une séquence allant de 1 à 10 avec un pas de 2 :
$ seq 1 2 10
1
3
5
7
9
Par défaut, le séparateur est le retour chariot. L'option -s permet de modifier ce séparateur :
$ seq -s "-" 1 2 10
1-3-5-7-9
L'option -w permet d'avoir une séquence dont les nombres ont le même nombre de caractères :
$ seq -w 0 100
000
001
002
003
004
005
006
007
008
009
...
098
099
100
Parcourir une séquence avec une boucle for :
$ for i in $(seq 0 2 10); do echo $i; done
0
2
4
6
8
10
Il existe une autre méthode permettant de générer une séquence de nombres, ou de lettres :
$ echo {1..5}
1 2 3 4 5
$ echo {5..-4}
5 4 3 2 1 0 -1 -2 -3 -4
$ echo {a..z}
a b c d e f g h i j k l m n o p q r s t u v w x y z
$ echo "Nombre #"{1..7},
Nombre #1, Nombre #2, Nombre #3, Nombre #4, Nombre #5, Nombre #6, Nombre #7,
$ echo {1..5}{x..z}" +" "..."
1x + 1y + 1z + 2x + 2y + 2z + 3x + 3y + 3z + 4x + 4y + 4z + 5x + 5y + 5z + ...
$ echo {001..090}
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033 034 035 036 037 038 039 040 041 042 043 044 045 046 047 048 049 050 051 052 053 054 055 056 057 058 059 060 061 062 063 064 065 066 067 068 069 070 071 072 073 074 075 076 077 078 079 080 081 082 083 084 085 086 087 088 089 090
$ for j in {1..10}; do echo $j; done
1
2
3
4
5
6
7
8
9
10
Générer toutes les combinaisons possibles pour les immatriculations automobiles françaises :
$ echo {A..Z}{A..Z}"-"{001..999}"-"{A..Z}{A..Z}
Attention. Cette commande génère un peu moins de 460 millions de données.
Trier un tableau de valeurs numériques
Trier un tableau de valeurs numériques
Initialisation du tableau A :
$ TAB_A=(25 46 98 3 9 10 21 15 6)
$ echo ${TAB_A[*]}
25 46 98 3 9 10 21 15 6
Initialisation du tableau B contenant les valeurs triées du tableau A :
$ TAB_B=($(echo ${TAB_A[*]} | sed 's/ /\n/g' | sort -n))
$ echo ${TAB_B[*]}
3 6 9 10 15 21 25 46 98
L'astuce consiste à afficher les valeurs du tableau A, puis substituer les espaces entre les différentes valeurs par des retours à la ligne et enfin utiliser la commande sort pour trier les valeurs.
Une calculatrice en ligne de commande
Une calculatrice en ligne de commande
Sous Debian/Ubuntu, il existe une commande qui permet de transformer la console en calculatrice.
Cette commande s'appelle bc.
Pour l'installer :
$ apt-get install bc
Utilisation (en rouge les résultats affichés) :
$ bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
5*8
40
15+9
24
45/8
5
Sans option, la commande bc exécute les calculs sans les décimales.
Pour afficher les décimales, il suffit d'utiliser l'option -l
$ bc -l
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
5*8
40
9-5
4
6+8
14
40/5
8.00000000000000000000
45/8
5.62500000000000000000
Par défaut, l'option -l affiche 20 chiffres après la virgule.
Pour modifier cette valeur, il suffit d'utiliser la fonction scale.
$ bc -l
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
scale=5
45/8
5.62500
Il est également possible d'utiliser des variables.
Calculer la valeur de pi :
pi est égal à 4 fois l'arc tangente de 1 radian.
test - integer expression expected
test - integer expression expected
J'ai récemment été confronté à l'erreur "integer expression expected" lors d'un test de deux entiers dans un de mes scripts.
Après plusieurs tests, j'ai finalement compris d'où venait mon erreur.
La variable que je testais ne contenait pas que des chiffres.
Elle n'était donc pas reconnue comme un entier.
Un simple "echo" de ma variable ne faisait pas apparaître tous les caractères de celle-ci.
Pour m'en apercevoir, j'ai dû utiliser la commande "od".
Exemple :
Je vais générer volontairement une erreur au niveau du contenu de la variable à tester en y insérant un caractère spécifique.
$ a=$(echo -e "20\a")
$ echo $a
20
La commande "echo" ne fait pas apparaitre le caractère spécifique contenu dans ma variable.
Je test si ma variable est égale à 20 (par exemple).
$ test $a -eq 20
-bash: test: 20: integer expression expected
J'ai bien une erreur car effectivement ma variable ne peut pas être considérée comme un entier à cause du caractère spécifique qu'elle contient.
La preuve avec la commande "od -c" ...
$ echo -n $a | od -c
0000000 2 0 \a
... le caractère spécifique "\a" apparait bien.
En conclusion, penser à bien vérifier le contenu des variables avec la commande "od" pour voir si des caractères spécifiques ne s'y sont pas insérés.
alternative de détection de caractères indésirables
echo @${variable_name}@
si vide la sortie sera
@@
les @ seront collés pour la mise en évidence des espaces, le cas échéant.
echo ${#variable_name}
donnera le nombre de caractères inclus dans variable_name
Effectivement
Envoyer un mail
Envoyer un mail
Pour envoyer un mail via une console Ubuntu :
$ mail -s "sujet du mail" adresse@destinataire.fr
Appuyer sur Entrée, renseigner si besoin une adresse CC, appuyer à nouveau sur Entrée, saisir le texte du message, appuyer une dernière fois sur Entrée puis appuyer sur les touches ctrl+d
Si cette commande est enregistrée dans un script, et si ce script est exécuté automatiquement via une tâche Cron, il n'y a pas de demande concernant l'adresse CC et le texte du message.
Pour envoyer un mail avec une pièce jointe via une console Ubuntu :
Installer le paquet mutt :
$ sudo apt-get install mutt
Envoyer un mail via cette commande :
$ mutt -s "sujet du mail" adresse@destinataire.fr -a /nom_du_fichier
$ mutt -s "Sujet du mail" -a /mon_dossier/mon_fichier -- destinataire@domaine.com
Valider les différentes étapes puis appuyer sur y pour envoyer le mail.
Si cette commande est utilisée dans un script et exécuté automatiquement via une tâche cron, le message est envoyé sans aucune étape supplémentaire à valider
Attention, dans la commande mutt, l'ajout d'une pièce jointe se fait exclusivement en dernier paramètre sans compter l'adresse du destinataire.
Pour envoyer un mail via Telnet :
$ telnet adresse_ip_du_serveur 25
helo votre_nom
mail from:<votreadresse@votredomaine.fr>
rcpt to:<adressedestinataire@domaine.fr>
data
votre message
. (le point est très important, il indique la fin du message)
quit
Envoyer un mail en HTML
Envoyer un mail en HTML
Il est quand même plus agréable de recevoir un mail en HTML qu'en texte brut.
La commande mail propose l'option -a qui permet de modifier l'en-tête du message.
Comme des exemples valent mieux qu'une grande explication :
$ echo "<html><head></head><body><p>Mon premier mail en <b>HTML</b></p></body></html>" | mail -a "MIME-Version: 1.0" -a "Content-Type: text/html" -s "Message" moi@gmail.lui
C'est quand même vachement simple.
Ecrire du HTML avec la commande echo, c'est sympa, mais un peu chiant si le message est long et pleins de balises.
Qu'à cela ne tienne, on écrit le HTML dans un fichier et on envoie le contenu du fichier par mail.
$ cat testMail.html
<html>
<head>
</head>
<body>
<h1>Mon Premier Mail En HTML</h1>
<p>
Qu'est ce que c'est chouette de pouvoir écrire des mails en HTML
</p>
<P>
On peut y insérer des liens ... <br />
<a href="http://www.quennec.fr">Mon Site</a> <br />
<a href="mailto:moi@gmail.lui">Mon mail</a>
</p>
</body>
</html>
$ cat testMail.html | mail -a "MIME-Version: 1.0" -a "Content-Type: text/html" -s "Message" moi@gmail.lui
De mieux en mieux.
Bonus :
Je m'envoie très souvent par mail des données issues de requêtes SQL.
Qu'est ce que c'est moche la représentation des tableaux en texte brut.
L'option -H utilisée avec la commande mysql permet de formater le résultat en tableau HTML.
Le top du top.
$ ( echo -n "<html><head></head><body>" ; echo "select col1, col2, col3 from maTable" | mysql -H -h localhost -u user -ppass maBase ; echo "</body></html>" ) | mail -a "MIME-Version: 1.0" -a "Content-Type: text/html" -s "Le Résultat de ma requête" moi@gmail.lui
Petite explication :
On affiche, avec la commande echo, la balise <html><head> </head> et <body> sans retour à la ligne avec l'option -n.
On enchaine avec la requête SQL (echo "select ...") qu'on transmet à mysql avec un "|" et qu'on exécute avec l'option -H pour afficher le résultat au format HTML.
On enchaine avec la commande echo pour afficher la balise fermante </body> et </html>.
On regroupe toutes ces commandes entre parenthèses afin de les envoyer à la commande mail avec un "|".
On indique à la commande mail d'envoyer le contenu du mail au fromat HTML grâce aux paramètres de l'option -a.
La classe, non ?
OpenSSL
OpenSSL
OpenSSL est un programme utilisant les protocoles de chiffrement SSL (v2/v3) et TLS (v1).
Il est utilisé principalement pour :
- Créer des clés RSA, DH et DSA.
- Créer des certificats X509, CSR et CRL.
- Calculer des sommes de fichiers.
- Chiffrer et déchiffrer des chaines de caractères/des fichiers.
- Effectuer des tests SSL/TLS entre un client et un serveur.
Quelques liens consernant SSL
Autorités de certification:
Tests de sécurité SSL:
Générateur de configuration SSL pour apache, nginx, haproxy, aws elb:
Mozilla SSL Configuration Generator
openssl : Afficher la version installée
openssl : Afficher la version installée
$ openssl version
OpenSSL 0.9.8o 01 Jun 2010
$ openssl version -a
OpenSSL 0.9.8o 01 Jun 2010
built on: Mon Feb 11 21:27:58 UTC 2013
platform: debian-i386-i686/cmov
options: bn(64,32) md2(int) rc4(idx,int) des(ptr,risc1,16,long) blowfish(idx)
compiler: gcc -fPIC -DOPENSSL_PIC -DZLIB -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -DL_ENDIAN -DTERMIO -O3 -march=i686 -Wa,--noexecstack -g -Wall -DOPENSSL_BN_ASM_PART_WORDS -DOPENSSL_IA32_SSE2 -DSHA1_ASM -DMD5_ASM -DRMD160_ASM -DAES_ASM
OPENSSLDIR: "/usr/lib/ssl"
$
openssl : Afficher les sous-commandes disponibles
openssl : Afficher les sous-commandes disponibles
$ openssl help
openssl:Error: 'help' is an invalid command.
Standard commands
asn1parse ca ciphers crl crl2pkcs7
dgst dh dhparam dsa dsaparam
ec ecparam enc engine errstr
gendh gendsa genrsa nseq ocsp
passwd pkcs12 pkcs7 pkcs8 prime
rand req rsa rsautl s_client
s_server s_time sess_id smime speed
spkac verify version x509
Message Digest commands (see the `dgst' command for more details)
md2 md4 md5 rmd160 sha
sha1
Cipher commands (see the `enc' command for more details)
aes-128-cbc aes-128-ecb aes-192-cbc aes-192-ecb aes-256-cbc
aes-256-ecb base64 bf bf-cbc bf-cfb
bf-ecb bf-ofb cast cast-cbc cast5-cbc
cast5-cfb cast5-ecb cast5-ofb des des-cbc
des-cfb des-ecb des-ede des-ede-cbc des-ede-cfb
des-ede-ofb des-ede3 des-ede3-cbc des-ede3-cfb des-ede3-ofb
des-ofb des3 desx rc2 rc2-40-cbc
rc2-64-cbc rc2-cbc rc2-cfb rc2-ecb rc2-ofb
Comme indiqué, il est possible d'afficher les détails des sous-commandes dgst et enc.
$ openssl dgst -h
unknown option '-h'
options are
-c to output the digest with separating colons
-d to output debug info
-hex output as hex dump
-binary output in binary form
-sign file sign digest using private key in file
-verify file verify a signature using public key in file
-prverify file verify a signature using private key in file
-keyform arg key file format (PEM or ENGINE)
-signature file signature to verify
-binary output in binary form
-hmac key create hashed MAC with key
-engine e use engine e, possibly a hardware device.
-md5 to use the md5 message digest algorithm (default)
-md4 to use the md4 message digest algorithm
-md2 to use the md2 message digest algorithm
-sha1 to use the sha1 message digest algorithm
-sha to use the sha message digest algorithm
-sha224 to use the sha224 message digest algorithm
-sha256 to use the sha256 message digest algorithm
-sha384 to use the sha384 message digest algorithm
-sha512 to use the sha512 message digest algorithm
-mdc2 to use the mdc2 message digest algorithm
-ripemd160 to use the ripemd160 message digest algorithm
$ openssl enc -h
unknown option '-h'
options are
-in <file> input file
-out <file> output file
-pass <arg> pass phrase source
-e encrypt
-d decrypt
-a/-base64 base64 encode/decode, depending on encryption flag
-k passphrase is the next argument
-kfile passphrase is the first line of the file argument
-md the next argument is the md to use to create a key
from a passphrase. One of md2, md5, sha or sha1
-K/-iv key/iv in hex is the next argument
-[pP] print the iv/key (then exit if -P)
-bufsize <n> buffer size
-engine e use engine e, possibly a hardware device.
Cipher Types
-aes-128-cbc -aes-128-cfb -aes-128-cfb1
-aes-128-cfb8 -aes-128-ecb -aes-128-ofb
-aes-192-cbc -aes-192-cfb -aes-192-cfb1
-aes-192-cfb8 -aes-192-ecb -aes-192-ofb
-aes-256-cbc -aes-256-cfb -aes-256-cfb1
-aes-256-cfb8 -aes-256-ecb -aes-256-ofb
-aes128 -aes192 -aes256
-bf -bf-cbc -bf-cfb
-bf-ecb -bf-ofb -blowfish
-cast -cast-cbc -cast5-cbc
-cast5-cfb -cast5-ecb -cast5-ofb
-des -des-cbc -des-cfb
-des-cfb1 -des-cfb8 -des-ecb
-des-ede -des-ede-cbc -des-ede-cfb
-des-ede-ofb -des-ede3 -des-ede3-cbc
-des-ede3-cfb -des-ede3-cfb1 -des-ede3-cfb8
-des-ede3-ofb -des-ofb -des3
-desx -desx-cbc -rc2
-rc2-40-cbc -rc2-64-cbc -rc2-cbc
-rc2-cfb -rc2-ecb -rc2-ofb
-rc4 -rc4-40
openssl : Tester les performances de son système
openssl : Tester les performances de son système
L'option speed permet de tester les capacités du sytème pour encrypter des données avec les différents algorithmes de cryptage pendant une période donnée.
$ openssl speed
Doing md2 for 3s on 16 size blocks: 149573 md2's in 2.54s
Doing md2 for 3s on 64 size blocks: 82254 md2's in 2.74s
Doing md2 for 3s on 256 size blocks: 26039 md2's in 2.58s
Doing md2 for 3s on 1024 size blocks: 8149 md2's in 2.93s
Doing md2 for 3s on 8192 size blocks: 1072 md2's in 2.99s
Doing md4 for 3s on 16 size blocks: 3651107 md4's in 2.87s
Doing md4 for 3s on 64 size blocks: 3393515 md4's in 3.00s
Doing md4 for 3s on 256 size blocks: 2340602 md4's in 2.99s
Doing md4 for 3s on 1024 size blocks: 1045777 md4's in 3.00s
Doing md4 for 3s on 8192 size blocks: 167900 md4's in 2.96s
Doing md5 for 3s on 16 size blocks: 3080791 md5's in 2.99s
Doing md5 for 3s on 64 size blocks: 2599131 md5's in 3.00s
Doing md5 for 3s on 256 size blocks: 1577068 md5's in 2.87s
Doing md5 for 3s on 1024 size blocks: 666677 md5's in 2.99s
Doing md5 for 3s on 8192 size blocks: 102011 md5's in 2.99s
...
Pour l'exemple, mon système est capable d'encrypter 666 677 fichiers de 1024 octets en 3s maximum.
Il est possible d'effectuer le test sur un algorithme précis :
$ openssl speed sha256
Doing sha256 for 3s on 16 size blocks: 1626266 sha256's in 2.94s
Doing sha256 for 3s on 64 size blocks: 958515 sha256's in 3.00s
Doing sha256 for 3s on 256 size blocks: 415732 sha256's in 2.99s
Doing sha256 for 3s on 1024 size blocks: 127673 sha256's in 2.99s
Doing sha256 for 3s on 8192 size blocks: 16527 sha256's in 2.87s
OpenSSL 0.9.8o 01 Jun 2010
built on: Mon Feb 11 21:27:58 UTC 2013
options:bn(64,32) md2(int) rc4(idx,int) des(ptr,risc1,16,long) aes(partial) blowfish(idx)
compiler: gcc -fPIC -DOPENSSL_PIC -DZLIB -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -DL_ENDIAN -DTERMIO -O3 -march=i686 -Wa,--noexecstack -g -Wall -DOPENSSL_BN_ASM_PART_WORDS -DOPENSSL_IA32_SSE2 -DSHA1_ASM -DMD5_ASM -DRMD160_ASM -DAES_ASM
available timing options: TIMES TIMEB HZ=100 [sysconf value]
timing function used: times
The 'numbers' are in 1000s of bytes per second processed.
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes
sha256 8850.43k 20448.32k 35594.45k 43724.80k 47173.93k
Il est possible également de tester les performances SSL d'un serveur distant :
$ openssl s_time -connect google.fr:443 -www / -new -ssl3
No CIPHER specified
Collecting connection statistics for 30 seconds
333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333
186 connections in 0.20s; 930.00 connections/user sec, bytes read 183024
186 connections in 31 real seconds, 984 bytes read per connection
Il est possible également de simuler un serveur SSL pour effectuer le test de performance :
1 - Générer un certificat pour le serveur simulé (répondre aux questions posées)
$ openssl req -x509 -nodes -days 365 -newkey rsa:4096 -keyout cert.pem -out cert.pem
2 - Démarrage du serveur simulé
$ openssl s_server -cert cert.pem -www
3 - Dans un autre terminal, tester les performances du serveur simulé
$ openssl s_time -connect localhost:4433 -www / -new -ssl3
No CIPHER specified
Collecting connection statistics for 30 seconds
333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333...
33333333333333333333333333
3301 connections in 6.07s; 543.82 connections/user sec, bytes read 8506677
3301 connections in 31 real seconds, 2577 bytes read per connection
openssl : Encoder une chaîne de caractères en base64/md5
openssl : Encoder une chaîne de caractères en base64/md5
Pour encoder une chaîne de caractères en base64, utiliser la commande suivante :
$ echo -n "ceci est mon mot de passe" | openssl base64
Y2VjaSBlc3QgbW9uIG1vdCBkZSBwYXNzZQ==
Pour encoder une chaîne de caractères en md5, utiliser la commande suivante :
$ echo -n 'ceci est un mot de passe' | openssl md5
7c1cc4a1a08c9352b50151dfa5d6edf3
openssl : Chiffrer-Déchiffrer une chaine de caractères ou un fichier
openssl : Chiffrer-Déchiffrer une chaine de caractères ou un fichier
Encodage en BASE64
Encoder le contenu d'un fichier sur la sortie standard :
$ cat fic1
systèmes
$ openssl enc -base64 -in fic1
c3lzdMOobWVzCg==
Encoder le contenu d'un fichier et écrire le résultat dans un autre fichier :
$ openssl enc -base64 -in fic1 -out fic1.enc
$ cat fic1.enc
c3lzdMOobWVzCg==
Encoder une chaine de caractères :
$ echo -n "secret" | openssl enc -base64
c2VjcmV0
Ne pas oublier d'ajouter l'option -n à la commande echo sinon un retour chariot sera ajouté à la chaine encodée.
Décoder une chaine de caractères :
$ echo "c2VjcmV0" | openssl enc -base64 -d
secret
Décoder le contenu d'un fichier sur la sortie standard :
$ openssl enc -base64 -in fic1.enc -d
systèmes
Décoder le contenu d'un fichier et écrire le résultat dans un autre fichier :
$ openssl enc -base64 -d -in fic1.enc -out fic1.dec
$ cat fic1.dec
systèmes
Chiffrer un fichier avec un algorithme de chiffrement et un mot de passe
1 - Choisir un algorithme de chiffrement :
$ openssl list-cipher-commands
Voir également la page de manuel de la commande enc.
2 - Chiffrer un fichier avec l'algorithme DES3 et écrire le contenu dans un autre fichier (génération d'un fichier binaire) :
$ openssl enc -des3 -salt -in fic1 -out fic1.des3
enter des-ede3-cbc encryption password:
Verifying - enter des-ede3-cbc encryption password:
$ cat fic1.des3
Salted__d▒j▒G(▒▒r▒d}▒i▒7▒▒▒▒M▒#
Pour le déchiffrage (indication du mot de passe avec l'option -pass) :
$ openssl enc -des3 -d -salt -in fic1.des3 -out file.txt -pass pass:aaaa
$ cat file.txt
systèmes
Chiffrage DES3 mais avec un encodage en BASE64 (pour un envoi par mail par exemple) :
$ openssl enc -des3 -a -salt -in fic1 -out fic1.des3
enter des-ede3-cbc encryption password:
Verifying - enter des-ede3-cbc encryption password:
$ cat fic1.des3
U2FsdGVkX1/Cl8Jr0Aw/3eDLegGPc7meTjWbUQZcNkw=
Pour le déchiffrage :
$ openssl enc -des3 -d -a -salt -in fic1.des3 -out file.txt
enter des-ede3-cbc decryption password:
$ cat file.txt
systèmes
Pour chiffrer un fichier en indiquant le mot de passe dans la ligne de commande (avec l'option -pass) :
$ openssl enc -des3 -salt -in fic1 -out fic1.des3 -pass pass:aaaa
Pour déchiffrer un fichier en indiquant le mot de passe dans un fichier :
$ openssl enc -des3 -salt -in fic1 -out fic1.des3 -pass file:/root/pass
Dans ce cas, seule la première ligne du fichier est utilisée comme mot de passe ou phrase de passe.
Pas très efficace
Pas très efficace comme technique pour chiffrer. Si l'on tente l'expérience avec vos exemples, j'obtiens exactement les mêmes résultats... Donc, il est possible de décrypter très facilement une chaîne de caractères comme un message ou un mot de passe, il suffit de faire une correspondance brute-force avec une liste de mots crypter préalablement.... et la correspondance se fera pratiquement toute seule!...
Je ne comprends pas
Je ne comprends pas car je viens de refaire tous les tests de mon coté et à aucun moment j'obtiens le même résultat.
Par exemple, avec la commande suivante et le mot de passe "aaaa"
Premier test:
$ openssl enc -des3 -salt -in fic1 -out fic1.des3
$ cat fic1.des3
Salted__▒1▒0▒▒▒]▒w▒▒▒▒▒▒S▒▒
Second test:
$ openssl enc -des3 -salt -in fic1 -out fic1.des3
$ cat fic1.des3
Salted__▒▒Wr[\▒▒▒g}▒p▒▒▒▒7▒▒
Troisième test:
$ openssl enc -des3 -salt -in fic1 -out fic1.des3
$ cat fic1.des3
Salted__▒S▒▒▒F] ▒▒v▒u▒{▒▒[
On voit bien que le contenu des trois fichiers chiffrés n'est pas identique et pourtant le fichier source et le mot de passe sont les mêmes pour les trois tests.
Le message date mais...
Je sais que le message date mais ça peut toujours servir.
La différence provient de l'argument -slat, il permet d'ajouter une couche de protection supplémentaire. Le "sel" est un élément que l'on retrouve souvent dans les algo de hashage, dans le cas présent il s'agit d'une suite de 8 octets aléatoires (défini au moment du chiffrage) qui est utilisée de la même manière que le mot de passe sur le texte à chiffrer. Le salage est d'ailleurs contenu dans le résultat afin de pouvoir être déchiffré.
Pour ne pas saler le résultat, il faut utiliser l'argument -nosalt.
Exemple avec salage :
$ echo -n "lation" | openssl enc -des3 -pass pass:aaaa
Salted__Ç♀Ó~∟*ô♣ð╗'♫☺FÎurì╗öƨ☻ý
$ echo -n "lation" | openssl enc -des3 -pass pass:aaaa
Salted__â)4ü‗FÅÕÞ¸("{î☻♠0ǽÃ‗[Ów
$ echo -n "lation" | openssl enc -des3 -pass pass:aaaa
Salted__╬cÛ↓`0►©.╗1C£♥k┬Éf° ▓┴ ►
Exemple sans salage :
$ echo -n "lation" | openssl enc -nosalt -des3 -pass pass:aaaa
h©*╝zZbÌÓÅïY9»[Q
$ echo -n "lation" | openssl enc -nosalt -des3 -pass pass:aaaa
h©*╝zZbÌÓÅïY9»[Q
$ echo -n "lation" | openssl enc -nosalt -des3 -pass pass:aaaa
h©*╝zZbÌÓÅïY9»[Q
Le prefix "Salted__" inique que l'on a faire à quelque chose de salé, les 8 octets suivant correspondent au sel utilisé.
Tout à fait d'accord.
C'est pour cette raison que j'indique cet argument (-salt) dans la plupart des exemples que je cite.
A mon avis, en tant que
A mon avis, en tant que débutant en informatique, il est difficile pour comprendre ces étapes. Je trouve qu'il est facile d'utiliser le logiciel de cryptage, comme truecrypt et file protector.
Ce qui est expliqué ici, est
Ce qui est expliqué ici, est 100% lignes de commandes sous Linux ce qui permet d'automatiser le processus sans aucune intervention humaine.
Sinon, le logiciel TrueCrypt n'est plus maintenu et la dernière version disponible (7.2) ne permet plus de crypter mais seulement de décrypter.
Concernant file protector, c'est un tuto sous Windows.
Pour ma part, sous Windows, j'utilise le couple GPG4Win / Kleopatra qui permet de signer, crypter et décrypter des fichiers, des mails etc etc...
openssl : Clé de contrôle MD5 ou SHA1 d'un fichier
openssl : Clé de contrôle MD5 ou SHA1 d'un fichier
Pour afficher la clé de contrôle d'un fichier, il suffit d'utiliser la sous-commande dgst suivi de l'algorithme voulu.
$ openssl dgst -md5 /var/log/syslog
MD5(/var/log/syslog)= 16973fc98773afeea8b0c9c3be3ab677
$ openssl dgst -sha1 /var/log/syslog
SHA1(/var/log/syslog)= 3b0634f6793d5ed1a6260a585ea92d22badc2070
Il existe également une commande propre à chaque algorithme et qui retourne le même résultat :
$ md5sum /var/log/syslog
16973fc98773afeea8b0c9c3be3ab677 /var/log/syslog
$ sha1sum /var/log/syslog
3b0634f6793d5ed1a6260a585ea92d22badc2070 /var/log/syslog
Il est possible également de signer la clé de contrôle d'un fichier à l'aide d'une clé privée afin d'éviter toute modification sans permission :
Génération du fichier syslog.sha1 contenant la clé de contrôle et sécurisé par une clé privée (mykey2.pem).
Cliquez ici pour la génération des clés.
$ openssl dgst -sha1 -sign mykey2.pem -out syslog.sha1 /var/log/syslog
Il ne faut pas oublier de distribuer avec le fichier contenant la clé de contrôle (syslog.sha1) le fichier contenant la clé publique correspondant à la clé privée utilisée (pubkey.pem).
Par contre, ce qu'il ne faut surtout pas faire : distribuer sa clé privée (mykey2.pem).
Il faut la garder bien au chaud dans un endroit bien secret.
Pour la vérification de la clé de contrôle sécurisée, il suffit d'utiliser la commande suivante en y indiquant la clé publique correspondante à la clé privée utilisée lors de la génération de la clé de contrôle sécurisée.
$ openssl dgst -sha1 -verify pubkey.pem -signature syslog.sha1 /var/log/syslog
Verified OK
openssl : Exporter ou importer un certificat au format PKCS#12
openssl : Exporter ou importer un certificat au format PKCS#12
Pour exporter un certificat PEM au format PKCS#12 :
1 - Générer le certificat au format PEM :
$ openssl req -x509 -nodes -days 365 -subj '/C=FR/ST=Loire Atlantique/L=Ancenis/CN=www.monsite.fr/emailAddress=toto@gmail.com' -newkey rsa:1024 -keyout mycert.pem -out mycert.pem
Generating a 1024 bit RSA private key
...........++++++
............++++++
writing new private key to 'mycert.pem'
-----
2 - Exporter le certificat au format PKCS#12 :
$ openssl pkcs12 -export -out mycert.pfx -in mycert.pem -name "My Certificate"
Renseigner un phrase de passe si nécessaire.
Convertir un certificat PKCS#12 au format PEM :
$ openssl pkcs12 -in mycert.pfx -out mycert2.pem -nodes
Saisir la phrase de passe si nécessaire.
Pour protéger la clé privée à l'aide d'une phrase de passe :
$ openssl pkcs12 -in mycert.pfx -out mycert2.pem
La saisie d'une phrase de passe pour la protection de la clé privée est obligatoire.
openssl : Extraire les informations d'un certificat
openssl : Extraire les informations d'un certificat
La commande suivante affiche toutes les informations du certificat indiqué :
$ openssl x509 -text -in mycert.pem
Qui a émis le certificat ?
$ openssl x509 -noout -in mycert.pem -issuer
issuer= /C=FR/ST=Loire Atlantique/L=Ancenis/CN=www.monsite.fr/emailAddress=toto@gmail.com
Pour qui a-t-il été émis ?
$ openssl x509 -noout -in mycert.pem -subject
subject= /C=FR/ST=Loire Atlantique/L=Ancenis/CN=www.monsite.fr/emailAddress=toto@gmail.com
Quelle est sa période de validité ?
$ openssl x509 -noout -in mycert.pem -dates
notBefore=Apr 9 15:28:28 2013 GMT
notAfter=Apr 9 15:28:28 2014 GMT
Toutes les infos précédentes :
$ openssl x509 -noout -in mycert.pem -issuer -subject -dates
issuer= /C=FR/ST=Loire Atlantique/L=Ancenis/CN=www.monsite.fr/emailAddress=toto@gmail.com
subject= /C=FR/ST=Loire Atlantique/L=Ancenis/CN=www.monsite.fr/emailAddress=toto@gmail.com
notBefore=Apr 9 15:28:28 2013 GMT
notAfter=Apr 9 15:28:28 2014 GMT
Quelle est sa valeur de hachage ?
$ openssl x509 -noout -in mycert.pem -hash
bf163efd
Quelle est son empreinte MD5 ?
$ openssl x509 -noout -in mycert.pem -fingerprint
SHA1 Fingerprint=C1:CD:DD:29:D1:8D:23:63:6D:3F:71:AD:7E:29:DE:26:FF:D4:11:17
Et à partir d'un certificat d'un site internet (plus de détail openssl : Récupérer un certificat distant)
$ echo | openssl s_client -connect quennec.fr:443 2>&1 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' | openssl x509 -text -noout -in -
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
04:f8:64:c9:8c:bb:f8:c9:6a:fd:3f:b9:b2:42:a0:c5:9c:ab
Signature Algorithm: sha256WithRSAEncryption
Issuer: C = US, O = Let's Encrypt, CN = R3
Validity
Not Before: Mar 11 07:02:14 2024 GMT
Not After : Jun 9 07:02:13 2024 GMT
Subject: CN = quennec.fr
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public-Key: (2048 bit)
Modulus:
00:b3:d3:a3:d3:f3:2c:f8:75:d0:71:5f:8f:8d:c4:
...
83:f0:69:50:7a:fe:ce:a5:48:64:e1:5a:41:a0:a3:
8b:25
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Key Usage: critical
Digital Signature, Key Encipherment
X509v3 Extended Key Usage:
TLS Web Server Authentication, TLS Web Client Authentication
X509v3 Basic Constraints: critical
CA:FALSE
X509v3 Subject Key Identifier:
F0:5D:1D:A5:87:7D:61:1D:AB:74:A4:DE:14:34:F4:D7:3A:52:56:F5
X509v3 Authority Key Identifier:
keyid:14:2E:B3:17:B7:58:56:CB:AE:50:09:40:E6:1F:AF:9D:8B:14:C2:C6
Authority Information Access:
OCSP - URI:http://r3.o.lencr.org
CA Issuers - URI:http://r3.i.lencr.org/
X509v3 Subject Alternative Name:
DNS:*.quennec.fr, DNS:quennec.fr
X509v3 Certificate Policies:
Policy: 2.23.140.1.2.1
CT Precertificate SCTs:
Signed Certificate Timestamp:
Version : v1 (0x0)
Log ID : 3B:53:77:75:3E:2D:B9:80:4E:8B:30:5B:06:FE:40:3B:
67:D8:4F:C3:F4:C7:BD:00:0D:2D:72:6F:E1:FA:D4:17
Timestamp : Mar 11 08:02:14.835 2024 GMT
Extensions: none
Signature : ecdsa-with-SHA256
30:46:02:21:00:C6:D5:B3:6D:A4:45:49:25:9B:47:C9:
21:20:61:57:67:E9:EB:5A:EB:3F:80:87:3E:EF:41:F6:
7C:CD:2C:46:61:02:21:00:D8:27:12:05:AF:5E:9A:0D:
91:E9:DA:C5:5A:27:27:25:1D:31:56:A3:6D:4D:26:21:
5D:E9:08:B0:5F:1E:5F:88
Signed Certificate Timestamp:
Version : v1 (0x0)
Log ID : 76:FF:88:3F:0A:B6:FB:95:51:C2:61:CC:F5:87:BA:34:
B4:A4:CD:BB:29:DC:68:42:0A:9F:E6:67:4C:5A:3A:74
Timestamp : Mar 11 08:02:14.890 2024 GMT
Extensions: none
Signature : ecdsa-with-SHA256
30:44:02:20:41:9E:16:0F:BF:95:4F:FA:23:4F:A4:06:
...
0F:CB:99:8B:E9:87
Signature Algorithm: sha256WithRSAEncryption
0c:dd:53:bc:97:e0:18:39:94:19:fa:28:7c:67:b9:35:a4:ca:
...
04:ee:d9:9
openssl : Générer des clés
openssl : Générer des clés
De nos jours, il est conseillé de générer des clés d'une longueur de 2048 bits pour une meilleure sécurité.
Pour un serveur Apache (configuration SSL), il est conseillé de générer des clés sans phrase de passe. Dans le cas contraire, à chaque démarrage du service Apache, la phrase de passe sera demandée.
Avec OpenSSL, la clé privée contient également les informations de la clé publique. Il n'est donc pas nécessaire de générer la clé publique séparément.
Génération d'une clé RSA
Générer une clé simple :
$ openssl genrsa
Générer une clé de 2048 bits et la sauvegarder dans un fichier :
$ openssl genrsa -out mykey.pem 2048
Idem mais avec un cryptage DES3 et une phrase de passe :
$ openssl genrsa -des3 -out mykey.pem 2048
Génération d'une clé publique RSA
$ openssl rsa -in mykey.pem -pubout
Génération d'une clé DSA
Les clés DSA sont utilisées pour la signature d'objets divers.
Le processus de génération se déroule en deux étapes.
Premièrement, générer les paramètres permettant la génération de la clé :
$ openssl dsaparam -out dsaparam.pem 2048
Puis, générer la clé en fonction des paramètres générés ci-dessus :
$ openssl gendsa -des3 -out privkey.pem dsaparam.pem
Une phrase de passe est demandée lors de la génération de la clé DSA.
Pour ne pas avoir de phrase de passe, il suffit de supprimer le paramètre "-des3".
Supprimer la phrase de passe d'une clé privée RSA
Cette commande permet de générer une nouvelle clé privée (newkey.pem) à partir de celle protégée par une phrase de passe (mykey.pem).
$ openssl rsa -in mykey.pem -out newkey.pem
Supprimer la phrase de passe d'un certificat
Pour l'exemple, nous allons créer un certificat crypté (mycert.pem).
Ce fichier (mycert.pem) contiendra la clé privée et le certificat public et sera protégé par une phrase de passe.
$ openssl req -x509 -days 365 -subj '/C=FR/ST=Loire Atlantique/L=Ancenis/CN=www.monsite.fr/emailAddress=toto@gmail.com' -newkey rsa:2048-keyout mycert.pem -out mycert.pem
Le décryptage du certificat se déroule en deux étapes :
Génération de la clé privée à partir du certificat crypté (mycert.pem) vers le nouveau certificat (newcert.pem) :
$ openssl rsa -in mycert.pem -out newcert.pem
Ajout du certificat public dans le nouveau certificat (newcert.pem) :
$ openssl x509 -in mycert.pem >>newcert.pem
Bonjour,
Envoyez moi le fichier en question via https://send.firefox.com/
Je vais essayer de voir ce qui ne va pas
Problème lors de la création de mycert.pem
Bonjour, merci beaucoup pour votre tuto, j'ai essayé de le faire mais je bloque quand j'arrive à l'étape de la création de "newcert.pem" il me dit que "mycert.pem" n'existe pas, comme si elle n'a pas été générer dans l'étape précédente, si vous pouviez m'aider. merci beaucoup.
Bonjour Melinda
Quelle est la commande qui provoque cette erreur ?
N'hésitez pas à utiliser le formulaire de contact
openssl : Générer des données aléatoires
openssl : Générer des données aléatoires
Générer une chaine aléatoire de 128 octets encodée en BASE64 :
$ openssl rand -base64 128
2/X1yDvXHdAsDYPBmToCNYFI9Vjhtt4ynVMFCcMfV0jJm+EytH22MEyMs7XV4rbB
6CdddwCD0T3sYu7hCF+Q5Dy72S3LKhZL5cbB8gaf2l+Guv/GCU/oiYTezRwLsAaN
82Sig1bnsyJeI3q67PsLS2yUhWTXiyRxv6/69EL/i30=
Générer une chaine aléatoire de 16 octets encodée en HEX :
$ openssl rand -hex 16
e114c246088060ef2af0b4f4f518b875
Générer un fichier binaire de 1024 octets :
$ openssl rand -out random-data.bin 1024
$ ls -l random-data.bin
-rw-r--r-- 1 root root 1024 Apr 11 18:21 random-data.bin
Générer une chaine aléatoire de 64 octets en utilisant le fichier spécial /dev/urandom et encodée avec la commande openssl en BASE64 :
$ head -c 64 /dev/urandom | openssl enc -base64
3wZ9RXe5bwCKzfEUElHOEJNb97SNN7QfKetKdSfAXvNhaiyCwWBWBEJupPAM2K/Q
6zx09thfwss2ffCGvencfg==
Un petit enchainement de commandes permettant de générer des mots de passe aléatoires :
$ echo $(head -c 32 /dev/urandom | strings -1) | sed 's/[[:space:]]//g'
18EC2Wl1-W
Générer un fichier d'une taille aléatoire comprise entre 0 et 50 Mo à l'aide de la fonction interne $RANDOM (50 Mo = 1024*1024*50):
$ openssl rand -out random-data.txt $(($RANDOM * 1024 * 1024 * 50 / 32767))
La fonction interne $RANDOM génère un nombre aléatoire compris entre 0 et 32767.
Générer un fichier texte de 10Mo
$ openssl rand -hex $((1024*1024*5)) > 10mbFile
1 byte étant égal à 2 caractères hexadécimal, il faut donc penser à diviser par 2 la taille du fichier désiré.
openssl : Générer des mots de passe cryptés
openssl : Générer des mots de passe cryptés
Crypter simplement un mot de passe :
$ openssl passwd MyPasswd
hMTFVzaMHJcaA
Le mot de passe à crypter ne peut excéder 8 caractères.
Ajouter un "salt" au mot de passe à crypter (mot de passe salé ;o) :
$ openssl passwd -salt 12 MyPasswd
12q97u.MW0POc
Dans ce cas précis, le "salt" ne doit pas excéder 2 caractères.
Crypter un mot de passe avec l'algorithme MD5 :
$ openssl passwd -1 MyPasswd
$1$339eK0sF$MCPIqzRKLIWsKG1kXnQiw1
Pas de limitation au niveau de la longueur du mot de passe.
Idem mais en ajoutant un "salt" :
$ openssl passwd -1 -salt 12345678 MyPasswd
$1$12345678$I3fjXxePlXzjbz7gjOzwW0
Dans ce cas, le "salt" ne doit pas excéder 8 caractères.
Idem, mais avec un "salt" généré aléatoirement :
$ openssl passwd -1 -salt $(openssl rand -base64 8) MyPasswd
$1$nSQ9OINA$1a2pvpNHjYo41N0n6FqbQ.
openssl : Générer un certificat auto-signé
openssl : Générer un certificat auto-signé
Par défaut, OpenSSL utilise le fichier de configuration "/etc/ssl/openssl.cnf" pour la génération des certificats.
Pour utiliser un fichier de configuration personnalisé, il suffit d'ajouter l'argument "-config {fichier_de_configuration_personnalisé}" à la commande openssl.
Avant de pouvoir générer un certificat, il faut obligatoirement générer une clé RSA ou DSA.
Tout est expliqué ici.
Dans les exemples suivants, la clé privée "mykey.pem" sera utilisée pour la génération des certificats.
Création d'une autorité de certification (permettant de signer les demandes de certificats)
Pour générer ses propres certificats, sans passer par une autorité de certification externe :
$ openssl req -new -x509 -key mykey.pem -out ca.crt -days 1095
On indique pour le paramètre "-out" le nom de l'autorité de certification à générer puis la durée de validité en jour avec le paramètre "-days"
Cette autorité de certification permettra de signer les futures demandes de certificats auto-signés.
Cette génération est à faire une seule fois.
Le Common Name à indiquer ne doit correspondre à aucun nom de domaine ayant besoin d'un certificat.
Cette autorité de certification peut-être mis à disposition du public afin d'être intégré dans les différents navigateurs comme étant une autorité de certification reconnue.
Création d'une demande de certificat
Une demande de certificat peut être utilisée sur un site comme http://www.cacert.org/ afin d'obtenir un certificat reconnu par une autorité de certification ou afin d'être signé par le certificat ca.crt généré ci-dessus.
$ openssl req -new -key mykey.pem -out mondomaine.csr
La demande "cert.csr" peut ensuite être transmise à l'autorité de certification qui fournira par la suite le certificat résultant.
Le Common Name à indiquer doit correspondre au nom de domaine pour lequel vous souhaitez un certificat.
Génération du certificat final
A l'aide du certificat de certification généré au tout début (ca.crt), nous allons générer le certificat correspondant à la demande (mondomain.csr) générée ci-dessus.
$ openssl x509 -req -in mondomaine.csr -out mondomaine.pem -CA ca.crt -CAkey mykey.pem -CAcreateserial -CAserial ca.srl -days 90
L'option -CAcreateserial est à utiliser seulement la première fois.
Ceci va générer un identifiant (ca.srl).
Lors des prochaines certification (pour renouvellement ou pour d'autres domaines) l'identifiant, contenu dans le fichier ca.srl, sera incrémenté à l'aide de l'option -CAserial ca.srl
Création d'un certificat auto-signé sous windows
Bonjour,
Super votre blog !
Voici une alternative plus simple que Open SSL pour créer des certificats auto-signés sous windows (Interface graphique français/anglais): Itiverba Self Signed Certificat Generator
openssl : Générer une authentification Apache
openssl : Générer une authentification Apache
Avec Apache, il est possible d'utiliser des fichiers d'authentification pour protéger des répertoires web.
Pour générer ces fichiers d'authentification, il est nécessaire d'utiliser la commande htdigest.
La commande htdigest inscrit les données d'authentification obligatoirement dans un fichier.
Pour afficher ces mêmes informations mais uniquement sur la sortie standard (pour x raisons) il est nécessaire d'utiliser la commande openssl.
Voici un script qui permet de saisir les informations d'authentification et affiche le résultat sur la sortie standard :
$ cat htdigest.sh
#!/bin/bash
echo "Creation d'une authentification Apache"
echo "-----------------------------------------------"
read -p "Votre nom : " NAME
read -p "Apache AuthName: " AUTHNAME
read -s -p "Votre mot de passe : " PASS; echo
printf "%s:%s:%s\n" \
"$NAME" \
"$AUTHNAME" \
$(printf "${NAME}:${AUTHNAME}:${PASS}" | openssl dgst -md5)
exit 0
Exécution du script :
$ ./htdigest.sh
Creation d'une authentification Apache
-----------------------------------------------
Votre nom : toto
Apache AuthName: monSite
Votre mot de passe :
toto:monSite:ffdcd4a53fb7dd716ec2d017e93bc563
openssl : Les nombres premiers
openssl : Les nombres premiers
OpenSSL possède une sous-commande qui permet de tester si le nombre passé en paramètre est un nombre premier.
$ openssl prime 2
2 is prime
$ openssl prime 3
3 is prime
$ openssl prime 4
4 is not prime
$ openssl prime 11
B is prime
Le résultat est retourné sous forme hexadécimale.
En ajoutant l'option "-hex", il est possible de tester une chaine hexadécimale :
$ openssl prime 449
1C1 is prime
La représentation hexadécimale du nombre 449 est donc 1C1
$ openssl prime -hex 1C1
1C1 is prime
En prime, un petit enchainement de commandes permettant d'obtenir la liste des 168 nombres premiers inférieurs à 1000.
$ for i in $(seq 0 1000); do \
result=$(openssl prime $i) \
echo $result | grep -q "is prime$" \
if [[ $? -eq 0 ]]; then \
echo $i \
fi
done | column -x
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53
59 61 67 71 73 79 83 89 97 101 103 107 109 113 127 131
137 139 149 151 157 163 167 173 179 181 191 193 197 199 211 223
227 229 233 239 241 251 257 263 269 271 277 281 283 293 307 311
313 317 331 337 347 349 353 359 367 373 379 383 389 397 401 409
419 421 431 433 439 443 449 457 461 463 467 479 487 491 499 503
509 521 523 541 547 557 563 569 571 577 587 593 599 601 607 613
617 619 631 641 643 647 653 659 661 673 677 683 691 701 709 719
727 733 739 743 751 757 761 769 773 787 797 809 811 821 823 827
829 839 853 857 859 863 877 881 883 887 907 911 919 929 937 941
947 953 967 971 977 983 991 997
openssl : Récupérer un certificat distant
openssl : Récupérer un certificat distant
Le script suivant permet de récupérer le contenu du certificat du site indiqué en paramètre (le port est facultatif, par défaut le port 443 est utilisé).
$ cat getCertificates.sh
#!/bin/sh
HOST=$1
PORT=${2:-443}
echo | \
openssl s_client -connect ${HOST}:${PORT} 2>&1 | \
sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p'
exit 0
$
On l'exécute en lui indiquant en paramètre le nom du site et le port (facultatif).
$ ./getCertificates.sh youtube.fr 443
-----BEGIN CERTIFICATE-----
MIIF/DCCBWWgAwIBAgIKKZeNqAABAACBuDANBgkqhkiG9w0BAQUFADBGMQswCQYD
VQQGEwJVUzETMBEGA1UEChMKR29vZ2xlIEluYzEiMCAGA1UEAxMZR29vZ2xlIElu
...
Xl7/nc7F5HgE0c+bGsAYuCoYBsDNYs8/AUTnSTeih8U9mSRRDFb9NxMkQqUWPSXO
sh4FktaXQJBJRi4IAfuUDk28c9A0Bv1ygO3FqiSu6QJ3axESCoGmF26XqDwvJtFq
-----END CERTIFICATE-----
et le certificat s'affiche à l'écran.
Voir également CURL: Afficher les informations SSL d'un domaine
Voir également openssl : Extraire les informations d'un certificat
quitter après 2 secondes
Mes 2 centimes pour améliorer ce script:
- retrouver la source :)
- quitter après X secondes
#!/bin/sh
# src: https://www.quennec.fr/trucs-astuces/syst%C3%A8mes/gnulinux/commandes/openssl/openssl-r%C3%A9cup%C3%A9rer-un-certificat-distant
HOST=$1
PORT=${2:-443}
echo | \
openssl s_client -connect ${HOST}:${PORT} 2>&1 | \
sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' &
CONNECTPID=$!
sleep 2
kill $CONNECTPID
exit 0
quitter après 2 secondes
Bonjour
Ma version précédente ne reportait pas le stdout au process parent
Voici une version améliorée du script.
Je la poste également sur gist: https://gist.github.com/boly38/24ed3f434cbace2bf8c90ff72f782593
#!/bin/sh
# source d'origine: src: https://www.quennec.fr/trucs-astuces/syst%C3%A8mes/gnulinux/commandes/openssl/openssl-r%C3%A9cup%C3%A9rer-un-certificat-distant
# améliorations:
# - quitter après 2 secondes
# - report du stdout
HOST=$1
PORT=${2:-443}
openssl s_client -connect ${HOST}:${PORT} > .workout &
CONNECTPID=$!
sleep 2
kill $CONNECTPID
# prevent output from kill
wait $CONNECTPID 2>/dev/null
cat .workout | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p'
rm .workout
exit 0
et avec une petite redirection ...
... en cas d'erreur vers /dev/null pour la commande kill
kill $CONNECTPID 2>/dev/null
openssl: Générer une paire de clé et une demande de certificat CSR
openssl: Générer une paire de clé et une demande de certificat CSR
Voici une commande permettant de générer, en une seule fois, une paire de clé (publique/privée) et une demande de certificat CSR afin d'obtenir, auprès de cacert.org par exemple, un certificat X509 associant votre clé publique générée et le nom de domaine que vous souhaitez protéger avec TLS.
$ openssl req -nodes -newkey rsa:2048 -sha256 -keyout ma_cle.key -out ma_demande.csr
Avec cette commande, nous allons créer une clé RSA de 2048 bits.
Les autres arguments de la ligne de commandes indiquent que la clé privée sera stockée dans le fichier ma_cle.key et la demande CSR sera stockée dans le fichier ma_demande.csr.
Une série de questions vous est posée.
Les deux questions les plus importantes sont celles correspondantes au common name et à l'adresse mail de contact.
Ne renseignez surtout pas de mot de passe sinon il vous sera demandé à chaque démarrage du serveur web.
Un peu contraignant lors de tâches de maintenance automatisées.
Pour vérifier la demande CSR:
$ openssl req -text -noout -verify -in ma_demande.csr
Reste à transmettre à l'autorité de certification (cacert.org par exemple - certificat gratuit) la demande CSR.
openssl: connexion SMTP avec TLS
openssl: connexion SMTP avec TLS
Il est possible d'utiliser la commande openssl pour se connecter à un serveur STMP en utilisant la sécurité TLS,
Dans l'exemple suivant, l'option -CAfile /etc/ssl/certs/ca-certificates.crt permet d'indiquer l'autorité de certification dans le cas d'un certificat auto signé.
# openssl s_client -starttls smtp -crlf -CAfile /etc/ssl/certs/ca-certificates.crt -connect smtp.server.fr:25
CONNECTED(00000003)
depth=0 CN = localhost.localdomain
verify return:1
---
Certificate chain
0 s:/CN=localhost.localdomain
i:/CN=localhost.localdomain
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIBtzCCASACCQCupdgFIYzFVDANBgkqhkiG9w0BAQUFADAgMR4w
b2NhbGhvaW4wHhcNMTEwNDI2MTkxMDM1WhcNMjEwNDIzMTkx
MDM1WjAgMR4wHAYDVQQDExVsb2NhbGhvc3QubG9jYWxkb21ha
hvcNAQEBBQADgY0AMIGJZS3OcCHjbQNa++F/J4WGFk6r7ICl9Ls0
ybT+1CzbFG1xE71NeRhbHkLGigZa5422afsqq/b3LBIpMX17B/gtuo+
QKRckuo+20BUqHFye7ZAVXSsw+bqmm9D0vB4uw9IwyE75jEAqU1
QX7RAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAe1iHUXoGSTj3Fv3
2Yg1EFtNm/RSYxdHV8jY6W6CtwNatN+EQqmWlfhtOSCWgXriUjX5
E4uEocf6x/vDrVkpU11u+0xDUYshmrLyk2nmX6wbopwQttAE9PLw
ahQBiuj+sz38OW8=
-----END CERTIFICATE-----
subject=/CN=localhost.localdomain
issuer=/CN=localhost.localdomain
---
No client certificate CA names sent
---
SSL handshake has read 1021 bytes and written 456 bytes
---
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-GCM-SHA384
Server public key is 1024 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
Protocol : TLSv1.2
Cipher : ECDHE-RSA-AES256-GCM-SHA384
Session-ID: D2A784125E749B8C74015978412B9B6E47DDA37BFB83FD4FEE8E6ED21BE79C92
Session-ID-ctx:
Master-Key: 631649B5A6A2F5272137C421AFB2F2E86CD483ED2FE8099BCDC9068A11EE7087F
Key-Arg : None
PSK identity: None
PSK identity hint: None
SRP username: None
Start Time: 1478726847
Timeout : 300 (sec)
Verify return code: 0 (ok)
---
250 DSN
mail from: one@mail.fr
250 2.1.0 Ok
rcpt to: two@mail.fr
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
from: one@mail.fr
to: two@mail.fr
subject: send mail with TLS connection
Voluptatem veniam quasi nisi voluptatum incidunt autem. Sed provident minus ab temporibus sed. Quia blanditiis consequatur assumenda aut hic. Minima cum qui quidem dicta velit quod voluptas. Dolorem aliquam animi consequatur.
Minima alias sint libero et. Et et in ratione similique iusto aut consectetur. Sed voluptatibus modi fuga ut quibusdam ut consectetur voluptas.
.
250 2.0.0 Ok: queued as 145A53700157
quit
221 2.0.0 Bye
closed
Très utile pour tester un serveur STMP
Périphériques externes
Périphériques externes
Créer une image ISO d'un CD et/ou DVD
Créer une image ISO d'un CD et/ou DVD
Avant toute chose, ne pas monter le cd-rom
Créer une image ISO avec la commande dd :
$ dd if=/dev/cdrom of=/tmp/monImage.iso
Créer une image ISO avec la commande cat :
$ cat /dev/cdrom > /tmp/monImage.iso
Pour vérifier le contenu de l'image créée :
$ mkdir /media/iso
$ sudo mount -o loop -t iso9660 /tmp/monImage.iso /media/iso/
Formater un support de stockage
Formater un support de stockage
Installer la boite à outils
$ sudo apt-get install dosfstools
Lister les supports de stockage
$ sudo fdisk -l
Formater en FAT 12 OU 16
$ mkfs.vfat /dev/sdb1
Formater en FAT 32
$ mkfs.vfat -F 32 -n nom_de_ma_cle_usb /dev/sdb1
Pour formater un support de stockage, celui-ci ne doit pas être monté.
$ umount /media/ma_cle_usb
Pour les autres formats :
- mkfs.bfs
- mkfs.ext2
- mkfs.ext4
- mkfs.minix
- mkfs.ntfs
- mkfs.cramfs
- mkfs.ext3
- mkfs.ext4dev
- mkfs.msdos
- mkfs.vfat
Formater en NTFS
$ apt-get install ntfs-3g ntfsprogs
$ mkntfs /dev/sde1
Afficher le format/type exact d'une partition
La commande fdisk -l ne permet pas de connaitre le type exact d'une partition.
$ fdisk -l
Disk /dev/sda: 1000.2 GB, 1000204886016 bytes
255 heads, 63 sectors/track, 121601 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x00000000
Device Boot Start End Blocks Id System
/dev/sda1 * 1 66 524288 83 Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2 66 121601 976235712 8e Linux LVM
Disk /dev/sdb: 1500.3 GB, 1500299395072 bytes
255 heads, 63 sectors/track, 182401 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00026d5d
Device Boot Start End Blocks Id System
/dev/sdb1 1 182401 1465136001 83 Linux
Disk /dev/sdc: 160.0 GB, 160041885696 bytes
255 heads, 63 sectors/track, 19457 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0008ef40
Device Boot Start End Blocks Id System
/dev/sdc1 1 19457 156288321 83 Linux
Disk /dev/sdd: 2000.4 GB, 2000396746752 bytes
255 heads, 63 sectors/track, 243201 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00101aa1
Device Boot Start End Blocks Id System
/dev/sdd1 1 243201 1953512001 83 Linux
Disk /dev/sde: 80.0 GB, 80032038912 bytes
255 heads, 63 sectors/track, 9730 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000f2c13
Device Boot Start End Blocks Id System
/dev/sde1 1 9730 78156193+ b W95 FAT32
La commande blkid est beaucoup plus précise
$ blkid
/dev/sda1: UUID="cd34d37b-b73c-4ee4-820c-c8006043518a" SEC_TYPE="ext2" TYPE="ext3"
/dev/sda2: UUID="BVYNlC-AQG0-oDe9-I4zu-xVzp-RdV3-W1Fegr" TYPE="LVM2_member"
/dev/sdb1: UUID="a6ea6463-e289-4bbe-afba-572f876497da" TYPE="ext4"
/dev/sdc1: UUID="1a6c5464-6ae1-4205-97c5-edae82649198" SEC_TYPE="ext2" TYPE="ext3"
/dev/sdd1: UUID="8ea1a0ee-c21c-4892-bdc9-bda6186ebd98" TYPE="ext4"
/dev/sde1: UUID="4961B8D578F1B234" TYPE="ntfs"
Créer une image ISO d'un répertoire
Créer une image ISO d'un répertoire
Sur les distributions type Debian, le programme genisoimage permet de créer une image ISO d'un fichier ou d'un répertoire complet.
Pré-requis
Installer le programme genisoimage
$ apt-get install genisoimage
Exemple
$ genisoimage -r -v -J -o /tmp/image.iso /mon_repertoire
=> Création du fichier /tmp/image.iso contenant toutes les données de /mon_repertoire
Détail des options utilisées
-r : Pour permettre à tous les utilisateurs d'avoir accès aux données du disque, même si l'image est créée en tant qu'administrateur.
-v : Permet d'activer le mode verbeux.
-J : Supporte les noms longs de fichiers.
-o : Permet de spécifier le nom du fichier ISO
Graver une image ISO sur un disque
Graver une image ISO sur un disque
Rendre une clé USB bootable
Rendre une clé USB bootable
Renseigner automatiquement l'UUID d'une partition dans le fichier /etc/fstab
Renseigner automatiquement l'UUID d'une partition dans le fichier /etc/fstab
Afficher ou sauvegarder le fichier /etc/fstab avant toute manipulation
# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Wed Feb 8 10:04:33 2023
#
# Accessible filesystems, by reference, are maintained under '/dev/disk/'.
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
#
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
#
UUID=8db4ff33-9c01-42c5-89c9-851b58ad4599 / xfs defaults 0 0
UUID=d107b673-8b5a-4171-b30c-d03bd72b9e55 /boot xfs defaults 0 0
UUID=3AC0-FCC8 /boot/efi vfat umask=0077,shortname=winnt 0 2
UUID=fe4c581c-4b22-49d7-94a7-040600a98baa /var/log xfs defaults 0 0
UUID=33bb87c8-90e6-4107-9d70-0c4bd2f5b852 none swap defaults 0 0
UUID=5654158c-dc3e-4c69-a5f8-64c6dc7c8b08 /home xfs defaults 0 0
no-device /tmpfs tmpfs rw,seclabel,relatime 0 0
Afficher la liste des partitions ainsi que les UUIDs
# blkid
/dev/sda5: UUID="8db4ff33-9c01-42c5-89c9-851b58ad4599" BLOCK_SIZE="512" TYPE="xfs" PARTUUID="85254d0d-f5c4-6245-aae7-fd870d97413c"
/dev/sda1: UUID="3AC0-FCC8" BLOCK_SIZE="512" TYPE="vfat" PARTLABEL="EFI System Partition" PARTUUID="fc72f64e-a700-459a-ba6b-0dcaa7016747"
/dev/sda2: UUID="d107b673-8b5a-4171-b30c-d03bd72b9e55" BLOCK_SIZE="512" TYPE="xfs" PARTUUID="736002d1-0dcf-4825-8ebd-caa436560505"
/dev/sda3: UUID="33bb87c8-90e6-4107-9d70-0c4bd2f5b852" TYPE="swap" PARTUUID="6d3ef976-e9fb-425f-b7e1-7f1ff84d51e0"
/dev/sda4: UUID="fe4c581c-4b22-49d7-94a7-040600a98baa" BLOCK_SIZE="512" TYPE="xfs" PARTUUID="894d6ef9-cfa0-4945-a3db-fefdd0c94162"
/dev/sdb1: UUID="5654158c-dc3e-4c69-a5f8-64c6dc7c8b08" BLOCK_SIZE="512" TYPE="xfs" PARTUUID="3a6000f2-01"
/dev/sdc1: UUID="c822d42a-a492-4e80-8b2a-e929275b955c" BLOCK_SIZE="512" TYPE="xfs" PARTUUID="51229054-01"
/dev/sdd1: UUID="921dbe26-cc98-45bd-9445-4c87ff1f4ec0" BLOCK_SIZE="512" TYPE="xfs" PARTUUID="d8576e95-01"
Je souhaite monter la partition /dev/sdd1 dans le dossier /mnt/207, je vais copier l'UUID de la partition directement dans le fichier /etc/fstab
# echo UUID=$(blkid -o value -s UUID /dev/sdd1) >> /etc/fstab
Reste à modifier le fichier /etc/fstab pour y ajouter les informations supplémentaires
# vim /etc/fstab
#
# /etc/fstab
# Created by anaconda on Wed Feb 8 10:04:33 2023
#
# Accessible filesystems, by reference, are maintained under '/dev/disk/'.
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
#
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
#
UUID=8db4ff33-9c01-42c5-89c9-851b58ad4599 / xfs defaults 0 0
UUID=d107b673-8b5a-4171-b30c-d03bd72b9e55 /boot xfs defaults 0 0
UUID=3AC0-FCC8 /boot/efi vfat umask=0077,shortname=winnt 0 2
UUID=fe4c581c-4b22-49d7-94a7-040600a98baa /var/log xfs defaults 0 0
UUID=33bb87c8-90e6-4107-9d70-0c4bd2f5b852 none swap defaults 0 0
UUID=5654158c-dc3e-4c69-a5f8-64c6dc7c8b08 /home xfs defaults 0 0
no-device /tmpfs tmpfs rw,seclabel,relatime 0 0
UUID=921dbe26-cc98-45bd-9445-4c87ff1f4ec0 /mnt/207 xfs defaults 0 0
Reste à monter la partition
# mount -a
Requetes MySql
Requetes MySql
Exécuter une requête MySql en ligne de commande :
Pré-requis :
Avoir un client MySql installé
$ apt-get install mysql-client
Exécution d'une requête :
$ echo "select * from ma_base.ma_table where champ1 = valeur1" | mysql -u user -pmotdepasse
De cette manière, il est tout à fait possible d'exécuter une requête SQL dans un script (en bash par exemple) et d'en exploiter le résultat.
Rediriger le résultat d'une requête MySql dans un fichier :
$ echo "select * from ma_base.ma_table where champ1 = valeur1" | mysql -u user -pmotdepasse > ~/mon_fichier
Il est également possible d'exécuter une requête uniquement avec le client mysql :
$ mysql ma_base -N -s -u user -p -e "select * from ma_table where 1=1"
L'option -N permet de na pas afficher le nom des champs.
L'option -s permet de ne pas afficher les délimiteurs du tableau.
L'option -e permet d'exécuter la requête suivante.
Le résultat de la requête est affiché dans la console et peut être traité par d'autres commandes.
SSH
SSH
Copier la clé d'un host dans le fichier authorized_keys d'un host distant
Copier la clé d'un host dans le fichier authorized_keys d'un host distant
Utilisation de la commande ssh-copy-id :
Principe : Copier la clé contenu dans le fichier ~/.ssh/id_rsa.pub dans le fichier ~/.ssh/authorized_keys d'un host distant (ici, 192.168.0.101)
Voir également "Connexion à une machine distante (ssh, scp, sftp) sans saisir le mot de passe"
$ cd ~/.ssh
$ ls
authorized_keys id_rsa id_rsa.pub known_hosts
$ ssh-copy-id -i id_rsa.pub root@192.168.0.101
root@192.168.0.101's password:#Saisir ici le mot de passe
Now try logging into the machine, with "ssh 'root@192.168.0.101'", and check in:
~/.ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting.
$
Sécuriser la connexion ssh par clé en associant une adresse IP/un nom de host à la clé RSA dans le fichier ~/.ssh/authorized_keys
Pour plus de sécurité il est possible d'associer une adresse IP et/ou un nom de host à une clé RSA afin d'éviter l'utilisation de cette clé sur une autre machine.
Exemple d'une clé RSA
$ cat ~/.ssh/authorized_keys
ssh-rsa iMEyIOc6TAw3+w/RBkHXbabKYgI1Y4EDEifBdcmGYMe8MshE6D27NouR1hdFyvsT
LLs+DCALHJNxkitS31HO7QlWAX9YRC1D47neCk29E1SCmG9CeWNyztgAmgI91FD6
yWtWSD3MOW27/rC+CxdXoVNSFNVJ+wKuK5QGUMlAMm+nFJi6evlVLBhGKb5LVNQ6
nszYteN5dpp/asSAU+kHyQsNJPyz1m/w8KZujYpkpV3mJh4GYvBiz2A+JWo/FRbo
3LSdFiVxt9V1rqfrYSXFcHS4jky9HSH/c9b9d1iop6lPBShlLjAf2zpQYfU5Ra7u
TQsO3D1z+dZ8NXARJ4WWHkWyIEyN67q4uKMehscDGYKy3hcyRTlJ0sw0bokNMf99
oGcmN5KKasLvUsIfMyNbSC8bcYdsOb+06QDyHHE9h2aYcoBCgvX4zhkAoDSeMsK2
Bg7h2PdV5S5bLPr/hjLgNky6u9TCbDIJOInqJZwk4/gqPOMbffuKeiN1K2lzyrfk
mX3Nnwm/ivb0IBEYLQs4GM8WyamlJtlj5K32mJfflFwnbj5+dGQhjRZ/jJ1D9PsL
U441033CepoXDIf2cV3I34aZ2V7YxEgsk4rRVEX0mGCYezBn1f4IumQ1Il9ixrEf
FktHyk6kfviQC8wOTRsABiH79KSIIqc3cp9zbOSbn+4= root@ma_machine
Exemple d'une clé RSA avec association d'une adresse IP et/ou d'un nom de host
$ cat ~/.ssh/authorized_keys
from="192.168.1.1,ma_machine.mon_domaine.com" ssh-rsa iMEyIOc6TAw3+w/RBkHXbabKYgI1Y4EDEifBdcmGYMe8MshE6D27NouR1hdFyvsT
LLs+DCALHJNxkitS31HO7QlWAX9YRC1D47neCk29E1SCmG9CeWNyztgAmgI91FD6
yWtWSD3MOW27/rC+CxdXoVNSFNVJ+wKuK5QGUMlAMm+nFJi6evlVLBhGKb5LVNQ6
nszYteN5dpp/asSAU+kHyQsNJPyz1m/w8KZujYpkpV3mJh4GYvBiz2A+JWo/FRbo
3LSdFiVxt9V1rqfrYSXFcHS4jky9HSH/c9b9d1iop6lPBShlLjAf2zpQYfU5Ra7u
TQsO3D1z+dZ8NXARJ4WWHkWyIEyN67q4uKMehscDGYKy3hcyRTlJ0sw0bokNMf99
oGcmN5KKasLvUsIfMyNbSC8bcYdsOb+06QDyHHE9h2aYcoBCgvX4zhkAoDSeMsK2
Bg7h2PdV5S5bLPr/hjLgNky6u9TCbDIJOInqJZwk4/gqPOMbffuKeiN1K2lzyrfk
mX3Nnwm/ivb0IBEYLQs4GM8WyamlJtlj5K32mJfflFwnbj5+dGQhjRZ/jJ1D9PsL
U441033CepoXDIf2cV3I34aZ2V7YxEgsk4rRVEX0mGCYezBn1f4IumQ1Il9ixrEf
FktHyk6kfviQC8wOTRsABiH79KSIIqc3cp9zbOSbn+4= root@ma_machine
Les différentes valeurs doivent être séparées par une virgule.
Le point d'interrogation permet d'indiquer un plage d'adresses IP (from="192.168.0.?").
L'astérisque permet d'indiquer tous les sous-domaines d'un domaine (from="*.mon_domaine.com").
Il est possible d'exclure en ajoutant un point d'exclamation avant (from="!autre_domaine.com").
Manipuler les clés SSH
Manipuler les clés SSH
L'outil ssh-keygen permet d'effectuer différentes manipulations sur les clés SSH.
Générer une clé SSH de type RSA:
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/xxxx/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/xxxx/.ssh/id_rsa
Your public key has been saved in /home/xxxx/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:LSPtPiOIKudk4CuQzD6MdlyJQh3RQc+xvYJTgHWPQ6E xxxx@yyyy
The key's randomart image is:
+---[RSA 3072]----+
| .*=.=. |
| o .B * |
| . .E B o |
| . . o.... |
|=. .oo.S.. |
|+= . o.o.o |
|=.=... . |
|+B+o. ..o |
|==+ ..o |
+----[SHA256]-----+
Le contenu de la clé privée (attention, celui-ci ne doit jamais être partagé)
$ cat .ssh/id_rsa
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABlwAAAAdzc2gtcn
NhAAAAAwEAAQAAAYEApgXls7gw98Hr5Q05qB5Dlg7Agzomlm/8Q7k3yawjwgJP5+SNZ0pj
edSm8PnQZnYP00vN8KPLjTWfBo39HRJpylPq8abRs8LeIqAwKOY+7bTGEvcxACvIRd8w/U
wV6XYHVH5w9vT4gW9Lb9J1AOAcaEEcGNUwCPHiqoHa6eA2kg6e36F1ZE9DUYGw2altST7P
smWvFSPMx3eXJLpbsgaGHhzvI6cwpXkbeDILoHjws1GDcmI7X3zya46p3Zrt8cagRi3lKP
cje3xfKoLMLb3zauB8tb7pW41VP4KoplgT7r4bxd/4EkQcG9bv9AoAb7avp6f0ulBvAEw9
...
UZA+eKidhEz4we4ivxwb+GSVbCVBWkWZvEIX5+5tVPJaxi18K6GC+Zw4lOlYe4nwFtDQz8
5KI7LRQSDZrNtNiMJ/R/dOXV9l74ixlafKM1uMd5x23RmSEVzGap/tgwqam+KSeHuKN+zR
O3XW2hyx1TruD3JEcN2/hVUh5bM1q9YcSfrjd/bzFL+tQIs1t9N5TQOn/EYnLHlcsUzhLq
xWp1/EulMM4qMAAAAPcm9uYW5AUEFTUE8wMDg2AQIDBA==
-----END OPENSSH PRIVATE KEY-----
Le contenu de la clé publique (celui ci peut-être partagé avec n'importe qui)
$ cat .ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCmBeWzuDD3wevlDTmoHkOWDsCDOiaWb/xDuTfJrCPCAk/n5I1nSmN51Kbw+dBmdg/TS83wo8uNNZ8Gjf0dEmnKU+rxptGzwt4ioDAo5j7ttMYS9zEAK8hF3zD9TBXpdgdUfnD29PiBb0tv0nUA4BxoQRwY1TAI8eKqgdrp4DaSDp7foXVkT0NRgbDZqW1JPs+yZa8VI8zHd5ckuluyBoYeHO8jpzCleRt4MgugePCzUYNyYjtffPJrjqndmu3xxqBGLeUo9yN7fF8qgswtvfNq4Hy1vulbjVU/gqimWBPuvhvF3/gSRBwb1u/0CgBvtq+np/S6UG8ATD2mBS+mqB687hKB7BzY+SAWgOMfloavV7ms609c5/nQR2UwlQuHDo79Zz3uqbwVh02hRdomZC7Q9Elte9hUgdz5DZOMiC1lOh5Zj+X/POe+Rg/G8eXrbXO0IlaW4MZjqQTG8U7gLrbtkHYxljphI/eGSYnTo5Qmu77EHy0EAe/DE7HGGt0hOEU= xxxx@yyyy
Afficher le fingerprint d'une clé SSH (peu importe la clé fournie, privée ou publique, c'est toujours le fingerprint de la clé publique qui est affiché)
$ ssh-keygen -l -f .ssh/id_rsa
3072 SHA256:LSPtPiOIKudk4CuQzD6MdlyJQh3RQc+xvYJTgHWPQ6E xxxx@yyyy(RSA)
$ ssh-keygen -l -f .ssh/id_rsa.pub
3072 SHA256:LSPtPiOIKudk4CuQzD6MdlyJQh3RQc+xvYJTgHWPQ6E xxxx@yyyy(RSA)
Par défaut le fingerprint est affiché avec le hash SHA256, pour l'afficher avec le hash MD5, il suffit d'ajouter l'option -E avec la valeur MD5
$ ssh-keygen -l -f .ssh/id_rsa.pub -E md5
3072 MD5:29:3c:60:2a:d2:49:20:82:12:c4:c5:e3:f0:95:2c:b3 xxxx@yyyy(RSA)
Afficher le fingerprint en représentation ASCII
$ ssh-keygen -l -f .ssh/id_rsa.pub -E md5 -v
3072 MD5:29:3c:60:2a:d2:49:20:82:12:c4:c5:e3:f0:95:2c:b3 xxxx@yyyy(RSA)
+---[RSA 3072]----+
|Ooo.. . |
|=+ = + |
|. = O |
| o E o . |
|o + + S |
|.. o |
| |
| |
| |
+------[MD5]------+
Obtenir la clé publique d'une clé privée
$ ssh-keygen -y -f .ssh/id_rsa
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCmBeWzuDD3wevlDTmoHkOWDsCDOiaWb/xDuTfJrCPCAk/n5I1nSmN51Kbw+dBmdg/TS83wo8uNNZ8Gjf0dEmnKU+rxptGzwt4ioDAo5j7ttMYS9zEAK8hF3zD9TBXpdgdUfnD29PiBb0tv0nUA4BxoQRwY1TAI8eKqgdrp4DaSDp7foXVkT0NRgbDZqW1JPs+yZa8VI8zHd5ckuluyBoYeHO8jpzCleRt4MgugePCzUYNyYjtffPJrjqndmu3xxqBGLeUo9yN7fF8qgswtvfNq4Hy1vulbjVU/gqimWBPuvhvF3/gSRBwb1u/0CgBvtq+np/S6UG8ATD2mBS+mqB687hKB7BzY+SAWgOMfloavV7ms609c5/nQR2UwlQuHDo79Zz3uqbwVh02hRdomZC7Q9Elte9hUgdz5DZOMiC1lOh5Zj+X/POe+Rg/G8eXrbXO0IlaW4MZjqQTG8U7gLrbtkHYxljphI/eGSYnTo5Qmu77EHy0EAe/DE7HGGt0hOEU= xxxx@yyyy
La preuve que la commande ci-dessus retourne le même résultat que la clé publique d'origine
$ ssh-keygen -y -f .ssh/id_rsa | diff .ssh/id_rsa.pub -
(le retour de la commande est vide indiquant que les contenus sont identiques)
known_hosts
known_hosts
Manipuler le fichier "known_hosts"
Rechercher dans le fichier "known_hosts" l'entrée correspondante à un host particulier
$ ssh-keygen -H -F 192.168.1.101
$ ssh-keygen -H -F machine.domaine.com
Supprimer du fichier "known_hosts" l'entrée correspondante à un host particulier
$ ssh-keygen -R 192.168.1.101
$ ssh-keygen -R machine.domaine.com
Obtenir la clé d'un host encodée en base64
$ ssh-keyscan -t rsa,dsa 192.168.1.100
$ ssh-keyscan -t rsa,dsa machine.domaine.com
Screen
Screen
Screen est un multiplicateur de terminal.
Cette commande permet d'avoir plusieurs consoles au sein d'une seule.
A mon avis, l'avantage principal de cette commande, est de supprimer tous les risques liés à une déconnexion de la console principale.
Effectivement, en cas de perte de la connexion à la console, toutes les commandes en cours d'exécution sont automatiquement stoppées.
Avec screen, toutes les commandes continuent à s'exécuter.
Pour l'installer et l'utiliser, il faut obligatoirement être en mode sudo :
$ sudo apt-get install screen
Utilisation de screen
- Pour ouvrir une console screen :
$ sudo screen -S ma_console
Exécution de screen avec l'option "-S" qui permet de nommer la nouvelle console en "ma_console".
- Obtenir de l'aide dans screen :
Appuyer sur les touches ctrl + a puis sur shift + ?
Pour quitter l'aide, appuyer sur espace
- Pour quitter une console screen :
Taper exit
puis appuyer sur entrée
Ou appuyer sur les touches ctrl + d
- Pour revenir à la console principale sans fermer la console screen :
Appuyer sur les touches ctrl + a puis sur d
Une fois dans la console principale, il est possible de lister les différentes consoles ouvertes avec screen sachant qu'il est tout à fait possible d'ouvrir plusieurs consoles différentes.
$ sudo screen -ls
There is a screen on:
25065.ma_console (14/12/12 14:48:52) (Detached)
1 Socket in /var/run/screen/S-root.
Ci-dessus, apparait la mention "Detached" signifiant qu'une console "ma_console" est en cours d'exécution en arrière plan.
Dans le cas où il y aurait plusieurs consoles.
$ sudo screen -ls
There are screens on:
25169.ma_console3 (14/12/12 14:54:51) (Detached)
25165.ma_console2 (14/12/12 14:54:45) (Detached)
25065.ma_console (14/12/12 14:48:52) (Detached)
3 Sockets in /var/run/screen/S-root.
Ci-dessus, apparait la liste de toutes les consoles en cours d'exécution avec leurs différents noms.
- Pour retourner dans une console :
$ sudo screen -R 25065
Permet de retourner dans la console nommée "ma_console" et portant le pid "25065".
Il est important de préciser le pid de la console dans le cas où leurs noms seraient similaires (comme dans l'exemple ci-dessus : ma_console, ma_console2, ma_console3).
Sinon, le nom est suffisant.
$ sudo screen -R ma_console
- Créer plusieurs fenêtres dans une console screen :
Il est possible de créer une multitude de fenêtres en appuyant sur les touches ctrl + a puis sur c.
La liste des fenêtres créées apparaît en bas de l'écran (0$ bash 1$ bash 2$ bash 3-$ bash 4$ bash 5$ bash 6$ bash) en appyant sur les touches ctrl + a puis sur w.
Pour passer à la fenêtre suivante, appuyer sur les touches ctrl + a puis sur n (next).
Pour retourner à la fenêtre précédente, appuyer sur les touches ctrl + a puis sur p (previous).
Pour aller à une fenêtre en particulier, appuyer sur les touches ctrl + a puis sur le chiffre correspondant (voir la liste des fenêtres en bas de l'écran).
- Afficher plusieurs consoles screen dans une même fenêtre (split):
Dans une console screen, appuyer sur les touches ctrl + a puis sur shift + s
Une seconde fenêtre vide apparait au dessous.
Pour ouvrir une nouvelle console dans cette fenêtre vide, appuyer sur les touches ctrl + a puis sur tab.
Une fois le curseur dans la nouvelle fenêtre, appuyer sur les touches ctrl + a puis sur c.
Il est possible de spliter l'écran plusieurs fois si nécessaire.
Pour basculer d'un écran à l'autre appuyer sur les touches ctrl + a puis sur tab.
Pour supprimer la fenêtre en cours d'utilisation, appuyer sur les touches ctrl + a puis sur shift + x
Voici, à mon sens, les fonctions les plus utilses de la commande screen.
Personnalisation de screen
Il est possible de personnaliser screen avec un fichier de configuration nommé ~/.screenrc
Voici un fichier tout fait, créé par "bennyben" et que j'utilise personnellement.
Il customise vraiment bien la commande screen.
Son contenu est donc à enregistrer dans un fichier nommé ~/.screenrc
MD5SUM : a2aade4a2d4596b5df7720b3b3c3e904 screenrc.txt
Attachment | Taille |
---|---|
Fichier de configuration de la commande screen (5.94 Ko) | 5.94 Ko |
Ça sert à rien mais c'est sympa !!!
Ça sert à rien mais c'est sympa !!!
Afficher différents logos Linux dans la console
Afficher différents logos Linux dans la console
Le commande linuxlogo permet d'afficher dans la console de jolis logos colorisés en caractères ASCII.
Pour l'installer :
$ sudo apt-get install linuxlogo
Le manuel de la commande :
$ man linuxlogo
Exécution :
$ linuxlogo
Avec l'option -l, seul le logo est affiché
$ linuxlogo -l
Avec l'option -u, les informations uptime sont affichées.
$ linuxlogo -u
Avec l'option -y, les informations load average sont affichées.
$ linuxlogo -y
L'option -L list permet d'affiher la liste complète des logos disponibles.
$ linuxlogo -L list
Available Built-in Logos:
Pour afficher le logo souhaité :
$ linuxlogo -L numéro
Tous les logos disponible ICI.
Afficher une bannière dans la console
Afficher une bannière dans la console
La commande banner permet d'afficher dans la console un message de 10 caractères maximum avec uniquement des caractères "#".
Pour l'installer :
$ sudo apt-get install sysvbanner
Et ça donne ceci :
$ banner Linux
Il existe également la commande printerbanner mais l'affichage se fait verticalement.
Un effet "Matrix" dans la console
Un effet "Matrix" dans la console
decrypt.py est un programme écrit en python qui anime la console en lui donnant un effet "Matrix"
L'animation générée est vraiment très sympa.
Le script peut être téléchargé ICI
Sinon, en ligne de commande :
Avec git :
$ git clone https://github.com/jtwaleson/decrypt.git
ou en téléchargeant le fichier ZIP :
$ wget https://github.com/jtwaleson/decrypt/archive/master.zip
$ unzip master.zip
Copier le script decrypt.py dans le répertoire /usr/local/bin
$ cp decrypt.py /usr/local/bin/
Exécution :
Afficher le contenu d'un fichier
$ cat decrypt.py | decrypt.py
Voir la vidéo : http://youtu.be/xI3JQg5BVtI
Lister le contenu d'un répertoire
$ ls -l | decrypt.py
Voir la vidéo : http://youtu.be/QnljP35j5EQ
Avec une image en ASCII (convertie avec la commande jp2a)
$ jp2a erreur404.jpg | decrypt.py
Voir la vidéo : http://youtu.be/8CAtUdl4Q5I
Multimédia
Multimédia
Musique
Musique
eyeD3
eyeD3
eyeD3 est un outil python qui permet de visualiser/créer les tags ID3 des fichiers MP3.
Ce programme s'utilise uniquement en ligne de commande.
Installation
$ apt-get install eyeD3
ou
$ apt-get install python-eyeD3
Utilisation
Affichage des tags ID3 d'un fichier MP3
$ eyeD3 monFichier.mp3
Renseigner les tags ID3 d'un fichier MP3
Renseigner le nom de l'artiste
$ eyeD3 -a "Nom Artiste" monFichier.mp3
Renseigner le nom de l'album
$ eyeD3 -A "Nom Album" monFichier.mp3
Renseigner le titre de la chanson
$ eyeD3 -t "Titre Chanson" monFichier.mp3
Renseigner le numéro de la chanson
$ eyeD3 -n 1 monFichier.mp3
Renseigner le nombre total de chansons sur l'album
$ eyeD3 -N 10 monFichier.mp3
Afficher la liste des genres musicaux
$ eyeD3 --list-genres
Renseigner le genre de la chanson
$ eyeD3 -G "Pop / Funk" monFichier.mp3
Renseigner l'année de la chanson
$ eyeD3 -Y 2015 monFichier.mp3
Afficher la liste des types d'images
$ eyeD3 --list-image-types
Ajouter une image
$ eyeD3 --add-image=/chemin/vers/image:TYPE[:DESCRIPTION] monFichier.mp3
TYPE correspond au type d'image à insérer (voir commande du dessus). Une description optionnelle peut être ajoutée.
Pour supprimer une image, il suffit d'indiquer le type correspondant sans renseigner d'image.
Afficher l'aide de la commande eyeD3
$ eyeD3 -h
Utilisation dans un script Python
Installation
Télécharger la dernière version sur le site eyed3.nicfit.net
$ wget http://eyed3.nicfit.net/releases/eyeD3-X.Y.Z.tgz
Décompresser l'archive
$ tar -xvzf eyeD3-X.Y.Z.tgz
Exécuter le script d'installation
$ cd eyeD3-X.Y.Z
$ python setup.py install
Utilisation
import eyed3
audiofile = eyed3.load("chanson.mp3")
audiofile.tag.artist = u"Artiste"
audiofile.tag.album = u"Album"
audiofile.tag.title = u"Titre"
audiofile.tag.track_num = 4
audiofile.tag.save()
Plus d'info sur http://eyed3.nicfit.net/
Photo
Photo
Convertir une image JPEG en caractères ASCII
Convertir une image JPEG en caractères ASCII
jp2a est une commande qui permet d'afficher dans la console une image JPG en caractères ASCII.
Pour l'installer :
$ sudo apt-get install jp2a
Convertir une image :
$ jp2a erreur404.jpg
Ce qui donne :
L'effet est vraiment bluffant sur certaines photos.
La conversion ne se fait que sur des fichiers JPG.
Pour convertir une image PNG en JPG utiliser la commande convert de ImageMagick :
$ convert image.png image.jpg
ou
$ convert image.png jpg:- | jp2a -
Cette dernière commande permet de convertir l'image PNG en JPG directement sur la sortie standard afin de la transmettre à la commande jp2a via son entrée standard.
Imagemagick
Imagemagick
Imagemagick est un logiciel ultra-puissant qui s'utilise en ligne de commande et qui permet de manipuler quasiment tous les types d'images.
Convertion, redimensionnement, rotation, fusion, animation etc etc ... sont quelques unes des fonctions proposées par Imagemagick.
Pour installer imagemagick :
$ sudo apt-get install imagemagick
Convertir une vidéo AVI en GIF animé
$ convert -quiet -delay 1 input.avi +map output.gif
Pour convertir une vidéo MOV en GIF animé.
Remplacer le fond blanc d'une image en fond transparent
$ convert test.png -transparent white transparent.png
Convertir une image png en jpg et inversement
$ convert image.png image.jpg
Convertir une série d'images png en jpg et inversement
$ for f in *.png; do convert $f $(echo $f | cut -d. -f1).jpg; done
ou
$ mogrify -format jpg *.png
Modifier le taux de compression pendant la conversion
$ mogrify -quality 90 -format jpg *.png
Convertir une série d'image jpg (ou tout autre format) en gif animé
$ convert *.jpg anime.gif
Ajouter l'option -delay num pour paramétrer la vitesse d'animation du gif animé.
num est exprimé en 1/100 seconde.
Ajouter l'option -loop num pour paramétrer le nombre de boucle.
Par défaut -loop 0 (infini).
Convertir et redimensionner une image
$ convert image.jpg -resize 50% image.png
ou en indiquant une taille en pixel
$ convert -resize 800x600 image.png image.jpg
ou en indiquant seulement la largeur (maxi) en pixel (le ratio est conservé)
$ convert -resize 800x image.png image.jpg
ou seulement la hauteur (maxi) en pixel (le ratio est conservé)
$ convert -resize x600 image.png image.jpg
et toutes les images d'un dossier avec la commande mogrify
$ mogrify -resize 800x600 -format jpg *.png
Créer une icône à partir d'une image
$ convert -colors 256 -resize 16x16 image.jpg icone.ico
Convertir une image en niveau de gris
$ convert -type Grayscale image.jpg image.grayscale.jpg
Les différents types disponibles
$ convert -list type
Bilevel
ColorSeparation
ColorSeparationAlpha
ColorSeparationMatte
Grayscale
GrayscaleAlpha
GrayscaleMatte
Optimize
Palette
PaletteBilevelAlpha
PaletteBilevelMatte
PaletteAlpha
PaletteMatte
TrueColorAlpha
TrueColorMatte
TrueColor
Un exemple de chaque type est disponible ici.
Ajouter une bordure à une image
Une bordure transparente d'1 pixel
$ convert -bordercolor Transparent -border 1x1 image.jpg image-bordure.jpg
Une bordure noire de 10 pixels
$ convert -bordercolor black -border 10x10 image.jpg image-bordure.jpg
Créer le négatif d'une image
$ convert -negate image.jpg negate.jpg
Retourner une image verticalement
$ convert -flip image.jpg flip.jpg
Utiliser -flop pour retourner l'image horizontalement.
Pivoter une image vers la droite
$ convert -rotate 90 source.jpg destination.jpg
Utiliser -90 pour pivoter l'image vers la gauche.
Ajouter un texte en haut à gauche sur plusieurs images
$ mogrify -fill white -pointsize 16 -annotate +10+26 'Copie Interdite' *.jpg
-fill white : couleur du texte
-pointsize 16 : dimension du texte en pixel
-annotate +10+26 : position du texte sur l'image (verticale/horizontale)
Pour la position horizontale du texte, tenir compte de la dimension du texte.
Faire un montage avec plusieurs images
$ montage -background "azure3" *.jpg montage.jpg
Avec l'option -geometry, il est possible de modifier la taille des bordures entre chaque image.
La commande suivante ajoute une bordure de 5 pixels entre chaque image
$ montage -geometry +5+5 *.jpg montage.jpg
Avec l'option -resize, il est possible de redimensionner les images à assembler.
La commande suivante réduit la taille de chaque image de 80% avant de les assembler.
$ montage -resize 20% *.jpg montage.jpg
Extraire une partie d'une image
$ convert image.jpg -crop XxY+L+T newImage.jpg
X : Largeur de la nouvelle image
Y : Hauteur de la nouvelle image
L : Point de départ à gauche de l'image d'origine
T : Point de départ du haut de l'image d'origine
Par exemple, dans le schéma ci-dessous, pour extraire l'image B (500x300) de l'image A (800x600) à partir du point L (20 px à partir du bord gauche) et du point T (15 px à partir du bord haut)
$ convert image.jpg -crop 500x300+20+15 newImage.jpg
Même traitement mais sur plusieurs images
$ for f in *.png; do convert $f -crop 500x300+20+15 new_$f; done
Convertir des images png (ou autres) en un fichier pdf (avec compression des images en jpeg)
Attention, suite à une faille de sécurité, cette conversion n'est plus possible à moins de modifier un paramètre dans le fichier policy.xml de ImageMagick. Plus d'info ici.
Merci à Sergio pour l'info.
$ convert *.png -compress jpeg monDoc.pdf
Et inversement :
$ convert -density 500 monDoc.pdf monDoc.jpg
Afficher la liste de toutes les couleurs disponibles
$ convert -list color
Générer les échantillons de toutes les couleurs gérées par ImageMagick
$ for liste in $(convert -list color | sed '1,5d' | awk '{print $1 "|" $2}'); do couleur=$(cut -d'|' -f1 <<< $liste); code=$(cut -d'|' -f2 <<< $liste); convert -size 50x50 xc:"$code" $couleur.png; done
Cet enchainement de commandes permet de générer des images PNG de 50px de toutes les couleurs dans le dossier courant. Tous les fichiers sont nommés par leur nom de couleur.
Exemple des images générées : http://isbeta.fr/4f2fc
Centrer une image dans un calque :
La commande suivante permet de créer un calque transparent d'une taille de 100 x 100 pixels et d'y insérer, au centre, une image proportionnellement redimensionnée à la taille du calque
$ convert img.png -resize 100x100 -size 100x100 xc:none +swap -gravity center -composite new_img.png
Par exemple :
Image d'origine
Image redimensionnée et centrée dans le calque
Réaliser une vidéo à partir d'images
$ convert -delay 25 *.jpg anim.mpg
-delay 25 = 25 images par seconde
Afficher les informations d'une image
$ identify image.jpg
Avec plus de détail
$ identify -verbose image.jpg
Créer une image à partir d'un texte
$ convert -background white -fill black -font "Cretino-Regular" -pointsize 30 -size 200x -gravity Center caption:"Mon texte." "e.gif"
$ display e.gif
Créer une image à partir d'un texte contenu dans un fichier
$ cat texte
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec sed finibus dui. Interdum et malesuada fames ac ante ipsum primis in faucibus. Quisque ultrices erat in tempor aliquam. Ut ut facilisis lectus. Sed bibendum pellentesque urna, nec convallis massa.
$ convert -background "rgb(169,169,169)" -fill "rgb(255,255,255)" -font "Abecedario_pautada-Regular" -pointsize 40 -size 480x -gravity Center caption:"$(cat texte)" "d.gif"
$ display d.gif
Souvenir d'école
retour sur Centrer une image dans un calque :
Bonjour :)
Je me cassais pas mal la tête avec mogrify et cette page commence à me sauver la mise.
Centrer une image dans un calque est un excellent début ! En revanche, quand je veux mettre une image rectangulaire dans ce carré de 100x100, j'ai des bordures noires en haut et en bas de la vignette finale.
J'ai essayé de mettre -background white en paramètre comme dans l'instruction suivante mais ça ne fonctionne pas.
Pourriez-vous m'aider ?
Bonjour
Logiquement, avec la commande convert, si vous indiquez le paramètre xc:none, le fond devrait être transparent, donc sans aucune bordure noire.
Par exemple, cette commande ...
$ identify youtube.png
youtube.png PNG 60x60
$ convert youtube.png -size 100x100 xc:none +swap -gravity center -composite youtube.new.png
... va créer un fond transparent (xc:none) d'une dimension de 100x100 (-size 100x100), y insérer au centre (-gravity center) mon image youtube.png d'une dimension de 60x60 (comme indiquée à l'aide de la commande identify) et envoyer tout ça dans un nouveau fichier youtube.new.png
Image d'origine (youtube.png)
Visu de l'image d'origine sous Gimp
Résultat final youtube.new.png (j'ai ajouté une bordure pour montrer le fond transparent)
Visu du résultat final sous Gimp
Avec la visu sous Gimp, on voit bien l'image d'origine centrée dans le calque transparent (l'ensemble de petits carrés gris clairs et gris foncés)
En espérant avoir répondu à votre problème
Niveaux de gris
Pour la conversion en niveaux de gris, c'est grayscale (et non pas Greyscale)... 50 shades of Grey est passé par là ;)
damier en guise de fond transparent
Bonjour,
Lorsque j'utilise la fonction animate d'ImageMagick pour jouer un gif animé qui possède un fond transparent, celui-ci s'affiche systématiquement dans une fenêtre où le fond transparent est remplacé par un damier ...
Par contre, lorsque j'utilise la fonction display du même ImageMagick, les frames du même gif se succèdent, certes à un rythme très très lent, mais tout à fait correctement sur un fond qui cette fois est bien transparent, sans le damier.
Pourquoi diable cette différence d'affichage des mêmes images selon que l'on utilise display ou animate ?
Je vous remercie beaucoup par avance de votre réponse !
(ma configuration est la suivante: Xubuntu 14.04 et 16.04 (64 bits) avec ImageMagick 6.7.7.10-6ubuntu3.5)
Bonjour,
Bonjour,
C'est étrange car de mon coté, les deux commandes fonctionnent de la même manière.
Quand j'ai une image avec un fond transparent, celui-ci est affiché avec le fameux damier pour indiqué, justement, que l'image possède un fond transparent, que ce soit avec animate ou avec display.
Mais je dirais que l'important, c'est que l'image soit correctement affichée dans un navigateur, par exemple, avec le fameux fond transparent.
Bonsoir,
Bonsoir,
...et tout d'abord, merci beaucoup de cette réponse rapide !
Bon, j'en déduis que, en utilisant "display", je dois déjà m'estimer très heureux que mon gif animé garde son fond transparent !
Ceci dit, avec cette fonction "display", la vitesse de défilement des frames est très lente (1 frame toutes les 3 secondes). Est-il possible d'influer sur cette vitesse pour l'augmenter ?
Ou bien est-elle figée et invariable ?
Merci beaucoup d'avance de votre aide,
Il est possible de modifier
Il est possible de modifier la vitesse d'animation du gif animé avec l'option delay.
>>> Ajouter l'option -delay num pour paramétrer la vitesse d'animation du gif animé.
num est exprimé en 1/100 seconde.
J'ajouterais que la commande display est utilisée uniquement pour vérifier le résultat.
En général, les gifs animés sont utilisés dans des pages web et le fond transparent est correctement géré.
Pour convertir une suite d'image dans un seul PDF :
convert *.jpg resultat.pdf
...Sauf que :
Un sadique a blacklisté cette conversion, et il faut modifier /etc/ImageMagick-6/policy.xml
voir La doc Ubuntu
Vidéo
Vidéo
FFmpeg
FFmpeg
Installation
Installation
Le site du projet ffmpeg : http://www.ffmpeg.org/
Pour installer FFmpeg :
$ sudo apt-get install ffmpeg
Depuis Ubuntu 14.04, ffmpeg n'est plus dans les dépôts Ubuntu.
Pour l'installer, sans passer par les dépôts, il suffit de télécharger le dernière version du programme sur le site officiel :
... puis décompresser l'archive téléchargée :
$ tar -xzf ffmpeg.static.[32|64]bit.latest.tar.gz
... puis copier les deux fichiers ffmpeg et ffprobe dans le répertoire /usr/local/bin :
$ sudo cp ffmpeg ffprobe /usr/local/bin
... et voilà, c'est terminé.
Pour vérifier la version installée :
$ ffmpeg -version
Ajouter un logo à une vidéo
Ajouter un logo à une vidéo
Pour incruster une image dans une vidéo, il suffit d'utiliser le filtre overlay avec la commande ffmpeg.
Par exemple, pour ajouter un logo en bas, à droite :
$ ffmpeg -i movie.mp4 -i logo.png -filter_complex "overlay=W-w-5:H-h-5" -b:v 3000k -s 720x480 -codec:v h264 -fs 20M movie_avec_logo.mp4
Détail des options :
-b:v permet d'indiquer le bitrate
-s permet d'indiquer les dimensions
-codec:v permet d'indiquer le codec vidéo à utiliser
-fs permet d'indiquer la taille maxi du fichier généré
-i permet d'indiquer tous les fichiers à traiter en entrée
-filter_complex permet d'utiliser les filtres disponibles
Détail du filtre overlay :
Pour utiliser le filtre overlay, il suffit de lui indiquer les positions horizontale et verticale à utliser pour insérer l'image ou la vidéo.
Pour insérer un logo en haut à gauche :
overlay=0:0
Avec un décalage de 5 px des bords gauche et haut :
overlay=5:5
Il est possible d'utiliser les variables W, w, H et h qui correspondent à :
W : Largeur (width) de la vidéo principale
H : Hauteur (height) de la vidéo principale
w : Largeur (width) de l'image ou de la vidéo à incruster
h : Hauteur (height) de l'image ou de la vidéo à incruster
Donc, pour incruster une image en bas, à droite avec un décalage de 5 px des bords bas et droite :
overlay=W-w-5:H-h-5
Résultat :
Conversion
Conversion
Lister les codecs vidéos :
$ ffmpeg -codecs | grep DEV
Lister les codecs audios :
$ ffmpeg -codecs | grep DEA
Convertir une vidéo mpeg4 en GIF animé :
$ ffmpeg -i input.mp4 -vf scale=356:-1 -r 10 -f image2pipe -vcodec ppm - | convert -delay 10 -loop 0 - gif:- | convert -layers Optimize - output.gif
Convertir une vidéo MOV en GIF animé :
1 - Conversion de la vidéo MOV à l'aide de la commande ffmpeg
$ ffmpeg -i input.mov -pix_fmt rgb24 output_tmp.gif
2 - Amélioration du GIF animé à l'aide de la commande convert
$ convert -layers output_tmp.gif output.gif
Convertir des images JPG/PNG en GIF animé:
$ convert -delay 20 -loop 0 *.JPG result.gif
Pour varier la vitesse du GIF animé, augmenter/diminuer la valeur du paramètre -delay
Extraire une partie d'une vidéo :
$ ffmpeg -i MOV.mp4 -ss 00:00:25 -t 00:00:10 MOV1.mp4
Cette commande permet d'extraire 10 secondes à partir de la 25ème seconde
-ss : Début de l'extraction
-t : Durée de l'extraction
Ralentir (effet slow motion) une vidéo :
$ ffmpeg -i MOV.mp4 -vf "setpts=8*PTS" MOV5.mp4
Plus le coefficient multiplicateur est élevé, plus la vidéo est ralentie.
1 étant le coefficient de base.
Accélérer une vidéo :
$ ffmpeg -i MOV.mp4 -vf "setpts=0.2*PTS" MOV5.mp4
Encoder une vidéo en 2 passes :
$ for P in 1 2; do ffmpeg -y -i MOV.mp4 -b:v 3000k -pass $P -r 30 -c:v h264 -c:a mp3 -b:a 128k -s 1024*768 MOV.avi; done
-b:v 3000k : Permet de régler le bitrate de la vidéo
-r 30 : Permet de définir le nombre d'images par seconde
-pass $P : Permet d'indiquer le numéro de la passe à effectuer
-c:v h264 : Permet d'indiquer le codec vidéo à utiliser
-c:a mp3 : Permet d'indiquer le codec audio à utiliser
-s 1024*768 : Permet d'indiquer la taille de la vidéo
-b:a 128k : Permet de régler le bitrate audio
Pivoter une vidéo :
$ ffmpeg -i MOV.mp4 -vf "transpose=1" MOV1.mp4
-vf "transpose=1" : Permet de faire pivoter la vidéo de 90 degrés vers la droite
-vf "transpose=2" : Permet de faire pivoter la vidéo de 180 degrés vers la droite
etc etc ...
Effet miroir :
$ ffmpeg -i MOV.mp4 -vf "hflip" MOV1.mp4
-vf "hflip" : Effet miroir horizontal
-vf "vflip" : Effet miroir vertical
Assembler plusieurs vidéos en un seul fichier :
$ ffmpeg -i "concat:MOV1.avi|MOV2.avi|MOV3.avi|MOV4.avi" -c copy MOV_0005.avi
-c copy : Permet d'indiquer de ne pas réencoder les vidéos
Conversion FLV To AVI :
$ ffmpeg -i mavideo.flv mavideo.avi
Conversion AVI To FLV :
$ ffmpeg -i mavideo.avi mavideo.flv
Conversion MP3 To WAV :
$ ffmpeg -i monFichier.mp3 monFichier.wav
Extraire toutes les images d'une vidéo :
$ ffmpeg -i foo.avi -r 1 -s WxH -f image2 foo-%03d.jpeg
-s WxH -> dimensions des images générées
-f image2 -> format de sortie
-r 1 -> fréquence d'images : 1 image par seconde
Créer une vidéo à partir de plusieurs images :
$ ffmpeg -f image2 -i foo-%03d.jpeg -r 12 -s WxH foo.avi
-r 12 -> fréquence d'images : 12 images par seconde
-s WxH -> dimension de la vidéo générée
-f image2 -> format du/des fichiers en entrée
Mencoder
Mencoder
Installation
Installation
Pour installer MEncoder:
$ sudo apt-get install mencoder (installation automatique des dépendances requises)
Lister tous les codecs audios supportés par MEncoder :
$ mencoder -oac help
Lister tous les codecs vidéos supportés par MEncoder :
$ mencoder -ovc help
Lister tous les formats vidéos de sortie supportés par MEncode :
$ mencoder -of help
AVI étant le format par défaut de MEncoder et le mieux supporté
Conversion
Conversion
Pour convertir des images au format JPG en une séquence vidéo au format AVI :
$ mencoder -ffourcc XVID mf://*.jpg -mf w=800:h=600:fps=25:type=jpg -ovc lavc -lavcopts vcodec=mpeg4 -oac copy -o output.avi
- mf://*jpg tout les jpg du repertoire courant (on peut spécifier un autre répertoire en entrant son chemin complet entre guillemets)
- w=800:h=600:fps=25:type=jpg image de type jpg de dimension 800x600 avec en sortie une video à 25 img/sec
- -ovc lavc -lavcopts vcodec=mpeg4 encodage en mpeg4 ISO compatible xvid
Pour convertir une vidéo au format AVI en utilisant le codec de compression MJPEG :
$ mencoder fichier_in.avi -oac copy -ovc lavc -lavcopts vcodec=mjpeg -o fichier_out.avi
- -oac copy copie sans encodage de la bande son
- -ovc lavc -lavcopts vcodec=mjpeg encodage de la video en MJPEG avec la famille de codec lavc (projet FFmpeg)
Pour convertir une vidéo au format AVI vers le format FLV permettant sa lecture dans un navigateur internet avec le plugin Macromedia Flash :
$ mencoder input.avi
-o output.flv
-of lavf -oac mp3lame -lameopts abr:br=56 -ovc lavc \ -lavcopts vcodec=flv:vbitrate=500:mbd=2:mv0:trell:v4mv:cbp:last_pred=3 \ -srate 22050
Conversion WMV To MPEG-4 (Xvid) :
$ mencoder mavideo.wmv -ovc xvid -oac mp3lame -o mavideo.avi
Conversion FLV To AVI (MPEG-4/Divx) en 2 passes :
$ mencoder video.flv -ovc lavc -lavcopts vcodec=mpeg4:vpass=1 -oac copy -o a.avi
$ mencoder video.flv -ovc lavc -lavcopts vcodec=mpeg4:vpass=2 -oac copy -o a.avi
transcode
transcode
transcode est un programme de traitement vidéo.
Pour l'installer :
$ sudo apt-get install transcode
Il permet de faire énormément de choses mais mon option préférée est celle qui permet de stabiliser une vidéo.
Le résultat est vraiment très surprenant.
Exemple :
Pour stabiliser une vidéo, il faut d'abord que transcode analyse la vidéo source...
$ transcode -J stabilize -i movie.avi
Cette commande va générer un fichier trf.
Ajouter l'option --mplayer_probe pour utiliser le programme mplayer pour l'analyse si le format de la vidéo n'est pas directement supporté par transcode.
... et enfin, pour stabiliser la vidéo :
$ transcode -J transform --mplayer_probe -i movie.avi -y raw -o movie_stabilize.avi
Attention, la taille de la vidéo générée est très volumineuse avec le format raw.
Il est possible d'indiquer un codec vidéo pour l'encodage final :
$ transcode -J transform --mplayer_probe -i movie.avi -y xvid4 -o movie_stabilize.avi
La preuve en image :
A gauche, la vidéo d'origine, à droite, après stabilisation.
Surprenant, non ?
l'option Stabilize
Bonjour, l'option -J stabilize n'est pas installée quel est le plugin ou la bibliothèque à installer?
Merci
En théorie, tous les filtres
En théorie, tous les filtres sont installés en même temps que le programme transcode.
Tous les filtres sont disponibles dans le dossier /usr/lib/transcode/
# ls -l /usr/lib/transcode/filter_stabilize.so
-rw-r--r-- 1 root root 30992 Dec 23 2013 /usr/lib/transcode/filter_stabilize.so
Pour installer transcode avec toutes les dépendances:
Pour Ubuntu 12.04:
Ajouter la ligne suivante dans le fichier /etc/apt/sources.list
# echo "deb http://fr.archive.ubuntu.com/ubuntu precise main multiverse" >> /etc/apt/sources.list
Pour Ubuntu 14.04:
# echo "deb http://fr.archive.ubuntu.com/ubuntu trusty main multiverse" >> /etc/apt/sources.list
Salut, moi je l'utilise via
Salut, moi je l'utilise via kdenlive mais le problème c'est que ca me coupe la fin de la vidéo, un idée ?
Paramétrer un serveur proxy
Paramétrer un serveur proxy
Pour paramétrer un serveur proxy dans Ubuntu :
Editer le fichier /etc/apt/apt.conf
Pour un proxy sans authentification
Acquire::http::Proxy "http://IP.DU.PROXY:PORT";
Pour un proxy avec authentification
Acquire::http::Proxy "http://user:passwd@IP.OU.NOM.DNS.DU.PROXY:PORT";
Pour paramétrer un serveur proxy provisoirement avant d'exécuter une commande :
Saisir dans une console
$ http_proxy="http://user:passwd@IP.OU.NOM.DNS.DU.PROXY:PORT" sudo apt-get update
Pour paramétrer un serveur proxy provisoirement si plusieurs commandes à exécuter :
Saisir dans une console
$ export http_proxy="http://user:passwd@IP.OU.NOM.DNS.DU.PROXY:PORT"
$ sudo apt-get update
$ sudo apt-get install mon_paquet...
Partage Samba
Partage Samba
Accès à un partage Samba sous Ubuntu
Pré requis :
installer les paquets smbclient & cifs-utils
$ apt-get install smbclient
$ apt-get install cifs-utils
Configuration :
- 1 poste serveur avec Ubuntu Server et des partages Samba activés
- 1 poste client avec Ubuntu Desktop
Monter un partage via la console :
$ mount -t cifs //adresse_ip_du_serveur/nom_du_partage /point_de_montage --verbose -o user=user_samba,password=password_samba
Pour monter automatiquement les partages Samba de Ubuntu Server sur Ubuntu Desktop avec une identification
Editer le fichier /etc/fstab
$ sudo -s
$ gedit /etc/fstab
Y rajouter la ligne suivante pour un partage nommé public sur Ubuntu Server
//adresse_ip_du_serveur/public /home/user/Public smbfs _netdev,credentials=/home/user/.smbcredentials,iocharset=utf8 0 0
Explications :
//adresse_ip_du_serveur/public : adresse et nom du partage Samba sur le serveur
/home/user/Public : destination du montage
smbfs : type du montage (Samba)
_netdev : permet d'attendre que la connexion réseau soit effective avant d'effectuer le montage
credentials=/home/user/.smbcredentials : chemin et nom du fichier permettant l'identification
iocharset=utf8 : permet la prise en charge des caractères accentués
Création du fichier d'identification .smbcredentials
$ gedit /home/user/.smbcredentials
Y inscrire les informations suivantes
username=USERNAME
password=PASSWORD
Pour les partages Samba comportant un espace
Par exemple, pour accéder au partage Samba "Mes images" inscrire la ligne suivante dans le fstab
//adresse_ip_du_serveur/Mes\040images /home/user/Images smbfs _netdev,credentials=/home/user/.smbcredentials,iocharset=utf8 0 0
La chaîne de caractères "\040" correspond au caractère "espace"
Le système de fichier dans fstab
Il faudrait remplacer "smbfs" par "cifs" dans l'indication du système de fichier dans fstab (Ubuntu 20.04), exactement commee dans la commmande de montage interactif.
Les deux fonctionnent de la même manière.
Dans la plupart des cas, lorsqu’on dit qu’on utilise SMB ou CIFS, on parle de la même chose. Les deux versions du protocole sont équivalentes tant du point de vue intellectuel que du point de vue pratique : une machine client « parlant » le CIFS peut dialoguer avec un serveur parlant le SMB et vice versa. Pourquoi ? Parce que CIFS est une forme de SMB.
https://blog.varonis.fr/quelle-est-la-difference-entre-cifs-et-smb/
Quitter la console Ubuntu ou autres
Quitter la console Ubuntu ou autres
Pour quitter une console, il existe différentes manières de le faire.
Avec la commande exit :
$ exit
Avec les touches ctrl+d (^D) ;
$ ^d # Saisie clavier ctrl+d
Sauvegarde différentielle
Sauvegarde différentielle
Pour effectuer une sauvegarde différentielle, il faut utiliser le programme rdiff-backup.
Pour l'installer :
$ sudo apt-get install rdiff-backup
Créer une sauvegarde différentielle
Créer une sauvegarde différentielle
Pour créer une sauvegarde différentielle
$ rdiff-backup /repertoire_a_sauvegarder /repertoire_de_sauvegarde
Sauvegarder sur une machine distante via
SSHRemplacer
- /repertoire_de_sauvegarde
Par
- <utilisateur>@<adresse_ip_de_la_machine_distante>::<repertoire_de_sauvegarde_sur_la_machine_distante>
Supprimer une sauvegarde différentielle
Supprimer une sauvegarde différentielle
Pour supprimer une sauvegarde différentielle
$ rdiff-backup --remove-older-than 1W --force /repertoire_de_sauvegarde
Ici on enlève toutes les modifications enregistrées vieilles de plus d'une semaine. On peut mettre D(ay)
,W(eek)
, M(onth)
et Y(ear)
.
S'il y a plusieurs sauvegardes à supprimer, la commande échoue. C'est pourquoi il faut rajouter le paramètre –force
pour ne pas prendre cette erreur en compte et que rdiff-backup effectue bien ce qu'on lui demande.
Afficher l'état d'une sauvegarde différentielle
Afficher l'état d'une sauvegarde différentielle
Pour afficher l'état d'une sauvegarde différentielle en liste simple
$ rdiff-backup -l /repertoire_de_sauvegarde
Pour afficher l'état d'une sauvegarde différentielle en tableau avec la taille de chaque incrément:
$ rdiff-backup --list-increment-size /repertoire_de_la_sauvegarde
Pour enregistrer le résultat dans un fichier :
$ rdiff-backup --list-increment-size /repertoire_de_la_sauvegarde > /repertoire/etat_sauvegarde.txt
Voir les statistiques des sauvegardes
$ rdiff-backup-statistics /repertoire_de_sauvegarde
Restaurer une sauvegarde différentielle
Restaurer une sauvegarde différentielle
Pour restaurer une sauvegarde différentielle
$ rdiff-backup -r now /repertoire_de_sauvegarde /repertoire_de_restauration
L'option -r now
permet de remettre la version de la sauvegarde la plus récente. On peut remonter dans les sauvegardes, par exemple remettre le repertoire d'il y a 3 jours avec l'option -r 3D
.
Rdiff-backup fait une replication parfaite des fichiers dans leur dernière version. Ainsi pour restaurer des données, il suffit de faire
$ cp -a /backupDir /restoredDir
Système
Système
Afficher la version du noyau utilisé
Afficher la version du noyau utilisé
Afficher la version du système d'exploitation Linux
Afficher la version du système d'exploitation Linux
Corriger un problème de locale
Corriger un problème de locale
Sur un système GNU/Linux, une locale qui n'est pas correctement configurée entraîne ce genre de message d'erreur :
-bash: warning: setlocale: LC_CTYPE: cannot change locale (en_GB.UTF-8)
-bash: warning: setlocale: LC_CTYPE: cannot change locale (en_GB.UTF-8)
Pour corriger cette erreur, il suffit d'exécuter les 2 commandes suivantes :
$ sudo locale-gen en_GB.UTF-8
$ sudo update-locale LANG=en_GB.UTF-8
Une simple déconnexion / reconnexion suffit pour ne plus avoir le problème.
Forcer la vérification des disques
Forcer la vérification des disques
Sous Linux, la vérification des disques s'effectue avec la commande fsck.
L'utilisation de cette commande nécessite que la partition à controler soit démontée.
Lister les disques et partitions du système
$ fdisk -l
Disk /dev/sdb: 1500.3 GB, 1500299395072 bytes
255 heads, 63 sectors/track, 182401 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00026d5d
Device Boot Start End Blocks Id System
/dev/sdb1 1 182401 1465136001 83 Linux
Identifier le type de la partition
$ blkid
/dev/sdb1: UUID="a6ea6463-e289-4bbe-afba-572f876497da" TYPE="ext4"
Identifier le point de montage de la partition
$ mount
/dev/sdb1 on /volume1 type ext4 (rw)
Démonter la partition et lancer la vérification
$ umount /volume1
$ fsck -t ext4 /dev/sdb1
Si le démontage de la partition n'est pas possible, il existe 2 solutions permettant la vérification des disques.
1 - Redémarrer le système en forçant la vérification :
$ shutdown -r -F now
2 - Créer le fichier forcefsck et redémarrer le système :
$ touch /forcefsck
$ reboot
Après le redémarrage et la vérification des disques, le fichier /forcefsck est automatiquement supprimé.
Les pages de manuels en couleur
Les pages de manuels en couleur
Par défaut, les pages de manuels utilisent la commande less pour les afficher.
La commande less est une évolution de la commande more.
Elle permet de mettre en gras les rubriques principales des pages de manuels.
La commande most, permet d'ajouter une coloration syntaxique et bien d'autres options supplémentaires.
Pour installer la commande most :
$ sudo apt-get install most
Pour utiliser most pour parcourir les pages de manuels :
$ PAGER=most man cp
Cette commande permet d'utiliser most comme PAGER pour consulter le manuel de la commande cp
Pour utiliser most comme PAGER par défaut :
En BASH, ajouter cette ligne dans le fichier ~/.bashrc
export PAGER=most
Autres options disponibles avec la commande most (partant du principe que most est le PAGER par défaut):
Non seulement most permet de consulter les pages de manuels mais il peut également afficher le contenu de n'importe quel fichier.
$ man cp # consultation du manuel avec la commande most si PAGER par défaut
$ most /mon_fichier
H : affichage de l'aide most
Espace ou D : défilement page par page vers le bas
Delete ou U : défilement page par page vers le haut
Entrée ou Flèche bas : défilement ligne par ligne vers le bas
Flèche haut : défilement ligne par ligne vers le haut
T : se positionne en haut du document
B : se positionne en bas du document
J ou G : se positionne à la ligne voulue
> : déplacement vers la droite
< : déplacement vers la gauche
S ou f ou / : permet d'effectuer une recherche vers le bas
? : permet d'effectuer une recherche vers le haut
N : recherche les occurences suivantes
En mode affichage de fichier :
E : bascule en mode édition avec l'éditeur par défaut
En mode affichage de logs en continu :
au lieu de
$ tail -f /var/log/access.log
utiliser most puis l'option F
$ most /var/log/access.log
F : simule la commande tail -f
Processus
Processus
Les n premiers processus les plus consommateur de cpu
Les n premiers processus les plus consommateur de cpu
La commande suivante permet d'afficher les 15 premiers processus les plus gourmands en processeur.
$ sudo ps auxk -pcpu | head -n 16
Avec un affichage un peu plus concis (triés par pourcentage d'utilisation de cpu et de mémoire décroissant)
$ sudo ps -eo user,pid,%cpu,%mem,comm --sort -%cpu,-%mem | head -n 16
USER PID %CPU %MEM COMMAND
root 77548 100 0.1 ps
root 1113 19.5 2.2 Xorg
root 77545 14.2 0.1 sudo
ronan 1507 7.9 0.1 picom
ronan 51790 3.4 10.2 firefox
ronan 77324 1.6 2.7 qterminal
ronan 53094 1.4 10.0 Isolated Web Co
ronan 52496 1.3 7.2 WebExtensions
root 76274 1.2 0.0 kworker/0:2-i915-unordered
root 77233 0.5 0.0 kworker/0:1-i915-unordered
ronan 77467 0.5 1.9 Web Content
ronan 53715 0.4 8.9 Isolated Web Co
root 16 0.3 0.0 ksoftirqd/0
root 76751 0.2 0.0 kworker/1:1-events
ronan 1734 0.2 0.2 blueman-tray
PS
PS
top - afficher un processus Linux spécifique
top - afficher un processus Linux spécifique
Pour afficher les statistiques d'un programme spécifique à l'aide de la commande top:
L'exemple suivant affiche tous les processus nginx.
$ top -p$(pgrep -d, nginx)
L'argument -d de la commande pgrep permet d'afficher les numéros des processus séparés par une virgule.
L'argument -p de la commande top permet de filtrer uniquement les processus indiqués.
Réseau
Réseau
Netstat
Netstat
logger : Journaliser des évènements dans /var/log/syslog
logger : Journaliser des évènements dans /var/log/syslog
La commande logger permet d'enregistrer des informations dans le fichier /var/log/syslog.
Cette commande est idéale pour journaliser différents évènements pendant l'exécution d'un script.
Elle peut être utilisée tout simplement :
$ logger -t monTag monMessage
$ tail /var/log/syslog
Apr 23 15:23:37 ubuntu10.04 monTag: monMessage
L'option -t permet d'indiquer un tag. Très utile pour effectuer des recherches dans le fichier syslog.
$ logger -t monTag Je peux également écrire un texte avec des espaces
$ tail /var/log/syslog
Apr 23 15:26:12 ubuntu10.04 monTag: Je peux également écrire un texte avec des espaces
La commande logger permet également d'enregistrer dans syslog le contenu d'un fichier.
$ cat fic1
systèmes
coucou
recoucou
$ logger -t FIC1 -f fic1
$ tail /var/log/syslog
Apr 23 15:29:13 ubuntu10.04 FIC1: systèmes
Apr 23 15:29:13 ubuntu10.04 FIC1: coucou
Apr 23 15:29:13 ubuntu10.04 FIC1: recoucou
Utiliser la commande logger dans un script :
$ cat comparaison.sh
#!/bin/bash
logger -t $0 Execution du script
# Test sur le nombre d'arguments
if [[ $# -ne 2 ]]
then
logger -t $0 Nombre d\'arguments incorrect
echo "Mauvais nombre d'arguments"
echo "Utilisation : $0 nbr1 nbr2"
exit 1
fi
# On compare les nombres
logger -t $0 Comparaison de $1 et $2
if [[ $1 -gt $2 ]]
then
logger -t $0 $1 est superieur a $2
echo "Comparaison : $1 est superieur a $2"
else
logger -t $0 $1 est inferieur a $2
echo "Comparaison : $1 est inferieur a $2"
fi
logger -t $0 Fin du script
exit 0
Dans ce script, j'utilise le nom du script comme tag (logger -t $0).
Exécution du script :
$ ./comparaison.sh 10 20
Comparaison : 10 est inferieur a 20
$ tail /var/log/syslog
Apr 23 15:51:57 ubuntu10.04 ./comparaison.sh: Execution du script
Apr 23 15:51:57 ubuntu10.04 ./comparaison.sh: Comparaison de 10 et 20
Apr 23 15:51:57 ubuntu10.04 ./comparaison.sh: 10 est inferieur a 20
Apr 23 15:51:57 ubuntu10.04 ./comparaison.sh: Fin du script
Tous mes évènements ont été enregistrés dans sylog.
Il est également possible, dans le script, d'enregistrer les évènements dans un fichier texte avec la commande echo et seulement, à la fin du script, d'utiliser la commande logger pour enregistrer le contenu du fichier texte dans le fichier syslog.
$ cat comparaison.sh
#!/bin/bash
echo "Execution du script" > /root/logComparaison
# Test sur le nombre d'arguments
if [[ $# -ne 2 ]]
then
echo "Nombre d'arguments incorrect" >> /root/logComparaison
echo "Mauvais nombre d'arguments"
echo "Utilisation : $0 nbr1 nbr2"
exit 1
fi
# On compare les nombres
echo "Comparaison de $1 et $2" >> /root/logComparaison
if [[ $1 -gt $2 ]]
then
echo "$1 est superieur a $2" >> /root/logComparaison
echo "Comparaison : $1 est superieur a $2"
else
echo "$1 est inferieur a $2" >> /root/logComparaison
echo "Comparaison : $1 est inferieur a $2"
fi
echo "Fin du script" >> /root/logComparaison
logger -t $0 -f /root/logComparaison
exit 0
Tous les évènements sont enregistrés dans le fichier /root/logComparaison à l'aide de la commande echo.
Attention, le premier appel à la commande echo écrase le contenu du fichier /root/logComparaison s'il existe (utilisation d'un seul chevron ">" dans la redirection).
Pour terminer, tout le contenu du fichier est enregistré dans syslog à l'aide de la commande logger et de l'option -f suivi du nom du fichier (utilisation du nom du script en tag).
$ ./comparaison.sh 100 20
Comparaison : 100 est superieur a 20
$ cat logComparaison
Execution du script
Comparaison de 100 et 20
100 est superieur a 20
Fin du script
$ tail /var/log/syslog
Apr 23 16:21:10 ubuntu10.04 ./comparaison.sh: Execution du script
Apr 23 16:21:10 ubuntu10.04 ./comparaison.sh: Comparaison de 100 et 20
Apr 23 16:21:10 ubuntu10.04 ./comparaison.sh: 100 est superieur a 20
Apr 23 16:21:10 ubuntu10.04 ./comparaison.sh: Fin du script
Ubuntu server
Ubuntu server
Connaitre sa version Ubuntu
Connaitre sa version Ubuntu
Pour connaitre la version d'Ubuntu installée sur le système, saisir dans une console la commande suivante :
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 10.04.4 LTS
Release: 10.04
Codename: lucid
L'information concernant la version installée apparait à la ligne Description
Sinon, il y a le fichier /etc/issue (fonctionne avec Ubuntu et Debian)
$ file /etc/issue
/etc/issue: ASCII text
$ cat /etc/issue
Debian GNU/Linux 6.0 \n \l
$ cat /etc/issue
Ubuntu 10.04.4 LTS \n \l
Il y a également le fichier /etc/debian_version
$ file /etc/debian_version
/etc/debian_version: ASCII text
$ cat /etc/debian_version
squeeze/sid
Enfin, il y a le fichier /etc/lsb-release (informations fournies avec la commande lsb_release -a)
$ file /etc/lsb-release
/etc/lsb-release: ASCII text
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=10.04
DISTRIB_CODENAME=lucid
DISTRIB_DESCRIPTION="Ubuntu 10.04.4 LTS"
Pour connaitre la version du noyau Linux, saisir dans une console la commande suivante :
$ uname -a
Linux vm-apache 2.6.32-14-pve #1 SMP Tue Aug 21 08:24:37 CEST 2012 i686 GNU/Linux
version Ubuntu de mon serveur
J'ai noté votre expication mais ne sais pas dans quoi taper pour y arriver. "Aller dans une console" mais quoi, laquelle ? Dans terminal ce n'est pas possible non plus. Oh grand merci de votre aide. Je suis débutante et malgré mes efforts j'ai bien des difficultés
Ca dépend de la version de
Ca dépend de la version de distribution que tu utilises.
Si c'est une version "server", tu t'y connectes automatiquement via le mode console.
Si c'est une version "desktop", il suffit d'ouvrir un terminal.
Arrêter un serveur Ubuntu
Arrêter un serveur Ubuntu
Pour arrêter un serveur Ubuntu, saisir la commande suivante dans une console
$ sudo halt
Ou en utilisant la commande shutdown :
$ sudo shutdown -h now
L'indication now permet un arrêt immédiat.
Pour un arrêt dans 1 minute :
$ sudo shutdown -h +1 &
Pour un arrêt à une heure précise :
$ sudo shutdown -h 16:50 &
Pour annuler un arrêt programmé :
$ sudo shutdown -c
Dans le cas d'un arrêt programmé, un message est envoyé toutes les minutes à tous les utilisateurs connectés au système pour annoncer l'arrêt.
Redémarrer un serveur Ubuntu
Redémarrer un serveur Ubuntu
Pour redémarrer un serveur Ubuntu, saisir la commande suivante dans une console
$ sudo reboot
Ou en utilisant la commande shutdown :
$ sudo shutdown -r now
L'indication now permet un redémarrage immédiat.
Pour un redémarrage dans 1 minute :
$ sudo shutdown -r +1 &
Pour un redémarrage à une heure précise :
$ sudo shutdown -r 16:50 &
Pour annuler un redémarrage programmé :
$ sudo shutdown -c
Dans le cas d'un redémarrage programmé, un message est envoyé toutes les minutes à tous les utilisateurs connectés au système pour annoncer le redémarrage.
Erreur --- perl: warning: Setting locale failed.
Erreur --- perl: warning: Setting locale failed.
J'ai souvent rencontré sur mes VMs Ubuntu Server cette erreur :
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LANG = "fr_FR.UTF-8"
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
J'ai donc tenté une re-configuration des locales :
$ dpkg-reconfigure locales
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LANG = "fr_FR.UTF-8"
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
Sans succès.
Pour corriger cette erreur, il faut utiliser la commande locale-gen :
$ locale-gen fr_FR.UTF-8
Generating locales...
fr_FR.UTF-8... done
Generation complete.
Puis lancer la re-configuration des locales :
$ dpkg-reconfigure locales
Generating locales...
fr_FR.UTF-8... up-to-date
Generation complete.
Locale française sur Ubuntu Server
Locale française sur Ubuntu Server
Pour forcer Ubuntu Server à prendre en compte la langue française avec un encodage de caractères en UTF-8, il faut installer le package language-pack-fr, indiquer dans le fichier /etc/default/locale la valeur fr_FR.UTF-8 à la variable LANG puis lancer une reconfiguration du système.
$ apt-get install language-pack-fr
$ if [ -f /etc/default/locale ]; then cp /etc/default/locale /etc/default/locale_default; fi
$ echo "LANG=fr_FR.UTF-8" > /etc/default/locale
$ cat /etc/default/locale
LANG=fr_FR.UTF-8
$ dpkg-reconfigure locales
Les modifications seront effectives à la prochaine connexion.
Source : http://www.aepik.net/documentation/ubuntu/server/locales