UNIX/Linux入門

情報技術 > UNIX/Linux入門 大学の学習 > UNIX/Linux入門
『UNIX入門』もあります。
UNIXの起源はアメリカ・AT&T社のベル研究所が開発したOSです。後にカリフォルニア大学バークレー校で学術目的に実装され、ベル研究所のUNIXとカリフォルニア大学バークレー校のUNIX (BSD) 両者が現在広く用いられているUNIXの源流をなしています。
マルチユーザ・マルチタスク機能を発表当初から持っており、ネットワークを介して異なる端末から更新作業などを行える環境をいち早く作り上げた。しかも、マルチタスク機能で、同時にログインして同時に作業することもでき、業務の効率を大幅に改善した。
以下現在主に使用されているUNIX系OSを挙げます。
詳細はウィキペディアのUNIXの記事を参照のこと。
Linuxは、MINIXを模倣して作られたOSカーネルです。 OSの構成要素には、カーネルとユーザーランド(コマンドインタープリターを含むコマンド、デーモン、ライブラリや付帯するデータ)がありますが、Linuxはカーネルのみを提供しているので、不足するユーザーランドをGNUのユーティリティを始めとするサードパーティ・ソフトウェアで補いOSの体裁を整えています。
この本で紹介するコマンドはGNU/Linuxでは、全てLinuxではなくGNUのユーティリティなどサードパーティが提供するものです。
これらのオリジナルにあたるUNIXでの実装(*BSDを含む)は、/usr/src 以下のソースツリーに一体として維持されており、カーネルのソースコードも/usr/src/sys以下に全てあります。
このように、OSとしての体裁は似通っていますが、UNIXがカーネルとユーザーランドをトータルで維持・管理・提供しているのに対し、GNU/LINUXではカーネルとは出自の異なるソフトウェアの調整のもとOSとして提供しているので、上記以外の組み合わせ(例:coreutilsの代わりにbusyboxを使う、glibcの代わりにmuslを使う等)が無数に考えられ、GNU/LINUXでは、それらのパッケージ管理の重要度が増します。
基本的には、CUIで操作を行う。CUIとは、コマンドベースのインターフェイスのことで、一定の書式に則った文字列(これをコマンドという)を入力することでコンピュータを操作する体系です。近年、ウィンドウシステムの発達もあって、特にクライアント分野では起動から終了までGUI(CUIに対して、視覚的に操作できる体系)で操作を完結できる環境が整いつつあるが、簡素かつ強力なコマンドラインベースの操作環境は根強く支持されています。GUIを採用しているシステムでも、GUI環境中でコマンドを実行するためのアプリケーション(ターミナルエミューレータと呼ばれます)を利用するのが一般的です。
ファイルシステムという用語も多義的であるが、ここではUnix File Systemのユーザー側から観た特徴について述べます。
UNIXでは、ファイルをディレクトリで管理します。ディレクトリはWindowsのフォルダーに対応するものであり、複数のファイルを収めることができます。さらに、ディレクトリ内に別のディレクトリがあっても良いので、ディレクトリ群は木構造になります。
この構造の頂点となる最上位のディレクトリがただひとつあります。これをルートディレクトリと呼び、/と書く。
なお、 /root/ というディレクトリがあるが、こちらはファイルシステムの頂点のディレクトリという意味の「ルートディレクトリ」ではなく、ユーザー root のホームディレクトリである。
ディレクトリ構造上の位置をパス (path)と呼ぶ。 パスには絶対パスと相対パスがあります。
ファイルシステムのレイアウトについては hier(7) を参照。
コマンドとは、コンピュータ上で処理を行うための、特定の書式に則った一連の文字列です。コマンドを入力し、実行します(通常はEnterキーを押す)ことで、そのコマンドに応じた処理が実行されます。
この例では、'date'というコマンドを実行しています。これにより、コンピュータは'date'という指示を受け、その結果'Sun Feb 12 22:11:48 JST 2006'を返します。結果は、この場合画面に表示されているが、正常に処理が行われた場合に何も表示しないコマンドも多い。
コマンド名に続けて文字列をスペースで区切って記述することで、コマンドに付加的な指示を渡すことができます。このような付加的な文字列を引数と呼ぶ。引数がどのように解釈されるかはコマンドによって異なるが、よくある使いかたとして、コマンドの挙動を変更するためのオプションとして使うというものがあります。オプションは、通常'-'に続けた一字のアルファベットでオプションによって追加のパラメータを取ります。
この例では、'date'というコマンドに'-u’というオプションを付けています。これによりdateコマンドの動作は変更されています。この場合は、dateコマンドの仕様に従い、ローカルマシンの時刻からUTC(協定世界時)へと表示される時刻が切り替えられています。
また、コマンドには、引数として操作対象を受け取るものがあります。
この例では、'rm'というコマンドに'test.txt'というファイルを指示しています。これにより、'rm'というコマンドを通じて、'test.txt'というファイルを操作します。'rm'というコマンドはファイルを消去するので、この場合はtest.txtが消去されます。
多くのコマンドは、無効なオプションを渡すと、機能の一覧が表示されます。
シェルとは、コンピュータに対して指示を出す際に利用される対話プログラムです。コンピュータにコマンドを入力するとき、実際にはシェルに対して入力しています。シェルは入力されたコマンドを解釈し、実行します。シェルは複数開発されており、どのシェルを適用しているかによって、コマンドの表現方法が違ったり、同じ意味でもコマンド自体が違ったりする場合もあります。
Bシェル( /bin/sh )、ash、dash、ksh、bash、zsh、csh、tcshなどがあります。Linuxの各ディストリビューションでは、bashをデフォルトのシェルを採用してい場合が多いですが、dash を採用しているディストリビューションも見受けられます。
コマンドが実行されるとき、コマンドには必ず入出力のための三つの経路、標準入力、標準出力、標準エラー出力が割り当てられます。コマンドは必要に応じてこれらの経路から入力を受け取ったり、出力を書き出したりします。この三つの経路を総称して標準入出力といいます。
例えば、上記のdateの例で、dateコマンドの出力内容が画面に表示されたが、実はこの時の出力は標準出力に送られています。上記では標準出力の行き先が画面だったため、結果として画面に表示された。
標準入出力の行き先は必要に応じて変更することができます。
コマンドとして入力する文字は date > date.txt の部分です。
このコマンドの内容として、>以降は標準出力の行き先をdate.txtというファイルに切り替える指示です。このようにすると、dateコマンドの結果は画面に表示される代わりにdate.txtというファイルに出力されるので、日時を記録したdate.txtというファイルができることになります。このように標準入出力の行き先を変更することをリダイレクトと呼ぶ。なお、「> date.txt」の部分はシェルへの指示であって、コマンドに渡される引数ではないことに注意してほしい。
標準入力を使うコマンドの例も見てみましょう。wcは、標準入力から受け取ったテキストの行数・語数・バイト数を標準出力に書き出すコマンドです。
この例ではwcの標準入力はキーボードなので、コマンドを実行するとコンピュータはキーボードからの入力を待つ。そこでテキストをタイプし(この例では3行のテキストを入力した)、入力を終えます(これには通常Ctrl-dを押せば良い)と、次の行にwcコマンドの出力が表示されます。 Ctrl-dとはCtrlキーを押しながらdキーを押すことです。
標準入力も標準出力と同様にリダイレクトすることができます。例えば、test.txtというテキストファイルの行数を数えるには次のようなコマンドを使えば良い。
さらに、あるコマンドの標準出力を別のコマンドの標準入力につなげることもできます。これはパイプと呼ばれます。
この例では、パイプを使ってdateコマンドの出力の行数・単語数・バイト数を数えています。
パイプやリダイレクトを使うと、限られたコマンドで自在に多様な操作を行うことができます。
シェルはコマンドインタープリターと呼ばれるように、言語インタープリターの一種で、変数を使うことが出来ます。
csh では、プロンプトが % であること、代入に set を前置することが bash との違いです。
いま使ってシェルが何かは、環境変数SHELLにセットされているので
の様に確認できます。
環境変数は、名前と結びついた動的な名前と値のペアで、プロセスの挙動・設定を変更するために用います。 環境変数は、プロセスが実行される環境の一部です。
例えば
といった情報に該当する環境変数を変えることで情報を書き換えることができます。 ただし使用しているシェルによって設定方法は異なります。
例えば、ロケール (LANG) を日本語日本国UTF-8 (ja_JP.UTF-8) としたい場合は
通常、環境変数は、全て大文字で、環境変数を設定、取消しするコマンドはシェルによって異なります。
なんらかの環境変数を確認するには、printenv(1) を使います。
たとえば、ロケール(LANG)を調べたいなら
環境変数を指定して実行する方法も bsh 系と csh 系で異なります。
UNIXは、マルチユーザーシステムであり、ひとつの計算機を複数のユーザーで同時に利用することが可能です。計算機には、そのシステムを利用する権限のあるユーザそれぞれについてユーザー名とパスワードなどの認証情報を始めとするユーザー情報は登録・管理されています。計算機を利用する際は、はじめに自分のユーザー名とパスワードを入力し認証しなければなりません。これをログインといいます。ログインには、計算機に対し、あるユーザーが利用を開始したということを表明する働きがあります。同様に、利用を終了することを表明する手続きは、ログアウトと呼ばれます。自分が今どのユーザーとしてログインしているかを知るには、whoamiというコマンドを使います(whoコマンドにオプションを与えwho am iとしても類似の結果が得られますが、細部が異なります。)。
それぞれのユーザーは、私用のためのディレクトリを一個割り当てられます。これはホームディレクトリとよばれ、Filesystem Hierarchy Standard に従っていれば、 /home/${ユーザー名} ですが、root はこれの例外です。ホームディレクトリには、個人に属するデータの他、アプリケーションの個人用設定ファイルなどを置くことができます。これらのファイルは、所有権が自分に属するため、後述するパーミッションによって、他のユーザーが勝手に変更を加えることができなくできます。
特定の複数のユーザーにのみなんらかの権限を与えたいときにはグループが用いられます。たとえば、あるファイルをグループ所有にして、そのグループの一員にのみ閲覧を許す、といったことができます。BSDによる拡張がサポートされていれば、一人のユーザーが複数のグループに属することが可能です。
UNIXシステムには管理者の役割をするユーザー(スーパーユーザー)があり、名前は root で uid は 0 でグループ wheel(gid:0) に属しています。 root は、デバイス・ファイル・プロセスなど全てのコンピュータ資源に対する権限をもっています。 rootでの誤操作はシステム破壊に直結するため、自分がシステムの管理者であっても、別に一般ユーザーを作成し、root権限が必要な場合を除いて一般ユーザーで作業しなければいけません。
ファイルやディレクトリについてのアクセスの権限をパーミッションといいます。パーミッションを設定することで、例えばファイルを特定のユーザーにしか閲覧できなくしたり、あらゆるユーザーが閲覧できるようにしたりすることができます。
全てのファイルには所有者と所有グループが決まっており、これに従ってアクセス権限が分けられます。すなわち、所有者、所有グループの一員、その他のユーザー、という三区分に対して独立に権限を設定することができます。設定可能な権限は以下の三つです。
ファイルの消去に必要な権限は、そのファイルへの書き込み権限ではなく、そのファイルの置かれているディレクトリへの書き込み権限であることに注意してほしい。
ファイルのパーミッションは、lsコマンドに'-l'というオプションを付加することで確認できます。この場合、パーミッションは次のような表記で表されます。
この記法は、左から三文字ずつ、所有者、所有グループの一員、その他のユーザー、に対応しています。アルファベットは対応する権限があることを示し、-は対応する権限がないことを示す。この例では、このファイルもしくはディレクトリに対して、「所有者」はrwxすなわち「閲覧、書き込み、実行可能」、「所有グループの一員」はr-xで「閲覧、実行可能」、「その他」は--xで「実行可能」ということになります。
また、三桁の八進数の数値でパーミッションを表すこともあります。この場合、三つの桁は、左から所有者、所有グループの一員、その他を表す。個々の数字は三種類の権限の有無を二進法で読んだものです。例えば、r-xは二進数に置き換えると101、八進数にすると5です。
最初の例にあるrwxr-x--xなら、計算すると751です。
ここでは、UNIXを扱う上で非常によく用いられるコマンドについてまとめます。これらのコマンドは実際にはシェルの機能ではなく、一つのアプリケーションであることに注意が必要です。しかし、これらのコマンドは通常シェルから起動されることから、これらをシェルのコマンドと呼ぶことが多い。
cdは、カレントディレクトリーを変更するコマンドです。 cdは、 change current working directory の略です。 cd はファイルシステム上に実行ファイルのある外部コマンドではなく、シェルの内部コマンドです。
manは、UNIXで標準的に用いられるヘルプシステムです。manはターミナル上で全ての情報を表示することを条件として作られているため、色使いなどがあまり現代的ではない面があります。しかし、表示される情報には有用なものが多いため、たびたび用いることになるでしょう。特に個々のコマンドの細かいオプションを記憶することは現実的ではないため、機能だけを覚えておき、オプションはそのつどmanで調べるのが現実的でしょう。
このコマンドは、
として用いられます。manのファイルはいくつかのカテゴリーに分類されており、それらのカテゴリーには1から8の番号が付けられています。manは、対応するコマンド名が存在するかどうかを、1から順に調べていき、最初に見付かったものを表示します。そのため、同じ名前のmanが若い番号に存在するときには、後に保存されているmanは読むことができありません。このときには、見たいmanの番号を調べ、
のように書く必要があります。また、
のようにコマンドを用いると、コマンド名に対応するmanを全て順に表示するので、こちらを用いてもよい。
manがmanページを探すディレクトリは、環境変数MANPATHに記憶されています。これは、多くの場合 /usr/share/manなどであり、ここにはシステムで用意されているmanページのほとんどが保存されています。システムに興味がある場合はこれらに目を通すとよい。
whatis は、コマンド名あるいはコマンドの機能をおぼろげに覚えているときに使います。
info は、GNU で用いられるコマンドラインインタフェースで動作するハイパーテキストのヘルプビューアです。
として用います。
bash のドキュメントが読みたいのであれば
とします。
infoは、texinfoプログラムによって生成された.infoファイルを読み込み、ドキュメントをツリーとして表示し、ツリーを横断したり、クロスリファレンスをたどったりするための簡単なコマンドを提供しします。
基本操作
dateは、現在の日付と時刻を返すコマンドです。dateコマンドは、日付を設定する目的でも用いることができます。
dateも、システムのロケールによって、表示を変えます。
suは、一時的に管理者権限を手に入れたいときに使う。設定ファイルを書き換える時など管理者権限が必要なときに用いられます。
sudoのあとに管理者権限で実行したいコマンドを書く
まず、閲覧したいテキストファイルのある場所まで、cdコマンド(シェルのディレクトリ移動のコマンド)で移動します。
ファイルを表示する場合、
などのコマンドがあります。
これらのコマンドの内容の違いは、テキストファイルを表示するさいに、一括で出力するか、それとも段階的に出力していくかといった、違いです。
つまり
の書式です。
moreでは、大きなテキストの場合には段階的に、冒頭から出力していく。表示しているテキストの続を見たい場合はエンターキーを押すなどすると、続きが表示されます。

