ファイルシステムの補足

2000年5月25日 増原英彦


1. ここはどこ? (pwd)


コマンドを使ってファイルを操作するときは、現在地がどこであるかが問題となります。現在地を調べるコマンドは pwd (print working directory) というものです。

早速、実行してみましょう。ターミナルウィンドウに下のようにタイプしてみて下さい。

	 pwd 


どんな答えが表示されますか?

多くの人は

	 pwd 
	/home/g987654
	 

のようになったでしょう。つまり、現在地は /home/g987654 だということです。もちろん、いままで入力したコマンドによって現在地が変わっていることもあります。その場合は、別の答えが返ってくるでしょう。(そうだとしても、ここでは問題ありませんので先に進みましょう。)

このような現在地のことをカレントディレクトリと呼びます。それを知るためのコマンドは pwd です。現在地が分からなくなったらいつでも、pwdコマンドを実行して現在地を確認しましょう。

ファイルの複製や削除をする場合は、現在地を基準にしてファイルを指定することになるため、現在地がどこであるかは大変重要です。


2. 何があるの? (ls)


ファイルを操作するには、どんな名前のファイルがあるかを知る必要があります。そのためには、ファイルの一覧を表示するコマンド ls (listの略) を使います。

早速、実行してみましょう。ターミナルウィンドウで下のようにタイプしてみて下さい。

	 ls 


どんな答えが表示されますか?

人によって色々な答えになると思います。ぼくの場合は次のようになりました。

	 ls 
	Mail	copy	memo.text	overrun.text~
	 


これは、現在地(カレントディレクトリ)あるモノの名前の一覧です。

ここでは8つのモノがあって、名前は「Mail」, 「copy」, 「memo.text」, 「overrun.text~」である、ということを意味しています。


3. もっと詳しく! (ls -l)


コマンド ls は現在地(カレントディレクトリ)あるモノの名前の一覧を表示すると説明しましたが、実際の「モノ」にはファイルディレクトリがあります。

これらの区別を知るには ls コマンドに -l (マイナスと小文字のエル)というオプションを付けて実行します。

早速、実行してみましょう。ターミナルウィンドウで下のようにタイプしてみて下さい。

	 ls  -l (マイナスと小文字のエル)


どんな答えが表示されますか?

人によって色々な答えになると思います。ぼくの場合は次のようになりました。

	 ls  -l 
	total 6
	drwx------ 5 masuhara teacher 1024 Apr 30 1999 Mail
	drwxr-xr-x 2 masuhara teacher 1024 May 7 12:44 copy
	-rw------- 1 masuhara teacher 16 May 23 16:44 memo.text
	-rw-r--r-- 1 masuhara teacher 177 May 23 14:30 overrun.text~	
	 


面くらうかも知れませんが、注目すべきは一番左端一番右端です。

一番左端の文字は「d」だったり「-」だったりします。これはディレクトリかファイルかの区別になります。また、右端は名前です。ですから例えば、上から2行目の

	drwx------ 5 masuhara teacher 1024 Apr 30 1999 Mail

という行は「Mailという名前のディレクトリ」を表わしているわけです。また、次の

	-rw-r--r-- 1 masuhara teacher 1691 May 17 17:59 Statis

という行は「Statisという名前のファイル」を表わしています。

どんなモノがあるかを調べるには ls コマンドを使います。特に ls -l というコマンドを使えば、ファイルかディレクトリかの区別も調べられます


3. 視点を変える (cd)


現在地と、そこに何があるかが分かったら、次は現在地を変えてみましょう。そのためのコマンドは cd (change directory)です。早速、実行してみましょう。ターミナルウィンドウで下のようにタイプしてみて下さい。

	 cd  / 


どんな答えが表示されますか?

……何も表示されませんね。でも、安心して下さい。このコマンドは表示を何もしないだけで、現在地はしっかり変わっています。それを確認してみましょう。ターミナルウィンドウで下のようにタイプしてみて下さい。

	 pwd 


どんな答えが表示されますか?

はい、

	 pwd 
	/
	 


となりましたね。先に「cd /」というコマンドを実行したので「/」というディレクトリに移動したようです。

最初に pwd を実行したときは /home/g987654 のような表示だったので、確かに現在地は変わっていますね。さらに、そこに何があるかを調べてみましょう。ターミナルウィンドウで下のようにタイプしてみて下さい。

	 ls 


どんな答えが表示されますか?

	 ls 
	Mail	    dev		export	    mnt		proc	    vol
	TT_DB	    devias	home	    net		sbin	    winhome
	bin	    devices	kernel	    oldhome	tmp	    xfn
	cdrom	    etc		lib	    opt		usr
	core	    exp		lost+found  platform	var
	 


