UNIX / Linux の基礎知識

ユーザーが作成した様々なデータは, ファイル という形で記録されます.そして,記録されたファイルを ディレクトリ と呼ばれる入れ物に入れて管理します.ディレクトリの中にディレクトリを作って,階層的にファイルを管理することも可能です.

このようなファイル構造を,木の枝になぞらえてツリー構造と呼んでいます. UNIX では,木の根っこに当たる部分を ルートディレクトリ と呼び,“ /(スラッシュ)”を使って表します.そして,ユーザーが作業を行なっているディレクトリを カレントディレクトリ と呼びます.

ツリー構造においては,ファイルを指定するための パス という概念が必要となります.パスの指定方法には, 絶対パス相対パス の2種類があります.

  • 絶対パス

ルートディレクトリを基準にしてファイルを指定する方法です.

(例)図1「report1.txt」を指定する場合.

/home/a/b59999/report/report1.txt
  • 相対パス

カレントディレクトリを基準にしてファイルを指定する方法です.

(例)カレントディレクトリ「/home/a/b59999」を基準にして,図1「report1.txt」 を指定する場合.

report/report1.txt

UNIXでよく使われる基本的なコマンドを説明します.

pwd

実行例

[b59999@hx001 ~]$ pwd
/home/a/b59999          # カレントディレクトリが表示されている

ls [オプション] [ファイル名ディレクトリ名]

主なオプション

オプション 効果
-l ファイルの詳しい情報を表示する
-F ディレクトリには “ /(スラッシュ)”,実行可能ファイルには“ *(アスタリスク)”等をつけて属性をわかりやすく表示する
-a システム等で使用される,“ .(ドット)”で始まるファイルも表示する

実行例

[b59999@hx001 ~]$ ls
file1.txt file2.bmp dir1          # ファイルが表示されている
[b59999@hx001 ~]$ ls -a
. .cshrc .tcshrc file1.txt dir1   # '.' で始まるファイルも表示されている
.. .login .bashrc file2.bmp
[b59999@hx001 ~]$ ls -F
file1.txt file2.bmp dir1/         # ディレクトリには '/' がついている
[b59999@hx001 ~]$

cd [ディレクトリ名]

実行例

[b59999@hx001 ~]$ pwd
/home/a/b59999             # カレントディレクトリは /home/a/b59999
[b59999@hx001 ~]$ cd dir1  # カレントディレクトリを dir1 に移動する
[b59999@hx001 ~]$ pwd
/home/a/b59999/dir1        # カレントディレクトリが dir1 に移動した

cp [オプション] [コピー元] [コピー先]

主なオプション

オプション 効果
-R コピー元がディレクトリだった場合,そのディレクトリ以下のツリー構造を含めてコピーします.

実行例

[b59999@hx001 ~]$ ls -F
file1.txt dir1/
[b59999@hx001 ~]$ cp file1.txt file2.txt # file1.txtをfile2.txtとしてコピーする
[b59999@hx001 ~]$ ls -F
file1.txt file2.bmp dir1/              # file2.txt ができている
[b59999@hx001 ~]$ cp file2.txt dir1    # file2.txt を dir1 にコピーする
[b59999@hx001 ~]$ ls dir1
file2.txt         # file2.txt が dir1 にコピーされている
[b59999@hx001 ~]$ cp -R dir1 dir2      # dir1 を dir2 にコピーする
[b59999@hx001 ~]$ ls -F
file1.txt file2.txt dir1/ dir2/        # dir2 ができている
[b59999@hx001 ~]$ ls dir2
file2.txt         # ツリー構造も含めて dir1 が dir2 にコピーされている
[b59999@hx001 ~]$

mkdir [ディレクトリ名]

実行例

[b59999@hx001 ~]$ ls
file1.txt file2.bmp
[b59999@hx001 ~]$ mkdir dir1
[b59999@hx001 ~]$ ls -F
file1.txt file2.bmp dir1/          # dir1 ができている
[b59999@hx001 ~]$

rm [オプション] [ファイル名ディレクトリ名]

主なオプション

オプション 効果
-R 対象がディレクトリだった場合,そのディレクトリ以下のツリー構造を含めて削除する

実行例

[b59999@hx001 ~]$ ls -F
file1.txt file2.bmp dir1/
[b59999@hx001 ~]$ rm file1.txt    # file1.txt を削除する
[b59999@hx001 ~]$ ls -F
file2.bmp dir1/                   # file1.txt が削除されている
[b59999@hx001 ~]$ ls -F dir1
dir2/          # dir1 の下に dir2 がある
[b59999@hx001 ~]$ rm -R dir1      # dir1 を削除する
[b59999@hx001 ~]$ ls -F
file2.bmp          # dir1 がそれ以下のツリー構造ごと削除されている

