基本的な UNIX コマンド

| UNIX コマンドについて | ファイル操作 | ディレクトリ操作 | その他ファイル操作 | manによるマニュアルの読み方 |

UNIX コマンドについて

UNIX コマンドの概要

UNIX には様々なコマンドが用意されています。

これらの中から、まずは非常に簡単なコマンドを幾つか実行してみましょう。

簡単な UNIX コマンドの例

date コマンド

コマンドプロンプトで、date コマンドを実行して下さい。

cc2000(81)% date
2005年  4月 27日 木曜日 16:02:13 JST
cc2000(82)%

このように、現在日時が表示されます。つまり date コマンドは日付と時刻を表示するコマンドです。

cal コマンド

cal コマンドでカレンダーが表示されます。

cc2000(82)% cal
       4月 2005
日 月 火 水 木 金 土
                1  2
 3  4  5  6  7  8  9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
cc2000(83)%

次に、cal コマンドに続いて -m オプションをつけて表示の体裁を変えて(月曜日が左側に来るようにして)みたり、月と年を引数として指定してその年月のカレンダーを表示してみたりしましょう。次のような表示になります。これらを確認したら、自分自身の誕生日の年と月のカレンダーを表示させてみましょう。

cc2000(83)% cal -m  ← m オプションで月曜日からの表示に設定
       4月 2005
月 火 水 木 金 土 日 
             1  2  3
 4  5  6  7  8  9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30
cc2000(84)% 
cc2000(84)% cal 1 1966  ← "1 1966" と引数を渡すことで 1966年1月のカレンダを指定
      1月 1966
日 月 火 水 木 金 土 
                   1
 2  3  4  5  6  7  8
 9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
cc2000(85)%

このように、コマンドによってはオプションや引数を付けることで、動作が多少変わったりするものもあります。ただ、コマンド名がわかったとしても、どのようなオプションや引数が利用できるのかわからないことは多々あります。それを確認する術は次に説明している man コマンドを利用します。

コマンドの使い方を調べる(マニュアル)

コマンドのマニュアル表示:man コマンド (manual)

コマンド名がわかっている場合、そのコマンドが持つ機能やオプションを詳しく知りたいときは、man コマンドを利用します。cal コマンドのオプションにどのようなものがあるか

% man cal

と入力して、画面に表示される内容を確認してみましょう。

CAL(1)                  System General Commands Manual                  CAL(1)

NAME
  cal - displays a calendar
SYNOPSIS
  cal [-mjy13] [ [month] year]
DESCRIPTION
  Cal displays a simple calendar.  If arguments are not specified, the cur
  rent month is displayed.  The options are as follows:
  -1   Display single month output (use if cal was built with -3 as
       default to get older traditional output)
  -3   Display prev/current/next month output (use if cal was built with
       traditional -1 as default to get newer improved output)
  -m   Display Monday as the first day of the week.  (The default is
       Sunday.)
....

マニュアル表示は大抵一画面では収まり切りませんから、1ページごとに一旦停止します。その状態で<Space>キーを押せば1ページ分送ることができるほか、<Return>で1行分送ることができます。この表示が送られて行く様子を「スクロール」と呼び、「矢印キーで前後に1行ずつスクロールする」というように言います。

また、一旦停止している状態、またはすべてを表示し切って「(END)」と表示された状態で、 q キーを押すと man コマンドの表示を終了させることができます。h キーか、 ? キーのいずれかを押せば、どのようなキーを押せば一旦停止後にどのような操作が効くかを表示してくれます。

このように man コマンドを利用して、各コマンドの詳細を調べることができます。蛇足ですが、man コマンド自身のマニュアルを見るには次のようにします。

% man man

man によるマニュアルの読み方については別途説明します。また、英語表記が苦手な人は、jman コマンドを利用すれば、説明書きを日本語で表示させることができます。ですが、今後、コンピュータ技術に関する様々なドキュメント類を読むことを考えれば、なるべく英語の表現にも慣れておくべきです。

ページ先頭へ戻る

ファイル操作

ファイルリスト表示:ls コマンド (list)

通常のファイルリスト表示:ls

ls コマンドはファイルリスト(ディレクトリも含む)を表示する機能を持ち、UNIX で一番基本的なコマンドです。ls コマンドだけでかなり様々な事ができますが、まずはオプションを何もつけない ls を実行してみましょう。

cc2000(81)% ls
Desktop        Maildir        Wnn6           public_html    sample          
cc2000(82)%

何も指定しなければ、カレントディレクトリのファイルリストを表示します。それに対し、ls の後に引数としてディレクトリ名を指定することができます。試しに、ホームディレクトリ下にあるディレクトリ Wnn6 (相対パス) や、ルートディレクトリの下にある /bin (絶対パス) を引数として指定してみましょう。

cc2000(82)% ls Wnn6       ← ディレクトリ Wnn6 下のファイルリストを表示 
bunsetsu fisd.h fiud kihon.h muhenkan symbol.h tel.h ud zip.h
cc2000(83)% ls /bin       ← ディレクトリ /bin 下のファイルリストを表示 arch dmesg igawk nisdomainname su aumix-minimal dnsdomainname ipcalc ping sync awk doexec jvim ps tar basename domainname kill pwd tcsh bash echo ksh red touch bash2 ed ln rm true cat egrep loadkeys rmdir umount chgrp ex login rpm uname chmod false ls rview usleep chown fgrep mail rvim vi consolechars gawk mkdir sed view cp gawk-3.0.6+mb1.15 mknod setfont ypdomainname cpio gettext mktemp setserial zcat csh grep more sfxload zsh cut gtar mount sh date gunzip mv sleep dd gzip netstat sort df hostname nice stty cc2000(84)%

ホームディレクトリ下のディレクトリ Wnn6 には各ユーザの辞書データやその他変換に必要なデータのファイルが納められています。また、ディレクトリ /bin には、UNIX / Linux の基本的なコマンドが「実行可能なプログラム」として存在しています。実は、この例で実行している ls コマンドはこの /bin 下にある ls というプログラムファイルを実行しています。以下に紹介する cp, mv, rm などもここに含まれています。

大抵のコマンドは ls や cp のように独立したファイルとして存在するプログラムなのです。しかし中には cd コマンドのように独立したファイルではないものもあります。それらはシェル (shell) と呼ばれる CUI を管理するプログラムの内部で解釈・実行されるものであり、「シェルコマンド」(shell command) と呼ばれています。シェルについては別の回で説明します。

 

ファイルの日付やその他情報も含めたファイルリスト表示:ls -l

ls コマンドに -l オプションを付けると、各ファイルおよびディレクトリの所有者やファイルサイズ、アクセス権限などの詳細情報が表示されます。引数としてディレクトリを指定すると、そのディレクトリ下にあるファイルの詳細情報が得られます。具体的には次のような形式で結果が表示されます(ここではカレントディレクトリのファイルリストを表示)。

cc2000(84)% ls -l    ← -l オプションでファイルリストの詳細情報を表示する
合計 80
drwxr-xr-x 2 hirai teach 4096 Apr 8 15:28 Desktop
drwx------ 32 hirai root 4096 Apr 28 11:45 Maildir
drwxr-xr-x 2 hirai teach 4096 Mar 20 2003 Wnn6
drwxr-xr-x 18 hirai teach 8192 Apr 28 11:43 public_html
lrwxrwxrwx 1 hirai teach 23 Mar 20 2003 win_home -> /CIFS/home/kyoin0/hirai/
cc2000(85)%

これら詳細情報の解釈の仕方は次の通りです。

lsコマンドのlong formatの説明

この中の、所有グループやファイル種別の細かな内容はまだ理解できなくても構いませんが、ファイル更新日付やサイズ、所有者、アクセス権限などが確認できることは、是非憶えておいて下さい。詳しくは man コマンドで ls コマンドの -l オプションについて調べてましょう。

 

隠しファイルも含めたファイルリスト表示:ls -a

ls に -a オプションをつけると、隠しファイル(ファイル名が . (ピリオド) で始まるもの)も含めたファイルのリストを表示させることができます。ホームディレクトリで ls -a コマンドを実行させてみましょう。

例:ホームディレクトリ下の隠しファイル(ディレクトリ)を表示する


cc2000(85)% ls -a     ← -a オプションで隠しファイルも含めたファイルリストを表示
./                  .gnome2             .phonerc
../                 .gnome2_private     .plugin141_02.trace
.ICEauthority       .gtkrc-1.2-gnome2   .realplayerrc
.Trash              .history           	.recetly-used
.Wnn7               .icons              .rpmmacros
.Xauthority         .java               .ssh
.Xdefaults          .jedrc              .sylpheed_bak_1.0.0
.acrobat            .jpi_cache          .themes
.adobe              .liece              .user60.rdb
.appletviewer       .login              .vine
.cshrc              .lotout             .wm_style
.dmrc               .mailcap	        .xinitrc
.emacs              .mailrc             .xscreensaver
.emacs-faces.el     .metacity           .xsession
.emacs-fontset.el   .mh_profile	        .xsession-errors
.emacs.d            .mime.types	        .xwm_msgs
.esd_auth           .mozilla            .yumiko
.face               .mplayer            Desktop
.fonts.cache-1      .mwmrc              Maildir
.gconf              .nautilus           Wnn6
.gconfd             .ng	                public_html
.gnome              .octave_hist        win_home
cc2000(86)%

皆さんのホームディレクトリでは . (ピリオド) で名前が始まるファイルはこの例のように多数存在してないかもしれませんが、幾つかは存在しているはずです(いろいろなソフトウェアを使っていくと、このような普段は見えないファイルが増えていきます)。これらの表示結果には隠しファイルだけでなく、隠しディレクトリもあります。ホームディレクトリには、実はこのようにたくさんのファイルやディレクトリが存在していますが、普段は見る必要がないものなので単に ls コマンドを実行しただけでは表示されません。とにかく . (ピリオド) で始まるファイルは普通は見えないファイルであり、そのリストを見るには ls -a が必要なことを憶えておくことが大事です。それから、通常の ls コマンドと同様に、引数としてディレクトリを指定することができますし、-l オプションと共に実行することも可能(その場合は ls -al とオプションを指定)です。

ホームディレクトリ下にある隠しファイルや隠しディレクトリのほとんどは、ソフトウェアの実行に関する設定を記録したものです。各ユーザによって動作設定を変えられるソフトウェアが、ここに設定ファイルを隠しファイルとして置くことが多いのです。例えば、.emacs は Emacs の設定ファイルであり、.mozilla は Web ブラウザ Mozilla の様々な設定ファイルが納められたディレクトリです(.mozilla の中を探ると、ブラウザのブックマークデータが bookmark.html というファイルで存在します)。ユーザがこれらをテキストエディタで編集することで自分でソフトウェアの設定を変更できるほか、実行中のソフトウェアが自動的に設定をファイルに残すこともあります。Windowsであれば、OS のレジストリというデータベースにアプリケーションの設定情報を残したり、拡張子が ini のファイルに残したりしますが、UNIX / Linux ではホームディレクトリ下の隠しファイルとして残すのが一般的です。

大学の PC において kterm 上で ls コマンドを実行させると、ディレクトリやファイルの種類によって表示される文字の色が違います。これは大学の Linux 環境がこの色合いで表示するよう設定されているため(正確には ls コマンドの設定と kterm の設定)なのです。どのコンピュータ環境でも同じ色合いで表示されるとは限りませんし、色が付かないこともあります。例えば、自宅の PC から大学のコンピュータ (cc2000) へ接続したときなどです。ですので普段は色でファイルやディレクトリの区別をしても構いませんが、それ以外の手段で確認することも知っておくべきです。幸い、ls コマンドは -F オプションを付けることで、文字色とは関係なく「ディレクトリ」「実行可能なプログラムファイル」「普通のファイル」を見分けることができます。-F を付けた場合、普通のファイルの名前表示には何も起こりませんが、ディレクトリ名の末尾には / (スラッシュ) が、実行可能なプログラムファイルの末尾には * (アスタリスク) が修飾文字として付きます。この場合、/ や * はあくまでも修飾文字ですのでファイル名の一部ではないことに注意して下さい。一度、ls -Fa を実行して、ホームディレクトリ下の様々なファイルやディレクトリを名前末尾の修飾文字で区別してみましょう。

ページ先頭へ戻る

ファイルのコピー:cp コマンド (copy)

ファイルを別のディレクトリへコピーしたり、コピーしたものを別名にする場合には cp コマンドを利用します。編集中のプログラムファイルなど、編集前の状態を別途保存しておきたい時や、他人のファイルを自分のディレクトリにコピーする場合などに利用します。何らかの理由でコピーができなかった場合はエラーメッセージを表示しますが、コピーできた場合は何も表示されません(だから次に挙げる例では ls コマンドで結果を確認しています)。

基本的なコマンドの記述: cp コピー元のファイル名 コピー先のファイル名

例:あるファイルを同じディレクトリ内で別のファイル名にコピーする


cc2000(94)% touch cptest      ← cpのテスト用ファイル cptest を touch コマンドで作成
cc2000(95)% ls

...   cptest   ...      ← まずは cptest が作成されたことを確認(...は省略部分)

cc2000(96)% cp cptest cptest_result  ← cptest を cptest_result というファイル名でコピー
cc2000(97)% ls

...   cptest   cptest_result   ...    ← コピー結果の cptest_result が存在することを確認

cc2000(98)% 
例:C言語でincludeするヘッダファイル stdio.h を自分のホームディレクトリにコピーする


cc2000(98)% cp /usr/include/stdio.h .   ← /usr/include にある stdio.h をカレントディレクトリ (.) へコピー
cc2000(99)% ls

...   stdio.h   ...       ← stdio.h がカレントディレクトリにコピーされたことを確認

cc2000(100)% 

ページ先頭へ戻る

ファイルの名称変更:mv コマンド (move)

