UNIX / Linuxの基礎知識

1. UNIX / Linuxとは

UNIX

UNIX(ユニックス)は、OSの一つで1969年に AT&T Bell研究所がアセンブリ言語で開発し、1971年に公開されたOSです。その後、1973年にはシステムのほぼ全体がC言語で書き直されました。
公開当時、UNIX以外のOSはいくつもあったものの、アセンブリ言語からC言語に置き換えたことによって開発や異なる機種への移植が容易になり、教育や実用的に広く使われるようになります。それから現在に至るまで、UNIXはさまざまなUNIX/Linux系OSの基礎となると同時に、その他多くのOSへ影響を与えました。

Linux

Linux(リナックス)は、1991年に学生だったLinus Benedict Torovalds氏が開発した、Unix系(Unix like)のOSで、LinuxはUNIXと同等の機能を備えつつ、オープンソース(自由に入手、使用、開発、改変、再配布ができる)であることが特徴です。
その後、世界中の開発者たちのボランティアによって開発・維持を続け、オリジナルのLinuxを元に各開発者がカスタマイズしたディトリビューションが数多く配布されています。

auto_stories用語集

アセンブリ言語 (assembly language)

CPUの処理を命令する機械語に一対一で対応する簡略記憶記号(ニーモニック)で記述するプログラミング言語。通常、機械語は2進数(0と1)で表記されるため、ニーモニックを用いることで人間が理解しやすくすることを目的としています。
(画像 : アセンブリ言語の例)

main:
    pushl   %ebp
    movl    %esp, %ebp 
    subl    $16, %esp
    movl    $0, -4(%ebp) 
    movl    -4(%ebp), %eax 
    addl    $2, %eax
    movl    %eax, -4(%ebp) 
    movl    $0, %eax
    leave
    ret

Linus Benedict Torvalds

フィンランド、ヘルシンキ生まれ (1969年12月28日) ヘルシンキ大学卒業 Linuxカーネルの開発者

ディストリビューション(distribution)

ハードウェアの制御やファイルの実行、リソースなどの管理を行うOSの中核部分のことをカーネル(kernel)といい、カーネルとその他のOSを形成するソフトウェア群をひとつにまとめた配布形態をディストリビューション(distribution)と呼びます。
ディストリビューションとして配布することで、開発者は1からOSを構築をするという労力を削減できるというメリットがあります。
Linuxのディストリビューションには大きく3つの系統があり、Slackware系Redhat系Debian系があります。

2. GUI / CUIとは

UI

一般的に、ユーザー(User)と デバイスやサービスとを結びつける(Interface)ものをUI(User Interface)いいます。
Webサービスであれば、サイトのデザインやフォントのサイズ、ゲームであれば、ボタンの大きさや操作感など、見やすさ・使いやすさに繋がるものがUIにあたります。

GUI

GUI(Graphical User Interface)とは、グラフィカル(絵画的)に表現されるUIのことです。画像やアイコンを画面上に表示することで、ユーザーは直感的な操作をすることができます。

CUI

CUI(Character User Interface)とは、キャラクタ(文字)で表現されるUIのことです。マウスで操作するGUIとは異なり、CUIはキーボードでコマンドを入力して操作します。
以降、この記事ではCUIを使用します。

warning_amber

CAUTION

なぜ、CUIを使うの?

CUIを使う最大のメリットは、一度に多くの処理ができるということです。
後ほど詳しく説明しますが、正規表現論理演算子を用いることで、たとえば、一度に100個のファイルを作成することができます。
CUIに慣れないうちは操作が大変かもしれませんが、使いこなせれば作業効率が大幅に上がりますので、なるべく早く慣れるために普段からCUIを使用するよう心がけましょう。

3. ファイルツリーとは

ファイル

OSのファイルシステムが管理するひとかたまりのデータの単位のことをファイル(file)といいます。
ファイル名や属性、サイズや保護情報など、データにファイルの管理情報を付加することで、ユーザーやシステムがデータを管理しやすくなります。

ディレクトリ

ディレクトリ(directory)とは、ファイルを階層化して分類・管理するための概念で、ファイルを格納するための入れ物のような振る舞いをします。
WindowsやMacOSなどでは、フォルダ(folder)ともいいます。

warning_amber

CAUTION

実際は、属性がディレクトリとなっているだけで、OSのファイルシステム上ではディレクトリも通常のファイルとして保存されており、中身にはファイルの管理情報などが格納されています。本題から外れてしまうため詳しい内容は説明しませんが、興味のある人はインターネットや書籍で調べてみましょう。

ファイルツリー

上でも述べた通り、ディレクトリとファイルは階層構造になっており、それぞれが接続関係を持っています。UNIXにおけるこの関係は、あるディレクトリから枝分かれをしてファイルを枝の先の葉とした木(tree)に見立てることができ、これを木構造(tree structure)、特にこの場合ではファイルツリー(file tree)といいます。
ここでは、この記事を作成するにあたって参考にした書籍になぞって、ディレクトリとファイルを以下のような記号で表すことにします。

以下はファイルツリーの図です。接続関係を持つディレクトリとファイルを線分で結び、記号の上にはそれぞれのファイルの名前を書きます。

