UNIXのファイル操作

今まで、UNIXのファイルがどういうふうになっているのか説明せずに使って 来ましたが、ここらへんでUNIXのファイルシステムについて説明しておこう と思います。

UNIXのファイルシステム

UNIXのファイルシステムは、木構造と呼ばれるものになっています。 この木構造は root(ルート:根)と呼ばれるものから始まり、 ディレクトリと呼ばれるファイルをいれるためのものが各節点 [1] に対応します。 ディレクトリはWindows 95やMacOSのフォルダーに相当するものです。

Figure 1-1. ツリー構造のファイルシステム

Figure 1-1を見て下さい。 確かに木のようですね。 Figure 1-1では、 丸で囲んだものがディレクトリで、四角で囲んだものがファイルになります。 ふだんの操作は、ディレクトリを移動して必要なファイルに対して作業をす るといった形になります。

では、自分が今いるディレクトリ(カレントディレクトリ)は どこなんでしょうか? これを表示するコマンドが、 pwd(Print Working Directory)です。 loginした時には、いったいどこのディレクトリにいるのでしょうか? 調べてみましょう。 もちろん、以下の表示はあなたがloginした時とは違うと思います。 これについては、あとで説明します。

	   >   pwd
	  /home1/mutoh
	

ちょうど、Figure 1-1.login.cshrcの ファイルを持っている場所にいるようですね。 まだ、作業を始めてから一度もディレクトリの移動をしていないので、 ここがlogin時に入っているディレクトリになります。

ディレクトリの移動をしてみたいですが、 それにはもう少し知っておくべきことがありますので、 次の節を見て下さい。

絶対パス指定と相対パス指定

ファイルやディレクトリの場所を指定するのには実は2つの方法があります。 それが、絶対パス指定と相対パス指定です。

絶対パス指定

前者は、木の根っこにあたる/(ルート)から指定していく方法です。 例えば、僕のディレクトリにある.loginファイルは、

      /home1/mutoh/.login
    

のようにして指定することができます。 この方法であれば、seko氏の.loginと区別できますね? しかし、現在自分がいるディレクトリの中にあるファイルまで このような指定をしなければならないのであったら、 非常に頭の痛い話です。 なんとかならないのでしょうか?

相対パス指定

実は何とかなります。 後者の相対パス指定がこのための指定法です。 この方法では、カレントディレクトリに対して 目的のファイルやディレクトリがどこにあるのかを指定します。

lsを思い出して下さい。 ただ単にlsと入力しただけで、 現在のディレクトリの中身が表示されています。 基本的に、ディレクトリをあつかう多くのコマンドは何も入力しなかった時は、 カレントディレクトリに対する操作となります。

例えば、いまディレクトリ/home1/にいて mutoh/の中の.login を見たいとしましょう。 この時には、ファイルを以下のように指定します。

      mutoh/.login
    

大分簡潔に指定できるようになりましたね?

しかし、このような指定では、 /home1/mutohから /home2/sekoの下の .loginを見たいときにはどうしたら良いのでしょうか? この場合は、絶対パスを使わないとしかたが無いのでしょうか?

実は、そんなことはありません。 全てのディレクトリには二つの特別なディレクトリが用意されています。 これが、"."(ピリオドひとつ)と ".."(ピリオド二つ)です。 "."の方はそのディレクトリ自身を表し、 ".."の方は自分の親ディレクトリ [2] を表します。

つまり、カレントディレクトリが/home1/mutoh/の時に seko/.loginを参照するためには ../../home2/seko/.login で指定できることになります。 Figure 1-1を見て、 ちゃんとこの位置になることを確認して下さい。

ホームディレクトリの指定(csh系のシェルの場合)

ディレクトリ指定の方法として、 最後にホームディレクトリの指定の方法をやりましょう。 ホームディレクトリとは、login時にいるディレクトリのことです。 とりあえず、自分の作業の出発点になるわけですね。 出発点を一度旅立ったはいいですが、 上へ下へと移動しているうちにもとの場所が分からなくなってしまうこともあります。 そこで、ワープ機能のようにホームディレクトリに戻るための方法が用意され ています [3]

自分のホームディレクトリにを指定するためには、 ~を使ってください。 人のホームディレクトリを気軽に訪れることもできます。 これは、 ~のあとにその人のアカウント名を入力します。 僕のホームディレクトリの場合は、 ~mutoh=/home1/mutoh/ となります。

