web-dev-qa-db-fra.com

Comment se fait-il qu'un fichier python soit exécutable même si ses autorisations sont 644?

Je pense que je comprends mal quelque chose ici. J'ai créé un fichier de test python simple pour voir comment les autorisations affectent l'utilisation des fichiers python. Je l’ai fait pour pouvoir répondre 64bit ubuntu 12.04 python ne peut pas exécuter un fichier python existant

Installer

J'ai créé un fichier test.py avec le contenu

print 'I am working'

Cas de test 1

ls -al test.py 
-rw-r--r-- 1 joey joey 25 Dec 24 11:11 test.py
python test.py
I am working
  • Comment se fait-il que python exécute ce fichier alors que je n’ai pas fait chmod +x test.py?

Cas de test 2

chmod 400 test.py
ls -al test.py 
-r-------- 1 joey joey 25 Dec 24 11:11 test.py
python test.py
I am working

Donc, apparemment, python n'a besoin que de l'autorisation de lecture pour exécuter mon fichier?

Cas de test 3

chmod 200 test.py
ls -al test.py 
--w------- 1 joey joey 25 Dec 24 11:11 test.py
python test.py
python: can't open file 'testo.py': [Errno 13] Permission denied

Les autorisations d'écriture sont insuffisantes (et pour l'enregistrement, seules les autorisations exécutables sont également insuffisantes).

  • Comment se fait-il que python exécute des fichiers sans autorisations d'exécution?
2
don.joey

Oui, Python requiert uniquement la lecture du contenu du fichier. Rappelez-vous que Python est un langage interprété (comme PHP, Ruby, etc.) et traite simplement le contenu de ce fichier, plutôt que de l'exécuter. python est l'exécutable ici!

Pour des informations de base appropriées; Notez que vous pouvez exécuter des scripts de deux manières:

  • L'appel de l'interprète avec le fichier en tant qu'entrée/argument ne nécessite aucune autorisation de lecture, par exemple:

    python myscript.py
    
  • Exécutez le script par son Shebang ne nécessite le jeu de bits exécutable.

    ./myscript.py
    

    Le Shebang (première ligne du fichier) ressemble alors à

    #!/usr/bin/env python
    
6
gertvdijk

"python n'a besoin que de permission de lecture" pour lire le contenu de votre fichier et traiter le code.

votre utilisateur peut exécuter python. alors python peut lire le fichier (sur 400). Si vous souhaitez exécuter un fichier directement tel que "./testo.py", vous devez disposer des autorisations d'exécution de votre fichier.

1
Dian Nedelchev