ファイルの名前を変更するには、mv コマンドを利用します。ただし、次に説明している「ファイルの移動」も mv コマンドで行うので、ファイル名の変更と共に置き場所の移動も一度に実行させることが可能です。ファイルの名称変更ができなかった場合はエラーメッセージを表示しますが、変更できた場合は何も表示されません(次に挙げる例では ls コマンドで結果を確認しています)。

基本的なコマンドの記述: mv 変更前のファイル名 変更後のファイル名

例:cpコマンドの例で作成した cptest というファイルを mvtest というファイル名に変更する


cc2000(100)% ls 

...   cptest   ...

cc2000(101)% mv cptest mvtest    ← cptest を mvtest という名前に変更
cc2000(102)% ls

...   mvtest   ...      ← cptest がなくなって、mvtest というファイルができていることを確認

cc2000(103)% 

ページ先頭へ戻る

ファイルの移動:mv コマンド (move)

ファイルをディレクトリ間で移動させる場合は名称変更と同じく mv コマンドを利用します。移動後のディレクトリを指定しただけであればファイル名は変わりませんが、先に説明した「ファイルの名称変更」も mv コマンドで行えますので、ディレクトリ移動と共にファイル名の変更を一度に行うことも可能です。なお、ファイルの移動ができなかった場合にはエラーメッセージが表示されますが、移動できた場合には何も表示されません。

基本的なコマンドの記述: mv 移動させるファイル名 移動先のディレクトリ名

例:mvtest というファイルをホームディレクトリ下の public_html へ移動する

cc2000(103)% ls

...   mvtest   ...   public_html   ...      ← ファイル mvtest とディレクトリ public_html があることを確認

cc2000(104)% mv mvtest public_html   ← mvtest をディレクトリ public_html へ移動
cc2000(105)% ls

...   public_html   ...       ← mvtest  が移動されてカレントディレクトリからなくなっていることを確認

cc2000(106)% ls public_html  ← ディレクトリ public_html 内のファイルリストを表示

...   mvtest   ...         ← mvtest が public_html 内に移動されていることを確認

cc2000(107)% 

ページ先頭へ戻る

ファイル削除:rm コマンド (remove)

ファイル削除には、rm コマンドを利用します。Windows や Macintosh でファイルをゴミ箱へ入れるのと違い、rm コマンドをそのまま実行するといきなりファイルが消えてしまいます。UNIX / Linux では1度消してしまったファイルやディレクトリは2度とよみがえらないので、rm コマンドを実行する際には十分注意をして下さい。但し、-i オプションを付けると、削除しようとするファイル毎に本当に削除するかどうか尋ねてきます。不注意で必要なファイルを消してしまわないよう、普段は -i オプションをつけて実行すべきと言えます。何らかの理由でファイル削除ができなかった場合はエラーメッセージが表示されますが、削除できた場合は何も表示されません。

基本的なコマンドの記述: rm [-i] 消去するファイル名

例:ディレクトリ public_html に移動したファイル mvtest を削除する(削除確認なし)

cc2000(107)% ls public_html

...   mvtest   ...     ← ディレクトリ public_html に mvtest があることを確認

cc2000(108)% rm public_html/mvtest   ← rm コマンドで削除実行(いきなり削除してしまうので注意!)
cc2000(109)% ls public_html                                                      

......        ← mvtest が削除された(ファイルがない)ことを確認

cc2000(110)% 
例:ファイル cptest_result を削除する(確認あり)