mv コマンドは,ファイルやディレクトリを移動させる時に使用します.また,同じディレクトリに移動させることで,ファイル名を変更することもできます.

mv [元のファイル名] [新しいファイル名]

実行例

[b59999@hx001 ~]$ ls -F
file1.txt file2.bmp dir1/ 
[b59999@hx001 ~]$ mv file1.txt dir1         # file1.txt を dir1 に移動する
[b59999@hx001 ~]$ ls -F
file2.bmp dir1/          # file1.txt が無くなっている
[b59999@hx001 ~]$ ls dir1
file1.txt          # dir1 に移動している
[b59999@hx001 ~]$ mv file2.bmp file3.bmp    # file2.bmp を file3.bmp に移動する
[b59999@hx001 ~]$ ls -F
file3.bmp dir1/          # file3.bmp にファイル名が変わっている

cat [ファイル名]

実行例

[b59999@hx001 ~]$ ls -F
file1.txt file2.bmp dir1/
[b59999@hx001 ~]$ cat file1.txt
abcdefghijklmnopqrstuvwxyz          # file1.txt の中身が表示されている
[b59999@hx001 ~]$

cat コマンドに代わって more コマンド, less コマンドを使用すると,ファイルが長い場合1ページごとに表示を止め,コマンド待ち状態になります.

more(もしくは less ) [ファイル名]

実行例

