Ecriture d 'un scrip shell

melissa777 -  
melissa777 Messages postés 16 Date d'inscription   Statut Membre -
Bonjour,Merci de m'aider pour realiser ce trvail, vraiment je trouve ça c'est difficile j ai essayer et jusqu'a mnt j'arrive pas.

mon probleme consiste à réaliser un ensemble client-serveur permettant la “suveillance”
des personnes connectées sur une machine. Pour cela, nous allons procéder en
plusieurs étapes:
1. Tout d’abord, on vous demande de réaliser un petit script qui écoute sur
l’entrée standard en l’attente de commande et renvoie la réponse sur la
sortie standard.
On demande d’implémenter les commandes suivantes :
NAME : indique le nom de la machine;
UPTIME : affiche depuis combien de temps la machine est en marche;
USERS : affiche le nom des utilisateurs connectés à la machine;
QUIT : termine le script
2. En utilisant votre script écrit précédement et à l’aide de la commande
netcat, faites en sorte que votre script soit lancé en tant que serveur sur
la machine (on regardera en particulier l’option -c) et qu’il soit relancé
lorsqu’une connection se termine.
3. Écrivez alors un client qui prend en entrée une liste de machine et affiche
les utilisateurs présents sur ces machines en contactant les serveurs sur ces
machines.
Configuration: linux 
Firefox 3.5.6

