エンジニア初心者も知っておくべきUNIXの基礎知識
UNIX(ユニックス)はWindowsなどと同じOS(オペレーティングシステム)の一つです。マルチタスクやマルチユーザーに対応し高い安定性を備えた歴史のあるOSであり、企業での導入例も多く見られます。
そんなUNIXとよく似たものとして挙げられるOSがLinux(リナックス)です。しかし、実のところ両者の違いについてあまりよく知らないという方も多いのではないでしょうか。この記事では、エンジニア初心者が知っておくべきUNIXの基本知識やコマンドを解説するとともに、Linuxとの違いについても説明しています。両者の違いを理解した上で、スムーズな業務に役立ててください。
UNIXの基礎知識を理解する
まず、UNIXの基礎知識を理解するところから始めましょう。UNIXを使いこなせるようになるためにも、その歴史や特徴を知っておくことは非常に大切です。また、一口にUNIXといってもさまざまな種類があるので、それぞれの違いについても詳しく解説します。
UNIXとは
前述したようにUNIXとはOSの一種です。そもそもOSとは、コンピューターのシステム全体をコントロールする働きを持つソフトウェアのことを言います。人間の脳をイメージするとわかりやすいでしょう。OSはコンピューターの司令塔となり、CPUやメモリなどのハードウェアを管理しています。よく知られているOSとして、パソコン向けのWindowsやmacOS、スマートフォン・タブレット向けのAndroid OSやiOSが挙げられます。UNIXは、企業などが使うサーバー向けのOSとして認知されています。
UNIXは1969年、AT&T社のベル研究所内で誕生します。当初ベル研究所はMultics(マルティックス)というマルチタスクOSを他企業とともに共同開発していました。しかし、あまりにも巨大で複雑なシステムとなり、商業的には失敗してしまいます。そこでベル研究所は、プロジェクトから離脱し、Multicsの失敗経験をもとに、Multicsの開発メンバーだったケン・トンプソンが軽くてシンプルな「UNICS」というOSを生み出しました。これが後にUNIXと名を変えていきます。
誕生した当初のUNIXの記述方式はアセンブリ言語です。しかしアセンブリ言語は非常に難解である上に、CPUによって記述方法が異なるという欠点がありました。この弱点を克服するためにC言語が開発され、UNIXもC言語で書き直されます。1974年にはソースコードが公開され、UNIXの安定性や汎用性が評価され始めました。これを機にUNIXは広く普及し、現在ではサーバー向けOSの定番としての地位を占めるに至っています。
UNIXの特徴
UNIXの大きな特徴として、以下の4つが挙げられます。
- コマンドラインインターフェース(CLI)
- マルチタスク・マルチユーザーに対応
- 高い安定性
- 特定のハードウェア/アーキテクチャに非依存
それぞれ具体的に解説していきます。
・コマンドラインインターフェース(CLI)
ファイル操作やアプリケーション起動などを行う場合、UNIXではコマンドラインインターフェース(Command Line Interface:CLI)と呼ばれるコマンド操作をするのが基本です。CLIはコンピューターへの指示内容をテキストのみの画面に文字列で入力していくものです。マウスは使わずすべてキーボードで操作するため、動作が軽いのが特徴です。
CLIの対語となるのが、グラフィカルユーザーインターフェース(Graphical User Interface:GUI)です。WindowsやmacOSなどで採用されており、ボタンやアイコン、ウィンドウなどをマウスで直接操作できます。ただしCLIと比較して多くのコンピューターリソースを要求するため、その動作はCLIよりも重くなりがちです。
コマンドを覚えて文字列を入力する必要があるCLIは、最初のうちは使いにくいと感じるかもしれません。しかし、操作に慣れてくるとGUIよりも効率的かつスピーディーにコンピューターを操作できるようになるでしょう。
・マルチタスク・マルチユーザーに対応
マルチタスクとマルチユーザーに対応しているのもUNIXが最初から備えている大きな特徴です。マルチタスクとは1台のコンピューターで複数のプログラムを同時に処理すること、マルチユーザーとは1台のコンピューターに複数のユーザーが同時にログインして使用することを意味します。
マルチタスクもマルチユーザーも現在ではごく当たり前のことですが、UNIXが開発された当時はコンピューターそのものが非常に高価でした。そのため1台のコンピューターをできるだけ効率よく使うために考え出されたと言われているのがマルチタスク、マルチユーザーです。
・高い安定性
UNIXは高い安定性を誇っていることでも人気です。構造が非常にシンプルであること、動作の軽いCLI操作が基本であることなどがその理由と言えるでしょう。サーバー向けのOSというだけあってネットワーク機能にも優れており、コンピューターを長時間稼働させなければならない場合も安定して利用できます。
また、Windowsなどに比べるとUNIXはユーザーが少ないことから、コンピューターウイルスに感染する可能性も低いと言われており、安全に使えるという意味でも高く評価されています。
・特定のハードウェアに依存しない
もともとアセンブリ言語を用いて記述されていたUNIXですが、アセンブリ言語は特定のハードウェアでしか動作しないのが欠点でした。これを解消するために新たに採用されたのがC言語です。
ソースコードをC言語で記述することで機種依存性が下がったほか、一般の間でもUNIXが本格的に普及するきっかけとなりました。また、C言語を扱えるエンジニアも多いことから、自由にカスタマイズできるようになったのも大きな魅力です。
商用と無償
ここでは、商用利用されているUNIXと無償のUNIXについて紹介します。まず、商用化の流れについて知っておきましょう。1974年のソースコード公開後、UNIXは急速に普及し始めます。さまざまな拡張や改良を経て、やがて商用化されるに至ったのは自然な流れと言えるでしょう。現在、UNIXのライセンスはAT&T社が保有しており、ライセンス許諾を受けた企業のみがUNIX開発を行えます。
またUNIXの商標管理をしているのはオープン・グループ(The Open Group:TOG)という団体です。TOGが定めるUNIXの仕様を満たし、認証を受けた上でライセンス料を支払ったOSだけがUNIXという名称を使うことを許されています。
・商用のUNIX
UNIXはSystem V(システムファイブ)とBSD(Berkeley Software Distribution)という2つの系統に分かれて現在も発展中です。コマンド入力などに違いはあるものの、両者の機能を兼ね備えたものも登場しています。
System VはAT&T社が開発した初期の商用UNIXで、これをもとにして旧サン・マイクロシステムズ社(現在はオラクルにより合併されている)のSolaris、ヒューレット・パッカード社のHP-UX、IBM社のAIXなどが開発されてきました。
一方BSDはカリフォルニア大学バークレー校の開発者グループによって開発されたUNIX系OSと関連ソフトウェア群です。
・無償のUNIX
基本的にUNIXは有償で提供されますが、一部例外も存在します。その一例が前述のSolarisであり、2005年に無償化されました。ネットワーク周辺のコード見直し、マルチスレッド処理の性能改善など、600項目以上にわたる機能に改良が加えられています。
UNIX の種類
UNIXに新たな機能を付けるなどして使いやすく改良された派生OSや互換OSも多数登場してきました。以下では、主なUNIXの種類について解説します。
・*BSD
前述したようにカリフォルニア大学バークレー校の開発者グループによって開発されたUNIX系OSと関連ソフトウェア群がBSD(Berkeley Software Distribution:バークレイ・ソフトウェア・ディストリビューション)です。
公開されたBSDのソースコードをベースに、いくつかのOSが開発されています。「~~BSD」という名称のものが多いため、CLIで用いられるワイルドカードを使って「*BSD」と総称されることもあります。安定性や使いやすさで高評価を受けているFreeBSD、約50種類のプラットフォームに対応しているNetBSD、そしてセキュリティに強いと言われるOpenBSDなど、さまざまな派生OSが登場しています。
・SunOS/Solaris
前述の旧サン・マイクロシステムズ社が開発したのがSunOSです。1992年のSunOS 5.xへのバージョンアップに伴い、「Solaris」という名称に変更されました。ビジネスでの利用を前提に開発が進められ、信頼性や安定性を向上させる機能が付与されました。
特筆すべきは、マルチコア・マルチスレッドにいち早く対応したことです。精度を保ちながら複数のタスクの高速処理が可能となりました。
UNIXとLinuxの違い
UNIXと混同されがちなのが、Linuxです(日本では「リナックス」と呼ぶのが一般的です)。コマンド入力による操作をする点、信頼性と安定性において高く評価されている点など、UNIXとの共通点も多いLinuxですが、大きな違いもあります。UNIXとLinuxの違いを以下で解説するので、しっかり理解しましょう。
Linuxとは
Linuxとは1991年に開発されたOSです。当時UNIXの利用にはライセンス契約が必要であり、気軽に利用できないとしてエンジニアの間では不満が募っていました。そこで、リーナス・トーバルズというフィンランドの学生が新たなOSを作り出そうと立ち上がります。UNIXと類似した機能は残しつつも、オリジナルの改良を加えてゼロから生み出されたのがLinuxです。
UNIXとLinuxの相違点
UNIXとLinuxの主な相違点として、次の3つが挙げられます。
- ライセンス
- ファイルシステム
- デフォルトシェル
詳細を1つずつ解説していきます。
・ライセンスの違い
UNIXとLinuxの最も大きな違いはライセンスです。UNIXはAT&T社がライセンスを保有しているため、UNIXを扱うにはライセンス許諾を受けなければなりません。一方Linuxはソースコードが公開されており、基本的には誰でも無料で入手可能であり、改良や再配布も自由に行うことができます。このようなソフトウェアをオープンソースソフトウェア(Open Source Software:OSS)と呼びますが、LinuxはOSSの代表格と言えます。
ただし一部の商用版Linuxの場合、ソースコードは無償利用できてもサポートなどについては有償のものがあることに注意してください。
・ファイルシステムの違い
ファイルシステムにもUNIXとLinuxの違いが見られます。ファイルシステムとは、データの格納場所を管理する仕組みのことです。一口にファイルシステムと言っても、ファイル名の長さや格納できるファイル数、最大サイズなどの違いにより、さまざまな種類があります。
UNIXの場合、よく使われるファイルシステムはFFFS(Fat Fast File System)やZFSなどです。FFFSは近年のUNIXの土台として使用されています。ZFSはSolaris 10から採用されたファイルシステムで、さまざまな機能が充実しているのが特徴です。
一方Linuxではext4というファイルシステムが主に使われます。最大で1エクスビバイト※1 までのボリュームサイズ、最大16テビバイト※2 までのファイルサイズをサポート可能です。また、ファイルシステムの高速化なども実装されています。
※1 エクスビバイト=2^60バイト≒10^18バイト(一兆バイトの百万倍)
※2 テビバイト=2^40バイト≒10^12バイト(一兆バイト)
・デフォルトシェルの違い
OSの核に当たるカーネルとユーザーをつなぐ役割を果たすソフトウェアをシェルと言います。OSを包み込む貝(シェル)の殻をイメージするとわかりやすいでしょう。CLI操作で入力されたコマンドはシェルを通してカーネルに伝えられ、カーネルはそのコマンドに沿ったプログラムを実行します。
UNIXとLinuxでは、デフォルトとして採用しているシェルにも違いがあり、UNIXでよく使用されるのはBsh(Bourne Shell:ボーンシェル)やtcshなどです。Bshは他のシェルの基本となるもので、AT&T社が開発しました。tcshは、cshと呼ばれるC言語に似た構造を持つシェルから派生したもので、履歴編集などの機能が特に優れています。
一方、Linuxで搭載されているのはbash(Bourne Again Shell:ボーンアゲインシェル)であることが多いです。柔軟にカスタマイズできることから、使いやすいシェルとして人気です。
キーボードで文字列を手入力してコンピューターに出す指示のことをコマンドと呼びます。UNIXではコマンドの入力が基本となるため、種類や意味をしっかり理解することが大切です。
最初のうちはコマンド入力を難しく感じるかもしれません。しかし慣れてくると素早く操作できるようになるため、マウスで操作するよりも格段にスピーディーに業務を進められるでしょう。
よく使うコマンド
UNIXでよく使うコマンドを紹介します。存在するコマンドは膨大な数になりますが、日常的に使うものは限られているので、あまり気負わずに学習してください。いったん入力してしまったコマンドは取り消しができないため、大事なファイルやディレクトリをうっかり削除してしまわないように注意が必要です。
・catコマンド(concatenate)
ファイルの内容を表示するコマンドです。1つだけファイルを指定した場合はその内容が表示されますが、以下のように入力することで2つのファイルの内容を連結して表示できます。
入力例:cat ファイル1 ファイル2
コマンド名のもとになっているconcatenateという英単語は「連結する」という意味なので、このような動作になります。ですがcatコマンドはほとんどの場合、1つのファイルの内容を表示させるために使われます。
・cdコマンド(change directory)
ディレクトリとは、ファイルシステムにおいてファイルをまとめておくための「場所」を表し、現在作業中のディレクトリをカレントディレクトリと呼びます。cdコマンドは、カレントディレクトリを変更するコマンドで、以下のように入力することで、指定したディレクトリに移動します。
入力例:cd ディレクトリ名
なお、「cd」だけで実行した場合はホームディレクトリに、「cd -」と入力した場合は直前に使っていたディレクトリに、そして「cd ..」と入力した場合は親ディレクトリにそれぞれ移動できますので、覚えておくと便利です。
・cpコマンド(copy)
ファイルをコピーできるコマンドです。以下のように入力することで、ファイル1からファイル2へ複製できます。
入力例:cp ファイル1 ファイル2
「-f」と付けて実行すると、コピー先に同じ名称のファイルがあった場合に自動的に上書きされます。ファイルごとに上書きするかどうかを確認したい場合は、「-i」を付けて実行しましょう。
・lsコマンド
ファイル名やディレクトリの情報を示すコマンドです。以下のように入力することで、指定したディレクトリ内に含まれるファイル名を一覧形式で表示します。
入力例:ls ディレクトリ名
「ls」のみで実行した場合は、カレントディレクトリが対象となります。所有者などの情報を追加表示する「ls -l」、隠しファイルや隠しフォルダを含めて表示する「ls -a」など、さまざまなオプションがあるので、知っておくと便利です。
・mkdirコマンド(make directory)
以下のように入力することで、ディレクトリを作成できるコマンドです。
入力例:mkdir ディレクトリ名
・rmdirコマンド(remove directory)
以下のように入力することで、ディレクトリを削除するコマンドです。ただし、指定したディレクトリにファイルがある場合は、このコマンドでは削除できないことに注意しましょう。
入力例:rmdir ディレクトリ名
指定したディレクトリ配下にあるファイルやディレクトリをすべて削除したい場合は、後述するrmコマンドを使うのが一般的です。
・mvコマンド(move)
ファイルの移動や名前の変更ができるコマンドです。以下のように入力した場合、指定したファイルを指定のディレクトリに移動します。
入力例:mv ファイル ディレクトリ
一方「mv ファイル1 ファイル2」と入力した場合は、ファイル1からファイル2へとファイル名を変更します。
pwdコマンド(print working directory)
以下のように入力することで、自分が今どのディレクトリで作業しているのか確認できるコマンドです。
入力例:pwd
・rmコマンド(remove)
以下のように入力することで、指定したファイルを削除するコマンドです
入力例:rm ファイル名
空のディレクトリを削除する場合は「-d」とオプションを指定します。中にファイルがあるディレクトリをファイルごと削除したい時は「-r」オプションを指定します。