結論から言えば、タイトルの通りです。
シェルに実行権限のみ与えても実行はできないです。
同じことを気になって調べた際に、結論になかなか辿り着けなかったので簡単にまとめました。
まず、Linuxでは 読み取り(r) 書き込み(w) 実行(x) それぞれの権限を chmodコマンドで変更できます。
つまり、上記画像のように8通りの組み合わせがあるわけです。
今回、解説のために下記のスクリプト(test.sh)を用意しました。
#!/bin/bash echo "Hello!"
読み取り権限があるということは、簡単に言えばcatができます。
$ cat test.sh #!/bin/bash echo "Hello!"
書き込み権限があるということは、簡単に言えば echoで追記ができます。
$ echo "# memo" >> test.sh
※最終行に # memo という行ができています。
実行権限があるということは、言葉の通り実行できます。
$ ./test.sh Hello!
そして、no permisioonsの状態で上記3つを試せば下記のようにエラーが返ってきます。
$ chmod 000 test.sh $ cat test.sh cat: test.sh: Permission denied $ echo "# memo" >> test.sh -bash: test.sh: Permission denied $ ./test.sh -bash: ./test.sh: Permission denied
当たり前ですが、何もできません。
基本的に、r をつければ catが、wをつければ echo>>が、xをつければ実行ができますが、
rがない状態でのxは、無効となります。
下記で確認できます。
$ chmod 100 test.sh $ ./test.sh bash: ./test.sh: Permission denied
ちなみに、rがない状態でのwは、無効になりません。
$ chmod 200 test.sh $ echo "# memo" >> test.sh
catで確認はできませんが、権限を与えて見てみるときちんと書き込まれています。
つまり、上記を鑑みると、シェルに関してはさきほどの画像は、下記となるように思えます。
test.shを例にしましたが 平文で書かれているシェルを only execute の状態で実行するための設定はあるんですかね?*1ご存知な方はコメントにていただければ幸いです。
以上、ご参考ください。
*1:バイナリファイルの場合は、実行権限のみでも動かせるようです。