Quelques commandes UNIX
En attendant mes prochains articles, dès que j'aurais un peu de temps, étant donné que je bosse les commandes Unix en ce moment, voici un petit aperçu de ce que j'apprend... pour qui voudra...
Pour commencer, les MAN dispo en fr ici: jp.barralis.com/linux-man
TR : transposer ou éliminer des caractères
J'avais une question sur cette commande là et je devais transformer les CR-LF en LF.
Très bien, mais c'est quoi CR et LF? Après une petite recherche ici et ici.
Ce sont en fait des retours à la ligne!!!!
CF: Carriage Return / Retour chariot & LF: Line Feed / Saut de ligne
Windows utilise CRLF pour ces retours à la ligne, il utilise en fait 2 caractères le retour chariot et le saut de ligne à la suite soit le .
Linux utilise LF, le saut de ligne soit le .
Et là, je me suis dit, voilà pourquoi j'utilise régulièrement l'utilitaire dos2unix ;)
Bref, je dois le faire avec TR alors soit! Transformons le CRLF en LF (il suffit de virer le retour chariot (CR), .
tr -d ' ' FICHIER
Sorties standards et erreurs
Encore des recherches, car ce sont des choses basiques mais qu"un petit nouveau dans le monde Linux (<10ans) ne maitrise pas forcément ou n'en a pas besoin tous les jours): ici.
Alors après aussi quelques forums etc... pour approfondir la question, voici une explication.
Quand on lance un programme en console sous Linux, par défaut il affiche tout dans la console (sortie standard et erreur). Soit, mais ça signifie quoi?
La sortie standard et la sortie standard du programme, ce qu'il doit afficher s'il fonctionne correctement, elle est symbolisé par le 1, où la première sortie.
Les erreurs arrivent en suivant avec le 2, seconde sortie.
Donc, si on ne veut afficher que les erreurs d'un programme, il suffit de rediriger la sortie standard dans le vide (/dev/null) .
On récapitule, pour tester en live, vous faîtes un script shell:
#!/bin/bash ls . ls /NEXISTEPAS |
En l'exécutant, vous aurez la sortie du premier ls qui est correct et une erreur sur le second.
./kookyoo.sh |
./kookyoo.sh 1> /dev/null ls: /NEXISTEPAS: Aucun fichier ou répertoire de ce type |
./kookyoo.sh > /dev/null ls: /NEXISTEPAS: Aucun fichier ou répertoire de ce type |
./kookyoo.sh 2> /dev/null kookyoo.sh |
./kookyoo.sh > /dev/null 2>&1 |
./kookyoo.sh 1> 1 2> 2 more 1 1 2 kookyoo.sh more 2 ls: /NEXISTEPAS: Aucun fichier ou répertoire de ce type |
J'espère qu'avec ces quelques exemples, vous aurez tout compris ;)
Petite explication sur le '2>&1', on redirige la sortie 2 vers la sortie 1. Attention à la position du &, avant le 1, il fait ce qu'on lui demande, après, la sortie 2 est redirigée vers le fichier nommé 1 et met la tâche en background.
Moi oui ^^, et cela fonctionne pour n'importe quelles sorties, par défaut il y a la 1 et 2 (standard et erreur), mais vous êtes libre d'en avoir d'autres dans vos programmes et les redirigées où vous voulez!
Double pipe et double Et commercial
Alors maintenant on me demande la différence en le || et le &&... charmant!!
Je sais que ça avori avec le exit et sa valeur.
Petit script de test:
#!/bin/bash case $1 in 0) echo "exit 0" exit 0; ;; 1) echo "exit 1" exit 1; ;; 2) echo "exit 2" exit 2; ;; 3) echo "exit 3" exit 3; ;; *) echo "exit 0" exit 0; ;; esac |
Maintenant on va effectuer quelques tests pour comprendre.
./kookyoo2.sh 0 || echo "Kookyoo" ./kookyoo2.sh 1 || echo "Kookyoo" |
./kookyoo2.sh 0 && echo "Kookyoo" exit 0 Kookyoo ./kookyoo2.sh 1 && echo "Kookyoo" exit 1 ./kookyoo2.sh 2 && echo "Kookyoo" exit 2 ./kookyoo2.sh 3 && echo "Kookyoo" exit 3 |
On peut en déduire que les || ne répond pas quant le programme se termine correctement (exit 0).
Et le && ne répond que lorsque le programme se termine correctement.
Donc || = si OK, on continue, && = si NOK, on continue.
LN : Créer des liens entre fichiers
Petit rappel pour tout le monde!!!
Créer un lien symbolique: ln -s SRC DST
CHATTR et LSATTR
Voilà des commandes que je ne connaissais pas et qui sont fort interessantes!!!
Recherche et premier résultat utile: lifolife.blogspot.com/2009/03/utilisation-de-lsattr-et-chattr.html
Et comme d'hab: ici.
La question était de rendre un fichier impossible à effacer, renommer, modifier ou même crér un lien symbolique!!!
#lsattr 1 ------------- 1 # ll 1 -rw-r--r-- 1 teissedm f06 15 nov 6 09:28 1 # chattr +i 1 # ll 1 -rw-r--r-- 1 teissedm f06 15 nov 6 09:28 1 # lsattr 1 ----i-------- 1 # rm 1 rm: détruire un fichier protégé en écriture fichier régulier `1'? y rm: ne peut enlever `1': Opération non permise |
Même root ne peut pas l'effacer ^^, mais il peut enlever l'attribut et l'effacer après.
Bref, après quelques lectures (dont celle la), il est interessant d'user intelligement des attributs.
L'attribut 'a' permet de n'autoriser que l'ajout de donner en fin de fichier, utile pour les logs n'est-ce pas? Surtout pour ne pas être embetter pas un vilain script kidies! (un pirate enleverra l'attribut).
Pour les sauvegardes, les archives, l'attribut 'i' permet de les rendre immuable, très utile!!!
Je vous laisse faire un man ;)
A la prochaine oO.
Maxime T.
Rédacteur chez Kookyoo.net > blog/farwarx
Billets similaires | Tagscommandes commands unix linux tr sorties standard erreur dev null ln chattr lsattr droits |