[b59999@hx001 ~]$ more file3.c
#include <stdio.h>    /* file3.c の中身が表示されている */
#include <math.h>
#include <stdlib.h>
(・・中略・・)
  for(i=0; i<10; i++){
    a[i] = b[i]*c[i];
--More--(10%)   ← 1 ページ表示したところでコマンド待ち
            スペースを押すことで次の 1 ページに進む

logout

実行例

[b59999@hx001 ~]$ logout          # ログアウトする

lsコマンドの説明を表示する

[b59999@hx001 ~]$ man ls

man コマンドのメッセージを日本語表示する場合は,sshクライアントの文字コードの設定をUTF-8に指定した上で,環境変数LANGにja_JP.UTF-8を設定してください.

tcshを使用している場合

[b59999@hx001 ~]$ setenv LANG ja_JP.UTF-8

bashを使用している場合

[b59999@hx001 ~]$ export LANG=ja_JP.UTF-8

vi エディタは,UNIX 系 OS に標準で組み込まれているテキストエディタです.操作体系が非常に特殊なので,以下に詳しく説明します.

vi エディタの起動

vi [ファイル名]

2種類のエディットモード

vi エディタのエディットモードは, コマンドモードエディットモード の2種類に大きく分けられます.

  • コマンドモード

検索や置換,ファイルの保存,文字や行の削除など,文字入力以外の作業を行ないます.

  • エディットモード

実際に文字を入力します.

エディタを起動すると,まずコマンドモードが立ち上がります. iIaAoO などの挿入コマンドでエディットモードに入ることができます.コマンドモードに復帰する時は,ESCキーを押してください.

カーソルの移動

文字指向のジャンプ 
h , j , k , l 左,下,上,右 ( ← , ↓ , ↑ , → )
テキスト指向のジャンプ
w , W , b , B 前/後の単語
e , E 単語の末尾
) , ( 次/前の文の先頭
} , { 次/前の段落の先頭
]] , [[ 次/前のセクションの先頭
行指向のジャンプ
0(ゼロ) , $ カレント行の先頭/末尾
^ カレント行の先頭(空白以外の)文字
+ , ? 次/前の行の先頭の文字
_n_l カレント行の n 文字目
H 画面の最上行
M 画面の中央行
L 画面の最下行
_n_H 上から n 行目の行
_n_L 下から n 行目の行
画面指向のジャンプ
CTRL + f , CTRL + b 次/前の画面にスクロール
CTRL + d , CTRL + u 上/下に半画面分スクロール
CTRL + e , CTRL + y ウィンドウの下/上にもう1行表示
z RETURN カーソルのある行を画面の一番上に表示
z. (ゼット ドット) カーソルのある行を画面中央に表示
z- (ゼット ハイフン) カーソルのある行を画面の一番下に表示
CTRL + l , CTRL + r 画面の書き直し(スクロールなし)
検索
/ pattern パターンを順方向に検索
? pattern パターンを逆方向に検索
n , N 最後の検索を,同じ/反対の方向で繰り返す
/ , ? 直前の検索を,順方向/逆方向に繰り返す
fx カレント行内の,カーソル位置より後にある x にジャンプ
Fx カレント行内の,カーソル位置より前にある x にジャンプ
tx カレント行内の,カーソル位置より後にある x の直前の文字にジャンプ
Tx カレント行内の,カーソル位置より前にある x の直後の文字にジャンプ
; 直前のカレント行内検索を繰り返す
, 直前のカレント行内検索を反対方向で繰り返す
行番号によるジャンプ
CTRL + g カレント行の行番号を表示
_n_G 行番号 n にジャンプ
G ファイルの最終行にジャンプ
:n 行番号 n にジャンプ
位置のマーク
mx 現在位置を x としてマーク
x x にジャンプ
直前のマークまたは文脈に戻る
`x マークを x を含む行の先頭にジャンプ
`` 直前のマークを含む行の先頭に戻る

終了コマンド

終了コマンド
ZZ ファイルを書き込んで(保存)終了
:x ファイルを書き込んで(保存)終了
:wq ファイルを書き込んで(保存)終了
:w ファイルの書き込み(保存)
:w! (強制的な)ファイルの書き込み(保存)
:q ファイルの編集を終了
:q! ファイルの編集を終了(全ての変更を無効にする)
:e! 現在のファイルを,最後に書き込んだ(保存した)時点の内容に戻す

編集コマンド

挿入
i , a カーソルの前/後にテキストを挿入
I , A 行の先頭/末尾にテキストを挿入
o , O (大文字 オー) カーソルの下/上にテキスト入力用の新しい行をオープン
変更
r 文字を変更
cw 単語を変更
cc カレント行を変更
C 行末まで変更
R 文字列を重ね書きする
s 文字をテキストで置き換える
S カレント行をテキストで置き換える
移動,削除
x 文字の削除
X カーソルの前にある文字の削除
dw 単語の削除
dd カレント行の削除
D 行末まで削除
p , P 削除したテキストをカーソルの後/前に挿入する
“_n_p カーソルの後に,削除バッファ番号 n のテキストを挿入する(最新 9 回の削除について有効)
ヤンク
yw 単語のヤンク(コピー)
yy カレント行のヤンク
“_a_yy a という名前のバッファにカレント行をヤンク
p , P ヤンクしたテキストをカーソルの後/前に挿入する
“_a_p カーソルの前に,バッファ a のテキストを挿入する
その他のコマンド
. (ドット) 最後の編集コマンドの繰り返し
u , U 最後の編集の取り消し( undo )/カレント行の復元
j 2 行の連結
ex コマンドを使った場合
:d 行の削除
:m 行の移動
:co , :t 行のコピー
/ , ? 直前の検索を,順方向/逆方向に繰り返す
:.,$d カレント行からファイルの最終行まで削除

Emacs は,UNIX 系の OS でよく利用される,高機能でカスタマイズ性の高いテキストエディタです.
Emacs で編集を行う際は,バッファにファイルを読み込んで作業した後,編集したバッファをファイルに書き込む形になります.複数のバッファを立ち上げ,切り替えながら作業できるので,バッファごとに名前がついています.通常は,編集するファイル名がバッファの名前となっています.

emacs [ファイル名]

起動時にファイル名を指定すると,その名前で編集バッファが用意され,該当ファイルが読み込まれます.(ファイルが存在しない場合は,バッファは空っぽのままです.)
ファイル名を省略して起動すると,バッファ名は自動的に scratch となります.

X (ウィンドウシステム)が利用できる環境で起動すると,Xクライアントとして新規ウィンドウが立ち上がります.

ウィンドウシステムが利用できない環境の場合は,次のような画面が表示されます.

Emacs の画面は,大きく3つの部分に分かれています.

  • テキストウィンドウ

一番大きいエリア.入力した文字が表示されます.

  • モード行

テキストウィンドウの下にある反転した行.テキストウィンドウの状態などが表示されます.
モード行のおおよその意味は,次のとおりです.

  • エコー行

モード行の下にある行. Emacs からのメッセージが表示されます.入力もここで行います.

カーソル移動などの操作は、特殊なキー入力を使います。 キー入力の方法は次の二つです。

  • CTRL キー を押しながら文字キーを押す( C-文字キー

  • ESC キー を押した後に文字キーを押す( M-文字キー

ファイルを開く( C-x C-f

Emacs 起動後,新たにファイルを読み込みたい時は, C-x C-f ( CTRL を押しながら x ,続いて CTRL を押しながら f )を押します.すると,エコー行に次のメッセージが表示されます.

```nohighlight
Find file: ~/
```

Emacs をホームディレクトリ以外で起動した場合は,/~ ではなく,カレントディレクトリのパスが表示されます.
メッセージの後に続けて,開きたいファイル名( 例 test.txt )を入力し,Enter キーを押します.

Find file: ~/test.txt

すると,test.txt という名前のバッファが用意され,ファイルの内容が編集バッファに読み込まれます.ファイルが存在しない場合は,次のように新規ファイルを意味する( New file )のメッセージがエコー行に表示されます.

文字の入力

文字は,テキストウィンドウ上のカーソル位置に入力されます.文字の削除は,Delete キーです.(Backspace キーは文字の削除には使用しません.)

日本語入力システム

日本語を入力する場合は,まず C-¥ ( CTRL を押しながら ¥ [バックスラッシュ] )で日本語入力システムを起動させてください.システムが起動するとモード行の左隅の表示が [ ? - ] から [ あ ] に切り替わり,ローマ字かな変換が可能となります.入力システムを元に戻す時は,ふたたび C-¥ を押してください.

日本語入力システムで, k y o u t o d a i g a k u とタイプすると,次のように表示されます.

| きょうとだいがく |

左右に表示される縦棒“ | ”は,この縦棒に挟まれた区間に,かな漢字変換が適用されることを意味しています.変換はSpace キーで行います.この時,左隅の表示は[あ] から [漢] に切り替わります.

| 京都大学 |

続けて Space キーを押すと,次の変換候補が表示されます.Enter キーまたは C-l で入力を確定します.変換する文節を変えたい時は, C-i または C-o を押してください.文節毎に変換を行なう場合は,文節にカーソルを移動してSpace キーを押します.漢字変換を取り消す際は C-c を押してください.

カーソルの移動

カーソル移動の方法は次のとおりです.

col 1 col 2
C-p 上方向に移動
C-n 下方向に移動
C-f 右に移動
C-b 左に移動
C-a 行の先頭に移動
C-e 行の末尾に移動

キーはそれぞれ previous,next,forward,backward,ahead,end of lineの略です.

col 1 col 2
C-v 次の画面にスクロール
M-v ( ESC を押して離し v を押す) 前の画面にスクロール
M-< バッファの先頭に移動
M-> バッファの最後に移動

削除とコピー

文字の削除には,いくつか方法があります.

col 1 col 2
Delete キー 一文字戻って削除
C-d カーソル位置にある文字を一文字削除
C-k カーソル位置から行の末尾までを全て削除

範囲を指定して削除することも可能です.まず指定したい範囲の先頭にカーソルを移動させ, C-@ でマークを付けます.その際,エコー行に Mark set と表示されます.次に,範囲の最後にカーソルを移動させ C-w を押します.すると,現在のカーソル位置からマークを付けた範囲が全て削除されます.

C-kC-w で削除した文字はコピーバッファに保存されるため, C-y でペーストすることができます.コピーバッファは, C-kC-w を実行する毎に書き換えられます.
ただし, C-d や Delete キーで削除した文字は,コピーバッファに保存されませんので注意してください.

操作の取り消し

操作を取り止める時は C-g を押します.この時,エコー行には Quit と表示されます.直前の編集操作を取り消す時は, C-x u を押します.この時,エコー行には Undo! と表示されます.

ファイルの保存( C-x C-s

編集内容をファイルに保存する際は, C-x C-s を押します.この時, scratch バッファで編集作業を行なっていた場合は,エコー行に File to save in: ~/ と表示されますので,ファイル名を指定して保存してください.

編集バッファの抹消

編集バッファを抹消する際は, C-x k を押します.
エコー行に Kill buffer: (default test.txt) と表示されますので,Enter キーを押してください.内容に変更がなければ,そのまま抹消されます.バッファの内容に変更があった場合は,さらに Buffer test.txt modified; kill anyway? (yes or no) のメッセージが表示されます.変更内容を無効にして抹消を実行する場合は yes を,抹消を取り止める場合は no を入力して Enter キーを押してください.

Emacs を終了する際は, C-x C-c を押します.
保存していない編集バッファがある場合,エコー行に次のようなメッセージが表示されます.
(ファイル名は一例です.)

Save file /home/a/b59999/test.txt? (y, n, !, ., q, C-r or C-h)

ファイルを保存して終了する際は y を,保存せずに終了する場合は n を入力してEnterキーを押してください.
n の場合は,続いてエコー行に確認メッセージが表示されますので,本当に終了するなら yes ,終了を取り止めるなら no を入力してください.

Modified buffers exist; exit anyway? (yes or no)

Emacs には,チュートリアル(個人指導)が用意されています.開始するには M-? t を押します.ここで紹介していない数多くの機能を学習できるので, Emacs を早くマスターしたい方にはおすすめです.
チュートリアルもまた一つのバッファで実行されますので,終了の際は, C-x k でバッファを抹消してください.


Copyright © Academic Center for Computing and Media Studies, Kyoto University, All Rights Reserved.