2000年5月25日 増原英彦
コマンドを使ってファイルを操作するときは、現在地がどこであるかが問題となります。現在地を調べるコマンドは
pwd (print working directory) というものです。
早速、実行してみましょう。ターミナルウィンドウに下のようにタイプしてみて下さい。
pwd
どんな答えが表示されますか?
多くの人は
pwd
/home/g987654
![]()
のようになったでしょう。つまり、現在地は /home/g987654 だということです。もちろん、いままで入力したコマンドによって現在地が変わっていることもあります。その場合は、別の答えが返ってくるでしょう。(そうだとしても、ここでは問題ありませんので先に進みましょう。)
このような現在地のことをカレントディレクトリと呼びます。それを知るためのコマンドは pwd です。現在地が分からなくなったらいつでも、pwdコマンドを実行して現在地を確認しましょう。
ファイルの複製や削除をする場合は、現在地を基準にしてファイルを指定することになるため、現在地がどこであるかは大変重要です。
ファイルを操作するには、どんな名前のファイルがあるかを知る必要があります。そのためには、ファイルの一覧を表示するコマンド
ls (listの略) を使います。
早速、実行してみましょう。ターミナルウィンドウで下のようにタイプしてみて下さい。
ls
どんな答えが表示されますか?
人によって色々な答えになると思います。ぼくの場合は次のようになりました。
ls
Mail copy memo.text overrun.text~
![]()
これは、現在地(カレントディレクトリ)あるモノの名前の一覧です。
ここでは8つのモノがあって、名前は「Mail」, 「copy」, 「memo.text」, 「overrun.text~」である、ということを意味しています。
コマンド 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 というコマンドを使えば、ファイルかディレクトリかの区別も調べられます
現在地と、そこに何があるかが分かったら、次は現在地を変えてみましょう。そのためのコマンドは
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 というコマンドを使います。このコマンドには、どこの位置に移るかを引数として与えることができる
いままで習ったコマンドに慣れるために、少し散歩をしてみましょう。次のようなコマンドを順に実行してみて下さい。どんな答えが表示されますか?
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の説明を参照して下さい。
ちらかった机の上を片付けるには、文具を引き出しにしまったり、書類を束ねて本棚に入れたりしますね。それと同じで、ちらかったファイルを片付けるためには、書類を束ねるための入れ物を使います。そのような入れ物はディレクトリと呼ばれ、それを作るためのコマンドが 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 というコマンドを使います
入れ物(ディレクトリ)を作っただけでは、中がどうなっているかは分かりません。中を覗くにはどうすればよいのでしょうか?
そうですね、前に出てきた現在地を変更するコマンド cd を使います。早速試してみましょう。ターミナルウィンドウで下のようにタイプしてみて下さい。
cd
jouhou
どんな答えが表示されますか? そうですね、何も表示されません。このコマンドは何も表示しないのでした。復習ですが、現在地を確認するには
pwd コマンドですので、さらに、下のようにとタイプしてみましょう。
pwd
どんな答えが表示されますか?
はい、
pwd
/home/gXXXXXX/jouhou
![]()
となりましたね。これで新しく作った入れ物の中を見ることができるわけです。さらに下のようにタイプしてみましょう。
ls
どんな答えが表示されましたか?
……何も表示されませんでしたか? そうですね、新しく作った入れ物は空っぽですから、何も表示されないわけです。もし何か表示されたとしたら、それは過去に何か作業をした結果ということです。
復習です: 入れ物(ディレクトリ)の中を見るためには cd コマンドを使って現在地を変更してからlsコマンドを実行します
さてあなたはいまホームディレクトリの下に作った jouhou というディレクトリの中にいるわけです。このことを簡単に言うために「現在地が
/home/gXXXXXX/jouhou である」と言うことにしましょう。
ここで入れ物(ディレクトリ)を作る mkdir コマンドを使って copy という入れ物を作った場合、それはどこにできるのでしょうか?
習うより慣れろで試してみることにしましょう。まず、pwd コマンドを使って現在地が /home/gXXXXXX/jouhou であることを確認します。
次にmkdir コマンドを使って copy という入れ物を作ります。
mkdir
copy
さらに、ls コマンドを使って copy という入れ物ができていることを確認します。
その上で、cd コマンドを使って copy という入れ物の中に現在地を変更します。
これで、現在地がどこであるかを確認するために pwd コマンドを実行します。
結果は、予想できると思いますが、
のようになります。
mkdirコマンドは、現在地に入れ物(ディレクトリ)を作ります
エディタでファイルを作るには、「Muleウィンドウで x
f とタイプして、『Find file: ~/』というメッセージにファイル名を入力すればよい」と習いました。
では、ある入れ物(ディレクトリ)の中にファイルを作るにはどうすればよいのでしょうか。
実はいままでと同じやり方でよいのです。実際に「jouhou」という入れ物(ディレクトリ)の中に「report.text」というファイルを作ってみましょう。
Find file ~/と表示されますね。
--**-Emacs: report.text |
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 のあとに、ディレクトリ名も含めてファイル名を書けばよい
ファイルの複製を作るコマンドは 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 (もとのファイル名) (新しいファイル名)
の順にコマンドを書きます
同じ入れ物の中にあるファイルを複製することはできましたが、別の入れ物にあるファイルを複製するにはどうすればよいのでしょうか。
実際は 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 コマンドを使うときに、ディレクトリ名に続けてファイル名を書きます
沢山のファイルを複製するときに、コマンドを何回も実行するのは大変です。もっと楽な方法はないのでしょうか。
実は、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) … .(ピリオド) のようにします
沢山のファイルをまとめて操作するにはどうするのがよいのでしょうか。実は、ファイル名を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」というディレクトリの中にある全てのファイルが現在地に複製されたのです。
「*」記号を使うとあるディレクトリの中のファイル全てを操作することができます
いらないものは潔く捨てましょう。ファイルを捨てるのはとても簡単で、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です
沢山のファイルがあるときに、ある名前を持ったファイルだけをまとめて捨てたいときはどうすればよいのでしょうか。
前に「*」記号を使って「あるディレクトリの中のファイル全部を複製する」方法を習いました。今回はその応用になります。
例えば、「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で始まるファイルは消えていますね。
「*」記号と文字列を組み合わせると、「〜で始まるファイル全て」のような操作ができます
コマンドやエディタを使えば、ファイルの中身を見ることができます。ということは、こっそり書きためた小説は他人に見られてしまうのでしょうか?
答えは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 コマンドで確認できます
では、ファイルを読める、あるいは読めないようにするにはどうすればよいのでしょうか。そのためのコマンドは
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のファイルシステムの章で勉強して下さい。