IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linux Discussion :

Un script qui renseigne sur les droits


Sujet :

Linux

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2006
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 25
    Points : 19
    Points
    19
    Par défaut Un script qui renseigne sur les droits
    Alors voila...

    je prend par exemple un fichier ici lab.rar et le but de mon bash serai que l'utilisateur puisse lire en français les différents droits de ce fichier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    element="lab.rar"
    droit=`ls -la $element | cut -d " " -f1`
    echo "Droits : "$droit
    pour l'instant ce code donne (avec echo) quelque chose du style: -rwxr-x-r-- par exemple. "il s'agit de la première partie du listing ls -la"

    j'aimerai pouvoir lire 'droit' lettre par lettre et a l'aide d'un if analiser les différents droits.

    le script me retournerai un truc du style:

    $ -rwxr-x-r--
    $ droits utilisateur: lecture ecriture execution
    $ droits groupe: lecture execution
    $ droits autres: lecture

    merci de me répondre et de me donner un coup de main.

  2. #2
    Expert confirmé
    Avatar de Katyucha
    Femme Profil pro
    DevUxSecScrumOps Full Stack Bullshit
    Inscrit en
    Mars 2004
    Messages
    3 287
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Irlande

    Informations professionnelles :
    Activité : DevUxSecScrumOps Full Stack Bullshit

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 287
    Points : 5 075
    Points
    5 075
    Par défaut
    Faut que tu te mettes au ksh alors pour développer ton script et retravailler la chaine de caractère
    http://marcg.developpez.com/ksh est très bien pour t'y aider

  3. #3
    Membre à l'essai
    Inscrit en
    Février 2006
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 25
    Points : 19
    Points
    19
    Par défaut re
    ba en fait c un sujet de tp et je n'est le droit qu'au shell.

    voila.

    merci de me répondre.

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Points : 1 206
    Points
    1 206
    Par défaut
    Citation Envoyé par kenny_badboy
    ba en fait c un sujet de tp et je n'est le droit qu'au shell.
    J'imagine que le but de ton tp est d'apprendre à faire un script en bash. Te donner la solution toute faite n'est pas vraiment t'aider dans ton apprentissage. Sauf si tu essayes de comprendre (ce qui me semble un minumum si tu dois l'expliquer à ton prof.)

    Voici donc, sans commentaires pour t'inviter à chercher et comprendre ce qu'il fait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    element="ton.fichier"
    ls=$(ls -la $element | cut -d " " -f1)
     
    function traducDroits(){
        case $1 in
            ---) droitFr='aucun';;
            --x) droitFr='exécution';;
            -wx) droitFr='écriture exécution';;
            rwx) droitFr='lecture écriture exécution';;
            r--) droitFr='lecture';;
            rw-) droitFr='lecture écriture';;
            r-x) droitFr='lecture exécution';;
            -w-) droitFr='écriture';;
        esac
        echo $droitFr
        return
    }
     
    echo $ls
    echo "Utilisateur:" $(traducDroits ${ls:1:3})
    echo "Groupe     :" $(traducDroits ${ls:4:3})
    echo "Autres     :" $(traducDroits ${ls:7:3})
    Lien pour comprendre:
    http://www.tldp.org/LDP/abs/html/testbranch.html#EX29
    http://www.tldp.org/LDP/abs/html/par...stitution.html

  5. #5
    Expert éminent

    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2004
    Messages
    2 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 756
    Points : 6 686
    Points
    6 686
    Par défaut
    Bonjour,

    ripat: le code que tu as placé ci-dessus fonctionne uniquement avec Bash ? Je pose la question car chez moi, il ne fonctionne pas du tout

    ++

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Points : 1 206
    Points
    1 206
    Par défaut
    Citation Envoyé par Larkine
    Bonjour,

    ripat: le code que tu as placé ci-dessus fonctionne uniquement avec Bash ? Je pose la question car chez moi, il ne fonctionne pas du tout

    ++
    Je ne l'ai testé qu'en bash 2.05b.0(1). Quelle ligne pose problème?

  7. #7
    Expert éminent

    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2004
    Messages
    2 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 756
    Points : 6 686
    Points
    6 686
    Par défaut
    Le script ne fonctionne pas en Bash, il indique une erreur de substitution à la ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "Utilisateur:" $(traducDroits ${ls:1:3})
    ++

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Points : 1 206
    Points
    1 206
    Par défaut
    Que donne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     t='abcde'; echo ${t:1:3}
    Et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo $(t='abcde'; echo ${t:2:3})

  9. #9
    Expert éminent

    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2004
    Messages
    2 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 756
    Points : 6 686
    Points
    6 686
    Par défaut
    Citation Envoyé par ripat
    Que donne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     t='abcde'; echo ${t:1:3}
    Et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo $(t='abcde'; echo ${t:2:3})
    Je viens de tester, bon en bash ça fonctionne

    Il faut que je reteste le code un peu plus haut. Merci de ton aide

    Tout fonctionne, merci

  10. #10
    Expert éminent

    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2004
    Messages
    2 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 756
    Points : 6 686
    Points
    6 686
    Par défaut
    Bonjour,

    Le script de ripat est correct mais il ne fonctionne pas avec tous les shells comme zsh voir sh. Je vous propose un script qui fonctionne avec tous les shells.

    Le script est disponible => showpermfr.

    Il fonctionne pour le moment avec les fichiers du répertoire courant. Il vérifie la présence ou pas du dit fichier et affiche les permissions par catégories à savoir:
    • utilisateur
    • groupe
    • autres

    Le fonctionnement

    Il faut le rendre exécutable:
    Pour l'exécuter:
    on obtient l'affichage suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Saisissez le nom du fichier à analyser: robert
    si pas de fichier appelé robert:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    showpermfr: le fichier robert n'existe pas
    dans le cas contraire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    showpermfr: le fichier robert a été trouvé
    showpermfr: les permissions pour ce fichier sont: -rw-r--r--
    showpermfr: permissions utilisateur: lecture|écriture
    showpermfr: permissions groupe: lecture
    showpermfr: permissions autres: lecture
    Ce script peut être améliorer à tout moment.

    ++

  11. #11
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Points : 1 206
    Points
    1 206
    Par défaut
    Citation Envoyé par Larkine
    Le script de ripat est correct mais il ne fonctionne pas avec tous les shells comme zsh voir sh. Je vous propose un script qui fonctionne avec tous les shells.
    Le script que j'ai posté plus haut est écrit en bash mais peut être appelé de n'importe quel shell pour autant que son shebang invoque le bash (ou, à la rigueur sh - qui pointe souvent vers bash par un lien symbolique d'ailleurs)

    Le lien que tu donnes dans ton post précédent est un également un script bash. Qui peut, lui aussi, tourner depuis n'importe quel shell. Mais c'est du (ba)sh.

    Il faut faire la distinction entre un script écrit dans un langage de shell particulier et celui qui, appellé depuis n'importe quel shell, invoque un autre shell par son shebang.

    Un script csh ou tcsh n'a pas du tout la même syntaxe. La syntaxe ksh est assez proche du bash (quelques différences mineures). Si on tient vraiment à invoquer le shell ksh pour le script que j'ai posté plus haut, il suffit de changer deux lignes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    - #! /bin/sh
    + #! /usr/bin/ksh
     
    - function traducDroits (){
    + function traducDroits {

  12. #12
    Expert confirmé
    Avatar de becket
    Profil pro
    Informaticien multitâches
    Inscrit en
    Février 2005
    Messages
    2 854
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien multitâches
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 2 854
    Points : 5 915
    Points
    5 915
    Par défaut
    ma solution proposé sur lea-linux que je reprend pour faire profiter le plus grand nombre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    #!/bin/bash
     
    check_droit()
    {
    RT=$1
    [ "$RT" != "${RT/r/}" ] && printf "lecture   "
    [ "$RT" != "${RT/w/}" ] && printf "ecriture  "
    [ "$RT" != "${RT/x/}" ] && printf "execution "
    printf "\n"
    }
    droit=$( stat -c '%A' file )
    droit_prop=${droit:1:3}
    droit_groupe=${droit:4:3}
    droit_autre=${droit:7:3}
    printf "droits du  proprietaire : "
    check_droit $droit_prop
    printf "droits du groupe :        "
    check_droit $droit_groupe
    printf  "droits des autres :      "
    check_droit $droit_autre

  13. #13
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Points : 1 206
    Points
    1 206
    Par défaut
    Citation Envoyé par becket
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    check_droit()
    {
    RT=$1
    [ "$RT" != "${RT/r/}" ] && printf "lecture   "
    [ "$RT" != "${RT/w/}" ] && printf "ecriture  "
    [ "$RT" != "${RT/x/}" ] && printf "execution "
    printf "\n"
    }
    Joli!

  14. #14
    Expert éminent

    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2004
    Messages
    2 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 756
    Points : 6 686
    Points
    6 686
    Par défaut
    Je viens de tester de nouveau ton code ripat et je suis désolé de t'annoncer que celui-ci ne fonctionne pas en sh et zsh. Par défaut, sous FreeBSD ou une distribution Linux, bash n'est pas le shell par défaut si tu vois ce que je veux dire. S'il faut passer son temps à modifier les scripts, c'est galère. Ceci dit, il fonctionne donc pas de soucis.

    pour ton script becket

  15. #15
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Points : 1 206
    Points
    1 206
    Par défaut
    Quel shebang lui as-tu mis à mon script?

  16. #16
    Membre à l'essai
    Inscrit en
    Février 2006
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 25
    Points : 19
    Points
    19
    Par défaut merci
    merci a tous pour vos réponses

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 14
    Dernier message: 10/11/2005, 12h14
  2. Question sur les droits utilisateurs??
    Par chaser_T dans le forum Outils
    Réponses: 3
    Dernier message: 01/09/2005, 20h38
  3. Question sur les droits utilisateurs
    Par gibet_b dans le forum Administration système
    Réponses: 5
    Dernier message: 14/06/2005, 16h24
  4. Utilisateurs qui ont tous les droits.
    Par seal3 dans le forum Shell et commandes GNU
    Réponses: 14
    Dernier message: 15/02/2005, 21h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo