next up previous contents
: オンラインマニュアルとページャの操作法 : シェルの基本操作 : シェルの基本操作   目次


ファイルやディレクトリ操作

シェルで、最も頻繁に行う操作は、ファイルやディレクトリの操作ですので、ま ず、最初に説明します。シェルのコマンドラインから、ls -la(エルエス スペー ス マイナスエルエー) と入力してみま しょう。ls は、ファイルやディレクトリの一覧を表示するコマンドで、-la 39 は ls コマンドに与えるオプションです。UNIXのコマンドでは、オプションは - (ハイフォンまたはマイナス)に続けて文字を与える場合が多く、「コマンド名 [-option] [引数1 引数2...] 」の形が一般的です。コマンド名やオプション、引 数の間には、スペースを1個以上入れます40。 ここで、[...] は 省略可能であることを表しています。
  % ls -la
  total 31908
  drwxr-xr-x   78 ohba  wheel      4096  3  5 15:36 .
  drwxr-xr-x  649 root  wheel     12288  9 20 09:51 ..
  -rw-r--r--    1 ohba  wheel      1777  2 29 17:27 .cshrc
  lrwxrwxrwx    1 ohba  wheel         9  5  6  2005 .xinitrc -> .xsession
  -rwxr--r--    1 ohba  wheel       730  3  5 15:32 .xsession
  -rw-r--r--    1 ohba  wheel    118480  5 29  2003 cap.patch.tar.gz
  drwx------   22 ohba  wheel      1024  1 24 09:08 Mail
  drwxr-xr-x    2 ohba  wheel      1536  2  9  2007 bin 
  drwxr-xr-x    8 ohba  wheel       512 10 12  2006 public_html
このような表示が得られたはずです。-la の l(エル)は、ロングフォーマットで 詳細情報を表示させるオプションで、a は . (ドット) で始まるファイルやディ レクトリ41 も表示させるオプションです。これらのオプションを与えなかった 場合に、結果がどう変わるか試してみましょう。

ロングフォーマットで出力される詳細情報は、左から順に、ファイルモード(ア クセス権)・リンク数・所有者名・所有グループ名・ファイルのバイト数・最終 更新された日付や時間・ファイルやディレクトリの名前となっています。 「drwxr-xr-x」や「-rw-r-r-」で表されている、ファイルやディレクトリのモー ド(アクセス権)は、次のような意味です。最初の1文字はファイルの型を表し、 d はディレクトリ、- は普通のファイル、l (エル)はシンボリックリンク 42 を 表します。残りの 9個の文字は、それぞれ3個ずつ、所有者・グループ・全ユー ザーに対するに対するアクセス権43 を表しています。

$ \bullet$
r: 読み出し可
$ \bullet$
w: 書き込み可
$ \bullet$
x: 実行可(ディレクトリの場合は検索可)
それらが与えられていない場合は、「-」になります。例えば、Mail という ディレクトリは、届いた電子メールを保存しておくディレクトリですが、 「drwx---」というアクセス権になっていて、所有者以外は 見られないようになっています。このように、ファイルやディレクトリ毎に、アク セス権をきめ細かく設定できるのが、UNIXのファイルシステムの特長です。

ls -la で、最初に表示されている 「. (ドット)」 という名前のディレクトリ は、カレントディレクトリ(current directory、現在いるディレクトリ)を、 次の「..」は、ひとつ上のディレクトリ(親ディレクトリ)を表しています。上 で、UNIXのコマンドは、一般に「コマンド名 [-option] [引数1 引数2...]」 である、と述べましたが、ls -la では、引数を省略しています。引数がなかっ た場合、ls コマンドは、カレントディレクトリに対して、処理を行います。ls コマンドの引数として、ファイルやディレクトリを与えれば、それについて、結 果を表示します。

 % ls -l /etc
 % ls -l /etc/mail
 % ls ..
 % ls Mail  (これは、まだできていませんね...)
などを試してみましょう。ここで、/etc や /etc/mail という表記は、/(スラッ シュ) で始まっています。§1.5で説明したように、/ はディレクトリの 区切りであると同時に、最初にきた場合はルートディレクトリを表します。この ように/ で始まるファイルやディレクトリの表示方法を絶対パス名 44と 呼びます。それに対し ../some_dir や Mail/inbox のように、/ で始まらない 表示方法は、カレントディレクトリを基準に表していて、相対パス名 と呼びます。 ../../ を繰り返して行けば、相対パスでもいつかは必ずルートディ レクトリまで到達しますので、あらゆるファイルは相対パス名でも絶対パス名で も表記可能です。

既に説明したように、ログインした時にいるディレクトリをホームディレクトリ と呼び、ホームディレクトリ以下は、自分で好きなように、ディレクトリやファ イルが作成できます。言わば、ホームディレクトリは自分の家や部屋と同じです。 部屋の中に、食べ物や飲物や読み終わった本や鼻をかんだティッシュやDVDやそ の他諸々のものがあたり一面においてある部屋はどうでしょう。やはり、食べ物 や飲物は冷蔵庫に、本は本棚に、ゴミはごみ箱に整理した方がよいでしょう。 それと同様に、ホームディレクトリ直下に色々な種類のファイルを雑然と置いて おくよりは、種類や目的毎のディレクトリを作成して、整理して置いておいた方 があとで捜す場合に簡単です。これから、実験結果を保存する場合には、実験毎 に違うディレクトリに整理するように心掛けましょう。 ホームディレクトリは、どこからでも、 ~/または $HOME で参照できます45。次の

  % ls /home/ログイン名
  % ls ~/
  % ls $HOME
