ファイルをマスターしよう

カテゴリ: Linux Master / 公開日: 2011年1月23日(日曜)14:58 / 投稿者: Tom Goodsun

ファイルとは一体なんでしょう? Wordで作った文書、画像、テキストファイル、HTML・・・ Linuxではディレクトリも含めすべてファイルとして認識します。例えばWindowsでは拡張子(.txt、.jpgなど)が付いており、ファイルそのものがどういった役割を果たすものなのか決まっています。代表的なものが実行ファイル(.exe)です。これは何らかの処理をするための、Windows上のプログラムです。が、Linuxではこれらは関係ありません。アプリケーション単位では必要になりますが。すべてのファイルはLinuxで有効なものとなります。ただ、ディレクトリは複数のファイルをその中に持つことができるので、Linux上でもファイルという認識をしなくてもいいでしょう。

一般にlsコマンド(リストコマンド)でカレントディレクトリ内のディレクトリとファイルが一覧表示されます。例えばログインした直後は、そのユーザーのホームディレクトリのはずですので、そこでlsコマンドを実行してみましょう。

$ ls

環境によってそれぞれですが、デフォルトは何も見えないはずです。ということはファイルが一つも存在しない・・・というわけではないのです。Windowsでもシステムに関わる重要なファイルは隠しファイルとして、一筋縄では見れないようになっていますし、ユーザーが見れないようにすることができます。実はLinuxにもこの概念があります。Linuxではファイル名やディレクトリ名の先頭に「.(ドット)」をつけると隠しファイルになるのです。そこでリストコマンドにちょっと手を加えてすべてのファイルを表示してみましょう。

$ ls -a

そうすると「.」や「..」とか「.bashrc」とかっていったファイルが見えてきます。これらが隠しファイルなのですが、「.」や「..」というのはそれぞれカレントディレクトリと一つ上のディレクトリ(ペアレントディレクトリ)を意味します。「/」以外のディレクトリにはカレントディレクトリとペアレントディレクトリへのアクセスするためのファイルが存在していることがわかります。

 

先ほどLinuxのファイルには区別がないといいましたが、その証拠にLinuxのファイル名には拡張子が必須でないという概念があります。Windowsではファイル名の最後尾「.」空の2~4文字の文字列には特別な意味があります。それが拡張子ですね。しかし、Linuxにしてみればこれらは何の意味もありません。つまり、Linuxにとって「.」というのは、文字列の先頭に付いている以外は特に何の意味も果たさない、ファイル名の一部に過ぎないのです。

そこでLinuxならではという概念がファイルやディレクトリにはあります。Windowsなどでもありますが、さほど厳密ではないのです。Linuxにはファイルやディレクトリには属性というものが存在します。Windowsにも存在します。Linuxの場合はファイルを所有するユーザー、グループ、権限があります。これは以下のコマンドでを打つことで確認できます。

$ ls -al

その結果が図のようになります。

 

ファイルの所有者やグループは何となく理解できるでしょう。つまり、このファイルがどのユーザーによって使用され、作られるのかがわかります。これに関わるのが権限です。この権限は、ユーザー、グループ、その他のユーザーにそれぞれ実行、読み取り、書き込みができるかどうかを設定しています。Linuxでリストコマンドで表示されるのはアルファベット表記の権限ですが、8進数3桁でこれを表現することができます。何でもできるを現すのは「777」です。これは非常に危険なため、特にこれにする必要があるときにのみ設定します。

ファイルのユーザーやグループを変えるのは「chown(change owner)」や「chgrp(change group)」、権限を変えるのは「chmod(change mode)」というコマンドを使います。特にchmodコマンドは自作プログラムなどを作った時などに実行権限を与えるため、よく使うコマンドです。一番簡単な使い方は以下の通り。

$ chmod 755 ./test.sh 

これはtest.shというファイルに755という権限を与えています。755はファイルの所有者は何でもできるけど、それ以外は見ることしかできない(rootは別)という権限で、これもよく使います。