====== 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 &