は、同じ結果を与えます。

その他の、ファイルやディレクトリ操作のコマンドを、簡単に説明します。 詳細な使い方等は、次の節で説明するオンラインマニュアルで調べることが できますので、必要に応じて調べて下さい。

$ \bullet$
pwd
カレントディレクトリを表示する。Print Working Directory の頭文字。
$ \bullet$
cd
カレントディレクトリを変更する。Change Directory の頭文字。 引数なしで起動すると、ホームディレクトリに移動する。
  % pwd
  /home/nagamine/doc
  % cd ..
  % pwd
  /home/nagamine
  % cd /tmp
  % pwd
  /tmp
  % cd
  % pwd
  /home/nagamine

$ \bullet$
mkdir ディレクトリ名
新しいディレクトリを作成する。MaKe DIRectory。

$ \bullet$
rmdir ディレクトリ名
ディレクトリを削除する。ReMove DIRectory。ディレクトリの中が空でないと、 成功しない。下の rm -rf を参照。

$ \bullet$
mv 引数1 [引数2 ...] 引数n
ファイルやディレクトリの移動。MoVe の意味。mv の挙動はやや複雑です。 引数1,2,...のファイルやディレクトリは、存在しないとエラーになる。 引数n(最後の引数)が実在するディレクトリであれば、それまでの引数のファ イルやディレクトリは、引数nのディレクトリの下に移動する。 引数をふたつだけ与えて、引数2が実在するディレクトリでなければ、 引数1の名前が引数2の名前に変わる(rename)。この場合、引数2が実在する ファイルである場合は、上書きされて消えてしまうので注意が必要です。
$ \bullet$
cp 引数1 [引数2 ...] 引数n
ファイルやディレクトリのコピー。CoPyの意味。 mv の場合と同様に、引数n(最後の引数)が実在するディレクトリであれば、 それまでの引数のファイルを、引数nのディレクトリの下に同じ名前で複製する。 引数をふたつだけ与えて、引数2が実在するディレクトリでなければ、 引数1の名前が引数2の名前で複製される。この場合、引数2が実在する ファイルである場合は、上書きされて消えてしまうので注意が必要です。
$ \bullet$
rm ファイル
ファイルを削除する。ReMoveの意味。rm -r directory でディレクトリの中のファイ ルを消去して、ディレクトリも消去する(良く理解して使わないと危険)。
  % ls
  com.html   com.html~  com.txt
  % mkdir test  (testディレクトリを作成)
  % cp com.txt com.html test (testディレクトリにコピー)
  % ls test
  com.html   com.txt
  % rm -r test (testディレクトリを再帰的に消去)
  % ls
  com.html   com.html~  com.txt
  % rm com.html~
  % ls
  com.html   com.txt

$ \bullet$
cat ファイル1 [ファイル2 ファイル3 ...]
ファイルを表示する。2つ以上の引数の場合は、続けて表示する。 conCATenate (鎖状につなぐ)の意味。

$ \bullet$
less ファイル、jless ファイル
ファイルを1ページずつ表示する。less や jless は、ページャと呼ばれます。 スペースキーで次のページを表示する。 bキーで前のページを表示する。qキーで終了する。次の§2.3.2で詳しく 説明します。
$ \bullet$
du ファイルやディレクトリ
ファイルやディレクトリのディスク上の使用容量を表示します。デフォルトで はブロック単位で表示し、-k オプションで、Kbyte単位で表示します。
$ \bullet$
grep 文字列 ファイル
文字列を含む行をファイルから探して表示する。
$ \bullet$
chmod アクセス権 ファイルやディレクトリ
アクセス権を変更する。CHange MODe の意味。
  % chmod a+x file名 (すべてに実行権を与える)
  % chmod a-x file名 (すべてに実行権を与えない)
  % chmod 755 file名 (すべてに読み込みと実行権を与える、書き込みは所有者だけ)
  % chmod 644 file名 (すべてに読み込みを、書き込みは所有者だけ、実行権はない)	

ls コマンドで、複数の引数を与えれば、そのすべてについてのファイルやディ レクトリ情報を続けて表示します。また、cp や mv コマンドでは、 複数のファイルのコピーや移動ができます。このように、多くのファイルやディ レクトリを引数として与える場合に、ひとつひとつの名前を引数に与えても良い のですが、例えば、数10個のファイルをコピーや移動しようとする時、 数10個のファイル名をタイプしていたら、大変ですね。そんな時は、 ワイルドカード 46 を使うと便利です。とりあえずは、「*」と「?」のふ たつを知っているだけで十分です。「*」は任意の文字列にマッチします。「?」 は任意の1文字にマッチします。例えば、*.txt は .txt で終わるすべてにマッ チします。data??.txt の意味はわかりますね(言葉で説明するのは面倒です)。 例えば、file0.dat, file1.dat, file2.dat, ..., file999.dat と1000個のファ イルがあった場合に、

  % mkdir backup
  % cp *.dat backup  (1000個のファイルをすべてコピーする)
  % mv file?.dat  backup (file0.dat 〜 file9.dat を移動する)
  % ls file??.dat (マッチするファイルを調べる)
  % rm file??.dat (マッチしたファイルを消去する)
という使い方ができます。ただし、ワイルドカードを使うと、予想外のファイル がマッチする場合があるので、(特に消去する場合には)ls コマンドでマッチ するファイルを確認してから実行した方が良いでしょう。


next up previous contents
: オンラインマニュアルとページャの操作法 : シェルの基本操作 : シェルの基本操作   目次