UNIX系OS

このページでは、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バッファ法(奥行きで陰面消去)
  • アンチエイリアシング(ギザギザを中間色でなめらかに)/ディザリング(少ない色数で多くの階調に見せる)
  • シェーディング(陰を付ける)/テクスチャマッピング(模様を貼る)/ブレンディング(半透明で重ねる)/モーフィング(形を滑らかに変える)

← 05 ソフトウェアの目次に戻る

タイトルとURLをコピーしました