計算機基礎A - 7. Linux の簡単な使い方 (1)

Table of Contents

1 Linux と UNIX

UNIX (ユニックス)は1971年にアメリカの電話会社 AT&T で Ken Thompson と Dennis Ritchie によって開発された OS (Operating System) です. 以来,主に大学や研究機関を中心に利用されてきました. Linux (リヌクス・リナックス)は1991年にヘルシンキ大学の学生だった Linus Torvalds によって UNIX をモデルに開発された OS です. Linux は厳密には UNIX とは呼べませんが,非常に UNIX に近いものです. 現在に至まで非常に活発な開発が続けられており,現在ではスーパーコンピュータからスマートフォンまで,非常に多くのデバイス上で Linux が動作しています.

Ubuntu や Debian は Linux を OS として採用したコンピュータシステム(ディストリビューション)です. 無償で配布されており,誰でも自由に使うことができます. 詳しくはそれぞれのプロジェクトの Web ページをみて下さい.

仮想化ツールである VMware などを利用すると,Windows 上で Ubuntu や Debian を利用することができます. インストール方法は次の情報を参考にしてください.

自分のパソコンに Ubuntu をインストールしておくと,家でも C や Fortran のプログラミングができるので便利です.

2 カーネルとシェル

UNIX オペレーティングシステム (OS) の中核部分をカーネル (Kernel) といいます. カーネルは CPU,メモリ,ハードディスクなどのハードウェアと,ソフトウェアの間のやり取りを制御しています. このカーネルに対し,ユーザがコマンドを入力するために使用するプログラムのことをシェル (Shell) といいます. ユーザはシェル(殻)を介してカーネル(核)とやり取りを行うわけです.

シェルには sh, csh, tcsh, bash, zsh など,多くの種類が存在しています. ここでは Linux の標準シェルである Bash (バッシュ・ビーエーシェル)を使っているものとします. csh, tcsh などの C-shell 系のシェルは,使用方法が少しだけ異なるため,注意が必要です. これから UNIX を使う人は bash か zsh を選ぶとよいでしょう.

ターミナルを実行するとその中でシェル(標準では Bash)が起動します. シェルはユーザがキーボードなどから入力した文字列を解析し,指示された仕事を実行します. その他にもシェルにはいくつかの機能が備わっています.

  • プログラムの実行
  • ファイル名の置換(展開)
  • 入出力の切り替え(リダイレクト)
  • パイプ
  • ユーザの環境設定

こうした機能をうまく組み合わせることで,複数の仕事をいちどに実行させることができるようになります.

3 プログラムの実行

3.1 コマンドライン

シェルはユーザが入力したコマンドを実行する機能をもっています. ターミナルの中には

$

のような表示があります. これはシェルが入力待ちの状態であることを示す記号(プロンプト)で,ユーザが入力するものではありません.

まず,ターミナルを終了するというコマンドを実行してみましょう.

$ exit

と入力し RET (リターンキーまたはエンターキー)を押すとシェルが終了し,ターミナルの画面が消えます.

シェルへの入力は「コマンドライン」と呼ばれ,次のような形をしています.

$ コマンド名 [引数1 引数2 ... 引数n]

引数は必要に応じて入力すればよく,省略することもできます. コマンド名と引数の間はホワイトスペースと呼ばれる半角スペースまたはタブで区切ります.

ホワイトスペースは単に区切り文字として認識されるため,複数のホワイトスペースを入力しても重複は無視されます. これを echo コマンドで確かめてみましょう. echo は与えられた引数を1つの空白で区切ってそのまま表示する単純なコマンドです.

$ echo This is a test
This is a test
$ echo This  is   a    test 
This is a test

空白を含む文字を引数にしたいときは ​"​​'​ で文字列を囲みます.

$ echo "This  is"   "a    test"
This  is a    test

3.2 コマンドの区切り文字

シェルのコマンドラインでは,セミコロン ; で区切ることにより,1行に複数のコマンドを書くことができます. 次の例を試してみましょう.

$ cal; date

cal はカレンダーを表示するコマンド, date は現在の日時を表示するコマンドです.

4 オンラインマニュアル

man は manual の略で,いろいろなコマンドのマニュアルを表示するためのコマンドです. echo コマンドについてマニュアルをみたい場合は

$ man echo

と入力し RET を押します. マニュアルは moreless, lv など,ページャと呼ばれるプログラムによって表示されます. スペースキーを押すと次のページに移動し,マニュアルの表示画面から抜けるには q を押します.

コマンド名はわからない場合は -k オプションを付けてキーワード検索することができます.

$ man -k keyword

たくさん表示されて画面に表示しきれない場合は後述のパイプ機能を利用します.

$ man -k keyword | less

5 履歴機能・補完機能

5.1 履歴機能

