wiki/TipsShell.md

147 lines
3 KiB
Markdown
Raw Normal View History

2016-12-21 19:32:52 +01:00
# Astuces SHell
## Shell -> HTML
2016-12-21 19:33:17 +01:00
~~~
2016-12-21 19:32:52 +01:00
# apt install aha
$ script-foo-colors | aha > output.html
2016-12-21 19:33:17 +01:00
~~~
2016-12-21 19:32:52 +01:00
2017-01-03 09:15:29 +01:00
## Initialisation du shell
2017-01-20 10:33:36 +01:00
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
2017-01-24 11:50:40 +01:00
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
2017-03-14 12:22:58 +01:00
## Changer l'editeur de texte par défaut pour une commande
2017-03-14 12:23:31 +01:00
Normalement le script (vipw, vigr, -ldapvi, ...) se réfère aux fichiers scripts (qui ne sont que des liens vers les binaires) :
2017-03-14 12:22:58 +01:00
~~~{.bash}
/etc/alternatives/
~~~
Sinon en ligne de commande :
~~~{.bash}
$ EDITOR=nano vipw
~~~
2017-03-15 10:51:11 +01:00
## Savoir si lignes en doublon dans un fichier
2017-03-15 15:15:39 +01:00
~~~{.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
2017-03-15 10:35:08 +01:00
~~~{.bash}
$ grep -F -x -v -f <fichier1> <fichier2>
2017-03-15 12:01:56 +01:00
~~~
## 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
2017-03-15 12:04:20 +01:00
[1]- Running sleep 1m && echo ...
[2]+ Running sleep 30 && echo ...
2017-03-15 12:01:56 +01:00
$ fg %2
^Z
2017-03-15 12:04:20 +01:00
[2]+ Stopped sleep 30 && echo ...
2017-03-15 12:01:56 +01:00
$ jobs
2017-03-15 12:04:20 +01:00
[1]- Running sleep 1m && echo ...
[2]+ Stopped sleep 30 && echo ...
2017-03-15 12:01:56 +01:00
$ sleep 30; bg
Premier !
2017-03-15 12:04:20 +01:00
[2]- Done sleep 30 && echo ...
2017-03-15 12:01:56 +01:00
Deuxième !
$ jobs
2017-03-15 12:04:20 +01:00
[1]- Done sleep 1m && echo ...
2017-03-15 12:07:25 +01:00
$ vi foo
^Z
[1]+ Stopped vi foo
$ exit
There are stopped jobs.
$ kill -9 %% #fg :x
$ exit
2017-03-15 12:39:56 +01:00
~~~
## Analyse disque
Quand il s'agit de / - penser à exclure les autres partitions
2017-03-15 12:40:13 +01:00
~~~
2017-03-21 11:51:17 +01:00
# ncdu / --exclude /home --exclude /srv --exclude /var --exclude /tmp --exclude /boot
2017-03-15 12:39:56 +01:00
~~~
Sinon voir du côté de [HowtoDUC](/HowtoDUC).
2017-03-16 11:35:46 +01:00
## Surveiller les ouvertures/écriture des fichiers présent dans un répertoire
2017-03-15 17:41:23 +01:00
~~~{.bash}
$ iwatch <target>
~~~
## Savoir les différents users qui ont écris dans /tmp
~~~{.bash}
2017-03-15 16:17:03 +01:00
$ stat -c %U /tmp/* | sort | uniq -c | sort -n
2017-03-16 10:37:53 +01:00
~~~
## Tester l'écriture disque
Simplement, en écriture (fichier de 5.1GB) :
~~~{.bash}
$ dd if=/dev/zero of=test count=10000000
2017-03-21 11:45:57 +01:00
~~~
## Avoir un rendu des requêtes par IP à partir d'un access.log pendant un laps de temps.
~~~(.bash}
$ date; (timeout 60 tail -f /var/log/apache2/access.log | cut -d' ' -f1) | sort | uniq -c | sort -n
~~~