cc2000(110)% rm -i cptest_result   ← ファイル cptest_result を削除する(削除確認付き)
rm: `cptest_result' を削除しますか(yes/no)? y   ← y を押せば削除する(それ以外のキーを押せば削除しない)
cc2000(111)% ls                                                      

......      ← cptest_result が カレントディレクトリにないこと(削除されたこと)を確認

cc2000(112)% 

ページ先頭へ戻る

テキストファイルの閲覧

more / less

テキストファイルの閲覧には more もしくは less コマンドを利用します。more / less は、man コマンドと同じくページャ機能を持っているので、画面1ページ単位で表示を一旦停止して、<space> キーで次のページ、もしくは <return>キーで1行ずつスクロールして表示する、という具合にファイル閲覧を行います。b を入力すればページを戻ることができ、q で閲覧を終了することができます。more と less の主な違いは、ファイル末尾まで表示した時の動作です。more は末尾まで行くとそのままコマンドを終了してプロンプトが表示されますが、less の場合は末尾まで行っても終了しません。

基本的なコマンドの記述: more 閲覧するテキストファイル名 もしくは less 閲覧するテキストファイル名

例:cp コマンドの例でホームディレクトリへコピーした stdio.h の中身を more で閲覧

cc2000(114)% more stdio.h     ← stdio.h を引数で指定して閲覧

...
...
...
                    ← ファイル末尾まで表示すれば自動的に閲覧終了 
cc2000(115)% 
例:/usr/include/stdio.h の中身を less で閲覧(中身は上の more の例と同じ)

cc2000(115)% less /usr/include/stdio.h    ← /usr/include/stdio.h を引数で指定して閲覧

...
...
...
                    ← ファイル末尾であっても閲覧の終了には q を押す必要あり
cc2000(116)%          

 

cat (concatenate)

本来、cat コマンドは複数のテキストファイルを上下に連結して画面表示するためのコマンドですが、ファイル閲覧にもよく利用されます。more / less との違いは、ページャ機能がないため、ファイルの先頭から最後まで一気に画面表示してしまうことです。1画面にも満たない行数のファイルであれば、more / less を使う必要がありませんから、cat を使っても構わないと言えます。

基本的なコマンドの記述: cat 閲覧するテキストファイル名

例:cp コマンドの例でホームディレクトリへコピーした stdio.h の中身を cat で閲覧

cc2000(116)% cat stdio.h     ← stdio.h を引数で指定して閲覧

...
...
...
                  ← ファイル末尾まで一気に表示してコマンド終了!
cc2000(117)% 

本来の cat コマンドの記述: cat 連結するファイル1 連結するファイル2 ... 連結するファイルN

ページ先頭へ戻る

ディレクトリに関する操作

カレントディレクトリの確認:pwd コマンド (print current working directory)

カレントディレクトリを確認するために pwd コマンドを使います。結果は常に絶対パスで表示されます。(例は省略)

ページ先頭へ戻る

カレントディレクトリの変更:cd コマンド (change directory)

カレントディレクトリを変更(移動)する場合には cd コマンドを利用します。普通は引数として変更(移動)先のディレクトリを記述します(絶対パス、相対パスどちらも可)。もし何もディレクトリを指定しなかった場合、ホームディレクトリへ移動します。

基本的なコマンドの記述: cd [ディレクトリ名]

例:cd コマンドで様々なディレクトリへ移動し、pwd コマンドでその結果を確認する

cc2000(117)% cd /usr/bin    ← カレントディレクトリを /usr/bin に変更
cc2000(118)% pwd
/usr/bin           ← pwd コマンドで /usr/bin へ移動したことを確認
cc2000(119)% cd ..     ← 1つ上のディレクトリ (..) を指定することで /usr へ移動
cc2000(120)% pwd
/usr             ← /usr へ移動したことを確認
cc2000(119)% cd ~/public_html   ← 自分のホームディレクトリ (~) 下の public_html へ移動
cc2000(120)% pwd
/NF/home/g050/xxxxxxx/public_html   ← ホームディレクトリ下の public_html へ移動したことを確認
cc2000(121)% cd /etc    ← ディレクトリ /etc へ移動
cc2000(122)% pwd
/etc              ← /etc へ移動したことを確認
cc2000(123)% cd         ← 引数なしの cd コマンドによってホームディレクトリへ移動
cc2000(124)% pwd
/NF/home/g050/xxxxxxx     ← pwd コマンドでホームディレクトリへ戻ったことを確認
cc2000(125)% 

ページ先頭へ戻る

ディレクトリの作成:mkdir コマンド (make directory)

ディレクトリを作成する場合には mkdir コマンドを利用します。作成するディレクトリ名の記述は絶対パスでも相対パスでも構いません。

基本的なコマンドの記述: mkdir 作成するディレクトリ名

例:書込権限のあるホームディレクトリ下にディレクトリ test_directory を作成する

cc2000(125)% mkdir test_directory   ← ディレクトリ test_directory を作成
cc2000(126)% ls

...   test_directory   ...   ← ディレクトリ test_directory が作成されたことを確認

cc2000(127)% 

ページ先頭へ戻る

ディレクトリの名称変更: mv コマンド (move)

ディレクトリの名前を変更するには、ファイルの名称変更と同じく mv コマンドを利用します。また、次に説明する「ディレクトリの移動」も mv コマンドで行うので、ディレクトリ名の変更と共にその置き場所の移動も一度に実行させることが可能です。

基本的なコマンドの記述: mv 変更前のディレクトリ名 変更後のディレクトリ名

例:ディレクトリ test_directory の名前を moved_dir に変更する

cc2000(129)% ls

...   test_directory   ...     ← ディレクトリ test_directory があることを確認

cc2000(130)% mv test_directory moved_dir    ← ディレクトリの名称変更
cc2000(131)% ls .

...   moved_dir   ...   ← ディレクトリ test_directory が moved_dir に名称変更されたことを確認

cc2000(132)% 

ページ先頭へ戻る

ディレクトリの移動:mv コマンド (move)

ディレクトリを移動させるには、ファイルの移動と同じく mv コマンドを利用します。また、「ディレクトリの名称変更」も mv コマンドで行うので、ディレクトリを移動させると共に名称変更も一度に実行させることが可能です。

基本的なコマンドの記述: mv 移動させるディレクトリ名 移動先のディレクトリ名

例:ディレクトリ literacy を作成して、そこにディレクトリ moved_dir を移動させる

cc2000(132)% mkdir literacy    ← ディレクトリ literacy を作成
cc2000(133)% ls

...   literacy   ...   moved_dir   ...   ← カレントディレクトリに literacy と moved_dir の両方があることを確認

cc2000(134)% mv moved_dir literacy    ← moved_dir を literacy 内部に移動
cc2000(135)% ls

...   literacy   ...    ← ディレクトリ moved_dir が移動されてなくなっていることを確認

cc2000(136)% ls literacy
moved_dir         ← ディレクトリ literacy 内部に moved_dir が移動されたことを確認
cc2000(137)% 

ページ先頭へ戻る

ディレクトリの削除:rmdir コマンド (remove directory)

ディレクトリを削除する場合は、rmdir コマンドを利用します。但し、削除するディレクトリにはファイルやディレクトリがない空の状態にしておく必要があります。ファイル削除の場合と同じく、コマンドを実行して一度削除してしまったものは二度と元に戻せないので実際に削除する際には十分注意をして下さい。

基本的なコマンドの記述: rmdir 削除するディレクトリ名

cc2000(137)% rmdir literacy       ← 空ではないディレクトリ literacy を削除しようとしてみる
rmdir: `literacy': ディレクトリは空ではありません  ← 空ではないため削除できないことを確認
cc2000(138)% rmdir literacy/moved_dir  ← 今度は literacy 内部の moved_dir のみ削除する cc2000(139)% ls literacy         ← moved_dir が削除されたことを確認 cc2000(140)% rmdir literacy     ← literacy を削除 cc2000(141)% ls .........        ← literacy が削除されたことを確認 cc2000(142)%

