ユーザーが作成した様々なデータは、 ファイル という形で記録されます。そして、記録されたファイルを ディレクトリ と呼ばれる入れ物に入れて管理します。ディレクトリの中にディレクトリを作って、階層的にファイルを管理することも可能です。
このようなファイル構造を、木の枝になぞらえてツリー構造と呼んでいます。 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種類に大きく分けられます。
検索や置換、ファイルの保存、文字や行の削除など、文字入力以外の作業を行ないます。
実際に文字を入力します。
エディタを起動すると、まずコマンドモードが立ち上がります。 i
、 I
、 a
、 A
、 o
、 O
などの挿入コマンドでエディットモードに入ることができます。コマンドモードに復帰する時は、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-k
や C-w
で削除した文字はコピーバッファに保存されるため、 C-y
でペーストすることができます。コピーバッファは、 C-k
や C-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
でバッファを抹消してください。