多くの人はこのような答えが表示がされたと思います。確かに、先程までいた場所とは違うモノが見えているようです。

現在地(カレントディレクトリ)を変えるには cd というコマンドを使います。このコマンドには、どこの位置に移るかを引数として与えることができる


4. 少しさまよってみる (pwd, ls, cd)


いままで習ったコマンドに慣れるために、少し散歩をしてみましょう。次のようなコマンドを順に実行してみて下さい。どんな答えが表示されますか?

	 pwd 
	 cd  /home/masuhara 
	 pwd 
	 ls 
	 cd  /home/masuhara/copy 
	 pwd 
	 ls 
	 cd  /home/g987654  (g987654の部分は自分のログイン名に変えて下さい)
	 pwd 
	 ls 


実際に出てくる表示は省略しますが、最後に pwd を実行したときに /home/gXXXXXX と表示されれば大丈夫でしょう。

ところで、毎回毎回「/home/gXXXXXX/…」とタイプするのも面倒です。教育用計算機システムの環境では「/home/XYZ」という場所は「XYZ」という人のホームディレクトリになっています。ホームディレクトリは「~XYZ」のように「~」(チルダ)記号をつけることで略記できます。記憶力の良い人はこれを覚えておいて、以降の例でも「~」を使うとよいでしょう。

「~」記号の詳しいことはHWBの説明を参照して下さい。


5. 入れ物を用意する (mkdir)


ちらかった机の上を片付けるには、文具を引き出しにしまったり、書類を束ねて本棚に入れたりしますね。それと同じで、ちらかったファイルを片付けるためには、書類を束ねるための入れ物を使います。そのような入れ物はディレクトリと呼ばれ、それを作るためのコマンドが mkdir (make directory)です。早速、実行してみましょう。ターミナルウィンドウで下のようにタイプしてみて下さい。

	 mkdir  jouhou 


どんな答えが表示されますか?

