質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.93%

「実行権限」について教えて下さい!

解決済

回答 3

投稿

  • 評価
  • クリップ 0
  • VIEW 2,479

score 18

前提・実現したいこと

「実行権限」というものがよく分かりません。
以下のソースコード「test.py」の実行権限は、ターミナル上でllコマンドを叩くと
$ ll
-rw-r--r--+
となっており、実行権限「x」がありません。しかし、
py test.py
と叩くと、
hello
ときちんと表示されます。なぜ実行できるのでしょうか?
初歩的な内容かと存じますが、ご教授下さい。

該当のソースコード

print "hello"

補足情報

言語:Python2.7
OS:MacOSX

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

checkベストアンサー

+3

スクリプトが単体で実行可能となるためには下記2点が必須です。

・先頭行に"#/bin/sh"や"#/bin/py"など、スクリプトを実行するプログラムが記載されていること。
・そのファイルに(aglkjgggさんが今回お尋ねの)実行権限が付与されていること。
※スクリプトに文法エラーがないのは大前提ですが。

この条件を満たしている場合、単に"test.py"としたら先頭行の"#/bin/py"が解釈され、「これはpythonで実行すべきスクリプトだ」と判断され、実行されます。
先頭行が"#/bin/sh"ならばシェルスクリプトとして動作されます。
上記の動作は"py test.py"や"sh test.sh"と等価です。

"py test.py"の場合、実行対象となるのはpy、つまりpython本体であり、test.pyはその引数として扱われます。
当然py(python)にも実行権限は必要です。
py自体はバイナリファイルでそれ単体で動作可能ですが、あくまでもUnix/Linux系OSでは実行権限が付与されていないファイルは実行されません。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/09/10 22:09

    会社で製品を出す場合などは特に、「本来"ll"というコマンドはない。」ということを認識しておかないといけませんね。

    キャンセル

  • 2016/09/10 23:46

    回答一部訂正。
    先頭行に書くのは...

    #!/bin/sh
    #!/bin/py

    です。「!」が抜けてました。
    あぁ恥ずかしい...

    キャンセル

  • 2016/09/12 23:54

    あら、全く気付きませんでした。
    いつも「おまじない〜」と何も考えずに、コピペしていますので…。"シェバン"、ですよね。

    キャンセル

+1

ご質問に関しては他の方が回答されている通りですが、
余談を少し…

unix系のOSではログインすると(基本的に)何某かのシェルが起動し、
そのシェルが解釈できるコマンドを入力して希望する処理を実行する
という流れになっていますね。

そういう意味では、シェルに与えてよいものか否かの目印として
「実行権限」があるという見方もできます。
もちろん与えてよくないものに対して強制的に「実行権限」を
付けることもできますが、その結果は様々なエラーとなります。

ちなみに、ディレクトリにも「実行権限」はついてますよね。
で、それを外すとどうなるか?
cd (change directory)できなくなります。
そのディレクトリが自分で作ったものだとしてもね。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/09/10 21:52

    回答、ありがとうございます!
    ちょっと気になったのですが、実行権限の変更「chmod 〜」は誰でも可能なのでしょうか。誰でも変更可能であれば、実行権限というもの自身にあまり意味がないように思えるのですが…。

    キャンセル

  • 2016/09/11 04:25

    細かい条件は忘れましたが、w(write)権限があれば
    いけるんじゃなかったかなあ。
    自分が作ったファイルから(間違って) w権限を外して
    (読み込み以外の)操作ができなくなってしまった
    なんて失敗談は聞いたことあります。

    キャンセル

  • 2016/09/13 00:00

    実行権限が
    <所有者><所有グループ><その他>
    という風になっているので、一番上の階層の所有者が適切に実行権限を設定する必要がありますね。

    自分で作ったファイルが使えなくなるなんて…。考えただけで怖ろしいです(;´∀`)

    キャンセル

0

test.pyが実行されるのではなく、
test.pyは中のテキストデータを読み取られているからです。

pythonに実行権限が付与されていれば動きます。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/09/10 21:46

    回答ありがとうございます!
    ファイルtest.pyに実行権限があるのではなく、python に実行権限があるために出力が確認できたのですね。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.93%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る