19
Ver.15 UNIX入門 コマンド帳(1) 1.コマンドとは コマンド(command)とは、コンピュータ(具体的には、動作中のOSやアプリケーションプ ログラムなど)に対する命令・指令のことである。 各コマンドは一定の書式とその意味とが定 まっている。例えば、OSにはOS用のコマンドがあり、 Emacs と呼ばれるエディタには Emacs 用のコマンドがあり、それらはそれぞれのレベルにおいて指定された方法で入力する。例えば、 UNIX へのコマンドは、プロンプト(入力促進記号) % の直後にコマンド名(コマンドを表す 文字列のこと)に必要なら引数 ひきすう を添えてキーボードから入力する(このような入力の仕方をマンドライン入力command line input)という。UNIXでも、独自の GUI 環境である X Window システムを使っている場合にはマウスによる入力もできる)が、Emacs へのコマンドはウィン ドウ下部のエコー領域から入力する(→ Emacs の解説を参照のこと)。 プロンプト(ここから入力する) 1

UNIX + Emacs 入門Ver.15 UNIX入門 コマンド帳(1) 1.コマンドとは コマンド(command) とは、コンピュータ(具体的には、動作中のOSやアプリケーションプ

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: UNIX + Emacs 入門Ver.15 UNIX入門 コマンド帳(1) 1.コマンドとは コマンド(command) とは、コンピュータ(具体的には、動作中のOSやアプリケーションプ

Ver.15

UNIX入門 コマンド帳(1)

1.コマンドとは

コマンド(command)とは、コンピュータ(具体的には、動作中のOSやアプリケーションプ

ログラムなど)に対する命令・指令のことである。 各コマンドは一定の書式とその意味とが定

まっている。例えば、OSにはOS用のコマンドがあり、Emacs と呼ばれるエディタには Emacs

用のコマンドがあり、それらはそれぞれのレベルにおいて指定された方法で入力する。例えば、

UNIX へのコマンドは、プロンプト(入力促進記号) % の直後にコマンド名(コマンドを表す

文字列のこと)に必要なら引数ひきすう

を添えてキーボードから入力する(このような入力の仕方をコ

マンドライン入力(command line input)という。UNIXでも、独自の GUI 環境である X Window

システムを使っている場合にはマウスによる入力もできる)が、Emacs へのコマンドはウィン

ドウ下部のエコー領域から入力する(→ Emacs の解説を参照のこと)。

プロンプト(ここから入力する)

1

Page 2: UNIX + Emacs 入門Ver.15 UNIX入門 コマンド帳(1) 1.コマンドとは コマンド(command) とは、コンピュータ(具体的には、動作中のOSやアプリケーションプ

引数(argument、ヒキスウと読む)とは、コマンドの適用対象やコマンドの内容の細部指定を行

なうために付けるものである。例えば、logoutコマンドは引数が必要ないコマンドであるが、

現在の日時を表示する dateコマンドは、引数を付けないときには

% date

2015年 05月 13日 水曜日 11:52:47 JST

と日本の時刻(JST)が表示されるが、引数 -u を付けると UTC0 (協定世界時。グリニッジ平

均時または GMT として知られている)が表示される:

% date -u

2015年 05月 13日 水曜日 02:55:18 UTC

これらの例で示したように、% はプロンプトであり、アンダーラインした部分はコマンドで

あり、コマンドの次の行に書かれているのはのコマンドの実行結果である。これ以後も、この

ような表し方をする。

2

Page 3: UNIX + Emacs 入門Ver.15 UNIX入門 コマンド帳(1) 1.コマンドとは コマンド(command) とは、コンピュータ(具体的には、動作中のOSやアプリケーションプ

引数は、ファイル名、オプション、文字列の3種類に分類できる。例えば、catコマンドは

% cat ファイル名

のように引数としてファイル名を指定すると、そのファイルの内容が画面に表示される。

オプション(option)とは、それを付けることによってコマンドの標準動作を少し変えるも

のである。例えば、ファイルの一覧を表示するコマンド ls(listの意)は、引数なしの場合

にはファイル名一覧が表示されるだけであるが、オプション -l を付けると作成日時や大きさ

など詳細な情報も一緒に表示され、オプション -a を付けると通常は表示されないシステム関

係のファイル(ファイル名が .で始まる)も表示される。前述の date コマンドの -u もオ

プションであるが、オプションはこのように - を頭に付けて入力する。オプションが2つ以

上あるとき、例えばオプション -F と -a を同時に指定するには -Fa のようにすればよい。

引数の指定の有無、順序、意味は複雑であるから一つ一つ覚えるしかない。

コマンドの内容を知るためにはマニュアルを読めばよいが、Windows にオンラインヘルプが

あるのと同様に、UNIX でもコマンドの説明を画面で読むことができる(これをオンラインマ

ニュアル(online manual)という)。そのためのコマンドが man コマンドである:

% man コマンド名

これにより、指定したコマンドの説明が表示されるが、たいていの場合、説明が長いので1

画面では表示しきれない。そのような場合(後述の more コマンドや less コマンドでもそ

うであるが)、画面が一杯になると指示待ちになるので、次の中から操作を選ぶ:

リターンキー を押し、表示を1行ずつスクロールして進める。

スペースバー を押し、表示を1画面分進める。

b キー(backの頭文字)を押して、表示を1画面前に戻す。

q キー(quitの意)を押し、表示を終了させる。

/ キー を入力して、画面下に表示された/の後ろに探したい文字列を入力する。

h キー(helpの頭文字)を入力するとコマンドの一覧が表示される。

3

Page 4: UNIX + Emacs 入門Ver.15 UNIX入門 コマンド帳(1) 1.コマンドとは コマンド(command) とは、コンピュータ(具体的には、動作中のOSやアプリケーションプ

2.ログインとログアウト

UNIX を使うためには、まず最初に、ログイン(log in)という操作を行なう。

login: taro

のようにログイン名(ユーザ名とかユーザIDともいう)を入力する。

UNIX の使用を終了するには、ログアウトを行なう:

% logout

logout の代わりの exitと入力してもよい。

パスワードを設定・変更は、passwd(または yppasswd)コマンドによって行なう。

4

Page 5: UNIX + Emacs 入門Ver.15 UNIX入門 コマンド帳(1) 1.コマンドとは コマンド(command) とは、コンピュータ(具体的には、動作中のOSやアプリケーションプ

3.ファイルとディレクトリ 3.1 ファイル

コンピュータを使う上で、ファイルの概念を知っていることは必須である。作成したプログ

ラムやデータを後で利用するためには、それら一つ一つに別々の名前をつけてフラッシュメモ

リ、CD、DVD、ハードディスクなどの補助記憶装置に書き込んでおかなければならない。

このようにデータやプログラムを記録したものをファイル(file)といい、それに付けた名前

をファイル名(file name)という。

ファイル名の付け方はOSによって異なるが、多くの UNIX システムでは255文字までなら

どんな名前をつけても構わない。ただし、コマンドによっては特別の形のファイル名しか受け

付けないことがある。例えば、C言語で記述したプログラムをコンパイルする cc コマンドは

ファイル名の最後が .c であるようなファイルしかコンパイルしてくれないし、Javaのプ

ログラムをコンパイルする javac コマンドではファイル名末尾が .java であるようなファイ

ルしかコンパイルしてくれない。UNIX では、ファイル名の末尾の . 以降の部分をサフィック

ス(suffix)と呼ぶ(パソコンで標準的なOSであった MS-DOS では、同じものをファイル名の

拡張子と呼ぶ。.c がそうであったように、拡張子にはファイルの中身を表すようなものをつ

けるのが普通であり、MS-DOS では、実行ファイル(プログラムを機械語に翻訳したもの)に

は .com や .exe を付け、ファイルを書き換えたときにシステムが自動的に作成するバックア

ップファイルには .bak を、テキストファイルには .txt を、データファイルには .dat を、

MS-WORD/Excel/PowerPoint/PDFmaker 等で作成した文書ファイルにはそれぞれ .doc / .xls

や .xlsx / .ppt / .pdf を、画像ファイルには画像の記録形式によって .jpg とか .gif と

か .bmp とか .avi などを、拡張子として付ける。UNIX や MacOS では、ファイル名に拡張子

を必ずしも付けなくてもよいので、異なるOSの間でファイルの遣り取りをするときには注意

が必要である。Windows95/98/NT/XP/Vista/7 では、拡張子にアプリケーションを関連付けて

おくことにより、ファイル名をダブルクリックするだけで関連付けられたアプリケーションが

起動して、そのファイルを表示したり等を行なうことができる。

ファイルのいろいろ

ファイルは、その中身や用途や編集形式や記録されている媒体などによって、いろいろな形

容詞を付けて呼ばれる:

データファイル ... データが入っているファイル

マスターファイル ... 恒久的なデータの原本が入っているファイル

トランザクションファイル ... 一過性の情報を記録したファイル

システムファイル ... コンピュータシステムが持っているシステムプログラムが

入っているファイル

5

Page 6: UNIX + Emacs 入門Ver.15 UNIX入門 コマンド帳(1) 1.コマンドとは コマンド(command) とは、コンピュータ(具体的には、動作中のOSやアプリケーションプ

ユーザファイル ... 利用者個人が使用するファイル

バックアップファイル ... 暫く使わない場合や紛失などに備えて、オリジナルなファイル

とは別に作って、保存しておくファイル

ソースファイル ... ソースプログラムの入っているファイル

実行ファイル ... 実行可能プログラムが入っているファイル

テキストファイル ... 文字や数字、記号が

ASCIIコードなどに対応する2進数で記録されたファイル

バイナリーファイル ... 文字コードでなく、単なるビットの列として記録されたもの

(例えば、実行ファイルはバイナリファイルである)

UNIXでは、端末、キーボード、マウス、フロッピーディスク、ハードディスクなどの周辺装

置もファイルとして扱う。通常のファイルに対し、こういったファイルはデバイスファイル

(device file)と呼ばれる。

3.2 ディレクトリ

たくさんのファイルを管理するためには、それらのファイルの情報を記録したファイルを作

っておく必要がある。このようなファイルをディレクトリファイルまたは単にディレクトリ

(directory)という(Windows95/98/NT/XP/Vista/7/8 でフォルダ(folder:書類鋏み)と呼

んでいるものがこれに相当するが、正確に言うとフォルダとディレクトリは異なるものであ

る)。通常は、単にファイルといえば、ディレクトリ以外の一般ファイルのことを指す。

ディレクトリは、ファイルの管理帳のようなものであるが、そういったディレクトリをも含

むファイル群を管理する、もう一つ上のレベルのディレクトリを作ることもできる。この場合、

直下のレベルのディレクトリは上のレベルのディレクトリのサブディレクトリ

(subdirectory:子ディレクトリ)と呼ばれる。逆に、子ディレクトリから見たとき、それを

管理しているディレクトリを親ディレクトリと呼ぶ。このようなディレクトリの間の親子関係

は何重にもすることができ、その全体は系図のような階層構造になる。これをファイルの階層

構造(hierarchical structure, 木構造 tree structure)という。

例えば、次ページの図はある UNIX システムのファイルシステムの構造を表したものである。

一般に、最上位のディレクトリはルートディレクトリ(root directory)と呼ばれ、/ で表

される(日本語OSでは、/の代わりに¥が用いられる)。このシステムでは、ルートディレ

クトリの下には6つの子ディレクトリ bin, dev, etc, home, tmp, usr があり、そのうちの

home ディレクトリの下にはさらに子ディレクトリ student があり、student の下には子ディ

レクトリ taro, ..., hanako がある。taro は homeから見れば孫ディレクトリである。

UNIX システムでは、ユーザはログインしたとき、ある決められたディレクトリに位置付け

られる。これをホームディレクトリ(home directory)という。各ユーザのホームディレクト

6

Page 7: UNIX + Emacs 入門Ver.15 UNIX入門 コマンド帳(1) 1.コマンドとは コマンド(command) とは、コンピュータ(具体的には、動作中のOSやアプリケーションプ

リをどこに置くかはシステム管理者が決める(教育学部の EDU システムでは、学生のホーム

ディレクトリは /home/student/ である)が、ここでは仮に次ページの図の taro と hanako を、

この UNIX システムのユーザである二人の学生のホームディレクトリであるとしよう。

ユーザ taroは、自分のホームディレクトリ taro の下にディレクトリ Mail とディレクト

リ dirA および一般ファイル file1.c を持っており、dirA の下にはファイル file1.c と

file2 がある。

この例の場合、同じ名前の2つのファイル file1.c はどのように区別されるのだろうか?

木構造において辺に沿ってルートディレクトリからこれらのファイルまでたどったとき、ファ

イルやディレクトリの間を / で区切ると、これら2つのファイルにはそれぞれ

/home/student/taro/file1.c, /home/student/taro/dirA/file1.c が対応するが、これらを

それぞれのファイルの絶対パス(または絶対パス名またはフルパス、absolute path)という。

絶対パスはファイルのフルネームであると考えてよい。

一方、現在位置付けられているディレクトリをカレントディレクトリ(current directory)

という。ログインしたとき、各ユーザは自分のホームディレクトリがカレントディレクトリに

なる。例えば、ユーザ taro がログインした直後のカレントディレクトリは taro(絶対パス

は /home/student/taro)である。

/

bin dev etc home tmp usr

date ... ls ... ... student ... ... ...

:ディレクトリ taro ... hanako

:ファイル

Mail dirA file1.c ... file3

... file1.c file2

上図において、青色は /home/student/taro/dirA/file1.c の絶対パス。

7

Page 8: UNIX + Emacs 入門Ver.15 UNIX入門 コマンド帳(1) 1.コマンドとは コマンド(command) とは、コンピュータ(具体的には、動作中のOSやアプリケーションプ

上例の場合、ユーザ taro が自分の所有するファイルの一覧を見るために lsコマンドを入

力すると、

% ls

Mail dirA file1.c

%

と表示される。taro はファイル file1.c を2つ持っているが、ここに表示されているのは

/home/student/taro/file1.c の方である。すなわち、コマンド ls の対象になっているのは

カレントディレクトリである。

また、Javaのソースプログラムを作ってそれをexample.javaというファイル名でセーブ

(save:ファイルの内容を記憶装置に書き込んで記録すること)したいとする。それにはエデ

ィタを呼び出してファイルの編集作業を行なってからセーブのためのコマンドを実行すれば

よい。詳細は§3.3で述べるが、例えばUNIX上でよく用いられている* Emacs というエディタ

を使う場合なら、

% emacs example.java

によって Emacs を呼び出して入力作業を行なった後、^x, ^c という Emacs を終了するため

のコマンドを入力するとファイルをセーブするかどうか聞いてくるので、yes と答える。この

とき、exmple.java はカレントディレクトリの下に置かれるファイルとなる。

以上2つの例で見たように、コマンドの引数としてファイル名を書くとき、カレントディレ

クトリにあるファイルは絶対パス名で指定しなくてもよい。

では、カレントディレクトリ taro からファイル /home/student/taro/dirA/file1.c を指

定するためにはどうしたらよいかというと、木構造の中をたどって

dirA/file1.c

とすればよい。これを、カレントディレクトリ taro から見た相対パス(または相対パス名)

という。また、taro から hanako の下にあるファイル file3 を指定するためには、絶対パス

名 /home/student/hanako/file3 で指定するか、または、

../hanako/file3

のように相対パス名で指定する。ここで、.. は自分の親ディレクトリを表す記号である(こ

の例では、taro の親であるから student を指す)。ついでに記すと、カレントディレクトリ

*UNIX 固有のエディタは vi と呼ばれるものであるが、マニアックなのでこの授業では使わない。

8

Page 9: UNIX + Emacs 入門Ver.15 UNIX入門 コマンド帳(1) 1.コマンドとは コマンド(command) とは、コンピュータ(具体的には、動作中のOSやアプリケーションプ

は記号 . で表す。したがって、カレントディレクトリがtaro のとき、./file1.c,

file1.c, ../taro/file1.c は皆同じファイルを指している。絶対パス名や相対パス名は必ず

ディレクトリ名から始まっていることに注意する。

現在自分がどのディレクトリで作業中かは pwdコマンド(print working directory)で知る

ことができる:

% pwd

/home/student/taro

%

3.3 ディレクトリに関する基本的操作

(a)ディレクトリの変更

上で見たように、扱おうとするファイルが置いてあるディレクトリをカレントディレクトリ

とする方がファイル名の指定が簡単である。そこで、カレントディレクトリを、作業対象にな

るファイルが置いてあるディレクトリに変更するためには、cdコマンド(change directory

の略)を使う:

% cd ディレクトリ名

このディレクトリ名は、絶対パス名や相対パス名で指定したものでないなら、カレントディ

レクトリの下のディレクトリと解釈される。通常、ホームディレクトリは記号 ~ でも表され

る。したがって、あるカレントディレクトリから一気にホームディレクトリに戻るには

% cd ~

とすればよいし、親ディレクトリに移動するには(たとえ、親ディレクトリの名前が分からな

くても)

% cd ..

とすればよい。ついでに、他のユーザ(自分自身も含む)のホームディレクトリは、「~ログイン

名」で表される。例えば、ユーザ taro のホームディレクトリは ~taro で表すことができる(勿

9

Page 10: UNIX + Emacs 入門Ver.15 UNIX入門 コマンド帳(1) 1.コマンドとは コマンド(command) とは、コンピュータ(具体的には、動作中のOSやアプリケーションプ

論、絶対パスで表してもよい)。

(ディレクトリについてのまとめ)

自分のホームディレクトリ ~

他のユーザ(例えばtaro)のホームディレクトリ ~taro

親ディレクトリ ..

カレントディレクトリ .

ルートディレクトリ /

(b)ディレクトリの作成・内容表示・削除

たくさんのファイルを同じディレクトリに作ると管理が大変である。そこで、ファイルの種

別・目的別に整理・分類して別々のディレクトリに置いておくのがよい。ディレクトリを作成

するには、mkdir コマンドを使う(mkdir は make directory の略):

% mkdir ディレクトリ名

これにより、カレントディレクトリに指定した名前のディレクトリが作られる(ディレクト

リを「掘る」という言い方をすることもある)。

作りたいディレクトリ名の間に空白を入れて並べて mkdir の引数部に書くことにより、一

度に複数のディレクトリを作ることもできる。例えば、

% mkdir lesson1 lesson2 lesson3

によって、3つのディレクトリ lesson1,lesson2,lesson3 が作成される。

一般に、ホームディレクトリの下に大分類のディレクトリをいくつか作り、その下に中分類

サブディレクトリを、またその下に小分類のサブディレクトリを・・・、とディレクトリの階

層を作ってファイルを分類する。

あるディレクトリに置いてあるファイルの一覧を見るには、すでに述べたように lsコマン

ドを用いる。このとき、オプション -F を付けると、一般ファイル(バイナリファイルはさ

らに区別される)とディレクトリファイルが区別されて表示される(オプション -F を付けな

くても区別して表示される場合もある):

10

Page 11: UNIX + Emacs 入門Ver.15 UNIX入門 コマンド帳(1) 1.コマンドとは コマンド(command) とは、コンピュータ(具体的には、動作中のOSやアプリケーションプ

% ls -F

dirA/ file1.c

%

ファイル名の後ろに / がついているものはディレクトリであり、* が付いているものはバ

イナリファイルである#。また、オプション -a (a は all の意)を付けると、ディレクトリ

内のすべてのファイルを表示する ( . で始まる、システム関係のファイルは通常は表示され

ないが、それも含めて表示される):

% ls -a

. .history .signature

.. .login Mail

.cshrc .mailrc dirA

.emacs .newsrc file1.c

%

. はカレントディレクトリを表し、.. は親ディレクトリを表すことに注意する。オプショ

ン -F と -a を同時に指定するには -Fa のようにすればよい。オプション -l (エルは long

list の意)は各ファイルについての詳細情報も表示する:

% ls -l

-rw-r--r-- 2 taro 3498 April 15 15:35 file1.c

drwxr-xr-x 1 taro 123 May 06 22:56 dirA

drwxr-xr-x 3 taro 12543 April 01 09:00 Mail

%

各行が1つのファイルを表し、先頭に - が書いてあるものは一般ファイルである、先頭が d

であるものはディレクトリである。r,w の意味は後述することにして、その後ろには、ファイ

ルの所有者、大きさ(バイト数)、作成・更新日時、ファイル名がこの順に書いてある。

ディレクトリを削除するには、rmdirコマンド(remove directory)を使う:

% rmdir 削除したいディレクトリ名

ただし、削除するディレクトリにファイルが置いてないこと、および、削除するディレクトリ

がカレントディレクトリより下にあることが必要である。あるディレクトリを、その管理下に

# EDU システムでは、ls は「ls -F」と同じ効果となるように設定してある。

11

Page 12: UNIX + Emacs 入門Ver.15 UNIX入門 コマンド帳(1) 1.コマンドとは コマンド(command) とは、コンピュータ(具体的には、動作中のOSやアプリケーションプ

あるファイルやサブディレクトリを含めて完全に削除したいときはオプション -r (r は

recursive の意)を付けて

% rmdir -r 削除したいディレクトリ名

とする。削除してもよいかどうか、ファイル名やディレクトリ名を聞いてくるので、y/n で答

える。

3.4 ファイルに関する基本的操作

(a)ファイルの内容を見る

ファイルの内容を見るには、catコマンドが使える。このコマンドはオプション -n や -b

を付けると、各行の頭に、ファイルの先頭から何行目であるかを表す行番号が付けられる。-n

の場合にはすべての行に番号を付け、-b の場合には空白行には番号を付けない。

% cat -b example.c

1 main()

2 {

3 int m;

4 scanf("%d", &m);

5 printf("%d", m);

6 }

%

(注)cat コマンドでファイルの内容を表示させると、画面がおかしくなることがある。これ

を防ぐためには、-v オプションを付けるとよい。

大きなファイルの内容を見るには、less コマンドか more コマンドを使うのがよい。more

はBSD系の UNIX に標準搭載されているコマンドであるが、less はもともとはフリーソフ

トウェア(無料で出回っているソフト)であり、UNIX に標準搭載されていたわけではないが

more より便利であり、たいていの UNIX システムでは使えるようになっている†。使い方の基

†EDU システムは Solaris 系の UNIX であり(現在の OS は sun4u 5.9)、less もサポートされている。むしろ、日本語が混

ざっているファイルを more で表示させると正しく表示されないことがある一方、less では文字化けせずに表示されるの

12

Page 13: UNIX + Emacs 入門Ver.15 UNIX入門 コマンド帳(1) 1.コマンドとは コマンド(command) とは、コンピュータ(具体的には、動作中のOSやアプリケーションプ

本はほとんど同じであり、more の場合なら

% more ファイル名

のように入力する。ファイルの内容を1画面では表示しきれない場合には、画面が一杯になる

と指示待ちになるので、

リターンキー を押し、表示を1行ずつスクロールして進めるか、

スペースバーを押し、表示を1画面分進めるか、

bキー を押して、表示を1画面前に戻すか、

qキー(quitの意)を押し、表示を終了させるか、

/キー を入力して、画面下に表示された/の後ろに探したい文字列を入力するか、

のどれかを行なう。h を入力すると、上記のものも含めて、コマンドの一覧が表示される。

大きいファイルの内容を見る場合には、more や less を

% cat -n ファイル名 | less

のように使ったり(ファイルの内容に行番号を付けて見る)とか、カレントディレクトリに1

画面に表示しきれないくらいたくさんのファイルがある場合に1画面ずつ見るには

% ls | less

のように使ったりする。

以上の他に、大きいファイルの先頭だけを見るには headコマンドが、末尾だけを見るには

tailコマンドがあるので、man コマンドを使ってオンラインマニュアルで調べてみるとよい。

(b)ファイルの削除

ファイルを削除するには、rmコマンド(remove の意)を使う:

% rm -i 削除するファイル名

で、less を使うことを薦める。

13

Page 14: UNIX + Emacs 入門Ver.15 UNIX入門 コマンド帳(1) 1.コマンドとは コマンド(command) とは、コンピュータ(具体的には、動作中のOSやアプリケーションプ

このようにオプション -i (inquiry の意だと思う)を付けると 、

rm: remove ファイル名?

と聞いてくるので y (削除しないなら n)と答える。-i がないと、この確認がされないので

誤ってファイルを消去してしまいかねないので注意する必要がある‡。

(c)ファイルのコピー

ファイルをコピーするには、

% cp コピー元ファイル名 コピー先ファイル名

とする(cpコマンド:copy)。オプション -i を付けると、既存のファイルの上にコピーを行

なおうとしたときには確認を求められる。

コピー元やコピー先はディレクトリでもよい。コピー元が一般ファイルでコピー先がディレ

クトリの場合(この場合には、コピー元として複数のファイルを書いてもよい)には、コピー

元ファイルが同じ名前でコピー先ディレクトリにコピーされる。コピー元もコピー先もディレ

クトリで、かつ、オプション -r を付けた場合、

% cp -r コピー元ディレクトリ コピー先ディレクトリ

には、コピー元のディレクトリ名で指定したディレクトリを基点にしてその下にあるツリー構

造全体がそのままそっくりコピー先ディレクトリにコピーされる。コピー先ディレクトリは既

存のものでも新規でもよい。

(d)ファイルの移動(ファイル名の付け替え)

ファイル名を付け替えるコマンドはないので、ファイル名を付け替えるには、ファイルを移

動するコマンドである mv コマンド(move)を使う。オプション -i を付けてもよいが、その

意味は cp コマンドや rm コマンドのそれと同じで、移動先に同じ名前のファイルがあった場

合の確認のためである。移動元、移動先はディレクトリでもよいが、その場合でも、cp コマ

ンドのように -r オプションをつける必要はない:

% mv 移動元ファイル名 移動先ファイル名

EDU システムでは、cp,mv,rm コマンドについては、削除あるいは上書きしてよいか否かを必ず聞くような設定されている。

14

Page 15: UNIX + Emacs 入門Ver.15 UNIX入門 コマンド帳(1) 1.コマンドとは コマンド(command) とは、コンピュータ(具体的には、動作中のOSやアプリケーションプ

(e)ファイルの許可情報を変更する

どのディレクトリにあるどのファイルも、誰もが勝手に読んだり書き換えたりできるわけで

はない。ファイルを保護するために、ファイルには読み・書き・実行に関する許可・不許可を

設定することができる。ただし、UNIX ではファイルの削除の許可はディレクトリの書き込み

許可が兼ねているので、個々のファイルに削除不許可の設定をすることはできず、ファイルが

削除できるかできないかはディレクトリ単位にしか設定できない。

さて、現在の設定内容を見るには、ls コマンドに -l オプション を付けて入力する(l は

long list の意):

% ls -l

-rw-r--r-- 2 taro 3498 April 15 15:35 file1.c

drwxr-xr-x 1 taro 123 May 06 22:56 dirA

drwxr-xr-x 3 taro 12543 April 01 09:00 Mail

%

表示された各行が1つのファイルについての情報であり、各項目の意味は次の通り:

(1) (2) (3) (4) (5a) (5b) (5c) (6)

↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓

-rw-r--r-- 2 taro 3498 April 15 15:35 file1.c

drwxr-xr-x 1 taro 123 May 06 22:56 dirA

drwxr-xr-x 3 taro 12543 April 01 09:00 Mail

(1)の先頭の1文字はファイルの種類を表す。- は一般ファイルを、d はディレクトリを表

す。

(1)の残りの9文字(r,w,x,-のいずれか)は3文字ずつが1組で、先頭から順に「所有者に

対する」「グループに対する」「その他の一般ユーザに対する」許可情報を表す。各組の3文字

は、先頭から順に「読み取り」、「書き込み」、「実行」の許可・不許可を表す。r は「読み取り

を許可する」ことを、w は「書き込みを許可する」ことを、x は「実行を許可する」ことを、- は「不

許可」を表す。

所有者 グループ その他のユーザ

読み 書き 実行 読み 書き 実行 読み 書き 実行

例えば、

-rwxr-----

は、「一般ファイル」であり、「所有者自身は読み書き実行ができる」が、「所有者と同じグルー

15

Page 16: UNIX + Emacs 入門Ver.15 UNIX入門 コマンド帳(1) 1.コマンドとは コマンド(command) とは、コンピュータ(具体的には、動作中のOSやアプリケーションプ

プに属するユーザは読むことだけが許可」されており、「その他のユーザは読み書き実行のどれ

も許可されていない」ことを示している。

UNIX では、各ユーザをグループに分類して登録する。自分が属するグループを知るには、

BSD系 UNIX では groupsコマンドを使って調べる(System V 系 UNIXでは idコマンド)。

ファイルがどのグループに属するかは、ls コマンドに -lg オプション を付けて調べる。

(2)はリンク数、(3)はファイルの所有者、(4)はファイルの大きさ(バイト数)、(5a)~(5c)

はファイルの作成(前回更新)日時、(6)はファイル名である。

ファイルの許可は最初 rw-r--r--(ディレクトリの場合は rwxr-xr-x)となっている(初期

許可をどうするかはユーザが設定することができる)。許可を変更するには chmodコマンド

(change modeの意)を使う。第2引数にファイル名をを指定し、第1引数には、r,w,x を 1、

- を 0 と考えて9桁の2進数と考え、これを3桁ずつ区切って10進表示した3桁の10進

数(実は、8進数に他ならない)を指定する。例えば、

% chmod 750 example.c

とすると、ファイル example.c の許可設定は rwxr-x--- に変わる。なお、

% chmod u+w ファイル名 (あるいは % chmod u-w ファイル名)

によってもファイルを「書き込み許可」(あるいは「書き込み禁止」)にすることができる。u は

「user:ファイルの所有者」を表し、省略してもよい。u の代わりに、「g:グループ」、「o:そ

の他のユーザ」、「a:全員」を指定することもできる。w の代わりに、「r:読み取り」、「x:実行」

を指定することもできる。また、これらの設定をカンマで区切って列挙してもよい。

(f)ファイルを探す

どこにあるか分からないファイルを探すには、find コマンドを使う:

% find 起点ディレクトリ 探す条件 処理

「起点ディレクトリ」には、木構造(ツリー構造)中のどのディレクトリを起点とするかを、

例えばホームディレクトリであれば ~ のように、指定する。「探す条件」は、ファイル名で探

すなら「-name ファイル名」、ファイルの作成日時で探すなら「-ctime 何日前か」、ディレ

クトリファイルを探すのなら「-type d」とする。最後の「処理」の部分には、探し出したフ

ァイルのパス名を表示させるために -print と指定するのが普通である。例えば、ユーザtaro

16

Page 17: UNIX + Emacs 入門Ver.15 UNIX入門 コマンド帳(1) 1.コマンドとは コマンド(command) とは、コンピュータ(具体的には、動作中のOSやアプリケーションプ

が自分のファイル file1.c を探すには、次のようにする:

% find ~ -name file1.c -print

/home/student/taro/file1.c

%

(g) メタキャラクタ

ファイル名を指定する際、* で任意の文字列を、? で任意の1文字を表すことができる。

* や ? のことをメタキャラクタ(metacharacter)という(MS-DOS でワイルドカード(wild

card)と呼ばれているものと同じである)。さらに、以下のような便利な表現もできる。

(1) [abcdefg] のように [ ] で文字列をくくると、[ ] 内のどれか1文字を表す。

(2) [1-5] や [a-g] のように、[ - ] によって文字の範囲をを表すことができる。

(3) [abc,pq,uvwxyz] のように、[ ] の中に文字列をカンマで区切って列挙することにより、

これらの文字列のどれか一つを表すことができる。例えば、[se,ele]ven は 「sevenとeleven」

を表し、*.c は「サフィックスが .c であるような任意のファイル」を表し、[A-Z,a-z]*.???

は「先頭の1文字が英字で、途中何文字か任意の文字が続き、最後にピリオドとその後ろに適

当な3文字があるようなファイル名」を表し、

% cp x/a*.c .

により、ディレクトリ x にあるファイルのうち a で始まり .c で終わるものすべてがカレン

トディレクトリにコピーされる。

(h) ファイルの整理(バックアップ・アーカイブ・圧縮)*

所有するファイルの数が増えてくると、ユーザ用にハードディスクに割り当てられたメモリ

だけでは足りなくなることもあろう。普段から、不要なファイルは積極的に rm コマンドで削

除することを心掛けるとよい(例えば、Emacs を使っている場合、自分では作った覚えのない

ファイル(Emacs が自動的に作ったバックアップファイル :~ や # が、ファイル名の前や後

についているファイル)が結構たくさんたまっているものである)。

差し当たり使わないが、どうしても捨てるわけにはいかないファイルは、フロッピーディス

クやMO等へコピーして保存するとよい。このような操作を一般にバックアップ(backup)と

呼ぶ。バックアップのためのコマンドのうちで最もよく使われるのは tarコマンド(tape

archive)である。

* 初読の際は、この節は読み飛ばした方がよい。後に必要となった時に参照せよ。

17

Page 18: UNIX + Emacs 入門Ver.15 UNIX入門 コマンド帳(1) 1.コマンドとは コマンド(command) とは、コンピュータ(具体的には、動作中のOSやアプリケーションプ

木構造(ツリー構造)中のファイル、例えばあるディレクトリより下のファイルすべてをツ

リー構造の形のままそっくりテープやフロッピーディスクにコピーするには 、

% tar cvf デバイスファイル名 ファイル名

とする。コピーするファイル名やディレクトリ名を最後に書く(複数でもよい)。デバイスフ

ァイル名は、コピー先の装置に付けられているファイル名である。UNIX の周辺装置にはすべ

てデバイスファイル名が付けられており、ディレクトリ /dev に必ず置かれている。c は古い

ファイルを捨てて新しいものを作ることを表すオプション(create)、f はコピー先を指定す

るオプション(file)、v はコピーしたファイルの名前などを画面に表示するオプション

(verbose)である。tar コマンドの場合には、こういったオプションの前に - を付けても付

けなくてもよいが、付けずに使うのが普通である。tar のコピー対象となるファイル名は、相

対パス名で指定する方が様々な理由から望ましい。

ディスクにバックアップを取らないまでも、tar コマンドによって古いファイルをまとめ、

さらにはそれを圧縮しておくとメモリの無駄使いが避けられる。例えば、Mail ディレクトリ以下

の全ファイルをまとめてファイル mail.tar に保存したい場合には、

% tar cf mail.tar Mail

とする。tar コマンドによって作られるファイル名にはサフィックス .tar を付けておくのが

習慣である(そうしておくと、tar によってアーカイブされたファイルであることが一目瞭然

だから)。ファイルをまとめる作業や、そのまとめたファイルのことをアーカイブ(archive:

本来の意味は「古文書」)とも呼ぶ。

アーカイブしたファイルを元に戻す(展開するとか解凍するという)には、

% tar xf mail.tar

のように、オプション x を付ければよい。tar でまとめたファイルの中身を、展開すること

なく確認するには、オプション t を付ければよい。

一般のファイルは無駄な空白や余分な情報が含まれているので、保存するときには圧縮する

のが普通である。そのためのコマンドには compress コマンドや gzip コマンドや lha コマ

ンドがある:

14・16 号館コンピュータ教室では、デバイスファイルは使えない(PC 端末に付いている USB ポートは UNIX システムの

デバイスではなく Windows のものである)。Windows とのデータ交換は ftp によるしかない。

18

Page 19: UNIX + Emacs 入門Ver.15 UNIX入門 コマンド帳(1) 1.コマンドとは コマンド(command) とは、コンピュータ(具体的には、動作中のOSやアプリケーションプ

% compress ファイル名 (または % gzip ファイル名)

compress で圧縮されたファイルの名前にはサフィックス .Z が、gzip で圧縮されたファイ

ルの名前にはサフィックス .gZ が付けられる(例えば mail.tar を compress で圧縮すると

mail.tar.Z となる)。また、compress や gzip で圧縮したものを元に戻すには、それぞれ

uncompress コマンドか gunzip コマンドを使う(lhaで圧縮したファイルは lha で元に戻す):

% uncompress 圧縮されたファイル名 (または % gunzip 圧縮されたファイル名)

19