Outils pour utilisateurs

Outils du site


bash

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

bash [2017/01/26 14:58] (Version actuelle)
Ligne 1: Ligne 1:
 +
 + ​===== ​ Bash: memento =====
 +
 +Voir aussi [[:​formation:​exercicesshell]]
 +
 +==== Rechercher et auditer les fichiers suid d'un système ====
 +
 +<​code>​
 +find /bin/ /sbin/ -perm -04000 -exec md5sum {} \; > /​root/​suid_files.md5
 +</​code>​
 +Il suffit en suite de faire un 
 +<​code>​
 +md5sum --check /​root/​suid_files.md5
 +</​code>​
 +à intervalle régulier
 +
 +Il conviendra de faire la même chose avec les fichiers sgid, et de s'​assurer que leur nombre ne change pas
 +
 +==== Boucle sur une liste de fichier avec des noms alakon (tm) ====
 +
 +Et notamment des espaces.
 +
 +Il faut redéfinir IFS avant la boucle:
 +</code
 +SIFS=$IFS
 +IFS=$(echo -ne '​\b\n'​)
 +for file in */*.mp3 ; do
 +   ...
 +done
 +IFS=$SIFS
 +</​code>​
 +
 +==== Completion automatique personnalisée ====
 +
 +L'​idée est de rajouter la completion automatique personnalisée à une commande ou script. À mettre dans son ~/​.[[:​bash|bash]]_profile
 +
 +<​code>​
 +_intervention() {
 +  # clear the COMPREPLY variable
 +  COMPREPLY=()
 +
 +  # get the current argument on the command line
 +  CURRENT_ARG="​${COMP_WORDS[COMP_CWORD]}"​
 +
 +  # la commande qui va être exécutée lorsque l'on "​tab"​ et qui va renvoyer la liste des éléments à auto-compléter
 +  OPTIONS=$(find /​home/​tom/​Documents/​Dokuwiki/​data/​pages/​historique/​2014 -maxdepth 1 -type d | xargs -n 1 basename )
 +
 +  COMPREPLY=($(compgen -W "​${OPTIONS}"​ -- "​${CURRENT_ARG}"​))
 +}
 +
 +
 +# l'​association entre cette fonction et la ou les scripts / commandes
 +complete -F _intervention intervention
 +complete -F _intervention[[:​pmad| ]]
 +complete -F _intervention[[:​formation| ]]
 +</​code>​
 +
 + ​==== ​ tests ====
 +
 +
 +  ​
 +<​code>​
 +if [ "​$plop"​ ]; then echo plop is null ; fi
 +
 +if ( plop ); then echo execution of command "​plop"​ returned 0 ( success ) ; fi
 +
 +if [ -z "​$1"​\] ; then echo 1 is null or is zero length ( ie no args have been given ; fi
 +
 +if [ -f "​test.sh"​ ]; then echo file exist ; fi
 +</​code>​
 +
 +// variantes://​
 +  ​
 +<​code>​
 +
 + [ -d "​$toto"​ ] || echo dir $toto doesnt exist
 +
 +</​code>​
 +
 +
 + ​==== ​ trapping signals ====
 +  ​
 +<​code>​
 +
 + trap _interrupt INT
 +
 +</​code>​
 +
 +éxécute la fonction //​_interrupt//​ à chaque réception du signal **INT**
 +
 +cette fonction doit être définit **avant** le trap
 +
 + ​==== ​ debugging ====
 +
 +add  --x to   
 +<​code>​
 + ​!#/​bin/​sh ​
 +</​code>​
 + to display /ALL / commands and results
 + ​==== ​ Boucle infinie: ====
 +  ​
 +<​code>​
 +
 +   while : 
 +   do
 +   done
 +
 +</​code>​
 +
 +
 + ​==== ​ Some tips ( from [http://​www.debian-administration.org/​articles/​130 debian-admin.org\] ) ====
 +
 +  * faire une copie de sauvegarde d'un fichier (copie avec extension .ORIG ):
 +  ​
 +<​code>​
 +cp toto.c{,​.ORIG}
 +</​code>​
 +
 +
 + ​==== ​ s'​amuser avec ps: ====
 +
 +  * depuis quand une commande donnée a été lancée:
 +  ​
 +<​code>​
 +ps axwo "​start_time cmd"
 +</​code>​
 +
 +
 + ​==== ​ Supprimer les lignes vides d'un fichier: ====
 +  ​
 +<​code>​
 +sed '/​^$/​d'​ fichier
 +</​code>​
 +
 +
 + ​==== ​ Ajouter une ligne au début d'un fichier: ====
 +  ​
 +<​code>​
 +sed -i '1i plop la foule' fichier
 +</​code>​
 +
 +le **1** correspond au numéro de ligne où on veut faire l'​insertion.
 +
 +**i** pour //in place//
 +
 + ​==== ​ Lecture d'un fichier ligne par ligne ====
 +
 +le traditionnel //for i in $(cat fichier)// va lire le fichier **mot** par **mot**.
 +
 +
 +ce bout de code va lire le fichier ligne par ligne: ​
 +  ​
 +<​code>​
 +while read ligne; do
 +  lacommande $ligne
 +done < fichieralire ​
 +</​code>​
 +
 + ==== S'​amuser avec les redirections et les descripteurs de fichiers: ====
 +<​code>​
 +#! /bin/bash
 +
 +exec 1> File
 +exec 2> File
 +
 +
 +echo stderr >&2
 +echo stdout
 +</​code>​
 +
 + ==== Aller à l'​essentiel:​ supprimer lignes vides et commentaires de l'​affichage ====
 +<​code>​
 +grep -vE '​^(#​|\s|$)'​ /​etc/​default/​saslauthd
 +</​code>​
 +
 + ==== remove trailing slash ====
 +
 +<​code>​
 +start_dir=`echo "​${start_dir}"​ | sed -e "​s/​\/​*$//"​ `
 +</​code>​
 +
 + ==== globbing étendu ====
 +
 +sélectionner tous les fichiers dont le nom //ne correspond pas// au //pattern// donné
 +
 +<​code>​
 +shopt -s extglob
 +ls -l !(*.sql)
 +</​code>​
 +
 + ==== Options de configuration intéressantes ====
 +  * extglob
 +  * cdspell - correction syntaxique sur chemin
 +  * dotglob - * inclus les fichiers cachés
 +  * histverify - une commande rappelée de l'​historique n'est pas exécutée directement
 +# vim: set filetype=dokuwiki:​
  
bash.txt · Dernière modification: 2017/01/26 14:58 (modification externe)