コース一覧
Linux運用・管理
実行権限とスクリプト

Linux運用・管理

ユーザー権限、パーミッション、プロセス、ジョブ制御を学び、Linux上の実行中サービスと作業権限を安全に管理できるようにします。

1
パーミッションと権限管理
01. ユーザーとグループの概念5分
02. パーミッションの読み方5分
03. 権限の変更 chmod5分
04. 所有者の変更 chown5分
05. sudo - スーパーユーザーの力5分
06. 実行権限とスクリプト5分
07. パーミッションチェック5分
2
プロセス管理とジョブ制御
01. プロセスとは何か5分
02. psでプロセス一覧を確認する5分
03. topでリアルタイム監視する5分
04. プロセスの終了 kill5分
05. フォアグラウンドとバックグラウンド5分
06. nohupでログアウト後も実行する5分
07. プロセス管理チェック5分

実行権限とスクリプト

配布物に付いてきたスクリプトが、そのままでは動かない

手元に落とした setup.sh を ./setup.sh と打つと Permission denied が返る。中身はただのテキストなのに動きません。Linux では、ファイルを直接起動できるのは実行の権利が立っているときだけだからです。

紛らわしいのは、起動できない原因が 1 つではないことです。次の 3 つが全部そろって、はじめてスクリプトは動きます。

  • そのファイルに実行の権利があること
  • 1 行目に、どのプログラムで動かすかが書いてあること
  • 書かれたプログラムが、実際にそのパスに存在すること
diagram (will load when visible)

Permission denied なら 1 つ目、bad interpreter なら 3 つ目、と読み分けられます。

1 行目の #! が、動かすプログラムを決めている

ターミナル

#!/bin/bash
#!/usr/bin/env python3

先頭 2 文字が #! の行はシバンと呼ばれ、この中身を動かすプログラムの置き場所を書きます。1 行目でなければ効きません。/usr/bin/env をはさむ書き方をよく見かけるのは、Python や Node のようにマシンごとに置き場所が違うものを、探してもらってから起動するためです。

Windows で編集したファイルを持ち込むと、行末に見えない文字が付いて /bin/bash ではない何かを探しに行き、bad interpreter になることがあります。エディタの改行の種類を LF にして保存し直すと直ります。

./ を付けないと見つけてもらえない

ターミナル

$ setup.sh
bash: setup.sh: command not found
$ ./setup.sh

名前だけで打つと、シェルはあらかじめ決められた置き場所だけを探します。今いるディレクトリはそこに含まれていません。含めてしまうと、ls という名前の細工されたファイルが置かれたディレクトリに入っただけで踏んでしまうからです。目の前のファイルを動かすときは ./ を付けて、場所を明示します。

権利を足さずに動かす手もある

ターミナル

bash setup.sh
python3 report.py

動かすプログラムのほうを先に書けば、スクリプトは引数として渡されたただのテキストとして読まれるので、実行の権利は要りません。読む権利だけで足ります。他人のリポジトリを一度だけ試したいときや、ファイルの権限を書き換えたくない場面で使えます。

ただしこの形では、シバンの行がただのコメントとして無視されます。中身が Python なのに bash で起動すれば当然エラーになるので、合ったプログラムを自分で選ぶ必要があります。

課題

  1. chmod +x を使う
  2. スクリプトを実行して Hello を出力する

ヒント

ヒアドキュメント cat > file <<'EOF' ... EOF が便利

chmod +x file で実行権限を付与

shebang #!/bin/bash を 1 行目に書く

script.sh
script.sh
エディタを読み込んでいます
ターミナル出力