ファイルの整理

授業用ディレクトリの下にソースファイルと実行ファイルを保存していくと, このディレクトリはやがてファイルだらけになってしまいますね. テキストの1章分を学習するごとに整理するとよいでしょう. この方法を説明します.

不要なファイルの削除

最初に,不要なファイルを削除しましょう. ターミナルを立ち上げ,cd コマンドで授業用フォルダに移動します. 続いて,ls コマンドで, 授業用ディレクトリ densan2 の下にあるファイルを表示させてみましょう. 下図では7つのファイルが表示されています.

files under the densan2 directory

a.out というファイルは, 出力ファイル名を指定せずにソースファイルをコンパイルしたときにできるファイルでしたね. これを消去してみましょう. ファイルを消去するコマンドは rm です.これは remove という意味のコマンドです.


rm a.out

と入力して [Return] キーを押してください(rm の次に半角スペースが必要). 続いて ls コマンドで授業用フォルダの内容を表示させると, a.out が消去されたことがわかります.

remove a.out

rm コマンドは危険なコマンドです. 削除するよう指定したファイルは,ごみ箱に移されることなく, そのまま削除されてしまうからです. 指定されたファイルを消去してよいかどうか確認するオプションを指定できますので, これを行った方がよいでしょう. 以下の説明ではこのオプションを用います.

名前の最後にチルダ(~)がついているファイルはバックアップのファイルです. Emacs でソースファイルを作成し,ファイルの更新(上書き保存)を行うと, ひとつ前のバージョンが残されます. これがチルダつきのファイルです. 上図では,list0101.c~ および list0102.c~ の2つです.

バックアップのファイルを消去しましょう.ターミナルで


rm -i *~

と入力して [Return] キーを押してください(-i の前後に半角スペースが必要). ここでアスタリスク(*)はワイルドカードであり, 任意の文字列と一致します. したがって,rm *~ というコマンドは, 「最後が ~ で終わるファイルをすべて削除せよ」という意味になります. ワイルドカードを使うと, このように複数のファイルを指定できます.

remove buckup files

rm と *~ の間に置かれた -i は,interactive の意味で, 削除の確認をするためのオプションです. 上図では,list0101.c~ を削除するかどうか尋ねられています. このファイルを削除してよければ, 1文字 y とだけ入力して [Return] キーを押します.

remove buckup files

削除対象として指定されたファイルが他にあれば, それらすべてについて,削除してよいかどうか順に尋ねられます. 下図では,list0102.c~ を削除するかどうか尋ねられています. このファイルを削除してよければ, 1文字 y とだけ入力して [Return] キーを押します.

remove buckup files

ls コマンドでファイルを表示すると, バックアップファイルが削除されたことがわかります.

files under the densan2 directory

Emacs でソースプログラムを書くと,#list0101.c# のように, シャープ(#)で囲まれた名前のファイルが残ることがあります. これは自動保存されたファイルです. プログラムを書き,ファイルを上書き保存すれば消えるのですが, 上書き保存しないまま Emacs を終了してしまうと残ってしまいます.

Emacs での自動保存ファイルは,単純に rm コマンドを実行しても消せません.


rm '#list0101.c#'

のように, ファイル名をシングルクオーテーション(')で囲ってやれば削除できます.

ファイルの移動

不要なファイルの削除が終わったら, ファイルを整理するためのフォルダ(ディレクトリ)を作って, そこにファイルを移動しましょう. いま,第1章の学習が終わったところだとします. chap01 というディレクトリを作り, 第1章の学習で作成したファイルをこのディレクトリに移動することにします.

授業用ディレクトリ densan2 の下に, chap01 というディレクトリを作りましょう. 現在のワーキングディレクトリは授業用ディレクトリであるとします. ターミナルで


mkdir chap01

と入力して [Return] キーを押します(mkdir の後に半角スペースが必要). この mkdir コマンドは 授業用ディレクトリの作成 で使ったコマンドですね.make directory の省略です.

ディレクトリが作成されたことを ls コマンドで確認しましょう. ディレクトリを区別するために,-F オプションをつけます.


ls -F

と入力して [Return] キーを押してください(ls の後に半角スペースが必要). オプションの -F は大文字です.

make a directory named chap01

ディレクトリには,名前の最後にスラッシュ(/)が付けられています. chap01/ という表示がありますから, chap01 という名前のディレクトリが作成されていることがわかります. 名前の最後にアスタリスク(*)が付いているのは実行ファイルです.

第1章の学習で作成したファイルを chap01 ディレクトリの下に移動します. これには mv コマンド(move という意味)を用います. 移動するファイルとファイルの移動先を, mv [移動するファイル] [移動先] という形式で指定します. ターミナルで


mv list01* chap01/

と入力して [Return] キーを押してください(list01* の前後に半角スペースが必要). コマンド move と remove は似ているので, 間違えて rm コマンドを実行しないように注意してください. list01 の後についているアスタリスク(*)はワイルドカードです. list01* は「list01 で始まるすべてのファイル」という意味になります. ここの例では,こうしたファイルは4つあります. 移動先として指定されているディレクトリは chap01 ですね. 最後のスラッシュは省略してもかまいません. ここでの例では, 授業用ディレクトリに作成されていたファイルはすべて list01 で始まる名前なので, これらすべてのファイルが chap01 ディレクトリの下に移動されることになります.

ファイルが移動されたことを ls コマンドで確認しましょう. 授業用ディレクトリで ls コマンドを実行すると, chap01 というフォルダだけが表示されます.

files under the densan2 directory

cd コマンドで chap01 ディレクトリに移動したあと, ls コマンドでこのディレクトリの下にあるファイルを表示してみてください. 名前が list01 で始まる4つのファイルが移動されたことがわかります.

files under the chap01 directory

移動した実行ファイルの実行

授業用ディレクトリの下に chap01 というディレクトリを作成し, 第1章で作成したファイルをこのディレクトリの下に移動したとします. この chap01 ディレクトリに移動した実行ファイルは, 実行ファイル名だけをターミナルから入力しても実行できません. 授業用ディレクトリにはパスを通しましたが, その下のディレクトリにはパスを通していないからです. たとえば,chap01 ディレクトリの下にある list0102 を実行しようとして list0102 と入力すると, 下図のように command not found というエラーメッセージが返されます.

command not found

現在のワーキングディレクトリが chap01 であれば,


./list0102

と入力すれば list0102 を実行できます. ここでドット(.)は現在のワーキングディレクトリを意味します.

execute list0102

あるいは,実行ファイルがある場所を完全に明示して,


~/densan2/chap01/list0102

としても list0102 を実行できます. チルダ(~)はホームディレクトリを意味します.