計算機基礎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
を押します.
マニュアルは more
や less
, 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.txt
と Report.txt
は同じファイルを表します.
あとで説明しますが,アスタリスク *
や疑問符 ?
などはシェルにとって特別の意味を持つ文字です.
ターミナルからそのようなファイル(ディレクトリ)名を入力すると,意図と異なる動作をする危険性があるので,使わない方がよいでしょう.
6.2 拡張子
ファイルにはピリオド .
を含む名前が付けられています.
ファイル名の例を以下に示します.
report.doc calc.xls dog.gif cat.jpg index.html
doc
や xls
など,最後のピリオド以下の部分を「拡張子」といいます.
拡張子はファイルの種類ごとに決まったものを使う約束になっています.
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 を削除する(今度は成功する)