大きなテキストの場合には段階的に、冒頭から出力していく。
表示しているテキストの続を見たい場合は
また、長い標準出力を見るのにも使う

ファイルの内容を最後まで表示します。複数のファイルが指定された場合にはそれらのファイルを続けて表示します。
sample.txtとbbbの内容を連続して標準出力に出力します。
trは、ファイル中の特定の文字列を置き換える働きをします。
cutはファイル内である列を取り出す。列の内容はオプションによって指定でき、-cオプションでは文字数が指定されます。一方、-fオプションでは-dオプションで指定されるデリミタによって分割されるフィールドが使われます。
lsとだけコマンド入力した場合には、カレントディレクトリの中身を記述します。作成したファイルやディレクトリが実際にディレクトリ内に存在するかどうかを確かめるために用いることができます。
lsにはいくつものオプションがあるが、よく用いるものをまとめます。-lは、ファイルやディレクトリについてより詳細な情報を与えます。情報は、パーミッション、ファイルサイズ、作成者、作成された時間、最後に変更された時間などです。実用上は、-lだけではなく、-hもつけるとファイルサイズが人間にとって読みやすい形でかかれるため、使いやすくなります。
-a は、ディレクトリ内にある全てのファイルを表示します。通常のlsでは、最初が.から始まるファイルやディレクトリは表示されありません。これは、設定ファイルやアプリケーションが内部的に用いるファイルが毎回表示されると場所塞ぎだからです。これらが存在するかどうかを調べるためには、明示的に-aオプションを用いる必要があります。
-Rオプションは、ディレクトリを再帰的に降下してファイルを表示します。再帰的とは、ファイルが存在すればそれを表示し、ディレクトリが存在すればそのディレクトリに移動し、再びls -Rと同じ作業を行うという意味です。結局カレントディレクトリ以下に置かれているファイルが全て表示されます。大きなディレクトリ内でこれを実行すると結果を得るのに時間がかかるため、控えた方がよいでしょう。しかし、探したいファイルがあるときにはこれを使うのがよいでしょう。
このようなファイルシステムの階層は、Filesystem Hierarchy Standardで標準規格化されており、 man hier で参照できます。
cpは、ファイルをコピーするコマンドです。cpの使い方は、
となります。
cpもいくつかのオプションを持つ。-iは、コピー先のファイルが存在するときにそのファイルを上書きするかどうか尋ねるようにするオプションです。このオプションが無いときには、cpはコピー先のファイルを勝手に消去し、その上に指定されたファイルを上書きします。この振舞いはしばしば重大な失敗をひき起こすため、-iオプションはできる限り常に用いるようにした方がよいでしょう。システムによっては、エイリアスなどの機能を駆使して、これらの振舞いが通常となるように設定している場合もあります。
しかし、システムを過信せず、自分で気をつける方が望ましい。-fオプションはこの反対で、-iオプションが付けられていたとしても上書きの前に注意を促さないよう動作させます。これは多くのファイルを上書きする際に、通常の振舞いが-iオプションありであったときには非常に不便であることから用いられます。-Rオプションは、指定されたディレクトリを再帰的にコピーします。この機能はよく用いられるが、似た振舞いを持つコマンドとしてtarがあり、また新しいファイルの多くがtarファイルで供給されることを考えると、それほど使わずに済むかも知れありません。
カレントディレクトリ内にあるsample.txtというファイルを、documentsディレクトリ内にコピーします。-iオプションがあるため既にdocuments内に同名のファイルがあったときには警告が表示されます。
mvは、cpと違い指定されたファイルを指定された場所に移動するコマンドです。移動された元のファイルは消去されます。mvは次のように用いられます。
mvにも-iと-fのオプションがあります。これらの動作は、cpの対応物と同じです。mvはファイル名を変更する場合にも用いられます。すなわち、AというファイルをBという名に変更するときは、AをBに移動すると考えmv A Bを使用します。
rmは、指定したファイルを消去するコマンドです。GUIの'ゴミ箱'と違い一度消去したファイルは取り戻せないので、注意が必要です。不測の事態を避けるために、作成したファイルはこまめにバックアップを行うことが望ましい。バックアップにはtarコマンドなどが多く用いられるが、この使い方は後述します。rmコマンドは
として用います。
rmもcpやmvとおなじ-iと-fコマンドを持つ。不測の事態を避けるため、-iは常に用いることを推奨します。rmコマンドは再帰的に消去を行う-Rオプションを持つ(-rオプションも同じ意味であります)。大きなディレクトリを消去するときには、このオプションは事実上必須であるが、強い効果を持つコマンドなので、使用時には細心の注意が必要です。
rmのよくある失敗例は、.から始まるファイルを全て消去しようとして、
とすることです。.*は、..(親ディレクトリ)も含むため、これは親ディレクトリ以下に含まれるファイルを全て消去するコマンドになってしまう。そのため、このようなコマンドを行うことは絶対に避けねばなりません。このときにも-iオプションをつければ消去を行う前に警告が出るので、危険が少なくなります。
mkdirは、、ディレクトリを作成するコマンドです。
rmdirは、、ディレクトリを消去するコマンドです。
pwd(1)はカレントディレクトリの絶対パスを表示します。
touchは、、指定されたファイルの更新日時を変更します。指定されたファイルが存在しないとき、touchは、ファイルを作成します。ファイルが存在した場合はタイムスタンプを更新します。一度に複数のファイルを作成することもできます。
ファイルのハードリンクあるいはシンボリックリンクを作ります。
リンクは、Unixのファイルシステムに固有の機能で、ファイルにはパスと内容(データとメタデータの総体)がある、複数のパスが同じ内容を示すことができます。