同じコマンドを再度入力したり,一部を変更して入力したい場合,もう一度はじめから入力するのは大変です. そのような場合は C-p (コントロールキーを押しながら p を押す)か上矢印キー をタイプしてみましょう. C-p を繰り返しタイプすれば,過去に入力したコマンドの履歴をさかのぼることができます. 逆に C-n か下矢印キー をタイプすると,コマンドの履歴を古い方から新しい方にたどることができます.

5.2 補完機能

長い名前のコマンドを入力する場合や、コマンド名を正確に覚えてしない場合は,入力の途中で何回か TAB キーを押してみましょう. すると Bash の補完機能が利用できます. 次の例は dvip まで入力した段階で TAB を押したものです. 候補となるコマンド一覧が表示されています.

$ dvip            # dvip まで入力し TAB を押す
dvipdf       dvipdfmx     dvipos       dvips.nonja  
dvipdfm      dvipdft      dvips

5.3 コマンドライン編集機能

Bash のコマンドラインは Emacs と同じようなキー操作で編集することができます.

$ echo This is a test

と入力した状態で C-a (コントロールキーを押しながら a を押す)とするとカーソルが先頭に移動します. 同様に C-e とすると末尾に移動します. C-k と入力するとカーソル位置から行末までが切り取られ, C-y で直前に切り取られた文字列をペーストできます.

5.4 Bash の主なキー操作

以下に Bash の主なキー操作をまとめておきます.

C-p        履歴上の1つ前のコマンドラインを表示
C-n        履歴上の1つ後のコマンドラインを表示
C-b        カーソルを左に移動
C-f        カーソルを右に移動
C-a        カーソルを行頭に移動
C-e        カーソルを行末に移動
C-h        一つ前の文字を削除
C-k        カーソル位置から行末までを切り取り
C-y        直前に切り取られた文字列をペースト

6 ファイルシステム

UNIX や Windows ではデータを整理するのにファイルとディレクトリ(フォルダ)という構造を採用しています. ディレクトリはファイルを入れる「箱」のようなものです. ディレクトリの中にはファイルだけでなくディレクトリを入れることができ,ディレクトリはいくつでも入れ子にすることができます.

6.1 ファイルとディレクトリの名前

ファイルとディレクトリの名前には大文字と小文字の英数字といくつかの記号を使うことができます. ターミナルからファイルを操作する可能性があるなら,名前は英数字とハイフン -, ピリオド ., アンダースコア _ だけを使うようにしましょう.

ファイル名に適した文字の種類: A-Z a-z 0-9 - . _

最近の Linux では日本語も使うことができますが,コマンドラインからの入力が面倒なので, 半角英数字を使ったほうがよいでしょう. また,Mac OS X では英字の大文字と小文字が区別されないので注意してください. つまり, report.txtReport.txt は同じファイルを表します.

あとで説明しますが,アスタリスク * や疑問符 ? などはシェルにとって特別の意味を持つ文字です. ターミナルからそのようなファイル(ディレクトリ)名を入力すると,意図と異なる動作をする危険性があるので,使わない方がよいでしょう.

6.2 拡張子

ファイルにはピリオド . を含む名前が付けられています. ファイル名の例を以下に示します.

report.doc   calc.xls   dog.gif   cat.jpg   index.html

docxls など,最後のピリオド以下の部分を「拡張子」といいます. 拡張子はファイルの種類ごとに決まったものを使う約束になっています.

txt          テキストファイル
doc docx     Microsoft Word 形式のファイル
xls xlsx     Microsoft Excel 形式のファイル
ppt          Microsoft PowerPoint 形式のファイル
gif          GIF 形式の画像ファイル
jpg jpeg     JPEG 形式の画像ファイル
mp3          MP3 形式の音楽ファイル
html         HTML 形式の Web ファイル

6.3 隠しファイル

ドット . で始まるファイルやディレクトリはいわゆる隠しファイル(ディレクトリ)です. ユーザごとの設定ファイルなど,誤って消去して困るファイルや,ふだんは表示する必要のないファイルなどが隠しファイルになっています.

ls はファイルやディレクトリの情報を表示するコマンドですが,通常隠しファイルは表示しません. 隠しファイルを表示するには ls コマンドに -a オプションを付けて実行します.

$ ls -a
.              .config           .gnuplot-wxt         .viminfo
..             .dbus             .gnuplot_history     .xdvirc
   (中略)
.compiz        .gnome2_private   .update-notifier

以下のコマンドを実行し,結果を比べて確かめてみましょう.

$ ls
$ ls -a

6.4 特別なディレクトリ

UNIX のファイルシステムには次のような特別なディレクトリがあります.

