--- title: 'UNIX / Linux の基礎知識' taxonomy: category: - docs external_links: process: true title: false no_follow: true mode: active target: _blank --- [toc] ## ファイルシステム{#system} ### ファイルとディレクトリ{#file} ユーザーが作成した様々なデータは、 **ファイル** という形で記録されます。そして、記録されたファイルを **ディレクトリ** と呼ばれる入れ物に入れて管理します。ディレクトリの中にディレクトリを作って、階層的にファイルを管理することも可能です。 ![](348_901.jpg) このようなファイル構造を、木の枝になぞらえてツリー構造と呼んでいます。 UNIX では、木の根っこに当たる部分を **ルートディレクトリ** と呼び、“ /(スラッシュ)”を使って表します。そして、ユーザーが作業を行なっているディレクトリを **カレントディレクトリ** と呼びます。 ### 絶対パスと相対パス{#path} ツリー構造においては、ファイルを指定するための **パス** という概念が必要となります。パスの指定方法には、 **絶対パス** と **相対パス** の2種類があります。 * **絶対パス** ルートディレクトリを基準にしてファイルを指定する方法です。 (例)図1「report1.txt」を指定する場合。 ```nohighlight /home/a/b59999/report/report1.txt ``` * **相対パス** カレントディレクトリを基準にしてファイルを指定する方法です。 (例)カレントディレクトリ「/home/a/b59999」を基準にして、図1「report1.txt」 を指定する場合。 ```nohighlight report/report1.txt ``` ## 基本的なコマンド{#command} UNIXでよく使われる基本的なコマンドを説明します。 ### `pwd` -カレントディレクトリを表示する{#pwd} ```nohighlight pwd ``` **実行例** ```nohighlight [b59999@hx001 ~]$ pwd ``` ```nohighlight /home/a/b59999 # カレントディレクトリが表示されている ``` ### `ls` -ファイルの一覧を表示する{#ls} ```nohighlight ls [オプション] [ファイル名ディレクトリ名] ``` **主なオプション** オプション | 効果 ------ | -------------------------------------------------------------- -l | ファイルの詳しい情報を表示する -F | ディレクトリには “ /(スラッシュ)”、実行可能ファイルには“ *(アスタリスク)”等をつけて属性をわかりやすく表示する -a | システム等で使用される、“ .(ドット)”で始まるファイルも表示する **実行例** ```nohighlight [b59999@hx001 ~]$ ls ``` ```nohighlight file1.txt file2.bmp dir1 # ファイルが表示されている [b59999@hx001 ~]$ ls -a ``` ```nohighlight . .cshrc .tcshrc file1.txt dir1 # '.' で始まるファイルも表示されている .. .login .bashrc file2.bmp [b59999@hx001 ~]$ ls -F ``` ```nohighlight file1.txt file2.bmp dir1/ # ディレクトリには '/' がついている [b59999@hx001 ~]$ ``` ### `cd` -カレントディレクトリを移動する{#cd} ```nohighlight cd [ディレクトリ名] ``` **実行例** ```nohighlight [b59999@hx001 ~]$ pwd ``` ```nohighlight /home/a/b59999 # カレントディレクトリは /home/a/b59999 ``` ```nohighlight [b59999@hx001 ~]$ cd dir1 # カレントディレクトリを dir1 に移動する [b59999@hx001 ~]$ pwd ``` ```nohighlight /home/a/b59999/dir1 # カレントディレクトリが dir1 に移動した ``` ### `cp` -ファイルやディレクトリをコピーする{#cp} ```nohighlight cp [オプション] [コピー元] [コピー先] ``` **主なオプション** オプション | 効果 ------ | -------------------------------------------- -R | コピー元がディレクトリだった場合、そのディレクトリ以下のツリー構造を含めてコピーします。 **実行例** ```nohighlight [b59999@hx001 ~]$ ls -F file1.txt dir1/ ``` ```nohighlight [b59999@hx001 ~]$ cp file1.txt file2.txt # file1.txtをfile2.txtとしてコピーする [b59999@hx001 ~]$ ls -F ``` ```nohighlight file1.txt file2.bmp dir1/ # file2.txt ができている ``` ```nohighlight [b59999@hx001 ~]$ cp file2.txt dir1 # file2.txt を dir1 にコピーする [b59999@hx001 ~]$ ls dir1 ``` ```nohighlight file2.txt # file2.txt が dir1 にコピーされている ``` ```nohighlight [b59999@hx001 ~]$ cp -R dir1 dir2 # dir1 を dir2 にコピーする [b59999@hx001 ~]$ ls -F ``` ```nohighlight file1.txt file2.txt dir1/ dir2/ # dir2 ができている [b59999@hx001 ~]$ ls dir2 ``` ```nohighlight file2.txt # ツリー構造も含めて dir1 が dir2 にコピーされている [b59999@hx001 ~]$ ``` ### `mkdir` -ディレクトリを新規作成する{#mkdir} ```nohighlight mkdir [ディレクトリ名] ``` **実行例** ```nohighlight [b59999@hx001 ~]$ ls file1.txt file2.bmp [b59999@hx001 ~]$ mkdir dir1 [b59999@hx001 ~]$ ls -F ``` ```nohighlight file1.txt file2.bmp dir1/ # dir1 ができている [b59999@hx001 ~]$ ``` ### `rm` -ファイルやディレクトリを削除する{#rm} ```nohighlight rm [オプション] [ファイル名ディレクトリ名] ``` **主なオプション** オプション | 効果 ------- | ---------------------------------------- -R | 対象がディレクトリだった場合、そのディレクトリ以下のツリー構造を含めて削除する **実行例** ```nohighlight [b59999@hx001 ~]$ ls -F file1.txt file2.bmp dir1/ ``` ```nohighlight [b59999@hx001 ~]$ rm file1.txt # file1.txt を削除する [b59999@hx001 ~]$ ls -F ``` ```nohighlight file2.bmp dir1/ # file1.txt が削除されている [b59999@hx001 ~]$ ls -F dir1 ``` ```nohighlight dir2/ # dir1 の下に dir2 がある ``` ```nohighlight [b59999@hx001 ~]$ rm -R dir1 # dir1 を削除する [b59999@hx001 ~]$ ls -F ``` ```nohighlight file2.bmp # dir1 がそれ以下のツリー構造ごと削除されている ``` ### `mv` -ファイルを移動する(ファイル名を変更する){#mv} `mv` コマンドは、ファイルやディレクトリを移動させる時に使用します。また、同じディレクトリに移動させることで、ファイル名を変更することもできます。 ```nohighlight mv [元のファイル名] [新しいファイル名] ``` **実行例** ```nohighlight [b59999@hx001 ~]$ ls -F file1.txt file2.bmp dir1/  ``` ```nohighlight [b59999@hx001 ~]$ mv file1.txt dir1 # file1.txt を dir1 に移動する [b59999@hx001 ~]$ ls -F ``` ```nohighlight file2.bmp dir1/ # file1.txt が無くなっている [b59999@hx001 ~]$ ls dir1 ``` ```nohighlight file1.txt # dir1 に移動している ``` ```nohighlight [b59999@hx001 ~]$ mv file2.bmp file3.bmp # file2.bmp を file3.bmp に移動する [b59999@hx001 ~]$ ls -F ``` ```nohighlight file3.bmp dir1/ # file3.bmp にファイル名が変わっている ``` ### `cat` -ファイルの中身を画面に表示する{#cat} ```nohighlight cat [ファイル名] ``` **実行例** ```nohighlight [b59999@hx001 ~]$ ls -F file1.txt file2.bmp dir1/ [b59999@hx001 ~]$ cat file1.txt ``` ```nohighlight abcdefghijklmnopqrstuvwxyz # file1.txt の中身が表示されている [b59999@hx001 ~]$ ``` ### `more` と `less` -ファイルの中身を表示する{#less} `cat` コマンドに代わって `more` コマンド、 `less` コマンドを使用すると、ファイルが長い場合1ページごとに表示を止め、コマンド待ち状態になります。 ```nohighlight more(もしくは less ) [ファイル名] ``` **実行例** ```nohighlight [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` -ログアウトする{#logout} ```nohighlight logout ``` **実行例** ```nohighlight [b59999@hx001 ~]$ logout # ログアウトする ``` ### `man` -マニュアルを表示する(各コマンドの説明を見る){#man} **lsコマンドの説明を表示する** ```nohighlight [b59999@hx001 ~]$ man ls ``` `man` コマンドのメッセージを日本語表示する場合は、sshクライアントの文字コードの設定をUTF-8に指定した上で、環境変数LANGにja_JP.UTF-8を設定してください。 **tcshを使用している場合** ```nohighlight [b59999@hx001 ~]$ setenv LANG ja_JP.UTF-8 ``` **bashを使用している場合** ```nohighlight [b59999@hx001 ~]$ export LANG=ja_JP.UTF-8 ``` ## vi エディタの使い方{#vi} vi エディタは、UNIX 系 OS に標準で組み込まれているテキストエディタです。操作体系が非常に特殊なので、以下に詳しく説明します。 **vi エディタの起動** ```nohighlight vi [ファイル名] ``` **2種類のエディットモード** vi エディタのエディットモードは、 **コマンドモード** と **エディットモード** の2種類に大きく分けられます。 * **コマンドモード** 検索や置換、ファイルの保存、文字や行の削除など、文字入力以外の作業を行ないます。 * **エディットモード** 実際に文字を入力します。 エディタを起動すると、まずコマンドモードが立ち上がります。 `i` 、 `I` 、 `a` 、 `A` 、 `o` 、 `O` などの挿入コマンドでエディットモードに入ることができます。コマンドモードに復帰する時は、ESCキーを押してください。 ### vi コマンドリファレンス{#vi} **カーソルの移動** 文字指向のジャンプ | --------------- | -------------------------- 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 | 最後の検索を、同じ/反対の方向で繰り返す / , ? | 直前の検索を、順方向/逆方向に繰り返す f_x_ | カレント行内の、カーソル位置より後にある _x_ にジャンプ F_x_ | カレント行内の、カーソル位置より前にある _x_ にジャンプ t_x_ | カレント行内の、カーソル位置より後にある _x_ の直前の文字にジャンプ T_x_ | カレント行内の、カーソル位置より前にある _x_ の直後の文字にジャンプ ; | 直前のカレント行内検索を繰り返す , | 直前のカレント行内検索を反対方向で繰り返す 行番号によるジャンプ | ----------------------------------- | --------------- CTRL + g | カレント行の行番号を表示 _n_G | 行番号 _n_ にジャンプ G | ファイルの最終行にジャンプ :_n_ | 行番号 _n_ にジャンプ 位置のマーク | ------- | ----------------------- m_x_ | 現在位置を _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 の使い方{#emacs} ### Emacs とは{#emacs_top} **Emacs** は、UNIX 系の OS でよく利用される、高機能でカスタマイズ性の高いテキストエディタです。 **Emacs** で編集を行う際は、バッファにファイルを読み込んで作業した後、編集したバッファをファイルに書き込む形になります。複数のバッファを立ち上げ、切り替えながら作業できるので、バッファごとに名前がついています。通常は、編集するファイル名がバッファの名前となっています。 ### Emacs の起動{#emacs_boot} ```nohighlight emacs [ファイル名] ``` 起動時にファイル名を指定すると、その名前で編集バッファが用意され、該当ファイルが読み込まれます。(ファイルが存在しない場合は、バッファは空っぽのままです。) ファイル名を省略して起動すると、バッファ名は自動的に **scratch** となります。 ### Emacs の画面 {#emacs_display} X (ウィンドウシステム)が利用できる環境で起動すると、Xクライアントとして新規ウィンドウが立ち上がります。 ![](348_902.jpg) ウィンドウシステムが利用できない環境の場合は、次のような画面が表示されます。 ![](348_903.jpg) **Emacs** の画面は、大きく3つの部分に分かれています。 * **テキストウィンドウ** 一番大きいエリア。入力した文字が表示されます。 * **モード行** テキストウィンドウの下にある反転した行。テキストウィンドウの状態などが表示されます。 モード行のおおよその意味は、次のとおりです。 ![](348_904.jpg) * **エコー行** モード行の下にある行。 **Emacs** からのメッセージが表示されます。入力もここで行います。 ### Emacs の基本操作{#emacs_use} カーソル移動などの操作は、特殊なキー入力を使います。 キー入力の方法は次の二つです。 * **CTRL キー** を押しながら文字キーを押す( **C-文字キー** ) * **ESC キー** を押した後に文字キーを押す( **M-文字キー** ) **<ins>ファイルを開く( <code>C-x</code> <code>C-f</code> )</ins>** **Emacs** 起動後、新たにファイルを読み込みたい時は、 `C-x` `C-f` ( CTRL を押しながら x 、続いて CTRL を押しながら f )を押します。すると、エコー行に次のメッセージが表示されます。 ```nohighlight Find file: ~/ ``` **Emacs** をホームディレクトリ以外で起動した場合は、/~ ではなく、カレントディレクトリのパスが表示されます。 メッセージの後に続けて、開きたいファイル名( 例 test.txt )を入力し、Enter キーを押します。 ```nohighlight Find file: ~/test.txt ``` すると、test.txt という名前のバッファが用意され、ファイルの内容が編集バッファに読み込まれます。ファイルが存在しない場合は、次のように新規ファイルを意味する( New file )のメッセージがエコー行に表示されます。 ![](348_905.jpg) **<ins>文字の入力</ins>** 文字は、テキストウィンドウ上のカーソル位置に入力されます。文字の削除は、Delete キーです。(Backspace キーは文字の削除には使用しません。) **<ins>日本語入力システム</ins>** 日本語を入力する場合は、まず `C-¥` ( CTRL を押しながら ¥ [バックスラッシュ] )で日本語入力システムを起動させてください。システムが起動するとモード行の左隅の表示が [ ? - ] から [ あ ] に切り替わり、ローマ字かな変換が可能となります。入力システムを元に戻す時は、ふたたび `C-¥` を押してください。 日本語入力システムで、 k y o u t o d a i g a k u とタイプすると、次のように表示されます。 ```nohighlight | きょうとだいがく | ``` 左右に表示される縦棒“ | ”は、この縦棒に挟まれた区間に、かな漢字変換が適用されることを意味しています。変換はSpace キーで行います。この時、左隅の表示は[あ] から [漢] に切り替わります。 ```nohighlight | 京都大学 | ``` 続けて Space キーを押すと、次の変換候補が表示されます。Enter キーまたは `C-l` で入力を確定します。変換する文節を変えたい時は、 `C-i` または `C-o` を押してください。文節毎に変換を行なう場合は、文節にカーソルを移動してSpace キーを押します。漢字変換を取り消す際は `C-c` を押してください。 **<ins>カーソルの移動</ins>** カーソル移動の方法は次のとおりです。 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->` | バッファの最後に移動 ![](348_907.jpg) **<ins>削除とコピー</ins>** 文字の削除には、いくつか方法があります。 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 キーで削除した文字は、コピーバッファに保存されませんので注意してください。 **<ins>操作の取り消し</ins>** 操作を取り止める時は `C-g` を押します。この時、エコー行には Quit と表示されます。直前の編集操作を取り消す時は、 `C-x` `u` を押します。この時、エコー行には Undo! と表示されます。 **<ins>ファイルの保存( <code>C-x</code> <code>C-s</code> )</ins>** 編集内容をファイルに保存する際は、 `C-x` `C-s` を押します。この時、 **scratch** バッファで編集作業を行なっていた場合は、エコー行に File to save in: ~/ と表示されますので、ファイル名を指定して保存してください。 **<ins>編集バッファの抹消</ins>** 編集バッファを抹消する際は、 `C-x` `k` を押します。 エコー行に Kill buffer: (default test.txt) と表示されますので、Enter キーを押してください。内容に変更がなければ、そのまま抹消されます。バッファの内容に変更があった場合は、さらに Buffer test.txt modified; kill anyway? (yes or no) のメッセージが表示されます。変更内容を無効にして抹消を実行する場合は yes を、抹消を取り止める場合は no を入力して Enter キーを押してください。 ### Emacs の終了{#emacs_end} **Emacs** を終了する際は、 `C-x` `C-c` を押します。 保存していない編集バッファがある場合、エコー行に次のようなメッセージが表示されます。 (ファイル名は一例です。) ```nohighlight Save file /home/a/b59999/test.txt? (y, n, !, ., q, C-r or C-h) ``` ファイルを保存して終了する際は y を、保存せずに終了する場合は n を入力してEnterキーを押してください。 n の場合は、続いてエコー行に確認メッセージが表示されますので、本当に終了するなら yes 、終了を取り止めるなら no を入力してください。 ```nohighlight Modified buffers exist; exit anyway? (yes or no) ``` ### Emacs をマスターするために{#emacs_master} **Emacs** には、チュートリアル(個人指導)が用意されています。開始するには `M-?` `t` を押します。ここで紹介していない数多くの機能を学習できるので、 **Emacs** を早くマスターしたい方にはおすすめです。 チュートリアルもまた一つのバッファで実行されますので、終了の際は、 `C-x` `k` でバッファを抹消してください。