ディレクトリ操作の実際

それでは、UNIXファイルシステムの中をさまよい歩きましょう。

ディレクトリ移動

まずは木の一番根っこである/に行ってみましょう。 そういえば、まだディレクトリを移動するコマンドについて説明していませんね。 ディレクトリの移動にはcd(Change Directory)コマンドを用います。 もちろん、相対指定も絶対指定も可能です。 では、やってみましょう。

	     >   cd /
	     >   pwd
	    /
	  

cdしただけでは、 カレントディレクトリは教えてくれませんので pwdでカレントディレクトリを表示しています。 確かに、木の根っこに来ているようですね。 どんなファイルやディレクトリがあるのかを調べてみて下さい。 ファイルとディレクトリを一目で区別するためには、 ls-Fオプションを使ってみて下さい。 結果はここでは示しません。

ひとつ、クイズを出しましょう。 /ls -aで見てみるとなんと ..があるではないですか!! たしか、/はUNIXのファイルシステムの一番上だったはずです。 いったい、 "Over the top"は、どこに続いているのでしょうか? 確かめてみて下さい。 結果を見てもパニックにはならないようにしてください。 ある場所を特別扱いするよりは、このような実装をした方がいいのです。

一通り眺めたら、とりあえず自分のホームディレクトリに帰っておきましょう。 csh系のシェルの場合は~を、 sh系のシェルの場合は${HOME}を利用しましょう。

	       >   cd ~
	      (または、 >   cd ${HOME}:sh系の場合)
	       >   pwd
	      /home1/mutoh
	    
ちゃんと使えましたか?

ディレクトリ作成

では、次に何もない荒野 である我らがホームディレクトリ (に戻ってますよね?)にディレクトリを作成しましょう。 ディレクトリ作成のためのコマンドは、 mkdir(MaKe DIRectory)です。 最初にどんな名前のディレクトリを作りましょうか? ちょっと遊ぶだけで、あんまり重要なことはしないでしょうから tmp(TeMPorary use:一時使用)という名前でもつけておきましょう。 UNIXにも、一時使用のディレクトリとして /tmpがあるので、 なんかかっこいいですね。

	     >   ls -d tmp
	    ls: tmp: No such file or directory
	     >   mkdir tmp
	     >   ls -d tmp
	    tmp
	  

mkdircdと同じように親切なメッセージは出してくれません。 UNIXのコマンドは無口なものが多いのです。 あらかじめ、lsで 作成するディレクトリが無いことを確かめておいてから作り、 ちゃんとできていることを確認しています [4]。 できたディレクトリには、移動できるはずですので移動してみましょう。 移動するのは、cdでしたね。 今回は、相対パス指定でいいですね。

	     >   cd tmp
	     >   pwd
	    /home1/mutoh/tmp
	  

ちゃんと入ることができたようです!!

目的にあったディレクトリを作り、そこにファイルをいれておくことにすれば 情報を見つけやすいし、なにより綺麗ですね。

ディレクトリ消去

とりあえず、ディレクトリが作れてそこに移動することはできました。 お名残惜しいですが、このディレクトリを消去しましょう。 消去のためのコマンドはrmdir(ReMove DIRectory)です [5]。 とりあえず、消すディレクトリの親ディレクトリに移動して、 消してみましょう。

	     >   cd ..
	     >   pwd
	    /home1/mutoh
	     >   rmdir tmp
	     >   ls -d tmp
	    ls: tmp: No such file or directory
	  

消えてなくなってしまいましたね。 実際には、rmdirはディレクトリの中身が空の場合 [6] だけ消去します。 エラーが出たら、まずここを確かめて下さい。

ファイルのパーミッション

いまだに、ディレクトリという入れ物だけの話で、 ファイルについて出てきませんね。 ファイルについて説明する前に、 ファイルやディレクトリが利用できるかどうかを決めるパーミッションについて説明しておきます。

最初の特徴のところでいったようにUNIXはマルチユーザのOSです。 つまり、複数の人が(同時にでも!)使えるのですが、 自分の持っているファイルを他の人に消されたりしたら嫌だと思いませんか? また、自分が一生懸命書いたレポートをコピーされて、 カンニングとして怒られたら困るでしょう? それ以前に、自分が書いているレポートを勝手に書き変えられると、 困ったどころの話ではないですね? 気がついたら、先生の悪口ばっかりになっていたら、 どうしたらいいのでしょうか?

