web-dev-qa-db-ja.com

なぜpythonファイルはパーミッションが644であるにもかかわらず実行可能であるのでしょうか?

ここで何かを誤解していると思います。私は簡単にpythonテストファイルを作成し、パーミッションがpythonファイルの使用にどのように影響するかを確認しました。 64ビットubuntu 12.04 pythonは既存のpython file

セットアップ

内容を含むtest.pyファイルを作成しました

print 'I am working'

テストケース1

ls -al test.py 
-rw-r--r-- 1 joey joey 25 Dec 24 11:11 test.py
python test.py
I am working
  • どうしてpythonはchmod +x test.pyをしなかったのにこのファイルを実行していますか?

テストケース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

だからどうやらpythonはファイルを実行するために読み取り許可だけが必要ですか?

テストケース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

書き込み権限は不十分です(また、記録については、実行可能権限のみが不十分です)。

  • どうしてpython実行可能権限なしでファイルを実行しますか?
2
don.joey

はい、Pythonはファイルの内容を読み取るだけで済みます。 Pythonはインタープリター言語(PHP、Rubyなど)であり、実行するのではなく、そのファイルの内容を処理するだけであることを思い出してください。 pythonは実行可能ファイルです!

適切な背景情報について。次の2つの方法でスクリプトを実行できることに注意してください。

  • ファイルを入力/引数としてインタープリターを呼び出すには、読み取り権限以外は必要ありません。例:

    python myscript.py
    
  • Shebangdoesでスクリプトを実行するには、実行可能ビットの設定が必要です。

    ./myscript.py
    

    Shebang(ファイルの最初の行)は次のようになります

    #!/usr/bin/env python
    
6
gertvdijk

ファイルの内容を読み取り、コードを処理するには、「pythonに必要なのは読み取り権限のみです」。

ユーザーはpythonを実行できます。 then pythonはファイルを読み取ることができます(400のため)。 "./testo.py"のようにファイルを直接実行する場合は、ファイルの実行権限が必要です。

1
Dian Nedelchev