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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Q&A

解決済

3回答

3781閲覧

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

UMA00

総合スコア18

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

1グッド

0クリップ

投稿2016/09/10 07:04

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

python

1print "hello"

###補足情報
言語:Python2.7
OS:MacOSX

izkn👍を押しています

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

スクリプトが単体で実行可能となるためには下記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 11:31

ynakano

総合スコア1894

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ynakano

2016/09/10 11:32

ちなみに、"ll"は"ls -l"をエイリアス(別名定義)しているだけなので、本来"ll"というコマンドは存在しません。 処理系によっては"ll"と打ったらエラーになるものもあります。
UMA00

2016/09/10 12:50

回答、ありがとうございます! ファイルtest.pyが引数としてpythonに渡されている、ということですね。納得できました!! >ちなみに、"ll"は"ls -l"をエイリアス(別名定義)しているだけなので、本来"ll"というコマンドは存在しません。 実は先程ターミナル上で「ll」と叩いたところ、「そんなコマンド、無いよ~」と言われ、.bashrcに設定追加、反映したばかりなのです。補足コメント、大変有難うございます。
ynakano

2016/09/10 12:56

そうはいいつつも"ll"も市民権を得てたりするんですよね。 最近若い(20代)人主体のチームを見てきたんですが、手順書に堂々と"ll <ホニャララ>"なんて書いてあって、なんとも言えぬ世代(?)ギャップを感じたものです。 サラっと"ll"なんて書くのもそうですし、それがレビューを通ってたりしてたので。
UMA00

2016/09/10 13:09

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

2016/09/10 14:46

回答一部訂正。 先頭行に書くのは... #!/bin/sh #!/bin/py です。「!」が抜けてました。 あぁ恥ずかしい...
UMA00

2016/09/12 14:54

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

0

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

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

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

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

投稿2016/09/10 12:03

takasima20

総合スコア7458

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

UMA00

2016/09/10 12:52

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

2016/09/10 19:25

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

2016/09/12 15:00

実行権限が <所有者><所有グループ><その他> という風になっているので、一番上の階層の所有者が適切に実行権限を設定する必要がありますね。 自分で作ったファイルが使えなくなるなんて…。考えただけで怖ろしいです(;´∀`)
guest

0

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

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

投稿2016/09/10 07:11

aglkjggg

総合スコア769

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

UMA00

2016/09/10 12:46

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問