ここで、ls-lをつけた場合の出力 [7] を思い出して下さい。

	   >   ls -l
	  total 32408
	  drwxr-xr-x  16 mutoh  mutoh      1536 Jun 25 14:22 ./
	  drwxr-xr-x   7 root   wheel       512 Jun 24 20:44 ../
	  -rw-------   1 mutoh  mutoh       721 Apr 11 17:19 .ICEauthority
	  -rw-------   1 mutoh  mutoh       600 May 23 19:46 .Xauthority
	  -rw-r--r--   1 mutoh  mutoh      2889 Jun 24 13:16 .Xdefaults
	  (略)
	

最初のフィールド [8] に、なにやら怪しい文字列が並んでいますね。 じつは、ここがファイルのパーミッションを表しています。 パーミッションについて話す前に、 第4フィールドが何を表しているのかから始めなければなりません。 では、その説明にはいりましょう。

ユーザ・グループ・他人(other)

第3フィールドには、あなたのアカウント名が書かれていますね? では、第4フィールドはいったいなんなんでしょうか? UNIXでは、ユーザは少なくとも一つのグループ(group)に 入らなければなりません [9]。 自分の所属グループを知るにはgroupsで調べて下さい。

パーミッションは3つの段階で制御することができます。 一つめは、自分自身がどういったファイルの扱いができるかという部分です。 自分自身へのパーミッションを変えてやると、自分自身でも読めなくしたり 書けなくしたりといったことができます!! [10] 二つめは、自分が所属しているグループのメンバーに対するパーミッションです。 仲のよい友達でグループを作ってもらっていれば、 その友達にだけ見せるということも可能です。 三つめが、その他の人に対するパーミッションです。

読み・書き・実行

パーミッションの制御が3段階でできることは分かりましたが、 なにが制御できるのでしょうか? これもまた3つの制御ができます [11]。 その3つとは、 読み(Read)・書き(Write)・実行(eXecute)です。 読みと書きは説明しなくても分かりますね? ファイルに対しては、それぞれファイルの内容を (catmoreなどで) 見れることと、エディタなどで変更できることを意味します。 では、実行とは何なんでしょうか? 実は、UNIXのシェル [12] にはファイルに書かれたコマンドを逐次実行したり、 制御構造をつかって、プログラムを書いたりする機能があります。 この時、実行権をつけておくとUNIXはそのファイルをコマンドとして扱ってくれます [13]。 つまり、実行を許可するのが実行に関するパーミッションです。 全てのコマンドは、実行権がついています。 見てみましょう。

	     >   which ls
	    /bin/ls
	     >   ls -l /bin/ls
	    -r-xr-xr-x  1 bin  bin  143360 Feb 20 07:41 /bin/ls
	  

とはいいましたが、まだ第1フィールドの説明をしていませんね。 とりあえず、whichコマンドを説明しておきますと、 コマンドがどこにあるのかを絶対パス表現で教えてくれます。

ls -lでパーミッションを知る

では、第1フィールドの読み方を説明します。 以下にlsコマンドの第1フィールドを区切って抜き出しました。

Table 1-1. lsコマンドの第1フィールドの出力

-rwxr-xr-x

ディレクトリかどうか

自分に対するパーミッション

グループに対するパーミッション

他人に対するパーミッション

となっています。 各部分の表示は-がそのパーミッションが無いことを示し、 r,w,xがそれぞれ読み・書き・実行に対応します。 このファイルは、本人は読み・書き・実行が可能で、 グループと他人は読みと実行だけが可能となります。 最初の部分は、ディレクトリの場合dとなります。

パーミッションの変更

パーミッションの変更のためのコマンドとしてchmod(CHange MODe) があります。

指定方法には2通りありますが、ここでは簡単なほうをお教えします。 もう一つについては興味があればオンラインマニュアルを調べて下さい。

ここで教える方法では、自分・グループ・その他の人を それぞれu・g・oと表します。 全ての人に対して指定したい時にはaを使います。 あとは、各パーミッションをr・w・xで指定します。 このとき、そのパーミッションを与えるためには+でむすび、 そのパーミッションをなくすためには-でむすびます。