8 réponses

  1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    0
    1. melissa777 Messages postés 16 Date d'inscription   Statut Membre
       
      bonjour
      je ne demande pas une sollution complete;mais au moins les grandes lignes de comment commencer;
      j'ai essayer mais j'ai pas arrivé
      0
      1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898 > melissa777 Messages postés 16 Date d'inscription   Statut Membre
         
        j'ai essayer mais j'ai pas arrivé
        Ben justement t'as essayé quoi ?

        Ne serait-ce que ça, nous indiquera que tu as au moins essayé...
        0
      2. melissa777 Messages postés 16 Date d'inscription   Statut Membre > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
         
        j'ai essayer de faire une lecture et comprendre : que lors de l'execution d'une commande un processus est crée, celui ci va alors ouvrir 03 flux:
        1.l'entrée standard dans lequel le processus va lire des données entrées par defaut qui est idetifié par 0 qui est le clavier.
        2. la sortie standard numero 1et qui reprsente l'ecranr
        3.la sortie standard d'erreur qui est 2
        j'ai lu aussi comment redirgier les resultats c'est avec >1
        aussi j ai compri que les users sont entregistrés dans /etc/passwrd

        mais comment ecouter quel port utiliser quel protocol j arrive pas a comprendre
        0
      3. melissa777 Messages postés 16 Date d'inscription   Statut Membre > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
         
        bsr,*est ce que vous pouvez me guider pour trouver une sollution?
        0
      4. melissa777 Messages postés 16 Date d'inscription   Statut Membre > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
         
        je suis nouvelle ds la programmation shell c est mon premier essai pour lecoute sur lentrée standard en attente d'une commande et l envoi sur la sortie standar

        #!/bin/sh
        #monpremieressai
        echo "j'ecoute sur l'entrée standard"
        cat << | 1>
        0
  2. melissa777 Messages postés 16 Date d'inscription   Statut Membre
     
    y a t'il quelq'un qui m aide?
    0
  3. lami20j
     
    Salut,

    Par exemple
    $ cat attente_stdin.sh 
    #!/bin/bash
    
    echo -n "echo j'ecoute sur l'entrée standard (il faut entrer une commande) : "
    read commande
    eval $commande
    $ ./attente_stdin.sh 
    echo j'ecoute sur l'entrée standard (il faut entrer une commande) : ls
    attente_stdin.sh  choix.sh  division.sh
    $ ./attente_stdin.sh 
    echo j'ecoute sur l'entrée standard (il faut entrer une commande) : ls -l
    total 12
    -rwxr-xr-x 1 lami20j lami20j 122 déc.  27 11:50 attente_stdin.sh
    -rw-r--r-- 1 lami20j lami20j 466 déc.  26 17:07 choix.sh
    -rwxr-xr-x 1 lami20j lami20j 168 déc.  26 17:24 division.sh
    $ 
    0
    1. melissa777 Messages postés 16 Date d'inscription   Statut Membre
       
      merci pour vos reponses
      est ce que read commande me permet uniquement de lire une commande c est a dire le fait d'crire commande le compilateur comprend que c est une commande?
      pourqoui vous avez utilisez eval $commande?
      et pourquoi $../attente_stdin.sh?
      merci encore uen fois pour m eclaircir
      0
  4. lami20j
     
    Salut,

    mais comment ecouter quel port utiliser quel protocol j arrive pas a comprendre
    Dans le fichier /etc/services tu trouveras les services et le port attribué.

    Par exemple si tu mets en place un serveur web le port 80 sera à l'écoute pour http et 443 pour https.
    Dans la configuration de serveur tu peux par exemple changer le port d'écoute.

    Par exemple sur mon serveur local j'ai mis 81
    La commande netstat me permet de voir ça.
    lami20j@debian:~$ su -c 'netstat -lpn | grep ":81\>"'
    Mot de passe : 
    tcp6       0      0 :::81                   :::*                    LISTEN      2944/apache2   


    Voici un lien sympa http://christian.caleca.free.fr/
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. lami20j
     
    Salut,

    J'ai pense pouvoir t'aider sur un problème ponctuel, mais je vois que tu as besoin d'un vrai cours, et je ne plaisante pas.

    est ce que read commande me permet uniquement de lire une commande c est a dire le fait d'crire commande

    read permet de lire une chaîne au clavier (ça c'est

    le compilateur comprend que c est une commande?
    Il s'agit d'un langage interprété et pas compilé

    pourqoui vous avez utilisez eval $commande?
    eval a permis d'évaluer la chaîne saisie comme une commande et pas comme une simple chaîne de caractère.

    Sans eval j'aurai écrit echo $commande et en ce moment c'est la chaîne que j'ai saisi qu'aurait été affichée.

    et pourquoi $../attente_stdin.sh?
    Lis cette article exécuter un script shell
    0
    1. melissa777 Messages postés 16 Date d'inscription   Statut Membre
       
      bonsoir;
      Merci pour les explication
      j'ai lu l'article et j'ai compris que
      ./attente_stdin.sh c'est la façon de lancer l'execution d'un script; et meme pour eval j'ai lu et j'ai compri pourqoui il faut faire eval $commande;
      mais reste le probleme d'où vient ce fichier attente_stdin.sh ? est ce que c'est a moi de l'ecrire et le lancer pour l'ecoute et je lui donne comme nom attente_stdin.sh

      #!/bin/sh
      #fichier d' ecoute d'une commande
      read commande
      eval $commande

      et si oui comment je peux renvoer la reponse sur la sortie standard? est ce que uniquement j'ajoutte la redirection de la commande comme suit:
      eval $commande >1

      merci et je m'exuse pour ce derangement reptitif car je suis totalemnt nouvelle ds ce domaine
      0
  7. lami20j
     
    Salut,

    mais reste le probleme d'où vient ce fichier attente_stdin.sh ? est ce que c'est a moi de l'ecrire et le lancer pour l'ecoute et je lui donne comme nom attente_stdin.sh

    Oui, bien sûr que c'est à toi de l'écrire et tu peux lui donner n'importe quel nom.
    D'après toi chez moi comment il est arrivé? ;-)) Je l'ai écrit tout simplement.

    Pour ça tu dois utiliser un éditeur de texte sans mise en forme (kate,gedit, kwrite,nano,vi,emacs, scite, etc.)

    comment je peux renvoer la reponse sur la sortie standard? est ce que uniquement j'ajoutte la redirection de la commande comme suit:
    eval $commande >1

    Non, la sortie standard STDOUT c'est l'écran donc c'est par défaut il n'y a pas de redirection à faire si tu ne veux pas écrire autre part.
    En revanche si la sortie standard tu veux l'écrire dans un autre fichier alors tu dois utiliser les redirections

    Par exemple j'ai ouvert deux terminaux (la commande tty te donne le nom du fichier du terminal)
    /dev/pts/0 et /dev/pts/1

    Sur /dev/pts/0 je fait
    lami20j@debian:~$ tty
    /dev/pts/0
    lami20j@debian:~$ echo salut ici vers sortie standard
    salut ici vers sortie standard
    lami20j@debian:~$ echo salut vers /dev/pts/1 > /dev/pts/1
    lami20j@debian:~$ echo salut vers fichier salut.txt > salut.txt 
    lami20j@debian:~$ cat salut.txt 
    salut vers fichier salut.txt
    


    Sur /dev/pts/1 je vois
    lami20j@debian:~$ tty
    /dev/pts/1
    lami20j@debian:~$ salut vers /dev/pts/1
    

    Lit man bash le chapitre REDIRECTIONS
    0
    1. melissa777 Messages postés 16 Date d'inscription   Statut Membre
       
      Bonjour ;
      j'i lu les redirections ; merci pour votre orientation
      est ce que ce code est suffisant pour repondre à ma demande qui est "un petit script qui écoute sur
      l’entrée standard en l’attente de commande et renvoie la réponse sur la
      sortie standard."

      le code est le suivant :
      #!/bin/sh
      #"j'ecoute sur l'entrée standard en attente d'une commande "
      read commande
      eval $commande


      et si il est suffisant est ce que vous pouvez m'orienter comment implementer les commandes suivantes

      NAME : indique le nom de la machine;
      UPTIME : affiche depuis combien de temps la machine est en marche;
      USERS : affiche le nom des utilisateurs connectés à la machine;

      à noter que j'ai doccumenter sur linux et j'ai lu que
      le repertoire /etc contient les fichier de configuration (fichiers passwrd group initab.....) mais j'arrive pas à exploiter ces informations pour arriver a implementer les commandes citées.

      merci pour m'accorder de votre temps...
      0
  8. lami20j
     
    Salut,

    Voir dans les pages man pour les commandes
    uptime
    hostname
    w
    who


    en l’attente de commande et renvoie la réponse sur la
    sortie standard."

    Si tu ne veux pas exécuter la commande mais juste l'affichée alors mets
    echo $commande au lieu de eval $commande
    0
    1. melissa777 Messages postés 16 Date d'inscription   Statut Membre
       
      merci pour l'orientation

      pour la command who
      j'ai deja fait ça

      #!/bin/sh
      echo "who |wc -l>utilistaursactuels.sh
      j'ai enregistré le fichier sous le nom utilsateursactuels.sh

      aprés j ai fait chmod +a +x utilisateursactuels.sh pour le rendre comme une commande du shell

      et quand j'excecute ./utilisteursactuels normalement ça marche mais j'ai pas l'envirinement linux pour essayer ce scrip

      pour les autres je vais essayer et si tu as plus d'orientatiosn merci.
      0
  9. melissa777 Messages postés 16 Date d'inscription   Statut Membre
     
    Bonjour
    est ce que la sollution cest ce que j ai ecris en dessous?
    Merci
    0