配置したスクリプトが Permission denied で動かない。このスクリプトへの指摘として正しいものは?
#!/bin/bashcp deploy.sh /opt/app/deploy.shchmod 644 /opt/app/deploy.sh/opt/app/deploy.sh正答
- 644 には実行権限 x が誰にも無いので、755 か u+x にする必要があります。
- 絶対パスで実行するには先頭に ./ が必要なので、./opt/app/deploy.sh と書く必要があります。
- cp でコピーすると所有者が消えるので、chmod の前に chown で所有者を付け直す必要があります。
- 644 では所有者に書き込み権限が無いので、スクリプトを実行できません。
解説
3 行目の chmod 644 は所有者 rw-、他は r-- で、実行権限 x が誰にも無い。そのため 4 行目でパスを直接指定して実行すると Permission denied になる。実行させたいなら chmod 755 か chmod u+x にする。644 でも所有者には書き込み権限があり、そもそも実行に必要なのは w ではなく x なので「書き込み権限が無い」という指摘は誤り。./ はカレントからの相対パスで、絶対パスには付けない。
参考: www.gnu.org
この問題を含む Linux・シェル のテストを制限時間つきで解く
Linux・シェルクイズへ