Unixファイル管理関連
ファイルの種類
Unixで使用するファイルはいずれかの種類になる。
通常ファイル
シンボリックリンク(後述)
パイプ、名前付きパイプ
- 「書き込んだデータをその順に読み込むことができる」特殊なファイル
- ls -lコマンドで出力すると、行頭のファイルの種類がpで表される。
mkfifo named_pipe
で作成可能- see https://qiita.com/akym03/items/aadef9638f78e222de22#%E6%A8%99%E6%BA%96%E3%82%B9%E3%83%88%E3%83%AA%E3%83%BC%E3%83%A0
ソケット
- 「通信を行うための拠点となる」特殊なファイル
- パイプと同様、一般には無名のファイルとして、ファイルシステム上には見えない存在ですが、特定の通信方法に限っては「名前付き」のソケットをファイルとして作成することも可能。
- see https://qiita.com/akym03/items/aadef9638f78e222de22#%E6%A8%99%E6%BA%96%E3%82%B9%E3%83%88%E3%83%AA%E3%83%BC%E3%83%A0
from https://qiita.com/angel_p_57/items/1faafa275525469788b4#%E3%83%91%E3%82%A4%E3%83%97fifo%E3%82%B9%E3%83%9A%E3%82%B7%E3%83%A3%E3%83%AB https://qiita.com/angel_p_57/items/1faafa275525469788b4#%E3%82%BD%E3%82%B1%E3%83%83%E3%83%88 https://qiita.com/akym03/items/aadef9638f78e222de22#%E6%A8%99%E6%BA%96%E3%82%B9%E3%83%88%E3%83%AA%E3%83%BC%E3%83%A0
ハードリンク
ハードリンクは(ほぼ)Unix系のOSにしかない機能です。 ハードリンクを使うことで、ファイルに対して別名を付けることができます。
ハードリンクの特性は以下の通りです。
- ファイルの実態に対して直接リンクするイメージ
- 一つの実態のファイルに対して、異なるディレクトリ、同じディレクトリ内に複数のリンクを持つことができる。
- リンク元のファイルのアクセスする方法と同じ方法でアクセスする
- リンク元ファイルを編集すればリンク先のファイルも変更される
- すべてのリンクがなくなるまで実態は消えない(リンク元だけを削除してもディスク上のデータは残り続ける。)
リンクを作成するには、ln
コマンドを使用します。
ln <origin hard link> <new hard link>
from https://www.infraexpert.com/infra/linux32.html
ただし、以下の点は制限があります。
シンボリックリンク
windowsのショートカットと同じ。 リンク元ファイルを参照し、ディスク上の実態にアクセスするわけではない。 したがって、オリジナルのハードリンクを削除してしまえばシンボリックリンクも無効になる。
シンボリックリンクができたのはハードリンクのデメリットをカバーするためだ。 つまり、
リンクを作成するコマンドは、ln -s
のオプションを使用する。
ln <origin hard link> <new hard link>
iノード
UNIXではファイルの内容とファイルのメタ情報を明確に区別しています。 ファイルを取り扱うのにファイルシステムが必要とするすべての情報はiノードと呼ばれるデータ構造に含まれています。 各ファイルごとにiノードが存在し、ファイルシステムを特定するために使用されます。
iノードに含まれる情報はPOSIXが定めてます。
- ファイルの種類
- ハードリンクの数
- ファイルのバイト長
- デバイス番号
- ファイルを識別するiノード番号。ファイルシステムにて使用
- ユーザーID
- ユーザーグループID
- タイムスタンプ
- iノード変更時刻
- 最終アクセス時刻
- 最終変更時刻
- アクセス権とファイルのモード
ファイルのiノード情報を調べるにはstat
コマンドが有用だ。
stat -l program
実行結果例
File: "program" Size: 4096 Blocks: 8 IO Block: 4096 Directory Device: 303h/771d Inode: 6062517 Links: 2 Access: (0775/drwxrwxr-x) Uid: ( 500/noriyu-k) Gid: ( 500/noriyu-k) Access: Mon Feb 18 00:40:35 2002 Modify: Mon Feb 18 00:35:23 2002 Change: Mon Feb 18 02:52:58 2002
アクセス権とファイルのモード
ファイルには
- ファイルの所有者
- ファイルのグループ
- それ以外のユーザー
のそれぞれに対して
- 読み込み
- 書き込み
- 実行
の三つを定義できる。
加えて、ファイルのモードを定義できる三つのフラグが存在する。 通常、ファイルを実行中のプロセスは、プロセス所有者のUIDで実行される。 このプロセスのUIDを変更できる。
- suid:実行時にsuidフラグが設定されていると、プロセスはファイル所有者のUIDで実行される。
- sgid:実行時にsgidフラグが設定されていると、プロセスはファイルのグループIDで実行される。
さらに特殊なモードとして、sticky
モードが存在する。
- sticky:実行が終了した後も、メモリ内にプログラムを残しておくようにカーネルへ要求する。
具体例は、
/tmp
など。