Forum Linux.général Problème d’exécution d'un script

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
0
22
déc.
2013

Hello tout le monde,

J'ai récemment installé une version Debian minimal afin d'installer moi même les paquets dont j'ai besoin et par la même occasion en apprendre plus sur Linux.
Avant sa j'avais écrit un code afin de m'entraîner pour générer des codes 4x4 caractères.
Problème: Quand j'essaie de lancer le script sur ma machine Debian, j'ai le message d'erreur "Permission denied" alors que je suis bien root et j'ai donné tout les droits qu'il fallait. J'ai même essayé plusieurs méthodes pour l’exécuter:

./keygen4.sh
sh keygen4.sh
sh ./keygen4.sh

Toujours le même message… Une idée ?

Peace,

Cr4shT3st

  • # Vérifier que le montage ...

    Posté par  . Évalué à 2.

    dispose de l'option exec (pas d'option noexec en resultat de la commande mount)

  • # file type ?

    Posté par  (site web personnel) . Évalué à 1.

    il y a un piège classique : taper un script sous windows et l’exécuter sous linux. Que donne la commande :
    file keygen4.sh

    tu devrais obtenir : keygen4.sh: POSIX shell script, ASCII text executable
    si tu as par contre keygen4.sh: POSIX shell script, ASCII text executable, with CRLF line terminators
    il te faut convertir ton script avec la commande dos2unix

  • # Plus d'infos

    Posté par  (site web personnel) . Évalué à 1. Dernière modification le 23 décembre 2013 à 12:42.

    Guy: Je ne monte rien du tout…

    Pour le type de fichier, j'ai conçu le code sous Linux et file me renvoie: UT-8 Unicode text

    Petite précision: Le code se lance avec "sh keygen4.sh" mais s’arrête à la première boucle en m'affichant "Permission denied"…

    Voici le code:

        #/bin/bash
        count=0
        number=0
        recom=1
        fichier=1
        echo " ----------------"
        echo "| KEY GEN [V2.0] |"
        echo "|                |"
        echo "|  by Cr4shT3st  |"
        echo " ----------------"
        echo  
        echo  
        while (( $recom != 0 )); do
        count=0
        while true; do
        echo "Combien de codes voulez-vous générer ?"
        echo
        read number
        expr $number + 0 1>/dev/null 2>/dev/null; status=$?
        test $status -lt 2 && break
        echo "'$number' n'est pas un nombre. Recommencez"
        echo  
        done
        echo  
        echo "Fichier:1    Console:0"
        echo  
        read fichier
        echo  
        echo  
        while (( $count < $number )); do
        let count=1+$count
        n1=$(tr -dc A-Za-z0-09< /dev/urandom | head -c 4 | xargs)
        n2=$(tr -dc A-Za-z0-09< /dev/urandom | head -c 4 | xargs)
        n3=$(tr -dc A-Za-z0-09< /dev/urandom | head -c 4 | xargs)
        n4=$(tr -dc A-Za-z0-09< /dev/urandom | head -c 4 | xargs)
        if (( $fichier == 0 ))
        then
        echo "$n1-$n2-$n3-$n4"
        else
        echo "$n1-$n2-$n3-$n4" >> KeyList.txt
        echo "$n1-$n2-$n3-$n4"
        fi
        done
        echo 
        if (( $number == 1 )) 
        then
        echo "$number code à été généré avec succès !"
        else
        echo "$number codes ont été générés avec succès !"
        fi
        echo 
        echo "Recommencer:1     Finir:0"
        echo
        while true; do
        read recom
        expr $recom + 0 1>/dev/null 2>/dev/null; status=$?
        test $status -lt 2 && break
        echo "'$recom' n'est pas un nombre. Recommencez"
        echo  
        done 
        echo  
        echo
        done

    Peace,

    Cr4shT3st

    • [^] # Re: Plus d'infos

      Posté par  . Évalué à 2.

      déjà, remplacer #/bin/bash par #!/bin/bash en 1ere ligne.
      pour le mount c'est comme monsieur Jourdain … on en fait sans le savoir.
      que donne la commande 'mount' tapée dans un terminal ?

  • # ...

    Posté par  (site web personnel) . Évalué à 1. Dernière modification le 23 décembre 2013 à 12:43.

    Ho bordel ><' Jsais pas comment j'ai pu supprimer le "!" vu que je l'ai déjà utilisé…
    Merci c'était bien ça et je l'ai aussi déplacé sur mon DD, apparemment il avait du mal sur la clé USB.

    La commande mount me retourne cela:

    sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
    proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
    udev on /dev type devtmpfs (rw,relatime,size=10240k,nr_inodes=239658,mode=755)
    devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
    tmpfs on /run type tmpfs (rw,nosuid,noexec,relatime,size=192916k,mode=755)
    /dev/disk/by-uuid/a59e2e36-9aa0-4c6a-945e-94d12bddb562 on / type ext4 (rw,relatime,errors=remount-ro,user_xattr,barrier=1,data=ordered)
    tmpfs on /run/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k)
    tmpfs on /run/shm type tmpfs (rw,nosuid,nodev,noexec,relatime,size=530000k)
    /dev/sda8 on /home type ext4 (rw,relatime,user_xattr,barrier=1,data=ordered)
    /dev/sdb1 on /media/usb0 type vfat (rw,nosuid,nodev,noexec,relatime,fmask=0022,dmask=0022,codepage=cp437,iocharset=utf8,shortname=mixed,errors=remount-ro)

    Que signifie en gros tout ça ? Ce sont tous les répertoires montés ?

    Peace,

    Cr4shT3st

    • [^] # Re: ...

      Posté par  . Évalué à 3.

      Que signifie en gros tout ça ? Ce sont tous les répertoires montés ?

      ce sont les peripheriques montés ainsi que l'endroit ou ils sont accessibles.

      par exemple :

      le peripherique est /dev/sda8
      il est monté sur /home
      il est de type ext4
      et dispose des options (rw,relatime,user_xattr,barrier=1,data=ordered)

      • [^] # Re: ...

        Posté par  (site web personnel) . Évalué à 4.

        Et le plus intéressant : /dev/sdb1 … noexec
        No Exec qui veut dire …

        Is it a Bird? Is it a Plane?? No, it's Super Poil !!!

        • [^] # Re: ...

          Posté par  (site web personnel) . Évalué à 1.

          Han d'accord je comprends mieux pourquoi il ne s’exécutait pas depuis la clé !

          Merci pour ces précisions,

          Peace,

          Cr4shT3st

  • # .sh et shebang

    Posté par  . Évalué à 1.

    Pour moi, il y a une petite inconsistance. Le nom du fichier de ton script se termine en .sh, ce qui laisse supposer que le shebang de ton script est #!/bin/sh, alors qu'il est en réalité #!/bin/bash. Sous linux, le système utilise le shebang pour déterminer comment il va exécuter un script, donc le .sh est superflu, et dans ton cas, il peut porter à confusion.

    Il faut aussi voir que bash et sh n'ont pas la même syntaxe. Par exemple, sh ne comprend ni "if [[…]]", ni les variables tableaux. Avec Debian, c'est pas grave car sh est un lien symbolique sur dash, lequel est compatible avec sh, mais dans de nombreuses autres distributions, sh est un lien symbolique vers bash. Avec ces dernières distributions, un script sh avec une syntaxe bash fonctionnera, mais le jour où tu le mettra sous Debian, il ne marchera pas.

    Aux agents des services secrets qui lisez ce message, veuillez considérer que défendre votre nation contre ces ennemis interieurs et extérieurs implique de suivre l'exemple de Snowden.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.