178 lines
3.7 KiB
Markdown
178 lines
3.7 KiB
Markdown
# 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 : <https://github.com/rbenv/rbenv/wiki/Unix-shell-initialization>
|
|
|
|
## Script shell
|
|
|
|
Style guide : <https://google.github.io/styleguide/shell.xml>
|
|
|
|
## History Bash
|
|
|
|
`bashrc` :
|
|
|
|
~~~
|
|
export HISTCONTROL=$HISTCONTROL${HISTCONTROL+,}ignoreboth
|
|
export HISTSIZE=65535
|
|
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
|
|
|
|
Normalement le script (vipw, vigr, -ldapvi, ...) se réfère aux fichiers scripts (qui ne sont que des liens vers les binaires) :
|
|
|
|
~~~{.bash}
|
|
/etc/alternatives/
|
|
~~~
|
|
|
|
Sinon en ligne de commande :
|
|
|
|
~~~{.bash}
|
|
$ EDITOR=nano vipw
|
|
~~~
|
|
|
|
## Savoir si lignes en doublon dans un fichier
|
|
|
|
~~~{.bash}
|
|
$ uniq -d <fichier>
|
|
~~~
|
|
|
|
ou autrement (appliquer un filtre différent) :
|
|
|
|
~~~{.bash}
|
|
$ diff <fichier> <(cat <fichier> | uniq)
|
|
~~~
|
|
|
|
## Comparer deux fichiers quant à l'existence de nouvelles lignes
|
|
|
|
~~~{.bash}
|
|
$ grep -F -x -v -f <fichier1> <fichier2>
|
|
~~~
|
|
|
|
## Tâches de fond
|
|
|
|
~~~{.bash}
|
|
$ bg = "mettre en arrière plan"
|
|
$ fg = "mettre en premier plan"
|
|
$ jobs = "lister les tâches de fond"
|
|
%% = "dernier job utilisé (représenté par un +)"
|
|
%x = "job numéro x"
|
|
~~~
|
|
|
|
~~~{.bash}
|
|
$ vi foo
|
|
^Z
|
|
[1]+ Stopped vi foo
|
|
$ tail -f bar
|
|
...
|
|
^C
|
|
$ fg
|
|
^Z
|
|
[1]+ Stopped vi foo
|
|
$ kill -9 %%
|
|
|
|
[1]+ Killed vi foo
|
|
$ ( sleep 1m; echo "Premier !" ) &
|
|
[1] 13649
|
|
$ ( sleep 30; echo "Deuxième !" ) &
|
|
[2] 13651
|
|
$ jobs
|
|
[1]- Running sleep 1m && echo ...
|
|
[2]+ Running sleep 30 && echo ...
|
|
$ fg %2
|
|
^Z
|
|
[2]+ Stopped sleep 30 && echo ...
|
|
$ jobs
|
|
[1]- Running sleep 1m && echo ...
|
|
[2]+ Stopped sleep 30 && echo ...
|
|
$ sleep 30; bg
|
|
Premier !
|
|
[2]- Done sleep 30 && echo ...
|
|
Deuxième !
|
|
$ jobs
|
|
[1]- Done sleep 1m && echo ...
|
|
$ vi foo
|
|
^Z
|
|
[1]+ Stopped vi foo
|
|
$ exit
|
|
There are stopped jobs.
|
|
$ kill -9 %% #fg :x
|
|
$ exit
|
|
~~~
|
|
|
|
## Analyse disque
|
|
|
|
Quand il s'agit de / - penser à exclure les autres partitions
|
|
|
|
~~~
|
|
# ncdu / --exclude /home --exclude /srv --exclude /var --exclude /tmp --exclude /boot
|
|
~~~
|
|
|
|
Sinon voir du côté de [HowtoDUC](/HowtoDUC).
|
|
|
|
## Surveiller les ouvertures/écriture des fichiers présent dans un répertoire
|
|
|
|
~~~{.bash}
|
|
$ iwatch <target>
|
|
~~~
|
|
|
|
## Savoir les différents users qui ont écris dans /tmp
|
|
|
|
~~~{.bash}
|
|
$ stat -c %U /tmp/* | sort | uniq -c | sort -n
|
|
~~~
|
|
|
|
## Tester l'écriture disque
|
|
|
|
Simplement, en écriture (fichier de 5.1GB) :
|
|
|
|
~~~{.bash}
|
|
$ dd if=/dev/zero of=test count=10000000
|
|
~~~
|
|
|
|
## Avoir un rendu des requêtes par IP à partir d'un access.log
|
|
|
|
Avoir un compte rendu pour un laps de temps :
|
|
|
|
~~~
|
|
# date; (timeout 60 tail -f /var/log/apache2/access.log | cut -d' ' -f1) | sort | uniq -c | sort -n
|
|
~~~
|
|
|
|
Ou regarder les IPs en direct :
|
|
|
|
- Version simple :
|
|
|
|
~~~
|
|
# tail -f /var/log/apache2/access.log | stdbuf -oL cut -d ' ' -f1 | uniq -c
|
|
~~~
|
|
|
|
- Version couleur :
|
|
|
|
~~~
|
|
# SEUIL=5; tail -f /var/log/apache2/access.log | stdbuf -oL cut -d ' ' -f1 | stdbuf -oL uniq -c | \
|
|
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
|
|
|
|
- Connaître les sockets ouvertes et ports en écoutent par un processus :
|
|
|
|
~~~{.bash}
|
|
$ lsof -Pan -p PID -i
|
|
~~~
|
|
|
|
- Connaître le pid qui écoute sur un port (2ème colonne) :
|
|
|
|
~~~{.bash}
|
|
$ lsof -i :Port
|
|
~~~ |