ファイル・ディレクトリとシェル操作
ルート・ホーム・カレントの3つのディレクトリと、絶対パス・相対パス(「.」と「..」)を区別して、パスの移動を自分でたどれるようになる。あわせて、アクセス権の8進数推定、ブロック割当てのセクタ数計算、アーカイバ・シェル・リダイレクト・パイプの用語問題を解けるようになる。
パスの移動やセクタ数の計算は、手順どおりに進めれば確実に1点取れる問題です。シェル・リダイレクト・パイプは、API の入出力をつなぐ感覚で理解でき、実務でサーバのログを読むときにもそのまま役立ちます。
このレッスンで稽古する(用語チェック・過去問)結論:ディレクトリは3種類、パスは2種類
ファイルは**木の形(階層)**で管理されています。ディレクトリはフォルダのことです。試験で区別させられるのは次の3つです。
| 名前 | 意味 | たとえ(会社のビル) |
|---|---|---|
| ルートディレクトリ | システム全体の最上位。全員共通の根っこ | ビルの正面玄関 |
| ホームディレクトリ | 利用者ごとに用意される自分用の最上位。普段のファイル保存はここから | 自分に割り当てられた個室 |
| カレントディレクトリ | いま作業している場所。移動すると変わる | いま立っている部屋 |
「一般の利用者がファイル保存に使う最上位」と聞かれたら答えはホームです。「最上位」という言葉につられてルートを選ばないようにしましょう。
絶対パスと相対パス
パスとは、ファイルまでの道順を書いたものです。どこを出発点にするかで2種類に分かれます。
| 種類 | 出発点 | 書き方の目印(試験の表記) | 特徴 |
|---|---|---|---|
| 絶対パス | ルートディレクトリ | 先頭が「¥」 | どこにいても同じ場所を指す |
| 相対パス | カレントディレクトリ | 先頭が「.」「..」、またはディレクトリ名 | 今いる場所によって指す先が変わる |
- 「.」は今いるディレクトリ、「..」は1つ上のディレクトリを表します。
- 試験ではUNIXの「/」の代わりに「¥」で区切ることが多いです。問題文の〔指定方法〕に必ず書かれているので、まずそこを読みましょう。
- 「ホームディレクトリから」「カレントディレクトリから」と書かれた選択肢は、絶対パスの説明としては誤りです。
パス移動のトレース(最頻出)
本試験と免除試験で合わせて11回出ています。方法はひとつで、カレントの位置を紙に書き、1手ずつ更新するだけです。
3つのルール
- 「¥」で始まる → ルートからやり直す(それまでの位置は捨てる)
- 「..」→ 末尾のディレクトリを1つ消す
- 「.」→ 何もしない。ディレクトリ名 → 末尾に1つ足す
「..¥B」は「1つ上がってから B に入る」という2つの操作です。「¥」で区切った部品ごとに処理しましょう。
例として、¥A¥B → .. → ..¥B → .¥A の順に移動した場合(2009年秋)をたどります。
| 手順 | 操作 | カレント |
|---|---|---|
| 1 | ¥A¥B(¥始まりなのでルートから) | ¥A¥B |
| 2 | ..(1つ上) | ¥A |
| 3 | ..¥B(上がって B に入る) | ¥B |
| 4 | .¥A(今いる場所の下の A) | ¥B¥A |
flowchart TD
R["ルート"] --> A1["A"]
R --> B1["B"]
A1 --> AA["A"]
A1 --> AB["B(手順1)"]
B1 --> BA["A(最終位置)"]
B1 --> BB["B"]
アクセス権の8進数(試行結果から推理する)
アクセス権は、ファイルを読む・書く・実行する権限のことです。3つの権限にそれぞれ1ビットずつ割り当てるので、3ビットで0〜7の数字1つにまとめられます。各ビットの値は4・2・1です。
この問題の要点は、どのビットがどの権限かを試行結果から推理することです。UNIXでは「4=読取り、2=書込み、1=実行」が一般的ですが、それを当てはめると間違えます(問題のビットの割当てが違うため)。
| 値 | 2進数 | 試行結果 |
|---|---|---|
| 0 | 000 | 何もできない |
| 3 | 011 | 読取り・書込みはできるが、実行はできない |
| 7 | 111 | 全部できる |
3(2+1)で読取りと書込みができたので、2と1が読取り・書込みです。残る4が実行になります。どちらが読取りでどちらが書込みかはここからは決まりませんが、それでも答えは選べます。
ブロック単位の割当て(切り上げ計算)
ディスクはセクタ(読み書きの最小単位)に分かれています。ファイルはさらに、セクタをいくつか束ねたブロック単位で割り当てられます。たとえるなら、ケーキを1個だけ欲しくても、店が「8個入りの箱」単位でしか売らない状態です。
- ファイルが小さくても、ブロック1つ分を丸ごと使います。使われずに余った部分を内部断片化といいます。
- 計算の手順は、ファイルサイズ ÷ ブロックサイズを切り上げ → ブロック数 × 1ブロックのセクタ数、です。
- 「空き領域が最大の媒体を選ぶ」タイプの問題は、各媒体の使用量を表にして1件ずつ足していけば解けます(例題参照)。
アーカイバ・シェル・リダイレクト・パイプ
アーカイバは、複数のファイルを1つにまとめたり、元に戻したりする道具です。バックアップや配布に使い、圧縮を伴うこともあります(zip など)。似た名前のユーティリティとの区別がよく問われます。
| 機能 | すること |
|---|---|
| アーカイバ | 複数ファイルを1つにまとめる・元に戻す |
| フォーマッタ | ディスクにデータ領域と管理領域を作る |
| デフラグ | 断片化したファイルを連続した領域に並べ直す |
| ダンプ | 主記憶やレジスタの内容を一時的に別の装置へ書き出す |
| ミラーリング | 同じデータを2台のディスクに書く |
シェルは、利用者が入力したコマンドを解釈し、OSに実行を指示するプログラムです(コマンドインタプリタ)。受付窓口がお客さんの依頼を聞き取って奥の担当者に渡すイメージです。
| 機能 | 記号の例 | つなぐ先 |
|---|---|---|
| リダイレクト | < 入力切替、> 出力切替、>> 追記 |
コマンド ⇔ ファイル |
| パイプ | | |
コマンドの出力 → 別のコマンドの入力 |
- リダイレクトは、入力も出力も切り替えられ、追記もできます。「〜はできない」と制限を付けた選択肢は誤りです。
- UNIXはマルチユーザ・マルチタスクのOSで、入出力装置をファイルと同じように扱えます(デバイスファイル)。「ドライブ名:」で始まる絶対パスはWindowsの書き方です。
どの移動で ¥B¥A¥B に着くか(選択肢を1つずつたどる)
ア ¥A → ..¥B → .¥A¥B
イ ¥B → .¥B¥A → ..¥B
ウ ¥B → ¥A → ¥B
エ ¥B¥A → ..¥B
解き方と答えを見る
- ゴールは ¥B¥A¥B。各選択肢について、カレントを書きながら1手ずつ進める
- ア:¥A → カレント ¥A
- ア:..¥B → まず .. で ルート、次に B へ入って ¥B
- ア:.¥A¥B → 今いる ¥B の下の A、さらにその下の B へ進み ¥B¥A¥B。ゴールに一致する
- 念のため確認:イは ¥B → ¥B¥B¥A → ..¥B で ¥B¥B¥B。ウは ¥ 始まりが3回なので、最後の ¥B がそのまま答えになり ¥B。エは ¥B¥A → ..¥B で ¥B¥B
答え:ア
相対パス .¥..¥..¥a¥b¥file を絶対パスに直す
ア ¥a¥b¥file
イ ¥a¥a¥b¥file
ウ ¥a¥a¥a¥b¥file
エ ¥a¥a¥b¥a¥b¥file
解き方と答えを見る
- 出発点(カレント)は ¥a¥a¥b¥c
- . → 何もしないので ¥a¥a¥b¥c のまま
- 1回目の .. → 末尾の c を消して ¥a¥a¥b
- 2回目の .. → 末尾の b を消して ¥a¥a
- a → ¥a¥a¥a、b → ¥a¥a¥a¥b、最後にファイル名を付けて ¥a¥a¥a¥b¥file
答え:ウ(¥a¥a¥a¥b¥file)
試行結果からビットの割当てを推理する
ア 2 を設定すると,読取りと実行ができる。
イ 4 を設定すると,実行だけができる。
ウ 5 を設定すると,書込みだけができる。
エ 6 を設定すると,読取りと書込みができる。
解き方と答えを見る
- 3 = 011(2+1)で読取りと書込みができた → ビット2とビット1が読取りと書込みを担当している
- 7 = 111 で全部できた → 残るビット4が実行
- ア:2 = 010 は読取りか書込みの片方だけ。実行は含まないので誤り
- イ:4 = 100 は実行だけ。正しい
- ウ:5 = 101 は実行+片方。書込みだけではないので誤り。エ:6 = 110 は実行+片方。読取りと書込みの両方ではないので誤り
答え:イ
ブロック単位で割り当てたときのセクタ数
ア 22
イ 26
ウ 28
エ 32
解き方と答えを見る
- 1ブロック = 500バイト × 8セクタ = 4,000バイト
- 2,000バイトのファイル:2,000 ÷ 4,000 = 0.5 → 切り上げて1ブロック = 8セクタ
- 9,000バイトのファイル:9,000 ÷ 4,000 = 2.25 → 切り上げて3ブロック = 3 × 8 = 24セクタ
- 合計:8 + 24 = 32セクタ
- よくある誤り:セクタ単位で計算すると 4 + 18 = 22 になる(ア)。ブロック単位で割り当てることを忘れない
答え:エ(32)
空き最大の媒体に順に割り当てる
ア A,B,C
イ A,C,B
ウ B,A,C
エ C,B,A
出典:基本情報技術者試験 科目A免除 修了試験 20180610 実施分 問18
解き方と答えを見る
- 初めは A=0、B=0、C=0(容量は同じなので、使用量が最小=空きが最大)
- 90:3つとも同じなので、優先順で A → A=90
- 30:B と C が同じなので B → B=30
- 40:C が最小 → C=40
- 40:B(30) が最小 → B=70
- 70:C(40) が最小 → C=110
- 30:A=90、B=70、C=110 なので B が最小 → B=100
- 結果は A=90、B=100、C=110。大きい順に C、B、A
答え:エ(C,B,A)
要点(試験直前に読む)
- 保存に使う自分用の最上位はホーム、全体の最上位はルート、今いる場所はカレント(.)
- 絶対パスはルートから、相対パスはカレントから。先頭の「¥」は「ルートからやり直し」の合図
- パスの移動は位置を書きながら1手ずつ:「..」で1つ消す、名前で1つ足す。「..¥B」は2つの操作
- アクセス権の問題は、試行結果からビットの割当てを決める(UNIXの4=読取りは当てはめない)
- セクタ数は、ブロック単位で切り上げてから「× セクタ数」
- アーカイバ=まとめる・戻す、シェル=コマンドを解釈、リダイレクト=ファイルとつなぐ、パイプ=コマンド同士をつなぐ
ひっかけ
- 「最上位」という言葉でルートを選ばせる → 「一般の利用者が保存に使う」ならホーム
- 絶対パスの説明に「ホームから」「カレントから」「最短の」を混ぜる → 正解は「ルートから」だけ
- アクセス権でUNIXの常識(4=読取り)を使わせる → 問題文の試行結果だけで判断する
- セクタ単位で切り上げた数(22など)を選択肢に置く → ブロック単位で切り上げてからセクタに直す
- パイプとリダイレクトの入れ替え、リダイレクトに「追記できない」といった制限を付ける → コマンド同士ならパイプ、ファイルならリダイレクトで、入出力の切替も追記もできる
用語(17)
ファイルシステム全体の最上位にある、すべてのディレクトリの根っこ。
⚠ ホームディレクトリ:利用者ごとの最上位。「一般の利用者が保存に使う最上位」ならホーム
利用者ごとに用意され、その人がファイルを保存する最上位のディレクトリ。
⚠ ルートはシステム全体の最上位、カレントは今いる場所
いま作業している位置のディレクトリで、「.」で表す。
⚠ ホームディレクトリ:固定された自分用の場所。カレントは移動すると変わる
ルートディレクトリを出発点にして、対象ファイルまでの道順を書いたもの。
⚠ 相対パス:カレントが出発点。「ホームから」「最短の」は絶対パスの説明ではない
カレントディレクトリを出発点にして、対象ファイルまでの道順を書いたもの。
⚠ 先頭が「¥」なら絶対パス。「.」「..」やディレクトリ名で始まれば相対パス
1つ上の階層のディレクトリを表す記号。
⚠ 「.」は今いる場所で、移動しない
ファイルに対する読取り・書込み・実行の許可/不許可を、1ビットずつで表した設定。
⚠ UNIXの一般的な割当て(4=読取り)を前提にせず、問題の試行結果から割当てを推理する
0〜7で表す数で、2進数3ビット分(4・2・1)をちょうど1桁で表せる。
ディスクを読み書きするときの最小単位の区画。
⚠ ブロック:複数のセクタを束ねた、ファイルに割り当てる単位
複数のセクタをまとめた単位で、ファイル領域はこの単位で割り当てられる。
⚠ 計算はセクタ単位ではなく、ブロック単位で切り上げる
割り当てたブロックのうち、ファイルが使わずに余って無駄になる部分。
⚠ フラグメンテーション(外部の断片化):ファイルが飛び飛びの領域に散らばること。デフラグで解消する
複数のファイルを1つにまとめたり元に戻したりするユーティリティで、バックアップや配布に使う。
⚠ フォーマッタは領域作成、デフラグは再配置、ダンプは主記憶の書き出し、ミラーリングは二重化
利用者が入力したコマンドを解釈し、OSに実行を指示するプログラム(コマンドインタプリタ)。
⚠ ショートカット操作や排他制御の説明ではない
コマンドが既定で使う入力元(通常はキーボード)と出力先(通常は画面)。
標準入力・標準出力の行き先をファイルに切り替える機能で、追記もできる。
⚠ パイプ:つなぐ先がファイルではなく、別のコマンド
あるコマンドの標準出力を、別のコマンドの標準入力に直接つなぐ機能。
⚠ リダイレクト:つなぐ先がファイル
UNIXで、入出力装置を普通のファイルと同じように扱うための特別なファイル。
このレッスンの過去問
- UNIXディレクトリの種類(ホーム・ルート・カレント)平成22年度 春期 基本情報技術者試験 午前 問21
- ディレクトリの絶対パスと相対パス平成30年度 春期 基本情報技術者試験 午前 問17
- ディレクトリの相対パス移動のトレース平成29年度 春期 基本情報技術者試験 午前 問18
- ファイルアクセス権の3ビット8進数表現の推定平成27年度 春期 基本情報技術者試験 午前 問44
- ブロック単位のファイル領域割当て計算(内部断片化)平成27年度 秋期 基本情報技術者試験 午前 問12
- アーカイバの機能平成26年度 春期 基本情報技術者試験 午前 問17
- シェルの役割(コマンドインタプリタ)基本情報技術者試験 科目A免除 修了試験 20121216 実施分 問23
- シェルのリダイレクト機能平成24年度 春期 基本情報技術者試験 午前 問24
- UNIXのパイプ機能平成28年度 春期 基本情報技術者試験 午前 問18