ホームディレクトリ

UNIXシステムでは各ユーザーに対して、ホームディレクトリ(home directory)と呼ばれる特別なディレクトリが割り当てられ、ディレクトリ名を特に指定しない限り、各ユーザーは自分のログイン名と同じ名前のホームディレクトリ下で操作をすることになります。
自分が所有するホームディレクトリ内では、システム管理者が与えた権限を超えない範囲でファイルやディレクトリを作成したり、逆に削除したりすることができます。

ルートディレクトリ

上のファイルツリーの図の一番左にあるディレクトリは、木構造の根(root)の部分に見立ててルートディレクトリ(root directory)と呼ばれます。
ルートディレクトリには他のディレクトリのような名前は付けられないため、図の記号の上にもディレクトリ名は記述しません。
また、ルートディレクトリは全てのユーザーに対して共通のディレクトリになっているため、システム管理者以外のユーザーは、ルートディレクトリ内にあるファイルやディレクトリを削除・変更できない場合がほとんどです。

カレントディレクトリ

今現在の時点で操作対象となっているディレクトリのことを、現在という意味の形容詞カレント(current)を用いてカレントディレクトリ(current directory)といいます。

4. ファイルの指定法

親と子

ファイルツリーにおいて、あるディレクトリから見て自分自身と接続関係をもち、自分自身よりも階層が1つ下にあるファイルやディレクトリのことを子(child)と呼びます。また、それとは逆に、自分自身と接続関係を持ちながら1つ上の階層にあるディレクトリのことを親(parent)といいます。
たとえば、以下のようなファイルツリーではuser1にとって、dir1dirMは子であり、homeは親となります。
なお、親と子の関係の間には以下のような制約があることに注意してください。

  • 同じ親を持つファイルやディレクトリ同士の名前は、互いにユニーク(一意的)である
  • 一般に、ファイルは必ず親を持ち、子を持つことはない
  • ルートディレクトリは親を持たない
  • 絶対パス名

    あるファイルの場所を指定する方法の1つとして、ルートディレクトリを基準にファイル名への道すじをトップダウンに表記した絶対パス名(absolute pathname)があります。/を最初に書くことでルートディレクトリを表し、そこから目的のファイルに至るまでに辿るディレクトリを、空白を使わずに/で区切って表記します。
    たとえば、上の図でfile1を指定する絶対パス名は/home/user1/dir1/file1になり、file2を指定する絶対パス名は/home/user1/dirM/file2となります。

    絶対パス名の略記方法

    ルートディレクトリからホームディレクトリまでを表す絶対パス名は、ティルド(tilde)という記号~に置き換えることができます。
    たとえば、上の図でuser1というアカウントでログインをしている場合、user1がホームディレクトリとなり、/home/user1/~と表せるため、/home/user1/dir1/file1~/dir1/file1と省略することができます。

    warning_amber

    CAUTION

    user1以外のアカウント名でログインした場合、/home/user1/dir1/file1を絶対パス名で省略するには、user1のというディレクトリ名を指定して~/user1/dir1/file1と表記しなければいけないことに注意しましょう。
    ホームディレクトリ名と同じアカウント名でログインした場合のみ、ホームディレクトリ名を省略することができます。

    相対パス名

    絶対パスではルートディレクトリを基準としてパス名を表記していましたが、それに対し、カレントディレクトリを基準にしてファイルの場所を記述する方法を相対パス(relative pathname)といいます。
    .記号はカレントディレクトリを表し、親のディレクトリは..で表します。
    上の図でdir1をカレントディレクトリとした時のfile1は./file1と表記し、./を省略して単にfile1と表すこともできます。また、dir1をカレントディレクトリとしてfile2を表すには、../dirM/file2のように記述します。

    5. ターミナル / シェルとは

    ターミナル(端末)

    ターミナル(terminal)とは、GUI上でCUIを利用するソフトウェアのことです。
    OSによってターミナルのアプリケーションの名前は異なりますが、どれも同じような動作をするので問題ありません。UbuntuやMacOSなどは標準でUNIX / Linuxコマンドを使えますが、Windowsの場合はWSL(Windows Subsystem for Linux)を有効にする必要があります。

    シェル

    シェル(shell)とは、ターミナルに打ち込んだコマンドをOSの中核部分であるカーネル(kernel)へ伝達する「橋渡し役」のソフトウェアです。有名なものではBashZ Shellなどがあります。

    参考文献

  • 株式会社インターフェイス, Interface 2019年5月号 あなたの知らないモダンOSの世界, CQ出版社.
  • 渡辺成良, 若月光夫, 織田健, UNIXコンピュータリテラシー―ネットワーク時代の計算機利用とモラル 第2版, 共立出版.
  • 佐渡一広, 寺島美昭, 水野忠則, 未来へつなぐデジタルシリーズ 24 コンパイラ, 共立出版.
  • 末永貴一, 第2回 ディストリビューションとは | Linux技術者, LPI-Japan, https://lpi.or.jp/lpic_all/linux/intro/intro02.shtml./li>
  • @tadsan, シェル、ターミナル、コンソール、コマンドライン, Qiita, 2015-09-23, https://qiita.com/tadsan/items/441dcd910537d3f408e5.