なお、ファイル削除のコマンド rm でも -r オプションによってディレクトリの削除が可能です。この場合はディレクトリの中身が空でなくとも削除できてしまうので、実行する場合は十分注意をしましょう。

ページ先頭へ戻る

その他ファイル操作

ファイルの検索:find コマンド (find)

ファイル(もしくはディレクトリ)の検索には find コマンド利用可能です。例えば、とあるファイルの名前がわかっていても、どのディレクトリにそれが存在しているかわからないときには、find コマンドで -name オプションを利用して検索を行います。検索するディレクトリの指定をすると、そのディレクトリ以下のサブディレクトリは全て検索範囲となります。

基本的なコマンドの記述: find 検索するディレクトリ(複数指定可) -name 検索したいファイル

例:C言語のヘッダファイル string.h のありかを、ディレクトリ /usr 以下の範囲で検索する

cc2000(200)% find /usr -name string.h   ← find による検索の実行
/usr/include/string.h    ← 検索結果から、string.h は /usr/include にあることがわかる
cc2000(201)% 

ここでは、-name でファイル名を指定する検索でしたが、find コマンドには -name 以外にもたくさんのオプションがあり、ファイルサイズやファイルの種類、日付、所有者など、様々な検索が行えます。man コマンドで様々なオプションを調べてみましょう。

ページ先頭へ戻る

ファイルのアクセス権制御(基本コマンドとして説明する?)

chmod (change mode)

ファイルやディレクトリのアクセス権限(権限のモード)を変更するには chmod コマンドを利用します。

基本的なコマンドの記述: chmod モード 対象とするファイル(複数可)

アクセス権限のモードの記述は様々な記法が利用できます。それによって ls コマンドの -l オプションの説明にある「所有者」「所有グループ」「その他ユーザ」の3つのユーザカテゴリ各々に対し、読込権限 (r: Read) 、書込権限 (w: Write) 、実行権限 (x: eXecute) を設定します。

詳しくは man ページを見るほか、UNIX / Linux の書籍などを参考にすることをお勧めします。

chown (change owner)(説明しなくていい?)

UNIX / Linux が管理するファイル / ディレクトリには必ず「所有者」(owner) の情報がついています。ファイルの所有者を変更するには chown コマンドを利用します。

基本的なコマンドの記述: chown ユーザID 対象とするファイル(複数可)

この所有者として設定されるユーザID は常に人間(login してシステムを利用するためのユーザID)とは限らず、UNIX / Linux 自身が動作するために必要なユーザID(例えば daemon)も存在します。

普通は chown コマンドを使うことはあまりないのですが、詳しく知りたい人は man ページや UNIX / Linux の書籍を見ることをお勧めします。

chgrp (change group)(説明しなくていい?)

ファイル/ ディレクトリには、所有者 (owner) の情報と同じく「所有グループ」(group) の情報(グループID)もついています。ファイルの所有グループを変更するには chgrp コマンドもしくは chown コマンドを利用します。