とりあえず例を見てみましょう。

	       >   ls -l .cshrc
	      -rw-r--r--   1 mutoh    mutoh      5598 Jul  5 19:41 .cshrc
	       >   chmod g+w .cshrc
	       >   ls -l .cshrc
	      -rw-rw-r--   1 mutoh    mutoh      5598 Jul  5 19:41 .cshrc
	       >   chmod go-rw .cshrc
	       >   ls -l .cshrc
	      -rw-------   1 mutoh    mutoh      5598 Jul  5 19:41 .cshrc
	    
シェルの設定ファイルのパーミッションを変えています。 どういう動作をしているか分かったでしょうか?

ディレクトリのパーミッション

ファイルに対するパーミッションの意味は分かりましたが、 ディレクトリに対するパーミッションとはいったいなんでしょうか? ディレクトリにおいては、 rはディレクトリの読み出しの許可を、 wはディレクトリへのファイル作成の許可を、 xはディレクトリの検索可能であるかを表しています。

何をいってるのか分かりませんか? 具体的に例で示しましょう。 rが立っている [14] ディレクトリではlsでその内容を確認することができます。 wが立っているディレクトリでは、 そのディレクトリの中にファイルを作成したり、 ファイルを削除したりできます。 ファイルの削除には、ファイル自身のパーミッションは関係ないのです [15]。 xが立っているディレクトリでは、そのディレクトリにある 任意のファイルに対してmoreなどで 内容が確認できるようになります。

なんか分かりにくいですが、 適当なディレクトリのパーミッションを変えて何が起こるのかを確かめてみて下さい。

ファイルをいじくろう!!

これで、ようやくファイルを作ったりする準備ができました。 長い道のりでしたね。

ファイルの作成

本来、ファイルの作成・変更のためにはエディタ [16] と呼ばれるプログラムが利用されます。 エディタには、 vi,mule/emacsなどが有名ですが、 説明に時間がかかりませすので、ここでは説明しません。 FreeBSDディストリビューションに含まれるeeについては、 簡単な説明をthe Section called エディタ(ee)の使い方に載せておきました。

ここでは、エディタを使わずにファイルを作ることにしましょう。 簡単なメモをとるためにはこれで十分です。 ここで使う機能は、シェルのリダイレクションという機能です。

では、数行程度のメモを作ってみましょう。

	     >   cat >memo
	    My name is Takeshi Mutoh.
	    I'm a teacher of Nara National College of Technology.
	    It's fine today, isn't it?
	    C-d
	     >   ls -l memo
	    -rw-r--r--   1 mutoh    mutoh       107 Jul 11 11:21 memo
	     >   cat -n memo
	    1  My name is Takeshi Mutoh.
	    2  I'm a teacher of Nara National College of Technology.
	    3  It's fine today, isn't it?
	  

情けない英語ですね。 まあ、内容はいま問題じゃないのでいいとしましょう。 途中で入力を間違った時には、 C-h (Backspaceと同じ)や Delete (C-?と同じ)で 一文字前を消去できます [17]

何か適当なメモを書いて見て下さい。 ファイル名は、あなたの好きなもので構いません。

cat-nオプションは 行番号をつけてくれます。 プログラムのデバック時には便利な機能ですから、 覚えておいて損はないでしょう。

ファイルの文字列検索:grep

はじめに、ファイルの文字列を検索してみましょう。 そのためのコマンドとして grep(g/Regular Expression/p)ファミリー (grep,egrep,fgrep) があります。 少しずつできることが違うのですが、 その辺はオンラインマニュアルを参照して下さい。 大抵の場合、 egrepが高速ですので以下ではこのコマンドを使います。

grepでは、はじめの引数 [18] として検索したい文字 [19] をとり、2つ目以降の引数に調べるファイルを与えます。 複数のファイルを与えた時には、出力の頭にファイル名を出してくれます。

	   >   egrep Nara memo
	  I'm a teacher of Nara National College of Technology.
	

確かに、"Nara"が入っている行だけが表示されていますね?

プログラムを作っている時に、 どこに関数を書いたのか分からなくなったら使えそうなコマンドですね?

[コラム]正規表現

正規表現はUNIXの標準であるPOSIX 1003.2で定義されており、 FreeBSDもこれにしたがっています。 詳細はman re_formatを参照してください。 ここでは、比較的よく使われるものを簡単に説明します。

