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

  • wc affiche le nombre d'octets, de mots et de lignes d'un fichier (du fichier précisé ou input standard), avec -l que les lignes
  • find -type f  -> fichier régulier, d répertoire, l lien symbolique

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

voir aussi http://fr.openclassrooms.com/informatique/cours/reprenez-le-controle-a-l-aide-de-linux/les-flux-de-redirection#ss_part_4

 

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.

unprogramme > sortie.txt 2> erreur.txt
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
find ~root -type d 2> sortie_erreur

 

on voit s'afficher le résultat sans erreurs, faire cat sortie_erreur pour voir ces erreurs.
utilise le fichier spécial /dev/null l'absorbeur de données

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
ou unprogramme >& sortie-erreur

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)
find ~root -type d > sortie_1_et_2 2>&1
grep rep < sortie_1_et_2 
é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).