397 liens privés
dont "When not to use shell scripts" : https://www.tldp.org/LDP/abs/html/why-shell.html
;)
Un petit script bash qui permet de bootstraper les datasources et des templates dans grafana.
Cela consiste à faire des POST sur l'API.
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
$ cat /etc/cron.d/zapping
0 15 * * 1-6 root /home/admin/zapping
$ cat /home/admin/zapping
#!/bin/bash
set -o pipefail
TODAY=$(date "+%Y-%m-%d")
DATE=${1:-$TODAY}
DEST_DIR=/home/www-data/pub.jeekajoo.eu/videos/zapping
mkdir -p $DEST_DIR
LAST_VIDEO_URL=$(curl -s http://feed.cicogna.fr/zapping.atom | grep -A1 $DATE | grep canalplus.fr | head -n 1 | cut -d '"' -f2)
if [ -z "$LAST_VIDEO_URL" ]
then
echo "Video not found for $DATE"
exit 1
else
/usr/local/bin/youtube-dl -q $LAST_VIDEO_URL -o "$DEST_DIR/$DATE.mp4"
fi
Un script bash vite-fait, que je lance du lundi au samedi 15h, pour récupérer le zapping du jour. Le but c'est d'éviter la publicité, sachant que la technique que j'avais cité ne fonctionne plus.
Si vous avez du temps, n'hésitez pas à faire un truc mieux avec des libs atom/rss capables de récupérer l'item plus joliment que ce que je fais avec des grep.. avec python par exemple. Et de construire un flux avec les vidéos résultantes. ;)
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.
#!/bin/bash
function finish {
# Your cleanup code here
}
trap finish EXIT
Faire exécuter une fonction à la fin d'un script bash, quelque soit son issue.
C'est pratique pour faire le nettoyage nécessaire, en particulier quand on fait du "fail-fast" (https://jeekajoo.eu/links/?DRhD6w).
Je trouve que tous les "basic terminal shorcuts" sont très utiles.
Par exemple, ctrl+U (qui supprime tout ce qui est à gauche du curseur) pour supprimer l'input invisible d'un mot de passe, au lieu de taper frénétiquement sur la touche retour arrière.
Tout ces raccourcis sont valables si vous utilisez bash en mode emacs qui est le mode par défaut. Si vous préférez les raccourcis vi:
$ set -o vi
Pour revenir à emacs:
$ set -o emacs
source: http://ss64.com/bash/syntax-keyboard.html
"""
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
"""
$ curl -s https://www.youtube.com/user/CGPGrey/videos | grep application/rss+xml | awk '{ print $5}' | cut -f 2 -d\"
https://www.youtube.com/feeds/videos.xml?channel_id=UC2C_jShtL725hvbm1arSV9w
"""
Voila. Je vous avais prévenu. Faudrait faire un bookmarklet.. Bronco (http://warriordudimanche.net/vrac/bookrssyoutube.html) t'es où? :D
EDIT: vous ne pouvez récupérer le flux que si l'URL porte le nom de la chaine ou le user_id, mais pas si elle porte le channel_id.
Par exemple https://www.youtube.com/channel/UCGeFgMJfWclTWuPw8Ok5FUQ ne renverra pas l'URL du flux. Notez que dans ce cas le travail est déja maché car un flux est de la forme https://www.youtube.com/feeds/videos.xml?channel_id=CHANNEL_ID. Donc le flux est https://www.youtube.com/feeds/videos.xml?channel_id=UCGeFgMJfWclTWuPw8Ok5FUQ
EDIT2: ou sinon au lieu de passer par un bookmarklet ou ma ligne de cmd, utiliser le bouton flux rss de firefox qui devrait être accessible sur la page d'un utilisateur youtube. https://lut.im/tpjSBnMB/4qVd4bin Recharger la page si le bouton reste grisé.
et j'ajoute:
"""
If you are using zsh, they array is called pipestatus (case matters!) and the array indices start at one:
$ false | true
$ echo "${pipestatus[1]} ${pipestatus[2]}"
1 0
"""
source: http://unix.stackexchange.com/questions/14270/get-exit-status-of-process-thats-piped-to-another
"""
That’s it! $(cat) is a shorthand for $(cat /dev/stdin), so presumably you can use this to read from stderr by pointing it at /dev/stderr.
"""
t'as du faire un truc similaire à ça? https://github.com/hanumanum/RSS-To-Diaspora
;)
sur une debian stable à jour j'ai ça, donc ça va:
Found non-exploitable CVE-2014-6277 (lcamtuf bug #1))
Found non-exploitable CVE-2014-6278 (lcamtuf bug #2))
j'aime bien la fin:
"""
… however, I hope you were not stupid enough to follow the advice of this site (https://shellshocker.net/) which suggests you to download some random file over the ’net and execute it with superuser permissions, unchecked. (I think the Ruby people were the first to spread this extremely insecure, stupid and reprehensible technique.)
"""
yep, un exploit Shellshock est possible via SMTP.
PoC: http://www.exploit-db.com/exploits/34896/
maintenant par rapport à l'exploit que t'as posté (http://190.94.251.41/legend.txt):
- ça cherche à récupérer les droits root
- pour cela ça utilise un canal IRC pour interroger une base de connaissance pour récup le bon exploit suivant la version du kernel.
- via nmap, c'est capable de scanner des plages de port pour voir ce qu'il est possible de DDOSer sur un autre serveur
- au final, c'est pour transformer un serveur en un membre d'un botnet destiné à faire des attaques DDOS.
"""
JavaScript has npm, Ruby has Gems, Python has pip and now Shell has bpkg!
"""
hum oui, pourquoi pas.
while read line; do PARAM=$(echo $line | cut -d, -f1 | cut -d= -f2) && KEY=$(echo $line | awk '{print $NF}') && echo $PARAM $KEY ; done <parameters.conf
Ctrl-u Delete everything ⇤ from the cursor back to the line start
Ctrl-k Delete everything ⇥ from the cursor to the end of the line
Alt-d Delete word ⇨ untill before the next word boundary