Shell Bases: i/o find et filtres
intro
ex: sort < file_list.txt > sorted_file_list.txt
sort trie le contenu de file_list.txt, et envoie le résultat non à l'écran mais dans sorted_file_list.txt
>> ajoute au fichier sans l'écraser (comme dos)
Plus à http://damien.pobel.fr/post/etre-a-l-aise-avec-bash-4#io
ex simples et utiles des pipe |
ls -l | less ls -lt | head |
avec le pipe, le résultat du ls est envoyé au less (avec scroll) ls -t trie par date, les new en 1er alors |
du | sort -nr |
du est long :) sort -n tri numérique, r reverse, -o nom fichier output |
find . -type f -print | wc -l |
donne le nb de fichiers ds le dossier courrant + de ses sous-dossiers car
|
voir plus à find [chemin...] [expression] + locate, slocate (avec index, et sans regarder proprio et perm, qui ne sont pas enregistré ds cet index) et qu'on maj par updatedb
filtres
ex: sort unique grep head tail tr (translate) et mieux que tr: sed awk (pour construire filtres)...
i/o - partie 2 (sortie des erreurs)
Lorsqu’un shell est lancé en mode interactif (ie le shell attend qu‘on lui tape des commandes typiquement dans un terminal), l’entrée standard est le clavier et la sortie standard et la sortie d‘erreur sont reliées au terminal. Par défaut, lorsque le shell lance une commande, cette commande hérite (entre autre) des entrées/sorties standards du shell parent.
find envoie des données sur sortie standard et sortie d'erreur.
find ~root -type d | Sans sudo, génère des erreurs "perm non accordées" et le résultat. -type d pour répertoires/directory |
find ~root -type d > sortie_std |
redirection vers fichier (cat sortie_std), mais on a toujours les erreurs dans la console courrante |
|
on voit s'afficher le résultat sans erreurs, faire cat sortie_erreur pour voir ces erreurs. 2>> ajoutera la sortie d'erreur à la fin du fichier |
find ~root -type d > sortie_1_et_2 2>&1
unprogramme > sortie-erreur 2>&1 |
Rediriger la sortie d'erreur et la sortie standard sur la sortie standard, en redirigeant les données écrites sur le descripteur 2 sur le descripteur 1 |
sortie standard
Il est possible d‘enchainer les commandes en redirigeant les sorties d’une commande sur l‘entrée standard à l’aide du pipe (| ou tube).
find ~root -type d 2>&1 | grep rep | n‘avoir que les messages concernant les dossier de rep à la suite de find (sorties standard et d‘erreur de find sont redirigés sur la sortie standard qui est elle même redirigées sur l’entrée standard de grep) |
|
équivalente à ces 2 lignes |
cat access.log | egrep -v '(/var|/design|/share|/stats| 404 )' | cut -d ' ' -f 7 | sort | uniq | wc -l |
lit le fichier de log d‘apache access.log et permet de compter le nombre de pages différentes vues maintenant egrep -v (pour --invert-match) sélectionne les lignes ne correspondant pas au motif cut -d --delimiter séparateur |
Autre bel exemple (avec les logs).