
Astuces diverses en vrac
Cette image est volontairement pixélisée … parce que j’aime le pixel bien gros, bien gras qui bave sur un CRT.
Cette page contient un ensemble d’astuces diverses et variées, collectées en fonction de mes recherches et besoins. Elle ne contient aucun tutoriel mais représente une sorte d’aide-mémoire.
Linux
Un prompt avec des informations GIT
A placer dans le fichier ~/.bashrc
pour avoir un prompt avec des informations sur le dépôt GIT courant :
export PS1=$'\\n\[\\e[97;44m\\] \\u \\[\\e[34;106m\\] \\w \\[\\e[30;107m\\]$(GIT_PS1_SHOWUNTRACKEDFILES=1 GIT_PS1_SHOWDIRTYSTATE=1 __git_ps1) \\[\\e[00m\\] \\n\u25B8 '
installation de powerline
$ sudo apt-get update
$ sudo apt-get install powerline
Editer le fichier .bashrc
et ajouter les lignes suivantes :
if [ -f /usr/share/powerline/bindings/bash/powerline.sh ]; then
source /usr/share/powerline/bindings/bash/powerline.sh
fi
Installer les polices compatibles :
$ git clone https://github.com/powerline/fonts.git --depth=1
$ cd fonts
$ ./install.sh
Le répertoire “fonts” peut être supprimés à partir de cette étape.
Ouvrir un nouveau terminal et choisir une police compatible “powerline” parmi celles qui ont été installées :
======================================= ========================= ====================================
Powerline Font Family Formerly Known As License
======================================= ========================= ====================================
3270 3270 BSD/CCAS 3.0
Anonymice Powerline Anonymous Pro SIL Open Font License, Version 1.1
Arimo Powerline Arimo Apache License, Version 2.0
Cousine Powerline Cousine Apache License, Version 2.0
D2Coding for Powerline D2Coding SIL Open Font License, Version 1.1
DejaVu Sans Mono for Powerline DejaVu Sans Mono DejaVu Fonts License, Version 1.0
Droid Sans Mono for Powerline Droid Sans Mono Apache License, Version 2.0
Droid Sans Mono Dotted for Powerline Droid Sans Mono Dotted Apache License, Version 2.0
Droid Sans Mono Slashed for Powerline Droid Sans Mono Slashed Apache License, Version 2.0
Fira Mono for Powerline Fira Mono SIL OPEN FONT LICENSE Version 1.1
Go Mono for Powerline Go Mono Go's License
Hack Hack SIL OFL, v1.1 + Bitstream License
Inconsolata for Powerline Inconsolata SIL Open Font License, Version 1.0
Inconsolata-dz for Powerline Inconsolata-dz SIL Open Font License, Version 1.0
Inconsolata-g for Powerline Inconsolata-g SIL Open Font License, Version 1.0
Input Mono Input Mono `Input’s license
Liberation Mono Powerline Liberation Mono SIL Open Font License, Version 1.1
ProFontWindows ProFont for Powerline MIT License
Meslo for Powerline Meslo Apache License, Version 2.0
Source Code Pro for Powerline Source Code Pro SIL Open Font License, Version 1.1
Meslo Dotted for Powerline Meslo Dotted Apache License, Version 2.0
Meslo Slashed for Powerline Meslo Dotted Apache License, Version 2.0
Monofur for Powerline Monofur Freeware
Noto Mono for Powerline Noto Mono SIL Open Font License, Version 1.1
Roboto Mono for Powerline Roboto Mono Apache License, Version 2.0
Symbol Neu Powerline Symbol Neu Apache License, Version 2.0
Terminess Powerline Terminus SIL Open Font License, Version 1.1
Tinos Powerline Tinos Apache License, Version 2.0
Ubuntu Mono derivative Powerline Ubuntu Mono Ubuntu Font License, Version 1.0
Space Mono for Powerline Space Mono SIL Open Font License, Version 1.1
======================================= ========================= ====================================
snap et snap store
Pour béneficer de snap et de son store :
$ sudo apt update
$ sudo apt install snapd
Rebooter ou quitter la session en cours.
Pour le store :
$ sudo snap install snap-store
snap-store 20191114.a9948d5 par Canonical✓ installé
générer une représentation texte d’un répertoire pour Markdown
Créer un exécutable mdgentree.sh
dans
#!/bin/bash
export pwd=$(pwd)
find $pwd | sed -e "s;$pwd;\.;g;s;[^/]*\/;|__;g;s;__|; |;g"
Exemple de génération :
robin:~/git/XenonReborn $ ~/.bin/mdgentree
.
|__gradle
| |__wrapper
| | |__gradle-wrapper.jar
| | |__gradle-wrapper.properties
|__build.gradle
|__core
| |__build.gradle
| |__.travis.yml
| |__src
| | |__fr
| | | |__fxjavadevblog
| | | | |__xr
| | | | | |__commons
| | | | | | |__gamepads
| | | | | | | |__ControllerAdapter.java
| | | | | | | |__ControllerFactory.java
| | | | | | |__UserControls.java
| | | | | | |__utils
| | | | | | | |__ModPlayer.java
| | | | | | | |__MusicPlayer.java
| | | | | | | |__RandomUtils.java
| | | | | | | |__GameControls.java
| | | | | | | |__DeltaTimeAccumulator.java
| | | | | |__screens
| | | | | | |__AbstractScreen.java
| | | | | | |__loading
| | | | | | | |__LoadingScreen.java
| | | | | | |__game
| | | | | | | |__ShipStateObserver.java
| | | | | | | |__TiledMapScrolling.java
| | | | | | | |__DashBoard.java
| | | | | | | |__BackgroundParallaxScrolling.java
| | | | | | | |__GamePlayScreen.java
| | | | | | |__menu
| | | | | | | |__MenuScreen.java
| | | | | | | |__BackgroundTravelling.java
| | | | | | |__XenonControler.java
| | | | | | |__MainControler.java
| | | | | | |__XenonScreen.java
| | | | | | |__XenonScreenFactory.java
| |__assets
| | |__commons
| | | |__bonus.png
| | | |__bonus-power-up-anim.png
| | | |__life.png
| | | |__xenon-reborn.png
| | |__mods
| | | |__trance-124.mod
| | | |__aa_xenon.xm
| | | |__xenon220.xm
| | | |__doodle-doo.mod
| | | |__xenon2.mod
| | | |__intro.mod
| | | |__space-megamix.mod
| | | |__faktory.mod
| | | |__breathtaker.mod
| | |__log4j2.xml
| | |__ships
| | | |__ship_noreactor.png
| | | |__ship_old.png
| | | |__ship_right.png
| | | |__ship_left.png
| | | |__ship_normal.png
| | | |__shield.png
| | |__musics
| | | |__blank.mp3
| | |__backgrounds
| | | |__right_bg.png
| | | |__ghostbusters-bzhcamp.png
| | | |__footer.png
| | | |__left_bg.png
| | | |__bombing-pixels-white.jpg
| | | |__space.jpg
| | |__sounds
| | | |__bonus.mp3
| | | |__explosion.mp3
| | | |__game-over.mp3
| | | |__shield-activated.mp3
| | | |__big-shoot.mp3
| | | |__shield_down.mp3
| | | |__clic.mp3
| | | |__shoot.mp3
| | | |__ship_explosion.mp3
| | | |__shield_up.mp3
| |__logs
| | |__refs
|__gradle.properties
|__README.md
Autre solution, installer tree
qui génère un résultat bien plus agréable.
$ sudo apt-get install tree
$ tree --dirsfirst
.
├── core
│ ├── assets
│ │ ├── backgrounds
│ │ │ ├── bombing-pixels-white.jpg
│ │ │ ├── footer.png
│ │ │ ├── ghostbusters-bzhcamp.png
│ │ │ ├── left_bg.png
│ │ │ ├── right_bg.png
│ │ │ └── space.jpg
│ │ ├── commons
│ │ │ ├── bonus.png
│ │ │ ├── bonus-power-up-anim.png
│ │ │ ├── life.png
│ │ │ └── xenon-reborn.png
│ │ ├── enemies
│ │ │ ├── big-enemy.png
│ │ │ ├── black-bird.png
│ │ │ ├── bug.png
│ │ │ ├── enemy.png
│ │ │ ├── perforator.png
│ │ │ ├── rafale.png
│ │ │ └── xenon-ship.png
│ │ ├── fonts
│ │ │ ├── computer_pixel-7.ttf
│ │ │ ├── font-blue.png
│ │ │ ├── font-blue.properties
│ │ │ ├── font-green.png
│ │ │ ├── font-green.properties
│ │ │ ├── font-xenon-2.png
│ │ │ ├── font-xenon-2.properties
│ │ │ ├── font-xenon.png
│ │ │ ├── PixelOperatorHB.ttf
│ │ │ └── ShareTech-Regular.ttf
├── build.gradle
├── gradle.properties
├── gradlew
├── gradlew.bat
├── README.md
└── settings.gradle
54 directories, 148 files
Bash Alias : mes petites astuces
Petits ajouts pratiques pour les commandes bash à ajouter à ~/.bashrc
:
alias cls='clear'
alias lh='ls -gFh --group-directories-first --time-style=long-iso'
alias ..='cd ..'
alias e='exa --group-directories-first --long --time-style=long-iso --bytes'
alias run="docker compose up"
function mkcd {
mkdir -p $1
cd $1
}
function cl {
cd $1
lh
}
Exemples :
cls
: efface l’écran, ça me rappelle mon MO5 et mon TO8lh
: c’est unls -l
un peu optimisé. Il met les répertoires en premier, affiche de jolies dates et les unités de taille des fichiers sont simple à lire.mkcd mon_repertoire
: va créer un répertoiremon_repertoire
et se placer automatiquement dedans.cl mon_repertoire
: va se placer dans le répertoire et afficher son contenu avec unlh
...
: se place dans le répertoire parent, comme uncd ..
mais on gagne 3 caractères.
Echoing like a Terminator
Pour afficher le contenu d’un fichier comme dans Terminator. Ca sert à rien, mais c’est FUNNY.
$ cat myfile.txt | pv -qL50
$ echo "I'll be back!" | pv -qL10
Ajouter la clé SSH publique d’un utilisateur à un serveur distant
Prérerquis : avoir généré une clé SSH publique/privée sur le poste local.
Version simple, si vous avez déjà un utilisateur sur le serveur distant :
$ ssh-copy-id -i ~/.ssh/id_rsa.pub user@server
Version plus complète, si vous n’avez pas encore d’utilisateur sur le serveur distant, à partir de ce serveur :
$ sudo adduser user
$ sudo mkdir -p /home/user/.ssh
$ cat id_rsa.pub >> /home/user/.ssh/authorized_keys
$ chmod 700 /home/user/.ssh
$ chmod 600 /home/user/.ssh/authorized_keys
$ chown -R user:user /home/user
Java & Co
Maven : forcer l’usage d’un JDK avec .mavenrc
Pour l’utilisateur courant, éditer le fichier ~/.mavenrc
et ajouter ce contenu (à adapter en fonction du chemin réel vers le JDK à désigner):
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64/
Pour une modification “system wide” (quel que soit l’utilisateur ), éditer le fichier /etc/mavenrc
et y faire un export JAVA_HOME
de la même manière que ci-dessus.
La commande mvn
lance au démarrage ce script qui affecte donc la bonne valeur à la variable d’environnement JAVA_HOME
.
Maven : clean recursif sur des projets maven
Ce script permet de lancer un “maven clean” à partir d’une arborescence de manière récursive et de nettoyer ansi tous les builds :
echo "Cleaning all maven projects recursively"
find . -name "pom.xml" -exec mvn clean -f '{}'
source : https://stackoverflow.com/questions/15895805/find-pom-in-subdirectories-and-execute-mvn-clean
Minimal POM Java 11
Voici la structure minimale d’un POM Java 11 (pom.xml) avec :
- lombok 1.18.10
- logback classic 1.2.3 et SLF4J (transitive dep)
- commons-lang 3.9
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<maven.compiler.target>11</maven.compiler.target>
<maven.compiler.source>11</maven.compiler.source>
<lombok.version>1.18.10</lombok.version>
<logback.version>1.2.3</logback.version>
<commons-lang.version>3.9</commons-lang.version>
</properties>
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>${logback.version}</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>${commons-lang.version}</version>
</dependency>
</dependencies>
Divers
Gitlab
Arrêter le service gitlab :
$ sudo gitlab-ctl stop
Retirer gitlab du démarrage automatique :
$ sudo systemctl disable gitlab-runsvdir.service
VirtualBox : redimensionner un fichier VDI
Cela doit se faire en plusieurs étapes mais au préalable, il vaut mieux éteindre la machine virtuelle (shutdown).
Ensuite, dans un terminal :
$ VBoxManage modifyhd fichier.vdi --resize 20000
Dans cet exemple la partition fera 20 Go à l’issue du re-dimensionnement pour VirtualBOx
Puis, lancer la VM et ouvrir un gestionnaire de disques (GParted sous Linux par exemple) et allouer tout l’espace à la partition en la redimensionnant.
BrowserSync
Installation
$ sudo su
$ apt-get update && apt-get -y upgrade && apt-get –y autoremove
$ wget -qO- https://deb.nodesource.com/setup_12.x | sudo -E bash -
$ apt-get install -y nodejs
$ npm install -g browser-sync
Exécution
Dans le cas ci dessous l’application doit être déployée au moins une fois par Eclipse dans le répertoire du serveur d’application. Chaque changement est écouté et la page (même JSF) est rechargée à la volée en cas de changement sur le disque.
$ browser-sync start --proxy "http://localhost:8080/ApplicationDemo " --files "/opt/payara41_171/glassfish/domains/domain1/eclipseApps/ApplicationDemo/**/*"
En JSF, pour éviter la demande de confirmation de “re-submit POST”, il faut ajouter un plugin à Firefox :
https://addons.mozilla.org/en-US/firefox/addon/auto-confirm/
Docker
Installation sous Linux Mint 18
source : https://gist.github.com/Simplesmente/a84343b1f71a46bbeedbb6c9b20fa9c1#file-install-docker-mint-sh
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates -y
sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
sudo echo deb https://apt.dockerproject.org/repo ubuntu-xenial main >> /etc/apt/sources.list.d/docker.list
sudo apt-get update
sudo apt-get purge lxc-docker
sudo apt-get install linux-image-extra-$(uname -r) -y
sudo apt-get install docker-engine cgroup-lite apparmor -y
sudo usermod -a -G docker $USER
sudo service docker start
usage sans sudo
Après l’installation de Docker pour éviter d’avoir à exécuter “sudo” dans chaque ligne de commande.
$ sudo groupadd docker
$ sudo usermod -aG docker $USER
La commande sudo groupadd docker
est optionnelle car il se peut que le groupe existe déjà.
Démarrer et arrêter les services Docker
Ce script permet d’arrêter ou lancer les services liés à Docker :
#!/bin/bash
# Author : FX ROBIN - 2020-04-06
if [ "$1" = "--help" ]
then
echo "Starts or stops Docker services"
echo "Usage : dctl [start|stop]"
exit 0
fi
# inclusion des affichages en couleur avec printc
RESTORE='\033[0m'
RED='\e[91m'
GREEN='\e[92m'
YELLOW='\033[00;33m'
BLUE='\033[00;34m'
PURPLE='\033[00;35m'
CYAN='\033[00;36m'
LIGHTGRAY='\033[00;37m'
function printc()
{
echo -e "$1$2"
echo -en "${RESTORE}"
}
#inclusion de la vérification des droits super-utilisateur
if [ "$EUID" -ne 0 ]; then
printc $RED "This script must be run as super user. Try this : sudo dctl start|stop"
exit 2
fi
if [[ "start stop" != *"$1"* ]]; then
printc $RED "Bad parameter. Should be 'start' or 'stop'."
exit 2
fi
# STARTING
case $1 in
start)
printc $GREEN ">_Starting Docker ..."
systemctl enable docker.socket
systemctl enable docker.service
systemctl start docker.socket
systemctl start docker.service
;;
stop)
printc $RED ">_Stoping Docker ..."
systemctl stop docker.service
systemctl stop docker.socket
systemctl disable docker.socket
systemctl disable docker.service
;;
esac
systemctl --no-pager status docker.service | grep "Active:"
Usage :
$ dctl start
>_Starting Docker ...
Created symlink /etc/systemd/system/sockets.target.wants/docker.socket → /lib/systemd/system/docker.socket.
Synchronizing state of docker.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable docker
insserv: warning: current start runlevel(s) (empty) of script `docker' overrides LSB defaults (2 3 4 5).
insserv: warning: current stop runlevel(s) (0 1 2 3 4 5 6) of script `docker' overrides LSB defaults (0 1 6).
Active: active (running) since Mon 2020-04-06 14:57:00 CEST; 6ms ago
Vidéo
concaténer
Créer un fichier files.txt
qui contient tous les fichiers à concaténer, exemple :
capture-01.mp4
capture-02.mp4
capture-03.mp4
Concaténation :
$ ffmpeg -f concat -i files.txt -c:v libx264 -preset result_video.mp4
accélérer
Accélération légère d’une vidéo pour la rendre plus “punchy” tout en restant écoutable :
$ ffmpeg -i normal_video.mp4 \
-filter_complex "[0:v]setpts=0.85*PTS[v];[0:a]atempo=(1/0.85)[a]" \
-map "[v]" -map "[a]" \
-c:v libx264 \
-preset fast \
faster_result_video.mp4
Streaming Live de l’écran vers YouTube
Il faut obtenir l’adresse de streaming ainsi que la clé (cf. compte Youtube, ma chaine, mes vidéos)
$ ffmpeg -f alsa -ac 2 -i hw:0,0 -f x11grab -framerate 30 -video_size 1280x720 \
-i :0.0+0,0 -c:v libx264 -preset veryfast -maxrate 1984k -bufsize 3968k \
-vf "format=yuv420p" -g 60 -c:a libvo_aacenc -b:a 128k -ar 44100 \
-f flv rtmp://example.rtmp.address.youtube/example-key