ホームディレクトリ
各ユーザごとにホームディレクトリと呼ばれる専用のディレクトリが用意されています. ユーザは自分の作成したファイルやディレクトリをホームディレクトリに置いておく約束になっています. ホームディレクトリはチルダ ~ という記号で表されます. また,ユーザ X のホームディレクリは ~X で表されます. 例えば,ユーザ mtkg のホームディレクトリは /NF/home/kyoin0/mtkg/ ですが, ~mtkg/ と書いても同じディレクトリを意味します.
カレントディレクトリ
ユーザが現在作業をしているディレクトリをカレントディレクトリといい,ドット . という記号で表します. カレントディレクトリは pwd コマンド (present working directory) で確認することができます.
親ディレクトリ
カレントディレクトリの1つ上の階層のディレクトリを親ディレクトリといい,ドットを2つ並べた記号 .. で表します. カレントディレクトリが /home/takagi/work/ の場合, ../home/takagi/ を指します.
ルートディレクトリ
ディレクトリ構造の最上位に位置するディレクトリを「ルートディレクトリ」 (root directory) といいます. 親ディレクトリ .. をたどっていくと必ずルートディレクトリにたどり着きます. ルートディレクトリは / と表されます.

6.5 相対パスと絶対パス

ディレクトリやファイルの指定方法には「相対パス」と「絶対パス」という2つの方法があり,次のような違いがあります.

相対パス
カレントディレクトリを起点とする指定方法
絶対パス
最上位のディレクトリであるルートディレクトリ / を起点とする指定方法

絶対パスはカレントディレクトリがどこであっても表現方法が変わりません. 例えば /home/takagi/work/report.txt という絶対パスで表現されたファイル名は,カレントディレクトリに依らず,あるひとつのファイルを指しています. 一方,同じファイルを相対パスで表現すると,

  • カレントディレクトリが /home/takagi/ であるときは ./work/report.txt
  • カレントディレクトリが /home/takagi/work/tmp/ であるときは ../report.txt

などとなり,カレントディレクトリによって指定方法が変化します.

6.6 カレントディレクトリの変更

カレントディレクトリを変更するには cd (change directory) コマンドを使います.

$ cd [ディレクトリ名]

ディレクトリ名を省略するとホームディレクトリに移動します. 次の例を試してみましょう.

$ cd ..           # 親ディレクトリに移動
$ ls              # ファイル一覧を表示
$ cd              # ホームディレクトリに移動

6.7 UNIX のディレクトリ構造

UNIX では次のようなディレクトリ配置が標準的です.

/               ルートディレクトリ(最上位のディレクトリ)
|-/bin          基本的なコマンド
|-/boot         起動に必要なファイル
|-/dev          デバイスファイル
|-/etc          設定ファイル
|-/home         ユーザのホームディレクトリ
|-/lib          ライブラリ
|-/mnt          一時的なマウントポイント
|-/opt          追加アプリケーションなど
|-/proc         プロセス情報
|-/root         管理者 (root) 用のディレクトリ
|-/sbin         システム管理コマンド
|-/tmp          一時的なファイル
|-/usr          各種プログラムなど
  |-/usr/local  独自アプリケーションやライブラリなど
|-/var          頻繁に更新されるデータ

これまでに紹介したコマンドを利用し, / ディレクトリと /bin ディレクトリにどのようなファイルがあるか,確認してみましょう.

7 ファイル操作

ファイルとディレクトリを操作する代表的コマンドには次のようなものがあります.

コマンド   語源                機能                                    重要オプション
------------------------------------------------------------------------------------
cd         change directory    カレントディレクトリの移動
pwd        print working dir.  カレントディレクトリの表示
ls         list                ファイル一覧の表示                      -l -a -d -F
cp         copy                ファイルの複製                          -R -f
touch      touch               タイムスタンプの更新・空ファイルの作成
mkdir      make directory      ディレクトリの作成                      -p
mv         move                ファイルの移動・ファイル名の変更
rm         remove              ファイルの削除                          -r -f -i
rmdir      remove directory    ディレクトリの削除                      -p

注意!: rm コマンドで削除したファイルは復元できません. 実行には十分注意しましょう.

man や以下の例を参考に,各コマンドの働きを確認して下さい. # 以下はコマンドラインの説明ですので入力しないでください.

$ cd                    # ホームディレクトリに移動する
$ mkdir foo             # ディレクトリ foo を作成する
$ ls                    # 存在するファイルの一覧をみる
$ cd foo                # ディレクトリ foo に移動する
$ ls -a                 # 隠しファイルの表示オプションを付けてファイル一覧をみる
$ touch hoge            # hoge という空ファイルを作成する
$ ls -a
$ cd ..                 # 親ディレクトリに移動する
$ rmdir foo             # ディレクトリ foo を削除する(失敗する)
$ rm -rf foo            # ディレクトリ foo を削除する(今度は成功する)

8 参考文献

Copyright © 2014 Masahiro Takagi. All right reserved.

Date: 2014-05-22 Thu 11:55

Emacs 24.3.1 (Org mode 8.2.6)

Validate