このページでは、UNIX系OSのファイルの木構造とパス、iノード、シェル・パイプ・リダイレクション、OSSの定義、CGの基本技術がわかります。
- 一言で言うと:
- UNIX(とLinuxなど)の基本の話。ファイルを木の形で管理する仕組み、コマンドをつなぐ道具(リダイレクション、パイプ)、誰でも使えて改変できるOSS、それにおまけでCG(コンピュータグラフィックス)の用語が出てくる。
ファイルの置き方(ファイルシステムとファイル)→ 基本用語(シェル・パイプ・ソケット・デーモン)→ みんなで作るソフト(OSS)→ 絵を描く技術(CG)
覚え方の軸
- UNIXは「何でもファイル」:
- 普通のデータ(通常ファイル)、入れ物(ディレクトリファイル)、装置(特殊ファイル)の3種類
- パスは「どこから出発するか」で2種類:
- ルート(/)から=絶対パス、今いる場所から=相対パス。「.」は自分、「..」は1つ上
- ファイル名と中身は別々に管理する:
- ディレクトリファイルは「ファイル名 → iノード番号」の対応表、iノードに「所有者・サイズ・アクセス権・データの場所」などの実体情報
- 入出力の流れを変える記号:
- 「>」はファイルへ上書き、「>>」はファイルへ追加、「|」は次のコマンドへ渡す
- CGは「形を作る → 絵にする → 見た目を整える」:
- モデリング(サーフェスモデル、メタボール)→ レンダリング(レイトレーシング、ラジオシティ、Zバッファ)→ 仕上げ(シェーディング、テクスチャマッピング、アンチエイリアシング、ディザリングなど)
ファイルシステムの構造とファイル:ファイルは1本の木で管理する
- ファイルシステム:
- 記憶装置の中にファイルを記録する仕組み
- UNIXはファイル指向システム:
- ファイルシステムはディレクトリ構造の階層構造。すべてのファイルを1つの木構造で管理する
- ルートディレクトリ:
- 階層構造の最上位のディレクトリ。ルートや任意のディレクトリから、すべてのファイルをたどれる
- パス名:
- 目的のファイルまでの経路(パス)を表したもの。たどるディレクトリを「/」で区切って書く
- 絶対パス名:
- ルートディレクトリから目的のファイルまでのパス。「/」から始まる
- 相対パス名:
- カレントディレクトリから目的のファイルまでのパス
- 「.」:
- カレントディレクトリ自身
- 「..」:
- 親ディレクトリ(1つ上)
- カレントディレクトリ:
- 今、作業しているディレクトリ
- ホームディレクトリ:
- アカウントを持つユーザに割り当てられるディレクトリ。ログインするとホームディレクトリがカレントディレクトリになり、作業の大部分をここで行う
- 例題:
- 構造:
- ルートの下に home と etc。home の下に taro と hana。taro の下に memo.txt。hana の下に memo.txt と todo.txt。etc の下に hosts
- hana の中の memo.txt の絶対パス名:
- /home/hana/memo.txt
- カレントディレクトリが hana のとき、hana の中の todo.txt の相対パス名:
- ./todo.txt(単に todo.txt でもよい)
- カレントディレクトリが hana のとき、taro の中の memo.txt の相対パス名:
- ../taro/memo.txt(1つ上の home に上がって、taro に入る)
- カレントディレクトリが hana のとき、etc の中の hosts の相対パス名:
- ../../etc/hosts(home、ルートと2つ上がって、etc に入る)
- 構造:
- ファイルの3つの種類
| 種類 | 中身 |
|---|---|
| 通常(ノーマル)ファイル | テキストやソースプログラムなど。一般に「ファイル」といえばこれ |
| ディレクトリファイル(ディレクトリ) | 別のディレクトリ(サブディレクトリ)を含め、いくつものファイルを入れる「入れ物」。実際は、ファイル名とファイルの実体を対応づけるためのファイル |
| 特殊ファイル(スペシャルファイル) | 磁気ディスクなどの入出力装置にアクセスするためのファイル |
- ディレクトリ:
- Windowsでいうフォルダ
- ディレクトリファイルの中身:
- ファイル名とiノード番号の組(例:memo.txt → 120、todo.txt → 121)
- iノード:
- ファイルの実体を示す情報を入れた要素。ファイル種類、所有者、サイズ、作成日時/修正日時、アクセス権、データ領域へのポインタなど
- ファイル名はiノードには入っていない(ファイル名はディレクトリファイルの側にある)
- iノード番号:
- iノードを識別する番号
- 例え:
- ディレクトリファイルは「名簿(名前 → 社員番号)」、iノードは「社員番号ごとの個人カード(所属、入社日、机の場所など)」
- リンク:
- 既存のファイルに別名を付けて、その名前でもアクセスできる仕組み
- 例:
- /home/hana/memo.txt に note と m という2つの名前でリンクを作ると、どちらの名前でも同じファイルにアクセスできる
- リンクファイル:
- リンクで別名を付けたファイル
- 特殊ファイルの2種類(装置がどんな単位でデータを扱うかで分ける)
- キャラクタスペシャルファイル:
- 端末やプリンタなど、文字単位で入出力する装置
- ブロックスペシャルファイル:
- 磁気ディスクなど、ブロック単位で入出力する装置
- キャラクタスペシャルファイル:
- 補足:
- UNIXでは、システムにつながっているすべての周辺装置を、ディレクトリ階層の中のファイルとして扱う
UNIX系OSの基本用語
- シェル:
- ユーザとOS(カーネル)の間のインタフェースとなるプログラム
- ユーザが入力したコマンドを解釈し、対応する機能を実行するようOSに指示し、OSからの結果をユーザに返す(表示する)
- シェルはシステムに固定して組み込まれているものではない。各ユーザが好きなシェルを指定できる
- 例え:
- カーネルが「厨房」なら、シェルは注文を聞いて厨房に伝える「ホール係」
- ログインシェル:
- ログインしたときに起動される最初のシェル
- リダイレクション:
- コマンドの入力や出力の行き先を切り替える機能
- ls > out:
- lsの結果を、標準出力(ふつうは画面)ではなく、out というファイルに出力する(上書き)
- ls >> out:
- 結果を out ファイルに追加する
- パイプ:
- コマンド間でデータを受け渡す仕組み。複数のコマンドで、データを連続的に処理するときに使う
- 例:
- ファイルが多くて「ls -l」の結果がスクロールしてしまうとき、「ls -l | more」とすると1画面ずつ表示できる(lsの出力を more の入力にする)
- lsコマンド:
- ディレクトリ内のファイルの情報を表示する。オプション「-l」で詳細を表示する
- moreコマンド:
- ファイルを1画面ずつ分けて表示する
- ソケット:
- アプリケーション間で通信するためのプログラムインタフェース。通信の出入り口(エンドポイント)
- 「プロトコル(TCP、UDP)、IPアドレス、ポート番号」の組合せで、通信ごとのエンドポイントを識別する
- ソケットAにデータを書き込むとソケットBに届き、ソケットBから読める
- デーモン(Daemon):
- OSの機能の一部を提供するプロセス。デーモンプロセスともいう
- OSと同時に、または必要に応じて起動され、その後はバックグラウンドで常に動いて特定のサービスを実行する
- 例:
- Webサーバのhttpd、定期実行のcrondなど(名前の最後のdはdaemonのd)
OSS(オープンソースソフトウェア):誰でも使えて、直せて、配れる
- OSS(Open Source Software):
- ソースコードをインターネットなどで公開し、誰でも利用・改変・再頒布できるようにしたソフトウェア
- OSSの定義:
- OSI(Open Source Initiative)が OSD(The Open Source Definition)で定めている
- OSSの定義(特徴)(★「〜は禁止」「〜を制限しない」系の選択肢に注意)
- 誰もが自由にソースコードを入手・解読・研究できる
- 一定の条件の下で、ソースコードを改変できる
- 自由に再頒布(再配布)できる
- 元のOSSを使って、新しいソフトウェア(派生物)を作れる
- 派生物を他の利用者に再頒布できる
- 再頒布した派生物にも、同じライセンスを適用(継承)できる
- ライセンス条件の下で、作った派生物を譲渡または販売できる(有料で売ってもよい)
- 誰もがOSSを使える(個人や集団に対する差別の禁止)
- 営利目的の企業での使用や、特定の研究分野での使用も許可される(利用する分野に対する差別の禁止)
- 再頒布で追加ライセンスを必要としない
- 特定の製品に依存しない
- 同じ媒体で頒布される他のソフトウェアを制限しない
- 技術的に中立である
- LAMP:
- Web-DB連携システムでよく使うOSSの組合せセット(ソフトウェアバンドル)
- Linux(OS)、Apache(Webサーバ)、MySQL(データベース)、PHP/Perl/Python(プログラム言語)
- LAPP:
- LAMPのデータベースをPostgreSQLにしたもの
- ディストリビュータ:
- OSSの核となるソフトウェア(特にLinuxカーネル)にアプリケーションソフトを加えて、パッケージとして提供する組織
- ディストリビューション:
- ディストリビュータが提供するパッケージ。LinuxディストリビューションにはRedHat系やDebian系がある
- SELinux(Security-Enhanced Linux):
- ディストリビューションではなく、Linuxのセキュリティを強くする拡張モジュール
- root(管理者権限)に制限をかけることで、root権限を奪われたときの影響を最小限にする
コンピュータグラフィックスの基本技術
- CG(Computer Graphics):
- コンピュータグラフィックス
- レンダリング:
- 物体のデータ(形状、表面の質感、光源など)から、ディスプレイに描ける画像や映像を作る処理
- VR(バーチャルリアリティ)のモデリングでは、仮想世界の情報を、ディスプレイに描ける形式の画像に変換する
- 主なレンダリング手法
| 手法 | やり方 |
|---|---|
| レイトレーシング | 視点からの光線(視線)を、スクリーンの画素ごとに1つずつ追跡し、物体との交差判定で見える物体を決める(レイキャスティングが基本)。交点での光の反射・散乱・透過も再帰的に追跡するので、より現実に近い画像になる |
| ラジオシティ法 | 物体の表面で拡散反射された間接光が、他の物体を照らす効果を反映する。物体間の光エネルギーの放射・反射を計算して、拡散反射面の輝度を決める |
| Zバッファ法(深度バッファ法) | 視点から物体までの距離(奥行き)をZバッファに記憶しておき、一番手前の交点を選んで陰面消去(後ろに隠れた面を描かない)を行う |
- その他のCG技術
- アンチエイリアシング:
- 斜め線や曲線の階段状のギザギザ(ジャギー)を目立たなくする。描画色と背景色の中間色を計算し(平均化演算)、境界近くのピクセルに補って滑らかに見せる
- ディザリング:
- 表現できる色数が少ない環境で、いくつかの画素を組み合わせて、見かけ上の色数(階調)を増やす(例:白と黒の点の混ぜ方で灰色に見せる)
- シェーディング:
- 立体感を出すため、物体の表面に陰付けをする
- テクスチャマッピング:
- モデリングした物体の表面に、柄や模様を貼り付ける
- ブレンディング:
- 画像を半透明にして、別の画像と重ね合わせる
- モーフィング:
- ある形から別の形へ滑らかに変化する様子を表すため、中間の画像を複数作る
- メタボール:
- 球や楕円などの単純な曲面のオブジェクト(メタボール)を変形させてできる曲線で、物体を表す。メタボールどうしを近づけるとつながって形が変わる
- サーフェスモデル:
- ポリゴン(三角形や四角形などの多角形)や曲面パッチで、物体の形を表面だけで表す
- アンチエイリアシング:
混同しやすいペア
- 絶対パス名(ルート「/」から)/相対パス名(カレントディレクトリから)
- 「.」(自分のディレクトリ)/「..」(親ディレクトリ)
- カレントディレクトリ(今いる場所)/ホームディレクトリ(ログインしたときの自分の場所)
- ディレクトリファイル(ファイル名 → iノード番号)/iノード(所有者、サイズ、アクセス権、データの場所。ファイル名は持たない)
- キャラクタスペシャルファイル(文字単位。端末、プリンタ)/ブロックスペシャルファイル(ブロック単位。磁気ディスク)
- リダイレクション(ファイルとの入出力を切り替える。> は上書き、>> は追加)/パイプ(コマンドからコマンドへ渡す。|)
- シェル(ユーザとカーネルの通訳)/デーモン(裏で常に動くサービスのプロセス)
- ソケット(アプリ間通信の出入り口。プロトコル+IPアドレス+ポート番号)/パイプ(同じコンピュータ内のコマンド間の受け渡し)
- LAMP(MySQL)/LAPP(PostgreSQL)
- ディストリビューション(Linuxのパッケージ。RedHat系、Debian系)/SELinux(セキュリティの拡張モジュール。rootに制限をかける)
- レイトレーシング(光線を追跡。反射や透過まで)/ラジオシティ法(拡散反射の間接光)/Zバッファ法(奥行きで陰面消去)
- アンチエイリアシング(ギザギザを中間色でなめらかに)/ディザリング(少ない色数で多くの階調に見せる)
- シェーディング(陰を付ける)/テクスチャマッピング(模様を貼る)/ブレンディング(半透明で重ねる)/モーフィング(形を滑らかに変える)