Login
blog > farwarx > Quelques commandes UNIX

Quelques commandes UNIX

Posté par : farwarx - Le Vendredi 6 Novembre 2009 à 11:08

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
ls: /NEXISTEPAS: Aucun fichier ou répertoire de ce type

./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"
exit 0

./kookyoo2.sh 1 || echo "Kookyoo"
exit 1
Kookyoo
./kookyoo2.sh 2 || echo "Kookyoo"
exit 2
Kookyoo
./kookyoo2.sh 3 || echo "Kookyoo"
exit 3
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.



Billet sous licence Creative Commons BY-NC-SA 

Maxime T.

Rédacteur chez Kookyoo.net > blog/farwarx

www.teissedre.info







Réalisation

Code & Design : Sébastien Cardona

Page générée en : 0.022779s