397 liens privés
Apparemment Qwant supporte désormais les !bang comme ceux de DuckDuckGo (https://duckduckgo.com/bang ) !
Exemple pour faire une recherche OpenStreetMap : !osm rue de rivoli
J'ai découvert ça par hasard, sachant que cela fait à peine de 3 jours que j'utilise Qwant, et j'ai bien l'impression que ce n'est pas officiel.
https://twitter.com/jeekajoo/status/1085092141032980480
EDIT : un twittos m'apprend l'existence des commandes Quick https://help.qwant.com/help/qwant-search/searching/how-use-qwick/
Let's start with the punchline. Your bash scripts will be more robust, reliable and maintainable if you start them like this:
#!/bin/bash set -euo pipefail IFS=$'\n\t'
I call this the unofficial bash strict mode. This causes bash to behave in a way that makes many classes of subtle bugs impossible. You'll spend much less time debugging, and also avoid having unexpected complications in production.
Un excellent billet de blog qui explique comment faire des scripts bash qui utilisent le mode "strict": c'est à dire qui crashent à la moindre erreur.
Ne surtout pas manquer la partie "problèmes et solutions" http://redsymbol.net/articles/unofficial-bash-strict-mode/#issues-and-solutions dont il est notamment question de :
- Comment faire exécuter des commandes dont on sait qu'elles sortent avec un code de sortie ≠ 0
- Eviter les variables non définies, et pour cela utiliser des valeurs par défaut: http://www.gnu.org/software/bash/manual/bashref.html#Shell-Parameter-Expansion
- Opérations de nettoyage avec les
Exit Traps
dont j'ai déja parlé ici https://jeekajoo.eu/links/?_kUIBg
lsof +D /var/log
lsof, le couteau suisse :)
voir aussi https://jeekajoo.eu/links/?Kaq3Jg (EDIT: et je vois que la commande en question y était déja mais je ne m'en souvenais plus)
Han!
Je savais pas qu'on pouvait changer les séparateurs de sed! Exemple d'utilisation:
JENKINS_HOME=/mnt/jenkins/data
sed -i "s|^JENKINS_HOME=.*|JENKINS_HOME=$JENKINS_HOME|" /etc/default/jenkins
Le sed remplace la valeur de JENKINS_HOME dans le fichier de conf, par la valeur de la variable d'environnement du même nom. Le fait qu'il y ait des "/" dans cette variable ne pose pas de problème à sed car on a choisi un autre type de séparateur ("|"). Donc pas besoin d'échapper ces caractères.
"""
Conclusion : si votre version de Firefox est >= 41, passez la valeur de « media.autoplay.enabled » à false dans about:config pour virer le spam vidéo non-Flash qui pollue le web en ce moment (il faudra cliquer sur toute vidéo pour en commencer la lecture). Si vous n'avez pas cette version de Firefox (comme avec Debian stable, par exemple), je n'ai pas trouvé de solution parfaite. La moins pire est donc d'utiliser NoScript en lui demandant de virer les objets embarqués même sur les sites web inclus dans la liste blanche (voir item numéro 6 pour les détails et dommages collatéraux).
"""
merci Guigui.
Obtenir un shell root simplement en éditant une entrée grub.
Rajouter
"""
init=/bin/sh
"""
sur la ligne qui commence par "linux ...". Bootez avec ctrl+X
Valable si votre / n'est pas chiffré.
Un très bon blog qui donne plein de bon plans/conseils pour acheter un vélo d'occasion.
Aujourd'hui... un tip systemd :D
Pour changer le répertoire par défaut des données docker (/var/lib/docker) avec systemd. Ne pas utiliser /etc/default/docker qui est réservé à sysvinit && upstart.
Faire plutôt ceci:
"""
mkdir /etc/systemd/system/docker.service.d
cat << EOF > /etc/systemd/system/docker.service.d/dir.conf
[Service]
ExecStart=
ExecStart=/usr/bin/docker daemon -H fd:// --graph /path/to/docker
EOF
systemctl daemon-reload
"""
doc officielle basée sur la même source: https://docs.docker.com/articles/systemd/
Et puis pour désynchroniser les panneaux on peut utiliser l'interrupteur suivant:
:setw synchronize-panes
Perso je l'ai rattaché à ctrl+s. Dans mon ~/.tmux.conf j'ai donc cela:
# shortcut for synchronize-panes toggle
# START:sync
bind C-s set-window-option synchronize-panes
# END:sync
Je fais donc ctrl+b puis ctrl+s pour synchroniser ou désynchroniser les panneaux tmux.
Procédure pour merger la branche d'un repo distant.
Admettons que je travaille sur https://github.com/UtahDave/salt-vagrant-demo
"""
$ git clone https://github.com/UtahDave/salt-vagrant-demo.git
$ cd salt-vagrant-demo
"""
Je veux merger la branche 'vagrant_1.7.4' du fork https://github.com/cjhenck/salt-vagrant-demo qui intègre le patch qui m’intéresse dans ma branche 'master' locale.
J'ajoute le remote en indiquant la branche qui m'interesse avec -t. 'patch-vagrant-1.7.4' est ici une sorte de tag que je donne au remote.
"""
$ git remote add patch-vagrant-1.7.4 -t vagrant_1.7.4 https://github.com/cjhenck/salt-vagrant-demo.git
"""
Je me mets sur ma branche locale master si je n'y suis pas déja
"""
$ git checkout master
"""
Je merge le remote, que j'ai précédemment taggué 'patch-vagrant-1.7.4', dans master:
"""
$ git pull patch-vagrant-1.7.4 master
"""
"""
The problem
In bash, running test programs which indicate their pass or fail status via an exit code can be problematic when they are run as part of a pipeline in Linux, Mac OS X or Cygwin since the reported exit code of a pipeline is normally the exit code of the last program in the pipeline. If the test program is not the last program in the pipeline, then its exit code will be hidden by the exit code of the last program.
The solution
bash version 3 introduced an option which changes the exit code behavior of pipelines and reports the exit code of the pipeline as the exit code of the last program to return a non-zero exit code. So long as none of the programs following the test program report a non-zero exit code, the pipeline will report its exit code to be that of the test program. To enable this option, simply execute:
set -o pipefail
in the shell where the test program will execute.
"""
via https://github.com/progrium/bashstyle (Always use set -eo pipefail. Fail fast and be aware of exit codes. Use || true on programs that you intentionally let exit non-zero.)
"""
${parameter:-word}
If parameter is unset or null, the expansion of word is substituted. Otherwise, the value of parameter is substituted.
"""
Exemple d'utilisation:
"""
exitcode=${2:-1}
"""
Si $2 est défini, exitcode = $2. Sinon exitcode = $1
Si la commande dd a déja été lancé, faire
"""
kill -USR1 $(pgrep ^dd)
"""
EDIT, ou mieux comme le suggère un lecteur (merci Damien)
"""
pkill -USR1 ^dd
"""
Ca affichera des infos de ce genre dans le terminal dans lequel tourne dd
"""
321121+0 records in
321120+0 records out
164413440 bytes transferred in 112.708791 secs (1458745 bytes/sec)
"""
Si vous vous appretez à utiliser dd, utilisez pv.
"""
apt-get install pv
dd if=/dev/sda | pv | dd of=/dev/sdc
"""
ça donne
"""
6,84GO 0:09:09 [ 38,5MB/s] [ <=> ]
"""
Vraiment cool.
On peut aller plus loin, avec une barre de progression comme décrit ici: http://www.cyberciti.biz/faq/linux-unix-dd-command-show-progress-while-coping/
Il arrive que l'usage du disque soit différent de la taille des objets qui l'occupent et ce pour diverses raisons : "trous" dans les fichiers, fragmentation, blocs non contigus..
Pour afficher la taille apparente, utiliser l'option --apparent-size
"""
--apparent-size
print apparent sizes, rather than disk usage; although the apparent size is usually smaller, it may be larger due to holes in ('sparse') files, internal fragmentation, indirect blocks, and the like
"""
Une procédure pour réduire le fichier 'ibdata1' qui a fini par prendre 190G+ sur un de nos serveurs, alors que nous avons paramétré un innodb_file_per_table à 1.
La faute à des OPTIMIZE TABLE qui avaient été faits justement dans le but de reprendre l'espace disque censé être gagné suite à des DELETE.
"""
Unfortunately, OPTIMIZE TABLE against an InnoDB table stored in ibdata1 does two things:
- Makes the table's data and indexes contiguous inside ibdata1
- It makes ibdata1 grow because the contiguous data is appended to ibdata1
"""
Cette doc explique comment enregistrer un service consul externe, dixit: vers une machine qui ne possède pas consul.
On fait donc un appel via l'API. Je vous mets la syntaxe avec l'utilisation de tags:
"""
$ curl -X PUT -d '{"Datacenter": "dc1", "Node": "foo", "Address": "8.8.8.8", "Service": {"Service": "mon-super-service", "Tags": ["active"]}}' http://127.0.0.1:8500/v1/catalog/register
"""
Vérification depuis n'importe quel membre consul:
"""
$ dig +short active.mon-super-service.service.consul
8.8.8.8
$ dig +short mon-super-service.service.consul
8.8.8.8
"""
Très pratique quand on utilise consul généralement pour une infra.
Pour l'instant j'utilise cela de manière transitoire, le temps de migrer un serveur.
$ cat foo | gpg --import -
Le '-' est une convention qu'on retrouve dans bcp de programmes unix pour indiquer qu'on veut injecter le stdin.
Je ne savais pas que ça fonctionnait pour gnupg.
Ca fonctionne pareil pour 'apt-key add' par exemple.
toujours pratique.
bien penser à l'option --single-transaction tout de même sur une base utilisée par une appli.
https://dev.mysql.com/doc/refman/5.6/en/mysqldump.html#option_mysqldump_single-transaction
De bonnes pratiques, notamment de sécurité, sur Debian.
laptop-mode retournait cette erreur au démarrage:
"""
Error for wireless request "Set Power Management" (8B2C) :
SET failed on device wlan0 ; Operation not supported.
"""
Problème résolu de la même manière que décrite dans le shaarlink avec:
- carte 'Qualcomm Atheros AR928X'.
- kernel: Linux arch 3.19.3-3-ARCH #1 SMP PREEMPT Wed Apr 8 14:24:22 CEST 2015 i686 GNU/Linux
Une fois rebooté, vous pouvez vérifier que l'option 'ps_enable' (enable powersave) pour le module ath9k est bien positionnée:
"""
$ modprobe -c | grep 'ps_enable'
options ath9k ps_enable=1
"""