ファイルとは
- 何らかのデータを保持し
- 何らかのデータとは、テキスト、画像、
- パーミッションや更新時間などの付帯情報を保持しており
- 名前で指定して閲覧・実行ができるものである
ファイルの種類
- Regular File
- 画像。動画。テキストなど。
- Directory
- このファイルの中に、入っているファイル一覧
- Symbolic Link
- このファイルが指し示す一つのファイル
- Device File
シンボリックリンクとハードリンク
本には書かれていないので、自分で確認したことを記載。
$ echo 'hogehoge' > ln.txt $ ln -s ln.txt ln_soft.txt $ ln ln.txt ln_hard.txt $ ls -li total 32 56944157 -rw-r--r-- 2 shuhei_morioka admin 9 2 5 20:49 ln.txt 56944157 -rw-r--r-- 2 shuhei_morioka admin 9 2 5 20:49 ln_hard.txt 56944166 lrwxr-xr-x 1 shuhei_morioka admin 6 2 5 20:49 ln_soft.txt -> ln.txt
このような形でハードリンクとソフトリンクを使って、ファイルを生成しました。
$ cat ln_soft.txt hogehoge $ cat ln_soft.txt cat: ln_soft.txt: No such file or directory $ cat ln_hard.txt hogehoge
ソフトリンクは参照しているファイルを削除してしまうと、何のファイルにもアクセスできなくなってしまいます。しかし、ハードリンクでは直接アクセスするためのi-nodeをリンク元のファイルと共有しているため、リンク元のファイルが削除されてもアクセスすることが出来ます。
ソフトリンクでは、リンク先のパスのみを保持しているため、新しいファイルを元のパスに配置すると読み込んでくれるようになります。
$ readlink ln_soft.txt ln.txt $ echo 'fugafuga' > ln.txt $ cat ln_soft.txt fugafuga
このようにソフトリンクの方が、プログラムから扱いやすそうに見えます。
Linux: ハードリンクと inode - Qiita シンボリックリンクとハードリンクの違い - Qiita
ファイルシステム
物理的なディスクをパーティションとして区切り、その上にファイルシステムをマウントさせることで、ファイルを扱う土台となるディレクトリツリーが出来上がります。以下、macosとamazon linuxでファイルシステムが違うよということの確認していきます。
# macosで実行した結果 ➜ ~ mount /dev/disk1 on / (hfs, local, journaled) devfs on /dev (devfs, local, nobrowse) map -hosts on /net (autofs, nosuid, automounted, nobrowse) map auto_home on /home (autofs, automounted, nobrowse)
# amazon linuxで実行した結果 ec2-user@bastion ~ $ mount -t ext4 /dev/xvda1 on / type ext4 (rw,noatime,data=ordered)
プロセスとは
動作中のプログラムのこと。helloというプログラムを動かすと、helloプロセスが生成される。 プログラムとプロセスは1対多の関係であり、プロセスのユニーク性の識別するには Process ID を用いる。プロセスへ命令するものは シグナル と呼ばれ、よく使われるものとして Ctrl + c の割り込みシグナルなどがある。
ストリームとは
バイトが流れる通り道。つまり byte streamのこと。本書独自の用語である。 プロセスからファイルにアクセスするとき、プロセスはシステムコールを使って、ファイルやプロセスにアクセスするためのストリームを作る。
ファイルにアクセスができるので、テキストや画像だけでなく、ファイルの一種であるデバイスファイル(キャラクタデバイスであるモデムや、ブロックデバイスである HDD/SSDなど)にもアクセスすることができる。
プロセスとプロセスの間でストリームを通じて行われるデータのやりとりをプロセス間通信と呼ぶ。プロセス間通信の中には、下記の2つのやりとりが存在する。
- パイプ
- ストリームの向き先に別のプロセスを用意すること
- ネットワーク通信
- ストリームを別のコンピューターまで伸ばすこと
まとめ
- 画像・テキストが格納されていたり、プログラムが記載されていたりする ファイル
- プログラムを実際に実行している プロセス
- プロセスが実行した結果をディスプレイ、ファイルなどに出力するためのデータの流れを作り出す ストリーム
この3点がLinux世界を構築する上で重要な概念である。