Skip to content
Latchkey

ファイルパーミッションとは?読み取り、書き込み、実行

Unixのファイルパーミッションは、誰がファイルを読み取り、書き込み、実行できるかを制御し、所有者、グループ、その他すべての人に対して定義されます。

Unixシステム上のすべてのファイルは、誰がそれを読み、変更し、実行できるかを決めるパーミッションを持っています。これらは所有者、グループ、その他の3つのクラスに分かれます。CIでは、checkoutしたスクリプトに実行ビットがないときに「permission denied」としてパーミッションの問題が現れ、これはよくあるつまずきの原因です。

パーミッションモデル

各ファイルは、所有者、グループ、その他の3つのクラスに対して、読み取り (r)、書き込み (w)、実行 (x) の3種類のパーミッションを持ちます。-rwxr-xr-- のような一覧は、9つのビットすべてを一目で示します。

各パーミッションの意味

  • 読み取り: ファイルの内容を見る、またはディレクトリを一覧表示する。
  • 書き込み: ファイルを変更する、またはディレクトリ内のエントリを追加/削除する。
  • 実行: ファイルをプログラムとして実行する、またはディレクトリに入る。

ビットを読む

パーミッションは、755や644のように3桁の8進数で書かれることがよくあります。各桁は1つのクラスに対する読み取り (4)、書き込み (2)、実行 (1) の合計なので、7はrwx、6はrw-です。

スクリプトの実行ビット

スクリプトを ./script.sh で直接実行するには、実行ビットが必要です。それがないと「permission denied」になりますが、bash script.sh を実行するとビットをバイパスするので依然として機能します。

CIにおけるパーミッション

よくあるCIの失敗は、commitされたスクリプトが実行ビットを失い、./deploy.sh が「permission denied」で失敗することです。実行ビットを設定してファイルをcommitするか、bash deploy.sh で明示的に実行して問題を回避してください。

マネージドrunnerでの実行可能スクリプト

Latchkeyのrunnerでは、checkoutしたファイルはGitに保存されたパーミッションを保持します。スクリプトが実行可能でない場合は、ステップ内で chmod +x でビットを設定するか、インタープリタを通じて直接呼び出してください。

重要なポイント

  • ファイルパーミッションは、所有者、グループ、その他に読み取り、書き込み、実行を与えます。
  • 多くの場合、755のように8進数で書かれ、クラスごとに4/2/1を合計します。
  • CIでは、実行ビットの欠落がスクリプトで「permission denied」を引き起こします。

関連ガイド