正規表現はあるルールで指定される文字列の集合のことを指す。正規表現を用いて複数のファイルを指定したり、文書中から当てはまる文字列を検索することができます。正規表現自体はあらゆるOS上で利用される技術ですが、特にUNIXのシェルには正規表現を用いる技術が多くあるのでここでまとめます。
正規表現は複数の文字列が当てはまる'性質'を示す事ができます。例えば、a,aa,aaa,aaaa,... などの文字列はaが連続的に並ぶという性質を持っています。このような名前のファイルを同時に消去したいときには、aが連続的に並ぶという性質を指定できると便利です。egrepやPerl等の正規表現を扱えるソフトでは、この集合を^a+$と指定することができます。ここでは正規表現について詳しくは触れないので、詳しい情報は、'詳説 正規表現(オライリージャパン)'などを参照して欲しい。
grepは、ある正規表現とファイルを指定して、その正規表現に当てはまる行をファイル中から取り出す。
のように用います。(文中にaaaという文字列を含む)f.txtの内容が
なら、
が出力されます。正規表現が^ddd(行がdddで始まます)だったときには、当てはまる行が無いので何も出力されません。ddd$(行がdddで終ます)では、
が出力されます。
findは、ディレクトリを再帰的に降下し、条件に当てはまるファイルを見付けるコマンドです。findの書式は非常に複雑になるので、詳細についてはここでは触れありません。対応するmanなどを参照。
条件無しにカレントディレクトリ以下のファイルを表示します。
カレントディレクトリ以下のファイルで名前がf.txtのファイルを表示します。nameオプションには glob を用いることができます。例えば、
は、fではじまり.txtで終わるファイル(file.txt, ffff.txt, ...などがあてはまます)を探す。 シングルクォーテーション(')で囲んでいるのは、カレントディレクトリにある f*.txt とのマッチングを行わせないため。
上のコマンドの例では、コマンドは全て1つずつ入力され、 それぞれのコマンド実行に対してそれぞれの結果が返ってきた。 このように上記の例ではすべてシェルを対話的に扱ってきたが、 あらかじめシェルに実行させたいコマンドをファイルに書いておき、 これをまとめてシェルに実行させることも可能です。 このコマンドを書いたファイルをシェルスクリプトと呼ぶ。
シェルスクリプトの書き方はシェルの種類によって異なるので、 以下ではLinuxやMac OS Xの標準のシェルであるbash (Bourne Again Shell) を例にとって説明します。
シェルスクリプトとは言っても、基本的にはコマンドを書き並べたものです。
たとえば、テキストエディタの新規ファイルに上記をコピーペーストして、これをたとえば「test.sh」という名前でカレントディレクトリに保存します。
このファイルを実行可能にします。
実行するには、コマンドラインで
とコマンドすればいいです。
なお、上記コードは、「はじめにhelloと表示し、次にOSの名前を表示する」シェルスクリプトです。
1行目のコメントには特殊な意味があるので後述します(Shebang!)。
UNIXでは複数のプロセスを同時に動かせます。ここでは、実際に複数のプロセスを動かす方法を述べます。プロセスは互いに独立で、通常は別のプロセスの動作にかかわり無く動く。そのため、他のプロセスの動作を制御したいときには、シグナルを利用する必要があります。シグナルは、他のプロセスに送ることができ、プロセスを中断する等の効果があります。
&は、コマンドの後につけてそれをバックグラウンドで動かす機能があります。これは複数のプロセスを起動したい時に用いられます。
X Window Systemの起動中に新たな端末を開くときに用られます。xterm自体も1つのX Window Systemにおけるクライアントアプリケーションです。
シグナルに対する応答は、プログラム中で書き換えることができます。次の例では、INTシグナルに対する応答を書き換えています。
別のシェルから、
とすると、./a.out を実行していたターミナルに catch SIGINT が表示されます。 ここでは分かりやすさのためにsignal()関数を用いたが、実用的なプログラムを作る際にはsignal()関数ではなくsigaction()関数を使うべきです。
psは、現在実行されているプロセスを表示します。
現在自分が実行しているプロセスを表示します。
自分だけでなく他のユーザーが実行したプロセスも表示します。このオプションは、デーモンプロセスを見るためによく用いられます。
killは、、他のプロセスにシグナルを送るコマンドです。killはプロセスID(pid)を引数としてとるので、シグナルを送りたいプロセスがあるときには、あらかじめpsコマンドなどを用いてpidを手に入れておく必要があります。
プロセスID3456に、TERMシグナルを送ます。TERMシグナルは送るシグナルを指定しなかった時に使われるシグナルです。
プロセスID3456に、INTシグナルを送ます。送るシグナルは-(シグナル名)で指定することができます。実際に指定できるシグナルについては、$ man killを参照すること。
bashには、ビルトインコマンドの1つとしてkillがあります。このため、killが実行ファイルとして存在したとしても、実際に実行されるのはビルトインコマンドの方です。
はjobsで表示されるプロセスにシグナルを送ます。しかし、
は、
psmiscに含まれるkillallは、プロセスIDではなく、プロセスの名称を用いてシグナルを送ることができます。
a.outは、(おそらく)Cプログラムの実行ファイルです。自作したプログラムにシグナルを送るときに用います。
シェルが、複数のプロセスやプロセスグループを管理する機能を、ジョブコントロールと言います。 ジョブコントロールは、BSD Unix上の csh に実装されました。 jobsは、シェルのbuiltinコマンドで、bashを使っているなら、$ man bash内にjobsのmanも置かれています。jobsは、現在自分が動かしているプロセスを表示します。
topは、、動いているプロセスを指定された順序で並びかえ、一定時間毎に表示します。
デバイスファイルはコンピュータに接続された機器にアクセスするためのファイルです。デバイスファイルは、デバイスへのインターフェースでありデバイスそのものではないため、デバイスファイルを削除しても(通常は)問題がありません。例えば、/dev/hda1を削除しても、ハードディスクの中身が消えることはありません。
また、デバイスファイルはたいてい/dev以下に置かれるが、それ以外の場所においても同じように扱うことができます。ただし、デバイスファイルはデバイスの識別のためにメジャー番号とマイナー番号を持っているため、それらはデバイス毎に使い分ける必要があります。
デバイスファイルを作成するには、mknodコマンドを用います。mknodは作成するファイルの名称、メジャー番号、マイナー番号、デバイスの種類を指定して作られます。デバイスの種類とは、b:ブロック型、c:キャラクタ型のどちらかです。 -->
慣用的に、シェルで、テキストファイルを作成、編集するためのソフトウェアのことが、単に「エディタ」と呼ばれています。UNIXの設定ファイルはほとんどがテキストファイルであるため、エディタの重要性は大きい。
viは広く用いられるUNIXのテキストエディタです。viはほとんど全てのシステムで用意されているため、基本的な設定ファイルの記述にはこのエディタが用いられることが多い。ただし、動作が他のエディタとは異なっているため、その使用には好みがわかれるエディタでもあります。
実際に、vi とタイプして起動されるコマンドは、nvi であったり vim のような互換エディタであることが多いです。
XウィンドウシステムはUNIX上でGUIを実現するためによく用いられるプログラムです。
Linuxとは、1991年にフィンランドのプログラマ リーナス・トーバルズがヘルシンキ大学在学中にMinixより優れたMinixを作るために立ち上げたプロジェクトで開発しGPLで公開したLinuxカーネルを元にしているOSです。 公開当初は、とても貧弱であったが、すぐにハッカー達の支持を受け利用者を増やしていった。安価で手軽にUNIXと類似の環境を得られることからインターネット・サーバとして頻繁に利用されるようになってきた。
Linuxはカーネルしかなく、Linuxのみで動かすことは出来なかった。しかし、フリーなオペレーティングシステムを作ることを目的としていたGNUプロジェクトは、カーネルや、一部のデーモンなど以外をフリーなソフトウェアとして完成させてていた。GNUのglibcやBash、その他の多くのコマンドといった主要なソフトウェアとLinuxにのカーネルを組合わせることで、実際に動かして使うことのできるオペレーティングシステムを作ることが出来ました。そのため、LinuxのカーネルとBashやglibc、gcc、などといった主要なソフトウェアを合わせてGNU/Linuxと呼ぶこともあり、GNUプロジェクトなどは推奨しています。 Linuxに収められているソフトの多くは、GNUのGPLやLGPLといったライセンスで配布されています。
Linux ディストリビューション[a](しばしばディストロと略されます)は、Linux カーネルと、多くの場合パッケージ管理システムを含むソフトウェアの集合体から作られたオペレーティング・システムです。 Linuxユーザーは通常、Linuxディストリビューションの1つをダウンロードしてOSを入手する。 パッケージ管理システムは、後述しますが、Debian系ではDEB、RedHat系ではRPMが主に使われます。
ディストリビューションの系統として主にパッケージ管理システムの違いによって3種に分類されるが、どれにも属さないものもあります。
よく使用されているディストリビューションを以下に挙げます。
UNIX上で動くGUI環境に、X Window Systemがあります。これは、サーバー / クライアント方式でグラフィカルな環境を提供するもので、通常はこの上に各種ツールキットを使ってGUI環境を構築します。
昔は、ツールキットや、デスクトップ環境、各種ソフトウェアが別々に配布されており、デスクトップの環境を作るのが大変でした。それを解決するものとして、ツールキット、デスクトップ環境、各種ソフトウェアなどをまとめて、統合デスクトップ環境というものが作られた。
主な統合デスクトップ環境にGNOME、KDE、LXDE、Xfce、Window Makerなどがあり、ツールキットはGNOME系では主にGtk、KDE系では主にQt、が使われ、他にもwxWidgetなどがあります。これらを使ってグラフィカルなアプリケーションを作成出来ます。
特にGNOME、KDEは、テキストエディタやファイルマネージャー、オフィスアプリケーションなどの周辺アプリケーションもあわせて提供されており、まとめて導入することによって、WindowsやMac OSなどといった先行するオペレーティングシステムに負けない程度の環境を作ることが出来ます。現在はGNOMEが優勢で、他にもとても軽量なLXDEなどを使う人も増えています。