OVH Cloud OVH Cloud

test de script permission denied

26 réponses
Avatar
yvon.thoravalNO-SPAM
je rencontre un "permission denied" que je ne comprends pas sur un
script groovy basic :

~/work/groovy/essais> ls -al
[...]
-rwxr-xr-x 1 yvon yvon 138 5 Dec 09:34 helloWorld.groovy

la première ligne de mon script :
#!/Users/yvon/CVS/groovy/groovy-core/target/install/bin groovy
et j'ai bien les mêmes perms dans :
/Users/yvon/CVS/groovy/groovy-core/target/install/bin
~/CVS/groovy/groovy-core/target/install> ls -al bin
[...]
-rwxr-xr-x 1 yvon yvon 5028 5 Dec 09:01 groovy
[...]
--
yt

6 réponses

1 2 3
Avatar
Saïd
JPaul :
Saïd wrote:

Non, ca ne peut pas dependre du shell. Le shell applle le noyau et lui
demande de lancer l'executable correspondant au script. C'est le noyau qui
se rend compte qu'il s'agit d'un fichier commencant par #!. Il interprete la
suite de la ligne comme un executable qu'il execute et a qui il passe le
fichier du script sur l'entree standard:


Pour moi, j'avais toujours pensé que c'était le shell qui faisait ce
test du #! en début de fichier, et je ne vois d'ailleurs pas en quoi ce
que tu donnes en exemple (ici la terre) prouve quoique ce soit.



Il prouve que le fichier est envoye sur l'entree standard du programme. En
plus je le trouve rigolo, c'est un programme qui s'affiche lui-meme. C'est
plus difficile a faire en C. (du moment que l'endroit ou se trouve le
fichier dans l'arborescence est inconnu, sinon c'est trop facile).

J'ai donc fait un essai de lancer un script **dans un programme c** par
un fork suivi d'un exec dans lequel je n'ai mis que le chemin du script,
et effectivement cela a marché.



Tu peux aussi faire un ktrace ./script et remarquer que le nouveau
processus cree lance le programme qui se trouve apres #!, ce qui prouve que
ce n'est pas le shell qui va chercher le nom de l'executable apres #!.

Cependant je serais curieux de lire une doc indiquant en clair que c'est
cela. As-tu une référence ?



Dans les sources du noyau linux il etait possible de changer le
comportement du noyau vis-a-vis de certains scripts. J'en ai deduis que
c'etait le noyau qui lancait les scripts. Mais ca doit se trouver dans tout
livre sur Unix.

--
Saïd.
C programmers never die - they're just cast into void.


Avatar
Grrrr
On Mon, 13 Dec 2004 10:44:31 +0000, Saïd wrote:

JPaul :
Saïd wrote:

Non, ca ne peut pas dependre du shell. Le shell applle le noyau et lui
demande de lancer l'executable correspondant au script. C'est le noyau qui
se rend compte qu'il s'agit d'un fichier commencant par #!. Il interprete la
suite de la ligne comme un executable qu'il execute et a qui il passe le
fichier du script sur l'entree standard:


Pour moi, j'avais toujours pensé que c'était le shell qui faisait ce
test du #! en début de fichier, et je ne vois d'ailleurs pas en quoi ce
que tu donnes en exemple (ici la terre) prouve quoique ce soit.



C'est forcément le noyau qui fait le test:
si, en C, tu fait
exec("./mon_script.sh");
pour que ça marche, il faut forcément que ce soit le noyau qui gère la
syntaxe #!<xxx> au début du fichier. Or, ça marche ;-)

[...]
Dans les sources du noyau linux il etait possible de changer le
comportement du noyau vis-a-vis de certains scripts.


Pas tout à fait. On peut changer le comportement du noyau vis-à-vis
des binaires, pas des scripts. Par exemple, on peut dire au noyau que
les programmes au format Windows sont à lancer avec Wine, ou que les
binaires java sont à lancer avec la machine virtuelle ou qu'un binaire PC
doit être lancé avec qemu, quand on n'est pas sur PC... Pour celà, on
lui indique comment reconnaitre un format binaire particulier et quel
programme utiliser pour le lancer.
Ca ne marche que pour les executables dont le noyau ne connait à priori
pas le format. Comme le noyau sait déjà gérer les scripts, ce système
ne sera jamais utilisé pour lancer ceux-ci.

[...]



Avatar
blanc
Grrrr wrote:

C'est forcément le noyau qui fait le test:
si, en C, tu fait
exec("./mon_script.sh");
pour que ça marche, il faut forcément que ce soit le noyau qui gère la
syntaxe #!<xxx> au début du fichier. Or, ça marche ;-)


Oui. Une fois que j'ai eu fais ça, j'ai été convaincu. Mais avant de le
faire, ça ne me paraissait pas quelque chse d'obligé.

JPaul.
--
/==/==- Jean-Paul BLANC
/ /--/--// quelque-part (somewhere)
|/| L | en (in)
/|| = ||| FRANCE

Avatar
blanc
Saïd wrote:

Il prouve que le fichier est envoye sur l'entree standard du programme. En
plus je le trouve rigolo, c'est un programme qui s'affiche lui-meme.


Oui, mais il ne prouve pas que ce soit le noyau plutôt que le shell qui
fait le test du #!. Voilà ce que je voulais dire.
Et ceci étant, c'est vrai que c'est joli !...

Tu peux aussi faire un ktrace ./script et remarquer que le nouveau
processus cree lance le programme qui se trouve apres #!, ce qui prouve que
ce n'est pas le shell qui va chercher le nom de l'executable apres #!.


OK d'accord, j'aurais pu y penser aussi.

Dans les sources du noyau linux il etait possible de changer le
comportement du noyau vis-a-vis de certains scripts. J'en ai deduis que
c'etait le noyau qui lancait les scripts. Mais ca doit se trouver dans tout
livre sur Unix.


D'accord. Merci.

JPaul.

--
/==/==- Jean-Paul BLANC
/ /--/--// quelque-part (somewhere)
|/| L | en (in)
/|| = ||| FRANCE

Avatar
Eric Lévénez
Le 13/12/04 21:33, dans <1gor4yq.1eq5leru08e68N%, « JPaul »
a écrit :

Saïd wrote:

Il prouve que le fichier est envoye sur l'entree standard du programme. En
plus je le trouve rigolo, c'est un programme qui s'affiche lui-meme.


Oui, mais il ne prouve pas que ce soit le noyau plutôt que le shell qui
fait le test du #!. Voilà ce que je voulais dire.
Et ceci étant, c'est vrai que c'est joli !...


Pour info, le noyau fait en gros 3 tests pour lancer un exécutable. Il
vérifie dans les points suivants :

- Vérification du sharp-bang (puis blancs ou tabs, un nom d'exécutable et
des paramètres éventuels et terminé par un NL).

- Vérification Executable Mach-O Fat-Binary (recherche de l'architecture la
mieux adaptée au CPU de la machine).

- Vérification Executable Mach-O Flat.


--
Éric Lévénez -- <http://www.levenez.com/>
Unix is not only an OS, it's a way of life.


Avatar
blanc
Eric Lévénez wrote:

Vérification du sharp-bang


Ach! Joli ! J'ai mis un certain temps avant de traduire...
;-)

Merci Eric pour ces renseignements.

JPaul.
--
/==/==- Jean-Paul BLANC
/ /--/--// quelque-part (somewhere)
|/| L | en (in)
/|| = ||| FRANCE

1 2 3