正規表現で使われる特殊な文字の中には、 シェルでも特殊な意味を持っているものが少なからずありますので、 コマンドラインで指定する時には注意してください。 例えば、*などはシェルでもワイルドカードとしての意味を持っています。 普通は、シングルクオート(')で囲んでおけばいいでしょう。

	       >   egrep -i 'nara*' tmp.txt
	    

正規表現では、アルファベットや数字などはその文字自身を表現します。 このような文字をアトムと呼びます。 特別なアトムとして、任意の1文字にマッチする"."があります。

アトムの繰り返しは、"*"や"+"などをアトムの直後につけて表現し、 それぞれ0回以上、1回以上の繰り返しとなります。 さらに、0回または1回のマッチを表現する"?"もあります。

このままでは、ある文字範囲の中からどれかという指定ができませんので、 角かっこ"[]"を用いてある範囲の文字を指定することができます。 例えば、"[0-9]"は数字1文字を表現することになります。

丸かっこ"()"は、文字列をまとめてグループにするために利用されます。 これは、"|"と組み合わせて、2つ以上の文字列のどれかを表現するために 利用されます。 例えば、"(exam\.dat|sample\.dat)"とした場合、 exam.datもしくはsample.datとマッチすることになります。 "."は任意の1文字であるため、"\"を使って意味を無くしていることに 注意してください。

Table 1-2. 正規表現の一覧(よく使われるもの)

表現意味利用例注意
\次に続く文字の特別な意味を無くす\.:ピリオド1文字\自身を表現したければ\\とする
.任意の1文字a.b:aab,abb,acb…ピリオド自身を表現したければ\.とする
^行頭(文字ではない)^The:"The"で始まる行 
$行末(文字ではない)hoge$:行末が"hoge"でおわる行 
*(前のアトムを)0回以上繰り返すba*:"b","ba","baa"…前の文字が無くても良いことに注意
+(前のアトムを)1回以上繰り返すa+:"a","aa","aaa"…など必ず1回は現れる点に注意
?(前のアトムが)0回もしくは1回ca?:"c"もしくは"ca" 
[]文字のリストの中から任意の1文字[0-9]:数字1文字,[a-zA-Z]:アルファベット1文字文字範囲を表すには"-"を使い、文字リスト以外を指定するには最初に"^"を使う
()文字のリスト(ab|cd):"ab"か"cd"文字列の候補選択には文字列の間に"|"を使う

ファイルのコピー

では、ファイルの複製(コピー)を作りましょう。 コピーのためのコマンドはcp(CoPy)です。

実際に、コピーをする前に一つ聞いておいて下さい。 UNIXでは、cpコマンドで既にあるファイルを指定した場合、 有無を言わさず消してしまいます。 これは、後で述べるファイル名の変更やファイルの削除についても同じです。 しかも、こうして消してしまったファイルは2度と戻って来ません。 この辺の作業はくれぐれも慎重に行なって下さい。 もし、消しそうな場合に忠告して欲しいのであれば、 -iオプションを利用することができます。 このオプションは、 cp,mv,rmに 共通に利用可能なので、 必要であれば利用するようにして下さい [20]

では、やってみましょう。

	   >   cp memo memo.bak
	   >   ls -l memo*
	  -rw-r--r--   1 mutoh    mutoh       107 Jul 11 11:21 memo
	  -rw-r--r--   1 mutoh    mutoh       107 Jul 11 17:18 memo.bak
	

バックアップファイルのつもりで、.bakという拡張子 [21] をつけてみました。

また、lsコマンドのところで、 *という文字列を使っています。 これは、MS-DOSのワイルドカードに相当するもので、 メタキャラクタとよばれるシェルの持っている機能です。 *は "0文字以上の任意の文字"にマッチしますので、 両方のファイルが表示されています。 コピーや移動でメタキャラクタを使う時には、 十分注意しないと必要なものを消してしまいます。 理由は考えてみて下さい。

cpのもう一つの書き方として、 複数のファイルをあるディレクトリにコピーするというものがあります。 これをやってみましょう。

	   >   mkdir MEMO
	   >   echo cp memo* MEMO
	  cp memo memo.bak MEMO
	   >   cp memo* MEMO
	   >   ls -l MEMO
	  drwxr-sr-x   2 mutoh    mutoh       512 Jul 12 11:01 ./
	  drwxr-sr-x   3 mutoh    mutoh       512 Jul 12 11:01 ../
	  -rw-r--r--   1 mutoh    mutoh       107 Jul 12 11:01 memo
	  -rw-r--r--   1 mutoh    mutoh       107 Jul 12 11:01 memo.bak
	

echoは指定した文字列を表示するコマンドです。 このとき、メタキャラクタは展開されますので、これからどんなコマンドを実 行しようとしているのかを確かめるために利用しました [22]。 この形で利用する時には、最後の引数はディレクトリでなければなりません。 また、途中にディレクトリがあるとうまく動きません。 ディレクトリの下まで全てコピーしたい時にはコマンドラインオプションで指 定してやる必要があります。 そのオプションはオンラインマニュアルで調べてみて下さい。

ファイルの違いを見る:diff

本当に、すんぶん違わぬコピーになっているのでしょうか? UNIXでファイルの違いを調べるためのコマンドとして、 diff(DIFFerence)があります。 これで調べてみましょう。

	     >   diff memo memo.bak
	  
相変わらず無口ですが、何もいわない時は差がない時なのでうまくいっている ようです。

ちょっと変更してどうなるかを見てみましょう。 エディタを使って変更しても良いのですが、リダイレクションの機能にファイ ルの最後に追加するというのがあるので、これを利用します。

	   >   cat >> memo
	  I'm 31 year's old.
	  C-d
	   >   cat memo
	  My name is Takeshi Mutoh.
	  I'm a teacher of Nara National College of Technology.
	  It's fine today, isn't it?
	  I'm 31 year's old.
	   >   diff memo memo.bak
	  4d3
	  < I'm 31 year's old.
	

確かに、今追加したところに対して何やらメッセージが出ていますね。 出力の詳しい見方はオンラインマニュアルを参照して下さい。

ファイルで見たい場所を見る:head,tail

ファイルの全ては見たくないが一部分は見たいというときも結構あるもんです。 特に、ファイルの最初を見てそのファイルが何だったか知るとか、 プログラムを動かしっぱなしにしてその最近の出力を見るために ファイルの最後をみたいというのはよくあります。

そのためのコマンドも、もちろん用意されています。 ファイルの最初を見るheadと、 ファイルの最後を見るtailです。

普通は、コマンドラインオプションとして見たい行数を与えます。 使ってみましょう。

	     >   head -2 memo
	    My name is Takeshi Mutoh.
	    I'm a teacher of Nara National College of Technology.
	     >   tail -2 memo
	    It's fine today, isn't it?
	    I'm 31 year's old.
	     >   tail +2 memo
	    I'm a teacher of Nara National College of Technology.
	    It's fine today, isn't it?
	    I'm 31 year's old.
	  
最後の例は、指定した行から最後までを表示するための指定です。 最後からn行が-nで、 n行目からが+nっていうのは面白いですね。 headにも+nオプションがあるので試してみて下さい。 どういう意味になっていたでしょうか?

ファイルの単語数を数える:wc

論文の要旨(Abstruct)などで、 英単語何文字以内というのはよくある話です。 UNIXには、英単語の文字数・単語数・行数を数えるコマンドとして wc(Word Count)があります。 普通は3つの情報全てが表示されますが、コマンドラインオプションによっ て必要な情報だけを表示することも可能です。

	   >   wc memo
	  4      23     126 memo
	   >   cat memo.kanji
	  これは、漢字のメモです。
	  うまく、文字数が数えられるでしょうか?
	   >   wc memo.kanji
	  2       2      63 memo.kanji
	

表示は、頭から行数・単語数・文字数になっています。 日本語で書いたメモの方は単語数がちゃんと数えられていませんね? これは、wcが、 空白や改行などを単語の区切として利用しているためです。 また、文字数がおかしいのは日本語の表現の問題です [23]

ファイル名の変更

ファイル名の変更はどうしたらいいのでしょうか? コピーをして後述の削除をする方法もありますが、 ファイル名を変更するためのコマンドも用意されています。 それが、mv(MoVe)です。

使い方は、cpとほとんど一緒です。

	     >   ls -l memo
	    -rw-r--r--   1 mutoh    mutoh       126 Jul 11 17:25 memo
	     >   mv memo memo.org
	     >   ls -l memo*
	    -rw-r--r--   1 mutoh    mutoh       107 Jul 11 17:18 memo.bak
	    -rw-r--r--   1 mutoh    mutoh        63 Jul 12 09:59 memo.kanji
	    -rw-r--r--   1 mutoh    mutoh       126 Jul 11 17:25 memo.org
	  
たしかに、memoが無くなって、 memo.orgができています。 ファイルの大きさは第5フィールドですが、確かに同じ大きさです。

ファイルの削除

ファイルの削除には、rm(ReMove)を使います。 では使ってみましょう。

	     >   rm memo
	     >   ls -l memo
	    ls: memo: No such file or directory
	     >   rm -R MEMO
	     >   ls -l MEMO
	    ls: MEMO: No such file or directory
	  
長らく遊んできたmemoが消えてしまいましたね。 MacintoshやWindowsなどとは違い、 rmはごみ箱に移動しているのではなく、 完全に消し去ってしまいます。 注意して使いましょう [24]

最後で、-Rオプション付でディレクトリを中身ごと消去しています。 rmdirは中身を空にしておかないと使えませんでしたが、 rm -Rは中身も消してしまいます。 破壊力が凄まじいので注意して使って下さい。

Notes

[1]

節点とはグラフ理論の用語ですが、 ただ単に入れ物と思ってもらっても結構です。

[2]

"親"という用語もグラフ理論の用語ですが、自分より一つ根に近いディレクトリのことです。

[3]

この機能は、cshというシェルの機能です。 全てのシェルで提供されているわけではないので注意して下さい。

/bin/sh系のシェルの場合には、 シェル変数${HOME}が利用可能です。

[4]

ls-dオプションは ディレクトリをそのまま表示するオプションです。 ただ単に、ls tmpとして、出力の違いを確認して下さい。

[5]

ファイル消去のためのコマンドrmも利用可能です。 マニュアルを読んでみて下さい。

[6]

空とは、...以外の ファイルもディレクトリも無い状態です。

[7]

ロングフォーマットとよぶこともあります。

[8]

空白で区切られたひとくぎりをフィールドと呼ぶと約束しました。

[9]

複数のグループに所属することも可能です。 その時のパーミッションの取り扱いはUNIXのバージョンによって異なってきます。

[10]

消してはいけないファイルは書けないようにしておけば安心です。 もちろんパーミッションを変えるまでは変更もできませんが。

[11]

本当はもう少し制御できる内容があります。 しかし、ここでの範囲を越えますのであえて書きません。

[12]

シェルについて説明するとさらに長くなりますのでここでは省略します。 あなたがUNIXそのものと思っているものが、実はシェルだったりします。

[13]

FreeBSD の場合、aproposなどはそのようなコマンドです。 catなどを使って表示してみましょう。

[14]

"立っている"は俗語ですが、その属性が設定されていることを表します。

[15]

ファイルの書き込み権が無い場合には消してよいかを確認してきます。 しかし、これに "y"で答えるとファイルは消されます。

[16]

"編集するためのプログラム"という意味です。

[17]

どちらがそのためのキーなのかは設定によって変ります。 また、自分の好きなキーをそのために使うことも可能です。

[18]

"ひきすう"と読みます。 コマンドラインオプション以外で、コマンドに与えなければ ならないファイル名などのことです。

[19]

本当は "正規表現"the Section called [コラム]正規表現 で指定しますが、 専門的になりすぎるのでとりあえず文字と思って下さい。

[20]

シェルの機能であるaliasを用いることで、 常にこのオプションが指定されるようにもできます。

[21]

拡張子(suffix)というのはファイル名の最後についている .(ピリオド)の後の部分です。 C言語のプログラムだと.cが、 TeX のソースファイルだと.texというように、 アプリケーションで決まっているものもありますが、 比較的自由につけることができます。

[22]

例えば、echo cp memo*として、 結果がどうなるかを考えれば、 さっきの問いに答えられます。

[23]

日本語の表現には,ISO-2022-JPやEUC-JP,Shift-JISなどがあります。 情報交換用にはISO-2022-JPが優れているのですが、 コンピュータ内部での表現には後ろの二つが検索などが簡単なので よく用いられます。 最近ではUnicodeがはやりですね。

[24]

特に、rm *などの破壊力はすごいです。