Perl入門ゼミPerl入門ゼミテキスト処理、Linuxサーバー管理、Web開発ならPerlフォーラムへログインPerl›ファイル操作パーミッションについて理解しようUNIX系のOSでは、ファイルパーミッションという仕組みがあります。(このサイトでは便宜のため、UNIX系OSというのはUNIX系OSとLinux系OSの両方を指すことにします。)Perlは、WindowでもUnixでも実行できるマルチプラットフォームな言語ですが、根本的に仕組みが違う部分についてはWindowsとUNIXの両方で実行することができません。Perlは、Unix生まれですので、標準関数の中にもUnix系OSでのみ意味を持つものがあり、そのひとつがファイルパーミッションに関するものです。今回は、ファイルパーミッションというUNIXの概念を簡単に解説します。パーミッション(permission)は日本語に直すと「許可」という意味です。この許可の意味は以下のように考えるとわかりやすいと思います。(ここからは、ファイルパーミッションを略してパーミッションと呼びます。「あるファイル」に対して「だれだれ」が「なになに」をすることを許可する。パーミッションは、「ファイル」単位で設定されます。例外なくすべてのファイルに対して設定されます。パーミッションの指定では「だれ」に対して許可するのかということを記述します。「だれだれ」という部分に記述できるのは、「そのファイルの所有者」「そのファイルを所有しているグループ」「任意のユーザ」になります。パーミッション指定では、「なに」をすることを許可するのかということを記述します。「なになに」という部分に記述できるのは、「読み込み」「書き込み」「実行」になります。複数の指定をすることができます。パーミッションの記述の例をあげると以下のようになります。ファイル「a.txt」に対して「このファイルの所有者」が「書き込み」と「読み込み」をすることを許可し「このファイルの所有グループ」が「書き込み」と「読み込み」をすることを許可し「任意のユーザ」が「読み込み」をすることを許可するこの説明のなかで、まだ説明していない用語があるので、以下で説明します。ユーザとはUNIXには、ユーザという概念があります。すべてのユーザはOSによって管理されてます。最高の権限を持つ「root」ユーザとUNIXのインストール時に存在します。rootユーザは、ファイルのパーミッションにかかわらずファイルへの書き込み、読み込みを行うことができます。他のユーザがファイルの書き込みを禁止したとしてもrootユーザだけは、そのファイルへの書き込み権を持ちます。rootは、他のユーザを作成することができます。UNIXはマルチタスクOSです。あなたがプロジェクトに参加したときに、管理者はroot権限であなた用のユーザを作成します。グループとはUNIXには、グループという概念があります。あるプロジェクトの開発で使用するファイルがあるとします。このファイルは、開発やテストを担当する人以外からは、勝手に書き込まれたりしたくはありません。こんなときは、管理者がroot権限で、そのプロジェクト用のグループというものを作成します。そのプロジェクトを担当するユーザを、グループに追加します。ユーザは、複数のグループに所属させることができます。グループを作成することで、グループ単位のパーミッションを設定することができるようになります。ファイルの所有者とはUNIXでは、ファイルは必ず誰かが所有しています。所有者のいないファイルはありません。あなたがファイルを作成すると、ファイルの所有者は、あなたのユーザIDになります。ファイルの所有者グループとはUNIXでは、ファイルは必ずどこかのグループが所有しています。あなたが自分のユーザで新規にファイルを作成した場合は、グループ名は、ユーザ名と同じになります。(これは、ユーザを作成したときに、同時に同じ名前のグループ名が作成されており、そのグループ名が設定されるからです。)実行権限とは「なになに」という部分に指定できる「読み込み」と「書き込み」権限は、説明がなくても理解できると思いまので、「実行」権限について説明します。ファイルには、「データを保存しておくためのファイル」と、「プログラムが書かれたファイル」があります。プログラムが書かれたファイルの一例は、「sample.pl」のようなPerlスクリプトが書かれたファイルです。いうスクリプトを渡して実行しています。これは、sample.plはデータファイルとして、perlプログラムに渡されて実行されているということです。いうように、直接ファイル名を指定し、Perlスクリプトを実行することができます。カレントディレクトリという意味です。いう記述では、UNIXの仕様上実行はできません。いうプログラムでこのファイルを実行してくださいというOSに対するお願いです。これで、ファイルパーミッションについての用語の解説は終わりです。ファイルのパーミッションを実際に変更するにはchmod関数を使用します。chmod関数の解説は以下を参考にしてください。ファイルパーミッションを変更するファイルパーミッションの表現方法ファイルパーミッションの表現方法について解説します。表現する方法について解説します。UNIXにおいては、これらを3桁のビット列で表現します。3桁のビットの意味は以下のようになります。03桁目が読み込み権限を表すビット、2桁目が書き込み権限を表すビット、1桁目が実行権限を表すビットになります。1であれば権限があり、0であれば権限がないということを意味します。ビット列が110ならば、読み込み権限と書き込み権限があり、101ならば読み込み権限と実行権限があります。ファイルパーミッションの8進数表現ファイルパーミッションは単なるビット列ですが、便宜のために8進数で指定することが多いです。chmodというコマンドでパーミッションを変更する場合、sysopen関数でパーミッションの指定する場合などに8進数を使います。2進数(ビット列)と8進数の対応を記載しておきます。7(111,読み込みと書き込みと実行)、4(100,読み込み)、5(101,読み込みと実行)の4つです。この4つの数字については覚えておくと便利です。ファイルパーミッションの文字表現ファイルパーミッションは人間が読みやすいように文字で表現されることも多いです。コマンドでファイルの詳細情報を表示するときに使われたりします。読み込み権限のビットは「r」、書き込み権限のビットは「w」、実行権限のビットは「x」で表現されます。ビットが立っていない場合は「-」で表現されます。これを踏まえて対応表をもう一度作って見ます。xこの対応表を書けるようになれば、パーミッションの理解は完璧です。パーミッションを「所有者」「グループ」「任意のユーザ」に設定する「所有者」「グループ」「任意のユーザ」に対してファイルパーミッションを設定する方法を解説します。以下の表を使うと、パーミッションは3ビットで表現され、以下のようになります。xこれを「所有者」「所有グループ」「任意のユーザ」の順に並べたものが、UNIXにおけるファイルに対するパーミッションの表現になります。ファイルの所有者が「読み込み権限」と「書き込み権限」を持ち、所有グループと任意のユーザが「読み込み権限」を持つならパーミッションの表現は以下のようになります。-意味を理解しやすいのは、2進数か文字表現ですが、9文字書かないといけないので引数で指定する場合などめんどうです。引数で指定する場合は、8進数で指定することが多いです。8進数だけを見てすぐに意味がわかるようになると便利です。自分だけが読み書きしたい。他の人は読み込みだけを許可する。グループで読み書きを許可したい。他の人には読み込みだけを許可する。自分だけが読み書きできる。自分だけが実行と読み書きができる。だれでも実行してもよいし、だれでも読み書きしてもよいディレクトリのパーミッションディレクトリに対するパーミッションの意味はファイルに対するパーミッションの意味と少し異なります。ディレクトリに対するパーミッションの意味を解説します。UNIXにおいてはディレクトリというのは特殊なファイルです。普通のテキストファイルならばファイルの中身は文字列が書かれていますが、ディレクトリにはファイルの情報が書かれています。d.txtのようになっています。ディレクトリはファイルの情報が書かれている特殊なファイルです。ディレクトリに対する読み込み権限と書き込み権限ディレクトリを特殊なファイルだと理解するとディレクトリに対する読み込み権限と書き込み権限は理解しやすくなります。ディレクトリに対する読み込み権限とは、ディレクトリに書かれたファイル情報を読み込むことができる権限のことです。コマンドでディレクトリの情報を表示することができません。ディレクトリに対する書き込み権限とは、ディレクトリに書かれたファイルの情報を変更する権限です。ディレクトリにファイル追加したり、削除することができません。ここで気にとめておいてほしいことは、ファイルを削除したり追加したりする権限はディレクトリに対する書き込み権限によって設定するということです。ファイルに対して書き込み権限を与えないとしても、ディレクトリに書き込み権限があればそのファイルを削除することができます。ディレクトリに対する実行権限ディレクトリには必ず実行権限をつけます。ディレクトリにたいする実行権限をなくすとlsでディレクトリの内容を見ること、cdで移動すること、ディレクトリの中にあるファイルの情報を変更することなど、ディレクトリとディレクトリの中にあるファイルに対する操作のすべてを行うことができなくなります。ディレクトリに対する実行権限をなくす意味はほとんどありません。ディレクトリに対しては実行権限を必ずつけて、読み込み権限と書き込み権限で設定を行えば十分です。ファイルの追加や削除をすべてのユーザに許可してもよいファイルパーミッションを調べるパーミッションを調べる方法を解説します。ファイルパーミッションを調べるには、stat関数を使ってファイルパーミッションの情報を取り出します。3要素目がモード情報になります。関数で変換すると純粋なパーミッションの情報になります。S_IMODE($mode);ビット演算できる定数や関数です。S_ISSOCK($mode)stat関数が返す3番目のモード情報は、Fcntlで定義されている定数とビット演算を行うことでたくさんの情報を取り出すことができます。パーミッションを調べるサンプルパーミッションを調べるサンプルです。"ファイルパーミッションの取得する。S_IMODE($mode);ビットマスクとはビットマスクはsysopen関数やmkdir関数でのファイルやディレクトリの作成時のパーミッションに影響を及ぼします。sysopen関数で指定するパーミッションが666で、ビットマスクの設定が022だった場合、作成されるファイルのパーミッションは644になります。ファイルをプログラムで作成する場合は、パーミッションの値をファイルの場合は666、実行ファイルやディレクトリの場合は777にしておくほうがよいです。しておけば、そのプログラムを使う人はビットマスクを指定することで作成するパーミッションを自由に変更できます。ビットマスクについては、以下で詳しく解説しています。業務に役立つPerlログ解析など日本語を含むテキスト処理の実践!案内YouTubeでもっと簡単にプログラミングを学ぶならPerlゼミちゃんねるLinuxコマンドを学ぶならLinuxサーバー管理入門Webデザインを学ぶならWebデザイン入門Web開発を始めるななMojoliciousスタートアップブログを作るならGiblogプログラミングの勉強会ならPerl入学式お問合せはこちらPerlは、テキスト処理の記述性とパフォーマンスに優れ、正規表現が言語に組み込まれているプログラミング言語です。Linuxサーバー管理でのフィルタリングプログラム、複数行の文字列を処理、ファイル内容の検索・置換などが得意。Mojoliciousを使ったWebスタートアップも。Perlは、gitやopensslなどUnix/Linuxミドルウェアの支援ツールとして採用されています。このサイトはGiblogで製作されています。