基本的なコマンドの記述: chgrp グループID 対象とするファイル(複数可)

基本的なコマンドの記述: chmod グループID 対象とするファイル(複数可)

chown コマンドと同じく、普通は chgrp コマンドを使うことはあまりありませんが、詳しく知りたい人は man ページや UNIX / Linux 関係の書籍を見ることをお勧めします。

ページ先頭へ戻る

UNIX コマンドのその他トピック

man コマンドによるマニュアルの読み方

オプション、引数の意味

SYNOPSIS項目では、コマンドの形式、つまりコマンドに適用できるオプション、引数などが列挙されています。オプションとは「コマンドの振舞い、機能を変えるような指示」を指し、引数とは「コマンドが処理するべき対象(など)」を指します。

SYNOPSIS
     cal [-mjy13] [ [month] year]

ここでの表記にはルールがあります。上の cal の例で説明します。

  1. [ ] に囲まれた部分は「なくてもいい」つまり省略可能だという事を意味しています。[ ] を書きなさい、ということではありませんので念のため。
  2. こういう場面での「- (ハイフン)」は一般にこの部分がオプションであるという目印ですが、特に上記の例のように、すぐ後に多くのオプション文字「 mjy13 」がくくられていた場合は、その中のどれでもピックアップして同時に与えていいよ、という意味です。「-m」や「-3」と与えるだけでなく、「-m -3」と続けて書いたり、「-m3」と書いたりすることができます。
  3. [ [ month ] year ] と二重に [ [ ] ] で括られていた場合、より深い [ ] のペアから省略可能です。上の例では「12 2003」のように month, year を両方とも与える、「2003」 のように year だけを与える、何も与えない、という書き方ができます。逆に「12」と month だけ指定する、と言うようなことはできません。(その場合は month が略されたと解釈されて西暦 12 年のカレンダーが表示されるでしょう。)
  4. また、例にはありませんが、「...」という記述があれば、その直前のものを繰り返して書いてもいいよという意味です。
  5. コマンドにオプションや引数をつけてタイプする場合、man に表示された順番に注意する必要がある場合があります。

このルールによれば、たとえば以下の可能性があります。

cal -m 月曜を週の最初に表示します
cal -3 前月、今月、来月の三カ月分を表示します
cal -m -3 月曜をはじめにして、前月、今月、来月の三カ月分を表示します
cal -m3 同上
cal 12 1999 1999 年 12 月のカレンダーを表示します
cal 1999 1999 年のカレンダーを表示します
cal -m3 12 1999 月曜を前に、1999 年 12 月の前後を含めて三カ月ぶんのカレンダーを表示します

ここで、man コマンドにおけるオプションの与え方の表記のクセについて一つだけ、以下に紹介しておきます。

オプションが振舞いや機能を、引数が処理対象の指示を行なっていることがわかるでしょう。

man マニュアルの書式詳細

man コマンドが表示する内容をよく見てみると、NAME, SYNOPSIS, DESCRIPTION, HISTORYのように幾つかの項目に分けて説明してあるのが判るでしょう。これらの項目分けは、すべてのUNIXにおいて全く同じではなく、幾らか違う部分もありますが大抵は共通の形式で書かれています。以下にその項目の意味を書いておきます。

NAME, 名前

コマンドの名前とその概要。

SYNOPSIS, 形式

コマンドの形式。コマンドに適用できるオプション、引数などを列挙します。ここでの表記にはルールがあって、例えば cal の例を以下に挙げると、

cal [-mjy13] [ [month] year]

この [ ] に囲まれた部分は「なくてもいい」つまり省略可能という事を意味しています。特に上記の例のように [ ] に多くのオプション文字がくくられていた場合は、その中のどれでもピックアップして同時に与えていい、という意味になります。また、例にはありませんが、 ... という記述があれば、その直前のものを繰り返して書いてもいいという意味です。コマンドにオプションや引数をつけてタイプする場合は、ここで提示された順番に注意してください。

FLAG, OPTION, フラグ, オプション

それぞれのオプションの働きについて詳しく書いてあります。同時に指定してはいけないオプションなどについても書いてあります。

DESCRIPTION, 機能説明

コマンドの詳細説明。コマンドの機能が詳しく書かれています。ここにオプションの説明を含めているUNIXもあります。

FILES, ファイル

コマンドに関係するファイルの名前が列挙されます。

SEE ALSO, RELATED INFORMATION, 関連項目

コマンドに関連する項目。深い関係のあるコマンドなどが列挙されます。ここにある項目は再び man コマンドで参照できますから、このコマンドのマニュアルだけを読んでよく判らない場合はここを追い掛けて行くのがお勧めです。

BUGS, バグ

