Outils pour utilisateurs

Outils du site


bash

Bash: memento

Voir aussi exercicesshell

Rechercher et auditer les fichiers suid d'un système

find /bin/ /sbin/ -perm -04000 -exec md5sum {} \; > /root/suid_files.md5

Il suffit en suite de faire un

md5sum --check /root/suid_files.md5

à 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_profile

_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| ]]

tests

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

variantes:

 [ -d "$toto" ] || echo dir $toto doesnt exist

trapping signals

 trap _interrupt INT

éxécute la fonction _interrupt à chaque réception du signal INT

cette fonction doit être définit avant le trap

debugging

add –x to

 !#/bin/sh 

to display /ALL / commands and results

Boucle infinie:

   while : 
   do
   done

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 ):
cp toto.c{,.ORIG}

s'amuser avec ps:

  • depuis quand une commande donnée a été lancée:
ps axwo "start_time cmd"

Supprimer les lignes vides d'un fichier:

sed '/^$/d' fichier

Ajouter une ligne au début d'un fichier:

sed -i '1i plop la foule' fichier

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:

while read ligne; do
  lacommande $ligne
done < fichieralire 

S'amuser avec les redirections et les descripteurs de fichiers:

#! /bin/bash

exec 1> File
exec 2> File


echo stderr >&2
echo stdout

Aller à l'essentiel: supprimer lignes vides et commentaires de l'affichage

grep -vE '^(#|\s|$)' /etc/default/saslauthd

remove trailing slash

start_dir=`echo "${start_dir}" | sed -e "s/\/*$//" `

globbing étendu

sélectionner tous les fichiers dont le nom ne correspond pas au pattern donné

shopt -s extglob
ls -l !(*.sql)

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)