====== Shell ======
[[http://guidespratiques.traduc.org/guides/vf/Bash-Beginners-Guide/Bash-Beginners-Guide.html|Guide Bash du débutant]], version française du livre Bash Guide for Beginners par Machtelt Garrels.
[[http://www.commentcamarche.net/faq/4801-guide-d-utilisation-du-shell-pour-debutant|Guide d'utilisation du Shell pour débutant]] sur commentcamarche.net.
**Control Keys**:
* Ctrl-S : Pause Display
* Ctrl-Q : Restart Display
* Ctrl-C : Cancel Operation
* Ctrl-U : Cancel Line
* Ctrl-D : Signal End of File
===== Commandes =====
==== sed ====
* [[https://www.cs.hmc.edu/twiki/bin/view/QREF/Sed|An introduction to sed]]
> [[http://stackoverflow.com/questions/91110/how-to-match-a-single-quote-in-sed|How to match a single quote in sed if the expression is enclosed in single quotes ?]]
>>solution n°1 (encosing with double quote):
>> sed "/L'été/.../"
>>solution n°2 (shell escaping...) :
>> sed '/L\'été/.../'
===== Tips =====
==== Redirection flux standard ====
* https://linuxize.com/post/bash-redirect-stderr-stdout/
* https://linuxconfig.org/introduction-to-bash-shell-redirections
tag: stderr, redirect
Avec linux et windows, pour rediriger la sortie d'erreur standard (stderr = 2) vers la sortie standard (stdout = 1) il faut faire :
cat toto.txt 2<&1
Et pour rediriger tout ça dans un fichier :
cat toto.txt >output.log 2<&1
Ou en utilisant la commande ''tee'', qui fait un "T" vers le fichier et stdout:
cat toto.txt | tee output.log
Un "raccourci" avec ''Bash'' pour rediriger ''stderr'' sur ''stdout'', équivalent de ''2>&1'' :
command &> file
==== Remplacer dans un fichier ====
pour remplacer
PASSWORD('horde')
du fichier fichier_entree par
PASSWORD('newpass')
dans fichier_sortie (pas sûr que ce soit ce que tu veux faire), tu dois mettre dans ton script shell
np='newpass'
sed -e "s/PASSWORD('horde')/PASSWORD('$np')/g" < fichier_entree > fichier_sortie
==== Effacer des fichiers selon leur âge ====
find /tmp/ -amin +120 -type f -delete
find . -daystart -ctime -8 | xargs ls
# puis
find . -daystart -ctime -8 | xargs rm -fr
find -ctime 9 -exec rm -f {} \;
==== Extraire des champs ====
Je voudrais extraire le password de /etc/shadow
On peut faire en 1 seule commande awk
awk -F: '/^user/ {print $2}' /etc/shadow
ou sed, mais c'est pas forcément plus léger (ni plus lisible) que ta solution
sed -ne '/^user/ s/[^:]*:\([^:]*\).*/\1/p' /etc/shadow
ou
cat /etc/shadow | awk -F":" '{print $2}'
==== Session/Script déconnectée ====
> Comment lancer un script et se déconnecter avant la fin de son exécution ?
* Le lancer avec '&' à la fin de la ligne de commande.
* Le lancer avec la commande 'nohup'.
ou les deux ?
# nohup ./script.sh &