web-dev-qa-db-ja.com

マウントされた外部ドライブでスクリプトを実行できません

/ mnt/extは、外付けハードドライブであるext2ファイルシステムにマウントされます。何らかの理由で、そこからスクリプトを実行できません。以下のセッションをご覧ください。

luntain@plato /mnt/ext $ echo "echo success" > k.sh
luntain@plato /mnt/ext $ chmod 777 k.sh
luntain@plato /mnt/ext $ ./k.sh
-bash: ./k.sh: Permission denied
126luntain@plato /mnt/ext $ ll k.sh
-rwxrwxrwx 1 luntain luntain 13 Jan 23 15:08 k.sh*
luntain@plato /mnt/ext $ 

エラーが表示される理由を知りたいです。

23
luntain

おそらく、ファイルシステムがマウントされたときにnoexec属性が設定されていました。多分それはあなたのディストリビューションの「機能」です。

これを確認するには、マウントオプションを括弧内に表示するmountを実行し、noexecフラグを削除するには、ルートの下でmount -o remount,exec /mnt/extを使用します。

また、ユーザーオプションの後にexecオプションを配置してください。そうしないと、システムはドライブをnoexecとしてマウントします。

22
whitequark

noexecがマウントされたファイルシステムは、スクリプトの実行を防止するだけです(つまり、マジックナンバーまたはShebang行に基づいてカーネルにスクリプトを適切に実行するように要求します)。 execがマウントされた別のファイルシステムでインタープリターを呼び出して、スクリプトを引数として(またはstdinで)インタープリターに渡すことを妨げるものではありません。エルゴ、ルートでない場合は、sh k.sh

3
pilona

ファイルシステムはnoexecオプションでマウントされます。