……何も表示されませんね。でも、安心して下さい。このコマンドは表示を何もしないだけで、入れ物はしっかり作られています。場合によっては

	 mkdir  jouhou 
	mkdir: cannot make directory `jouhou': ファイルが存在します。
	 

と表示されるかも知れません。これは、すでに jouhou という名前のモノが作られているということですから、この作業は必要なかったということですので、先に行きましょう。

では、本当に入れ物ができたかどうか確認してみましょう。ターミナルウィンドウで下のようにタイプしてみて下さい。

	 ls  -l 


沢山表示がされると思います。その中で右端の欄が「jouhou」となっている行はありましたか? 一番左端には何と書いてありますか?

ぼくはこんな表示になりました。

	 ls  -l 
	(中略)
	drwx--x--x 2 masuhara teacher 96 May 24 10:12 jouhou
	(後略)
	 


一番右が「jouhou」、左端の文字が「d」なので「jouhouという名前の入れ物(ディレクトリ)」があることが分かります。

入れ物(ディレクトリ)を作るには mkdir というコマンドを使います。できたかどうかを確認するには ls -l というコマンドを使います


6. 入れ物の中 (mkdir - cd)


入れ物(ディレクトリ)を作っただけでは、中がどうなっているかは分かりません。中を覗くにはどうすればよいのでしょうか?

そうですね、前に出てきた現在地を変更するコマンド cd を使います。早速試してみましょう。ターミナルウィンドウで下のようにタイプしてみて下さい。

	 cd  jouhou 


どんな答えが表示されますか? そうですね、何も表示されません。このコマンドは何も表示しないのでした。復習ですが、現在地を確認するには pwd コマンドですので、さらに、下のようにとタイプしてみましょう。

	 pwd 


どんな答えが表示されますか?

はい、

	 pwd 
	/home/gXXXXXX/jouhou
	 


となりましたね。これで新しく作った入れ物の中を見ることができるわけです。さらに下のようにタイプしてみましょう。

	 ls 


どんな答えが表示されましたか?

……何も表示されませんでしたか? そうですね、新しく作った入れ物は空っぽですから、何も表示されないわけです。もし何か表示されたとしたら、それは過去に何か作業をした結果ということです。

復習です: 入れ物(ディレクトリ)の中を見るためには cd コマンドを使って現在地を変更してからlsコマンドを実行します


7. 入れ物の中の入れ物


さてあなたはいまホームディレクトリの下に作った jouhou というディレクトリの中にいるわけです。このことを簡単に言うために「現在地が /home/gXXXXXX/jouhou である」と言うことにしましょう。

ここで入れ物(ディレクトリ)を作る mkdir コマンドを使って copy という入れ物を作った場合、それはどこにできるのでしょうか?

習うより慣れろで試してみることにしましょう。まず、pwd コマンドを使って現在地が /home/gXXXXXX/jouhou であることを確認します。

次にmkdir コマンドを使って copy という入れ物を作ります。

	 mkdir  copy 


さらに、ls コマンドを使って copy という入れ物ができていることを確認します。

その上で、cd コマンドを使って copy という入れ物の中に現在地を変更します。

これで、現在地がどこであるかを確認するために pwd コマンドを実行します。

結果は、予想できると思いますが、

のようになります。

mkdirコマンドは、現在地に入れ物(ディレクトリ)を作ります


8. エディタでファイルを作る


エディタでファイルを作るには、「Muleウィンドウで x f とタイプして、『Find file: ~/』というメッセージにファイル名を入力すればよい」と習いました。

では、ある入れ物(ディレクトリ)の中にファイルを作るにはどうすればよいのでしょうか。

実はいままでと同じやり方でよいのです。実際に「jouhou」という入れ物(ディレクトリ)の中に「report.text」というファイルを作ってみましょう。

  1. Muleウィンドウで x f とタイプします
  2. Muleウィンドウの一番下の行(ミニバッファ)に
    	Find file ~/
    と表示されますね。
  3. そこで jouhou/report.text とタイプしましょう。
  4. Muleウィンドウの一番下の行(ミニバッファ)に「(new file)」と表示されて、その上の反転している行(モードライン)に「report.text」と表示されましたね?
  5. では何か書いてみましょう。反転している行(モードライン)が
    --**-Emacs: report.text
    のように「**」が表示されます。
  6. 書いたらそれを保存しましょう。 x s とタイプします。
  7. Muleウィンドウの一番下の行(ミニバッファ)に
    Wrote /home/gXXXXXX/jouhou/report.text
    と表示されて、その上の反転している行(モードライン)が
    -----Emacs: report.text
    のようになるはずです。


本当に保存ができているかどうかをコマンドを使って確認しましょう。まずは、report.textというファイルができていることを ls コマンドで確認します。

今度はターミナルウィンドウにマウスカーソルを移動して、下のようにタイプしてみて下さい。

	 ls 


ここで report.text が表示されましたか?

さらに、report.text の中身も確認しておきましょう。ファイルの中身を表示するコマンドは cat です。下のようにタイプしてみて下さい。

	 cat  report.text 


Muleで編集したファイルの中身が表示されましたね。

エディタ(mule)を使ってある入れ物(ディレクトリ)の中にあるファイルを編集するには、 x f のあとに、ディレクトリ名も含めてファイル名を書けばよい


9. 複製 (cp)


ファイルの複製を作るコマンドは cp (copy)です。いろいろと使ってみましょう。

まず、現在地が /home/gXXXXXX/jouhou で、そこに report.text というファイルがあるとします。実際にそうなっているかは pwd コマンドと ls コマンドでしたね。確認して下さい。

では、report.text をコピーして、test.text というファイルを作りましょう。

ターミナルウィンドウで下のようにタイプしてみて下さい。

	 cp  report.text  test.text 


何が表示されましたか?

……何も表示されませんね。では、続けてコマンド ls を使ってどうなっているかを確認して下さい。

	 ls 


何が表示されましたか?

ぼくはこんな答えになりました。

	 ls 
	copy	report.text	test.text
	 


どうやら、test.text というファイルができたみたいです。中身を

	 cat  test.text 


として確認してみましょう。また、

	 cat  report.text 


として中身を比べてみましょう。

ファイルのコピーをするコマンドはcpで、
    cp (もとのファイル名) (新しいファイル名)
の順にコマンドを書きます


10. もっと複製を (cp)


同じ入れ物の中にあるファイルを複製することはできましたが、別の入れ物にあるファイルを複製するにはどうすればよいのでしょうか。

実際は cp コマンドで複製をするときに、ディレクトリ名つきのファイル名を指定すると、その場所からコピーをしてくれます

いま、/home/masuhara/copy というディレクトリには junk-1.text というファイルがあります。それを現在地にコピーしてみましょう。なお、現在地は /home/gXXXXXX/jouhou だとします。そうなっているかどうかを pwd コマンドで確認してから次の手順を試してみましょう。

ターミナルウィンドウで下のようにタイプしてみて下さい。

	 cp  /home/masuhara/copy/junk-1.text  junk-1.text 


何も表示されなければokですので、さらに、コマンド ls を使って現在地に junk-1.text というファイルができたかどうかを確認して下さい。できましたか? さらに、cat コマンドを使って中身を見ておきましょう。

別の入れ物(ディレクトリ)からファイルをコピーするには、cp コマンドを使うときに、ディレクトリ名に続けてファイル名を書きます


11. まとめて複製


沢山のファイルを複製するときに、コマンドを何回も実行するのは大変です。もっと楽な方法はないのでしょうか。

実は、cp コマンドにはファイルをまとめて複製することもできます。いま、/home/masuhara/copy というディレクトリには junk-2.text, junk-3.text というファイルもあります。それを現在地にコピーしてみましょう。なお、現在地は /home/gXXXXXX/jouhou だとします。そうなっているかどうかを pwd コマンドで確認してから次の手順を試してみましょう。

ターミナルウィンドウで下のようにタイプしてみて下さい。最後のピリオドを忘れないようにして下さい。

	 cp  /home/masuhara/copy/junk-2.text  /home/masuhara/copy/junk-3.text  .(ピリオド) 


文句を言われずに実行できましたか? 上手くいったら、ls コマンドを使って現在地に junk-2.text と junk-3.text ができていることを確認しましょう。

因みに、最後のピリオドは「現在地(カレントディレクトリ)」を示しています。

cpコマンドでファイルの複製ををまとめて現在地に作るには、cp (ファイル名1) (ファイル名2) (ファイル名3) … .(ピリオド) のようにします


12. 沢山のファイル (*)


沢山のファイルをまとめて操作するにはどうするのがよいのでしょうか。実は、ファイル名を1つずつ書くかわりに、沢山のファイルをまとめて指定する方法があります。そのための記号は「*」(アスタリスク)です。

使い方を見てみましょう。

まず、現在地を /home/gXXXXXX/jouhou/copy にします。

	 cd  /home/gXXXXXX/jouhou/copy 


現在地が正しく変わったことを pwd コマンドで確認して下さい。

	 pwd 


現在地にはどんなファイルがありますか?

	 ls 


何もないと思います。(何かあっても構いません)そして、次の手順を試してみましょう。

	 cp  /home/masuhara/copy/*  .(ピリオド) 


結果の確認はlsコマンドで行います。

	 ls 


何が表示されますか?

	 cp  /home/masuhara/copy/*  .(ピリオド) 
	 ls 
	junk-1.text junk-3.text sample-1.text sample-3.text
	junk-2.text junk-4.text sample-2.text sample-4.text
	 


何やら沢山のファイルが複製されてきましたね。「*」記号は、「どんな名前でもいいよ」という意味なので、「/home/masuhara/copy」というディレクトリの中にある全てのファイルが現在地に複製されたのです。

「*」記号を使うとあるディレクトリの中のファイル全てを操作することができます


13. ごみを捨てる (rm)


いらないものは潔く捨てましょう。ファイルを捨てるのはとても簡単で、rm (remove)というコマンドを使います。早速試してみましょう。

いま、現在地(カレントディレクトリ)に junk-1.text というファイルがあるとします。(あるかどうか ls コマンドで確認しておいて下さい。)

ターミナルウィンドウで下のようにタイプしてみて下さい。

	 rm  junk-1.text 


何も文句を言われなければ、ファイルが消えているはずです。確認してみましょう。

	 ls 
	junk-1.text junk-3.text sample-1.text sample-3.text
	junk-2.text junk-4.text sample-2.text sample-4.text
	 rm  junk-1.text 
	 ls 
	junk-2.text junk-4.text sample-2.text sample-4.text
	junk-3.text sample-1.text sample-3.text
	 


しっかり消えていますね。あなたの場合も消えていましたか?

ファイルを捨てるコマンドはrmです


14. 分別して捨てる (*)


沢山のファイルがあるときに、ある名前を持ったファイルだけをまとめて捨てたいときはどうすればよいのでしょうか。

前に「*」記号を使って「あるディレクトリの中のファイル全部を複製する」方法を習いました。今回はその応用になります。

例えば、「junkで始まるファイル全て」を表わしたい場合は「junk*」のように書きます。また、「.textで終わるファイル全て」を表わしたい場合は「*.text」のように書きます。最初や最後だけでなく、「*-3*」のように書けば「『-3』を含むファイル全て」を表わすこともできます。

ちょっと確認してみましょう。まず、lsコマンドで現在地にどのようなファイルがあるかを調べます。続けて、

	 ls  junk* 
	 ls  *.text 
	 ls  *-3* 


を実行してみて下さい。それぞれ、どのようなファイル名が表示されましたか?

これを応用してjunkで始まるファイルを全部捨ててみましょう。コマンドrmを使って、以下をタイプしてみて下さい。

	 rm  junk* 


続けて、lsコマンドでどんなファイルが残ったかを見て下さい。上手くいきましたか?

ぼくはこうなりました。

	 rm  junk* 
	 ls 
	sample-1.text sample-2.text sample-3.text sample-4.text
	 


確かにjunkで始まるファイルは消えていますね。

「*」記号と文字列を組み合わせると、「〜で始まるファイル全て」のような操作ができます


15. 見えるような見えないような (ls -l)


コマンドやエディタを使えば、ファイルの中身を見ることができます。ということは、こっそり書きためた小説は他人に見られてしまうのでしょうか?

答えはyesでもありnoでもあります。実際には、見られ得る場合と見られない場合があります。そのことを確認するには ls コマンドを -l オプションを付けて実行します。ターミナルウィンドウに下のようにタイプしてみて下さい。

	 ls  -al 


どんな答えが表示されますか?

ぼくは次のようになりました。

	 ls  -al 
	total 5
	drwx--x--x 2 masuhara teacher 1024 May 25 12:03 .
	drwx--x--x 3 masuhara teacher 96 May 24 12:54 ..
	-rw------- 1 masuhara teacher 164 May 25 11:34 sample-1.text
	-rw------- 1 masuhara teacher 88 May 25 11:34 sample-2.text
	-rw------- 1 masuhara teacher 88 May 25 11:34 sample-3.text
	-rw------- 1 masuhara teacher 88 May 25 11:34 sample-4.text
	 


左側の記号に注目して下さい。

2行目は「drwx--x--x 2 masuhara teacher 1024 May 25 12:03 .」となっています。これは、ピリオド、つまり、現在地が ディレクトリであり(d)、持ち主は一覧表示(r)ファイルの作成(w)、ファイルの操作(x)ができるけど、他の人はファイルの操作しかできないことを示しています。

4行目は「-rw------- 1 masuhara teacher 164 May 25 11:34 sample-1.text」となっていますね。これは、持ち主は読み(r)書き(w)できるけど、それ以外の人は何もできない、という意味です。

より詳しい説明は HWB の既当ページを見て下さい。

ファイルの読み書きが可能かどうかは ls -al コマンドで確認できます


16. 許すべきか許さざるべきか (chmod)


では、ファイルを読める、あるいは読めないようにするにはどうすればよいのでしょうか。そのためのコマンドは chmod (change mode)です。

早速試してみましょう。ターミナルウィンドウに下のようにタイプしてみて下さい。

	 chmod  u-r  sample-1.text 


続けて、

	 ls  -al 


として、sample-1.text の表示がどう変ったかを見てみましょう。どうなりましたか?

ぼくはこうなりました。

	 ls  -al 
	(略)
	--w------- 1 masuhara teacher 164 May 25 11:34 sample-1.text
	(略)


前と違って「r」という文字が消えましたね。これで、ファイルを読むことができなくなったはずです。確めてみましょう。ファイルの中身を表示するコマンドは cat でした。

	 cat  sample-1.text 


何と言われましたか?

ぼくは

	cat: sample-1.text: アクセス権がありません。


と言われました。これは、sample-1.text というファイルを読む権利がないためです。

コマンド chmod を使うときに「u-r」と書きましたが、これは持ち主(user)がファイルを読む(r)権利を無効(-)にする。という意味でした。

ひとまとめに書くと、chmod コマンドは

	 chmod  変更内容  ファイル… 


のように使います。「変更内容」の部分は

・最初に u, g, o の組み合わせ (持ち主(user)、グループ(group)、他人(others))
・次に +,- のどちらか (有効(+), 無効(-))
・最後に r, w, x の組み合わせ (読み(read)、書き(write)、実行(execute))

の順に書きます。ですから例えば

	 chmod  ugo+r  * 


とすれば、「持ち主、グループ、他人が(ugo)、全てのファイル(*)を読める(+r)ようにする。」という意味になりますし、

	 chmod  go+r  /home/gXXXXXX/jouhou 


とすれば、「グループと他人が(go)が/home/gXXXXXX/jouhouというディレクトリで一覧表示できる(+r)ようにする。」という意味になります。

では実際に、chmod を使っていろいろと変更してみて下さい。

ファイルやディレクトリを操作する権利は chmod コマンドで変更します


以上です。より詳しい説明はHWBのファイルシステムの章で勉強して下さい。