PagePrincipale .
memos .
CookBook
Des trucs et astuces qui ne méritent pas un article...
Générer une paire de clés - courbes elliptiques
ssh-keygen -o -a 256 -t ed25519 -f ~/.ssh/id_ed25519_nom_de_ma_cle -C "addresse@domaine"
Clavier Azerty fr
session en cours :
sudo loadkeys fr
setxkbmap fr
Persistant :
sudo dpkg-reconfigure keyboard-configuration
Astuces commande find
Trouver et effacer les factures qui ont plus de 10 ans :
find /chemin/vers/dossier/factures -type f -mtime +3650 -ls
find /chemin/vers/dossier/factures -type f -mtime +3650 -delete
Trouver et effacer les dossiers vides
find . -type d -empty -ls
find . -type d -empty -delete
Trouver les fichiers présents dans les dossiers cachés sous $HOME, qui n'ont pas été lus depuis plus de 2 ans et qui ont été créés depuis plus de 10 ans :
find $HOME -type f -path '*/.*' -atime +730 -ctime +3650 -print
Remplacer des droits sur plusieurs fichiers. Exemple, autoriser les autres utilisateurs à lire un fichier si les groupes ont le droit de le faire :
find ./ -perm -g=r -exec chmod o=r {} \;
Réaliser une action sur des fichiers et ce, de façon récursive, par exemple avec la commande echo :
find ./ -type f -exec echo {} \;
autre exemple, écraser définitivement le contenu des fichiers du répertoire courant et sous-répertoires (
Attention: commande irréversible) :
find ./ -type f -exec shred -u {} \;
Remplacer du texte dans plusieurs fichiers. Cet exemple remplace le texte
/home/daniel/developpement/CVSLocal par
/home/daniel/CVSLocal dans les fichiers se nommant
Root en partant du répertoire courant (./) :
find ./ -name Root -type f -exec sed -i 's/\/home\/daniel\/developpement\/CVSLocal/\/home\/daniel\/CVSLocal/g' {} \;
Avec une expression rationnelle :
find ./ -name Root -type f -exec sed -i -r 's/^\/home\/daniel\/developpement\/CVSLocal$/\/home\/daniel\/CVSLocal/g' {} \;
options sed :
-i : modifier dans le fichier (si absent, affiche seulement)
-r : expression rationnelle
Remplacer une adresse IP dans tous les fichiers de configuration.
Attention aux effets de bords, par exemple
's/192\.168\.122\.1/192.168.122.2/g' remplace 192.168.122.1 par 192.168.122.2, mais également 192.168.122.19 par 192.168.122.2 ...
sudo find /etc -type f -exec grep -l "10.0.0.203" {} + | sudo xargs sed -i 's/10\.0\.0\.203/10.0.0.103/g'
sudo find /etc -type f -exec grep -l "192.168.122.1" {} + | sudo xargs sed -i 's/192\.168\.122\.1/192.168.122.2/g'
Renommer plusieurs fichiers
exemples :
rename 's/img/image/' *.jpg
rename 's/\.JPG/.jpg/' *.JPG
rename 's/.*Dossier (\d{4}).*important-(.{3}).*/Dossier_$1_important-$2.xls/' *.xls
option
-n pour juste voir le résultat.
Renommer plusieurs images en incrémentant
j=0;for i in *.jpg;do let j+=1;mv "$i" "image$j.jpg";done
Retourner automatiquement les images par lot (en fonction des données EXIF)
for f in *.jp*g *.JP*G; do
- if [ -f "$f" ]; then
- orientation=$(LANG=C exif "${f}" | grep -E 'Orientation' | awk -F'|' '{print $2}' | tr -d ' ')
- if [ -n "$orientation" ] && [ "$orientation" != "Top-left" ]; then
- echo "Rotation automatique de l'image $f"
- mv "${f}" "original_${f}" && convert "original_${f}" -auto-orient "${f}"
- fi
- fi
done
Une fois terminé :
rm original_*.*
Supprimer données EXIF
exiftool -all= *.jp*g *.JP*G ; rm *_original
Redimensionner des images par lot
Installer imagemagick:
sudo apt install imagemagick
Exemples:
mogrify -resize 800x600 -verbose *.jpg *.JP*G
mogrify -resize 50% -verbose *.jpg *.JP*G
on peut également modifier la qualité:
mogrify -resize 800x600 -quality 96 -verbose *.jpg *.JP*G
Supprimer les espaces en fin de lignes
sed -i 's/\s*$//' *.py
Récursif :
find -name '*.py' -exec sed -i 's/\s*$//' {} \;
Supprimer les fins de lignes
extrait de la FAQ de sed
tr -d '\n' < file # use tr to delete newlines
sed ':a;N;$!ba;s/\n//g' file # GNU sed to delete newlines
sed 's/$/ foo/' file # add "foo" to end of each line
Exemple, on veut remplacer le texte suivant:
- <translation>
- </translation>
par:
<translation type="unfinished"></translation>
dans un fichier de translation de Qt (.ts) voilà la commande à utiliser:
sed ':a;N;$!ba;s/<translation>\n\s*<\/translation>/<translation type="unfinished"><\/translation>/g' -i *.ts
Surveiller les appels système utilisés par un programme
strace -f ./mon_application
Archivage
Archivage incrémentielle avec exclusion:
tar -cvzf backup.tar.gz -X exclusion.txt -g
-g : sauvegarde incrémentale
-X : exclure, indiquez un fichier contenant les fichiers à exclure, par exemple:
*~
*.bak
*/cache/*
*/Trash/*
*/tmp/*
Découper une archive:
tar -cvz rep/ | split - -b 2000m backup_
recoller les morceaux:
cat backup_* > backup.tar.gz
Outils Disque dur
créer une partition:
fdisk device
Tester vitesse du disque dur:
hdparm -t device
exemple:
hdparm -t /dev/sda7
/dev/sda7:
- Timing buffered disk reads: 116 MB in 3.03 seconds = 38.34 MB/sec
Tester si des blocs sont défectueux
badblocks -n -s -v device
Tester et écrire dans l'inode des blocs défectueux:
e2fsck -c device
Copier une partition
exemple d'une source
sda1 et d'une cible
sdb1. Les partitions doivent bien sûr
ne pas être montées.
utilisation de la commande
dd:
dd if=/dev/sda1 of=/dev/sdb1 bs=512
Si les partitions sont de tailles différentes, il faut mettre à jour la taille de la partition (sinon l'espace disponible affiché est incorrect):
- vérification de la partition: e2fsck -f /dev/sdb1
- mise à jour de la taille de la partition: resize2fs /dev/sdb1
Depuis quand mon système a démarré ?
uptime
Partager une console
Exemple d'utilisation: lors d'une session
ssh, montrer ce que l'on tape à un utilisateur connecté localement sur la machine
L'utilisateur local lance la commande suivante :
screen
et l'utilisateur distant:
screen -x
Les deux utilisateurs sont maintenant sur la même console (lecture/ecriture).
Petit serveur web en Python
Se placer dans le répertoire que l'on souhaite partager puis
python3 -m http.server 8080
Bloquer mise à jour d'un paquet
Pour bloquer la mise à jour d'un paquet:
echo "linux-headers-2.6.32-30-generic hold" | dpkg --set-selections
Pour annuler (mettre à jour):
echo "linux-headers-2.6.32-30-generic install" | dpkg --set-selections
Visualiser les paquets bloqués:
dpkg --get-selections | egrep "hold$"
Enlever les noyaux N-*
sudo apt-get purge $(dpkg -l | awk '{print $2}' | grep -E "linux-(image|headers|modules|modules-extra)-$(uname -r | cut -d- -f1).*" | grep -v $(uname -r | sed -r -e 's:-[a-z]+.*::'))
Supprimer les fichiers de configuration de programmes désinstallés
sudo apt-get purge $(dpkg -l | grep -E '^rc\s+' | awk '{print $2}')
ou
dpkg -l | grep -E '^rc\s+' | awk '{print $2}' | xargs -n 1 -r sudo apt-get -y purge
Lister les paquets non officiel Debian
apt list '?installed ?not(?origin(Debian))'
Nettoyer un fichier GPX
Supprime la datation et arrondi les coordonnés et l'altitude.
C'est moche, mais ça fonctionne:
sed '/<time>.*<\/time>/d' circuit6_origin.gpx | sed 's/\( l[ao][tn]\)="\(\-*[0-9]*\.[0-9][0-9][0-9][0-9][0-9]\)[0-9]*/\1="\2/g' | sed 's/<ele>\([0-9]*\)\.[0-9]*<\/ele>/<ele>\1<\/ele>/' > circuit6.gpx
Désactiver/activer mise à jour automatique sur Ubuntu/Debian
dpkg-reconfigure -plow unattended-upgrades
Mettre en pause la machine à une certaine heure
echo "sh -c 'echo mem > /sys/power/state'" | at 02:00
Mettre à jour Firmwares UEFI sous Linux
https://www.linuxtricks.fr/wiki/fwupd-mettre-a-jour-les-firmwares-et-uefi-depuis-linux
Pages utiles:
RechercheTexte,
TableauDeBordDeCeWiki
Flux RSS:
Wiki,
Commentaires