(O+P)ut

(O+P)ut

(O+P)ut = OutPut

【やってみた】シェルに実行権限だけ与えても実行はできない【Linux】

結論から言えば、タイトルの通りです。

シェルに実行権限のみ与えても実行はできないです。

同じことを気になって調べた際に、結論になかなか辿り着けなかったので簡単にまとめました。


まず、Linuxでは 読み取り(r) 書き込み(w) 実行(x) それぞれの権限を chmodコマンドで変更できます。

f:id:mtiit:20180215145929p:plain

つまり、上記画像のように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で確認はできませんが、権限を与えて見てみるときちんと書き込まれています。




つまり、上記を鑑みると、シェルに関してはさきほどの画像は、下記となるように思えます。
f:id:mtiit:20180215151720p:plain

test.shを例にしましたが 平文で書かれているシェルを  only execute  の状態で実行するための設定はあるんですかね?*1ご存知な方はコメントにていただければ幸いです。

以上、ご参考ください。

*1:バイナリファイルの場合は、実行権限のみでも動かせるようです。