diff --git a/TipsShell.md b/TipsShell.md index 351d9e51..fc2d802d 100644 --- a/TipsShell.md +++ b/TipsShell.md @@ -1,21 +1,16 @@ # Astuces SHell -## Shell -> HTML - -~~~ -# apt install aha -$ script-foo-colors | aha > output.html -~~~ - -## Initialisation du shell - -Entre les 3 modes ("login", "interactive non-login" et "non-interactive non-login") il y a de quoi se perdre à propos des fichiers chargés. Voici un rappel assez complet : - -## Script shell +## Script Style guide : -## History Bash +## Configuration + +### Initialisation du shell + +Entre les 3 modes ("login", "interactive non-login" et "non-interactive non-login") il y a de quoi se perdre à propos des fichiers chargés. Voici un rappel assez complet : + +### History Bash `bashrc` : @@ -27,7 +22,7 @@ export HISTTIMEFORMAT="%c : " > *Note* : si besoin on peut `chattr +a /root/.bash_history` pour empêcher sa suppression -## Changer l'editeur de texte par défaut pour une commande +### Changer l'éditeur de texte par défaut pour une commande Normalement le script (vipw, vigr, -ldapvi, ...) se réfère aux fichiers scripts (qui ne sont que des liens vers les binaires) : @@ -41,25 +36,9 @@ Sinon en ligne de commande : $ EDITOR=nano vipw ~~~ -## Savoir si lignes en doublon dans un fichier +## Manipulations -~~~{.bash} -$ uniq -d -~~~ - -ou autrement (appliquer un filtre différent) : - -~~~{.bash} -$ diff <(cat | uniq) -~~~ - -## Comparer deux fichiers quant à l'existence de nouvelles lignes - -~~~{.bash} -$ grep -F -x -v -f -~~~ - -## Tâches de fond +### Tâches de fond ~~~{.bash} $ bg = "mettre en arrière plan" @@ -110,9 +89,29 @@ $ kill -9 %% #fg :x $ exit ~~~ -## Analyse disque +## Fichiers et FS -Quand il s'agit de / - penser à exclure les autres partitions +### Savoir si lignes en doublon dans un fichier + +~~~{.bash} +$ uniq -d +~~~ + +ou autrement (appliquer un filtre différent) : + +~~~{.bash} +$ diff <(cat | uniq) +~~~ + +### Comparer deux fichiers quant à l'existence de nouvelles lignes + +~~~{.bash} +$ grep -F -x -v -f +~~~ + +### Analyse disque + +Quand il s'agit de / - penser à exclure les autres partitions (si existante de toute évidence) : ~~~ # ncdu / --exclude /home --exclude /srv --exclude /var --exclude /tmp --exclude /boot @@ -120,19 +119,19 @@ Quand il s'agit de / - penser à exclure les autres partitions Sinon voir du côté de [HowtoDUC](/HowtoDUC). -## Surveiller les ouvertures/écriture des fichiers présent dans un répertoire +### Surveiller les ouvertures/écriture des fichiers présent dans un répertoire ~~~{.bash} $ iwatch ~~~ -## Savoir les différents users qui ont écris dans /tmp +### Savoir les différents users qui ont écris dans /tmp ~~~{.bash} $ stat -c %U /tmp/* | sort | uniq -c | sort -n ~~~ -## Tester l'écriture disque +### Tester l'écriture disque Simplement, en écriture (fichier de 5.1GB) : @@ -140,7 +139,31 @@ Simplement, en écriture (fichier de 5.1GB) : $ dd if=/dev/zero of=test count=10000000 ~~~ -## Avoir un rendu des requêtes par IP à partir d'un access.log +### Lister les répertoires ayant le plus de fichiers <=> max inode + +~~~{.bash} +PATH_TO_WATCH='/var' +RESULT_FILE='list_max_inode.txt' +TMP=$(mktemp) +#Regarder dans le premier niveau +(for i in $(find $PATH_TO_WATCH -type d); do echo $(ls -a $i | wc -l) $i; done) | sort -n > $TMP +#compter dans les sous niveaux +cat $TMP | (while read line; do num=$(echo $line | awk '{ print $1 }'); path=$(echo $line | awk '{ print $2 }'); echo ${path%/*}; done) | sort | uniq | (while read line; do echo $(grep "$line" $TMP | cut -f1 -d' ' | xargs echo -n | tr -s ' ' '+' | xargs echo | bc -l) $line; done) | sort -n | tee $RESULT_FILE +rm $TMP +~~~ + +### Supprimer des vieux fichiers + + - Par exemple, si + vieux de 30 jours en modification : + +~~~{.bash} +$ find DIR/ -type f -mtime +30 -delete +$ find DIR/ -type f -mtime +30 -exec rm '{}' \; +~~~ + +## Serveur web + +### Avoir un rendu des requêtes par IP à partir d'un access.log Avoir un compte rendu pour un laps de temps : @@ -163,7 +186,9 @@ Ou regarder les IPs en direct : eval "awk '\$1 > $SEUIL {printf \"\\033[1;31m\" \$1 \" \" \$2 \"\\033[0m \\n\"; next;};{printf \$1 \" \" \$2 \"\\n\";}'" ~~~ -## Un processus par rapport à une socket/port +## Process + +### Un processus par rapport à une socket/port - Connaître les sockets ouvertes et ports en écoutent par un processus : @@ -176,26 +201,3 @@ $ lsof -Pan -p PID -i ~~~{.bash} $ lsof -i :Port ~~~ - -## Lister les répertoires ayant le plus de fichiers <=> max inode - - -~~~{.bash} -PATH_TO_WATCH='/var' -RESULT_FILE='list_max_inode.txt' -TMP=$(mktemp) -#Regarder dans le premier niveau -(for i in $(find $PATH_TO_WATCH -type d); do echo $(ls -a $i | wc -l) $i; done) | sort -n > $TMP -#compter dans les sous niveaux -cat $TMP | (while read line; do num=$(echo $line | awk '{ print $1 }'); path=$(echo $line | awk '{ print $2 }'); echo ${path%/*}; done) | sort | uniq | (while read line; do echo $(grep "$line" $TMP | cut -f1 -d' ' | xargs echo -n | tr -s ' ' '+' | xargs echo | bc -l) $line; done) | sort -n | tee $RESULT_FILE -rm $TMP -~~~ - -## Supprimer des vieux fichiers - - - + vieux de 30 jours en modification : - -~~~{.bash} -$ find DIR/ -type f -mtime +30 -delete -$ find DIR/ -type f -mtime +30 -exec rm '{}' \; -~~~