コマンド使用上の制限事項。コマンドの動きがどうもおかしいという時は注意しましょう。

コマンド名を調べる

コマンドの名前が判らないのだけれど、このような機能を持ったコマンドを探したい、という時に man コマンドが使えます。man にはキーワードでコマンドを検索するオプションとして -k オプションがあります。

man -k hostname などとすれば hostname に関係のあるコマンドなどの一覧が表示されます。結構沢山出ますが1行で1つのコマンドを紹介してくれています。1番目の項目がコマンド名、その次の括弧に囲まれた数字がマニュアルの分類番号で、残りがコメントです。

cc2000(116)% man -k hostname
Sys::Hostname        (3pm)  - Try every conceivable way to get hostname
dnsdomainname [hostname] (1)  - show the system's DNS domain name
domainname [hostname] (1)  - show or set the system's NIS/YP domain name
gethostname          (2)  - get/set host name
hostname             (1)  - show or set the system's host name
hostname             (7)  - host name resolution description
nisdomainname [hostname] (1)  - show or set system's NIS/YP domain name
nodename [hostname]  (1)  - show or set the system's DECnet node name
sethostname [gethostname] (2)  - get/set host name
ypdomainname [hostname] (1)  - show or set the system's NIS/YP domain name
cc2000(117)% 

このような結果が表示されます。上記の括弧 ( ) に囲まれた数字や文字は、マニュアルのセクション(分類番号)と言い、その一覧を以下に示しておきます。

セクション番号 分類
1 ユーザコマンド(一般利用者の為のコマンド)
2 システムコール(プログラム言語から利用します)
3 関数(プログラム言語から利用します)
4,5 各種ファイルフォーマット
6 ゲームとデモ
8 保守用コマンド(システム管理者が利用します)

このセクション番号の割当てですが、UNIX / Linux によって多少違いがあります。セクション 1, 2, 3 位まではどれも同じなのですが、4, 5あたりについては上記の表とは違うことがあります。

例に挙げた hostname キーワードでのマニュアル検索ではセクション 1 とセクション 7 と両方に passwd という項目がありました。ここで単に man hostname とすると常に前の方だけ、つまりセクション 1 の方についてだけが表示されてしまいます。このような状況でセクション 7 の hostname の情報を見たい場合は、 man 7 hostname のようにセクション番号を明示してやります。

ときどきセクションの指定方法が異なる UNIX / Linux があるので注意してください。もちろんその時は man man で man コマンドそのもののマニュアルを見てセクション指定の方法を調べます。

ページ先頭へ戻る

UNIX コマンドの在処 (ありか)

UNIX / Linux で利用できる各コマンドは、基本的に実行可能なプログラムファイルとして bin という名前 (binaryの略) のディレクトリに納められていることが多いです。例えば、/bin, /usr/bin, /usr/local/bin, /usr/X11R6/bin 等です。中には /sbin や /usr/sbin のように sbin という名前のディレクトリ名にもコマンドもあります (sbin には UNIX / Linux 自身が動作するためのもの、システム管理のための実行可能プログラムが納められています)。

さて、これらのディレクトリにある多くの UNIX コマンドはプロンプトで入力すれば実行できるわけですが、本来、ファイルを操作(実行を含む)するためには絶対パスか相対パスで記述しないといけないはずです。どうしてコマンドのファイル名を記述するだけでプログラムを実行できてしまうのか、不思議に思いませんか?(プログラミングの授業でコンパイルしたプログラムは、./a.out のように相対パスで指定して実行しているはずです)

実は、プロンプトで入力して実行できる UNIX コマンドは、シェル (shell) と呼ばれる仕組みが /bin などを含む様々なディレクトリに該当する名前のファイルがあるかどうかを自動的に検索してくれているのです。この自動的に検索する先(ディレクトリ)の設定を「サーチパス(検索パス)」(search path) と言います。一度、プロンプトで set というコマンドを入力してみましょう。するとシェルに関するたくさんの項目が表示されますが、その中に path で始まる行があり、その後に幾つものディレクトリのパスが列挙されているはずです。これがコマンドのサーチパスであり、シェルはここで列挙されたディレクトリの中を検索して、名前が合致するプログラムを実行します。もし /bin がこのサーチパスに含まれてないとすれば、ls コマンド (/bin/ls) をプロンプトで実行しようとしても実行できません。

ただ、コマンドによってはプログラムファイルとして独立していないものもあります。その代表的なものが cd コマンドです。この cd コマンドのようにファイルで存在しないものは、シェルに埋め込まれたコマンド(シェルコマンド)として機能します。

シェルの基本的な機能については別の資料で説明しますが、サーチパスの細かい説明やシェルが持つ様々な機能については、それらが書かれた書籍などを見ることをお勧めします。

ページ先頭へ戻る

Valid HTML 4.01!