トップへ
田村研究室

インターネット利用技術演習

2009年度

2009
6/1

Unixのコマンドラインシェル

コマンドラインシェル

ユーザが入力したコマンドを解釈して実行するコマンドライン解析・実行環境をシェルと呼ぶ。

シェルには数多くの種類が存在し,自分の好みに合わせて使用できる.代表的なシェルにはsh系とcsh系の大きく二つに分けられる.

shボーン(Bourne)シェルsh系一番シンプルなシェル.すべてのUnix系OSに必ず存在する標準シェル
cshシーシェルcsh系BSD系でよく使用,C言語に似た構文が使用できる.
bashバッシュ(BourneAgainShell)sh系linuxでよく使用,shの拡張版
kshケーシェルsh系かつてのSystemV系の標準.shの拡張版
tcshティーシーシェルcsh系cshの拡張・改良版
zshゼットシェルcsh系「究極のシェル」.shとcsh両方の特徴をあわせる.しかし機能が肥大化しているため嫌われることもある.

それぞれでコマンドの種類が微妙に異なる.しかし基本的なものは同じであることが多い.

必須のユーザコマンド

Unixのコマンドは使用目的から大きく次に分けられる.

  1. 一般ユーザが使用するユーザコマンド
  2. システム管理者が使用するシステム管理用コマンド

システム管理用のコマンドは,管理者しか実行することができない.windowsでもVista以降は一般ユーザと管理者の区別をきちんとするよう に整理されつつあるが,Unixでは従来から一般ユーザと管理者をきちんと分けてある.管理者も通常は一般ユーザとしてコンピュータを利用し,必要なとき だけ管理者用権限を取得し,管理者コマンドを実行するスタイルを取る.

ここでは一般ユーザコマンドのうち特に必須なものをいくつか説明する

コマンド名コマンドの元になった英単語
manmanual
lslist
catconcatinate
moremore
cpcopy
mvmove
rmremove
chmodchange mode
cdchange directory
pwdprint working directory
mkdirmake directory
rmdirremove directory
dudisk usage
dfdisk free
setset (environment)
echoecho

一般的にUNIXコマンドは次のような形式を持っている .

コマンド名 -オプション 引数
  • コマンド名: ユーザがUNIXマシンへ指示したいコマンド名を指定
  • オプション: 「-」(マイナス)記号に続いてコマンドの補足指示
  • 引数 : コマンドの対象を指示

例えば次のように使われる

例: % cp -r Mail backup ( Mailディレクトリの内容をすべてbackupディレクトリへコピーする)

この例ではコマンド名は「cp」,オプションとして「-r」,引数として 「Mail」と「backup」が指示されている.注) 行頭の%はコマンドプロンプトを意味し,コマンドの一部ではない.それ以降をタイプすればよい.

オプションや引数は省略可能な場合もあり,以下の説明では,省略可能な部分は[ ]でくくって記述することにする.また逆に,コマンドによってはオプションや引数を複数指定できるものもある.

以下に各コマンドを紹介する

manコマンド - コマンドのマニュアル

各コマンドの詳細を説明してくれるコマンドである.

manコマンド
機能 コマンドのマニュアルをを画面に表示
書式 man [-k] name
オプション
-k コマンド名ではなく,キーワードを指定する.
引数 引数にコマンド名(キーワード)を指定するとそのコマンドの説 明が表示される.
  • manコマンドの表示は,moreコマンドによって内容が表示されているため,操作方法はmoreコマンドの箇所を参考にせよ.
  • manコマンドで表示される各コマンドの説明の最後に,関係するコマンドが紹介されている(See Alsoの部分)

lsコマンド - ファイル名のリスト

lsコマンドでディレクトリの下にあるファイルを調べることができる.

lsコマンド
機能 ファイルに関する情報リスト
書式 ls [ -adFlg ] [file ...]
オプション
-a .で始まるファイルについても表示する
-d ファイル名を指定する引数にディレクトリ名を指定した場合,そのディレクトリの下にあるファイルではなく,そのディレクトリ自身についての情報を表示する.
-F ディレクトリには名前の後に / を,実行可能ファイルには * をつけて表示する.
-l ファイルの作成日時など,ファイルについての詳しい情報を表示する.
-g ファイル属性のグループについても表示する.
引数あり ディレクトリが指定された場合にはそのディレクトリの下にあるファイルについて,レギュラーファイルが指定された場合にはそのファイルについてのみ表示する(ここでいう引数とは上記[file ...]のファイル名のことである).
引数なし カレントディレクトリの下にあるファイルについて表示する.

ls -Fのように-Fのオプションをつけると,ファイルの種類を表現する文字がファイル名の後につく.次の例ではファイル名の後に / がついているのはディレクトリ(sasuser/, F77/など )であり,それ以外がファイルである.また,-laをつけると詳細なファイル情報(後述)も示してくれる.

  • 使用例1
  •   % ls 
  • 実行結果例1
  •   F77      local.cshrc  pc       sasuser      www
  • 使用例2
  •   % ls -F
  • 実行結果例2
  • F77/      local.cshrc  pc/       sasuser/     www/
  • 使用例3
  • % ls -la
  • 実行結果例3
  • total 646
      drwxr-xr-x  13 samp     ms       1024 Apr  1 19:22 .
      drwxr-xr-x  47 root     root     1024 Mar 17 19:19 ..
      -rwxrwxr-x   1 samp     ms       5881 Apr  1 18:13 .Xauthority
      -rw-r--r--   1 samp     ms        164 Apr  1 16:13 .alias

 ls -la によってファイルについての詳しい情報(属性)が表示される.その内容は次のようなものである.

d 2 rwxr-xr-x samp ms 512 Oct 28 13:45 temp
ファイルの型 リンク数 保護モード 所有者名 グループ サイズ 最終更新日付 ファイル名

ファイルの型 ファイルかディレクトリかの区別
-: レギュラーファイル
d: ディレクトリ
所有者名 所有者の名前(通常はユーザ名)
サイズ ファイルのサイズ(byte単位で示されるファイルの大きさ)
最終更新日時 ファイルを作成あるいは変更した日時
ファイル名 ファイルの名前
保護モード ユーザからのアクセスの制限/許可を表現

ユーザからのファイルへのアクセスは,保護モードにしたがって許可や制限が行われる.保護モードについてはファイルとディレクトリの管理を参考にすること.

catコマンドとmoreコマンド - ファイル内容の表示

catコマンドまたは moreコマンドによりファイルの内容を表示させることができる.catコマンドはファイルを読み込んで画面に出力する.ファイルの内容が多い場合にはス クロールして画面上方に表示が流れてしまう.moreコマンドは画面1ページ分ずつ出力し,表示が画面上方 に流れてゆくのを止めてくれる.

  • 使用例
  •   % cat hello.c
    
      % more hello.c
    

catコマンドとmoreコマンドのオプションは次のようなものである.

catコマンド
機能 ファイルの内容を画面に表示
書式 cat [-n] [file ...]
オプション
-n 行番号をつけて表示する.
引数 引数にファイル名を指定するとそのファイルの内容が表示される.
複数のファイルを指定することもできる.

more コマンド
機能 1画面づつファイルの内容を画面に表示
書式 more [file ...]
オプション
引数 ファイル名を指定する

 catコマンドと異なり,moreコマンドは1画面の表示でいったん止まり,次に入力する操作で次ページや前ページを表示,または終了することができる.画面の最下行には全体の何パーセントを表示したかが示されている.操作は次の通り.

スペース 1画面分スクロールアップする(次のページの表示)
Enter 1行スクロールアップする
b 1画面スクロールダウンする(前のページの表示)
q moreを終了する
/文字列 指定した文字列を検索し,その文字列が3行目にくるようにス クロールアップする

cpコマンド - ファイルのコピー

 cpコマンドは内容が同じでファイル名が違う別のファイルを作成する(コピー,複製する).

cp コマンド
機能 ファイルのコピー
書式 cp [-i] file1 file2 − 第1の形式
cp [-i] file1 ... dir − 第2の形式
cp -r dir1 dir2 − 第3の形式
オプション
-i すでに同名のファイルが存在する場合に,上書きしてよいか確認を求める.yと答えると処理を行い,それ以外の場合は処理しない.
-r ディレクトリごとコピーする場合に指定する.
  • 第1の形式: file1 が file2 へコピー
  • 第2の形式: 1個または複数のファイルが,同じファイル名のままディレクトリ名 dir の下にコピー
  • 第3の形式: dir1 をディレクトリごと dir2 にコピー. (dir1の下にあるレギュラーファイルすべてを dir2 の下にコピー)
    もし dir2 が存在しない場合は新規にdir2 が作成される.

 同じファイル名が存在する場合,オプション(-i)で断らない限り上書きするので注意すること.

mvコマンド - ファイル名の変更,ファイルの移動

ファイル名の変更は mv コマンドで行なう.ファイル名の指示はファイルの位置をも示しているので,ファイル名の指示を変更す ることによってファイルのありかを移動することもできる.

mv コマンド
機能 ファイル名の変更・ファイルの移動
書式 mv [-if] file1 file2 − 第1の形式
mv [-if] file1 ... dir − 第2の形式
mv dir1 dir2 − 第3の形式
オプション
-i すでに同名のファイルが存在する場合に,上書きしてよいか確認を求める.yと答えると処理を行い,それ以外の場合は処理しない.
-f 確認をすることなく処理を行う.
     
  • 第1の形式: file1 が file2 という名前に変更.file2 が既に存在する場合には上書
  • 第2の形式: 1個または複数のファイルを dir という名のディレクトリ下に移動.
  • 第3の形式:ディレクトリ dir1 が dir2 という名前に変更.あるいはパス名を含むディレクトリ名が dir2 に指定された場合はディレクトリのツリー構造上での移動

rmコマンド - ファイルの消去

rm はファイルを消去するコマンドである.この rm コマンドで消去されたファイルは復旧できないので注意すること.rm コマンドは内容を消去するのではなく,ファイルそのものの存在をなくしてしまう.

rm コマンド
機能 ファイルの消去
書式 rm [-ifr] file ...
オプション
-i ファイルを消去してよいか確認を求める.yと答えると処理を行い,それ以外の場合は処理しない.
-f 確認をすることなく処理を行う.
-r このオプションに続けて引数(file)にディレクトリ名を指定すると,そのディレクトリ下のすべてのファイルやディレクトリを含めて消去する.

実行する(コマンド入力後Enterキーを押す)とすぐに処理を行ってしまうので気をつけること.

chmodコマンド - ファイルの属性変更

アクセスの制限はファイルまたはディレクトリの保護モードを変更することによって行う.保護モードの変更はchmodコマンドによって行う.

chmodコマンド
機能 ファイルの保護モードの変更
書式 chmod mode file
オプション
mode 変更の保護モードを指定する.
file ファイルを指定する.

modeによってそのファイルの保護モードを指定する.modeは次のような形式になっている.

対象者  オペレータ  許可条件

下記に示す記号を用いて対象者を指定し,その対象者への許可条件を示す記号をオペレータ(演算子)記号で設定する.

対象者 u 所有者 g グループ
o その他のユーザ a すべてのユーザ
許可条件 r 読み出し w 書き込み x 実行
オペレータ + 追加 - 削除 = 設定

 次に指定の例をあげる.

chmod a+r file1
すべてのユーザ(a)に読み出し許可(r)を追加(+)する
chmod ug-x file2
所有者(u)とグループ(g)の実行(x)の許可を削除(-)する
chmod o-wx file3
その他のユーザ(o)の書き込み(w)と実行(x)の許可を削除(-)す る

cdコマンドとpwdコマンド - カレントディレクトリの移動と確認

UNIXでは,ユーザはログインしている間,ファイルシステム中のどこかをアクセスしているものとして扱われる.そのアクセスしているディレクトリ のことをカレントディレクトリと呼ぶ. ログインした直後のカレントディレクトリはホームディレクトリである.特に制限されなければ,別のディレクトリにカレントディレクトリを移動することがで きる.( ※再度ファイルとディレクトリの管理を参考にすること.)

カレントディレクトリを移動しておけば,相対パス名としてファイル名だけ(./ を省略できるので)で目的のファイルを指定することができる.作業の関係上,よく使用するファイルが存在するディレクトリをカレントディレクトリとしてお けば,効率的に作業を進めることができる.

cdコマンドで,カレントディレクトリを移動する

cd コマンド
機能 ディレクトリの移動
書式 cd dir
オプション
引数 引数(dir)にはディレクトリ名を指定する.
引数なし 引数(dir)が省略されたときにはホームディレクトリに戻る.
     
  • 他のユーザのホームディレクトリは「~ユーザ名」で指定できる.

pwdコマンドで,カレントディレクトリを確認する.

pwd コマンド
機能 カレントディレクトリの表示
書式 pwd
オプション
引数 なし

cdコマンドの実行例を以下に示す(ユーザがsampの場合の例).

  • cdコマンドとpwdコマンドを連続して使用した例とその一連の実行結果
% pwd                 ←カレントディレクトリの表示
/home/samp
% cd /bin             ←絶対パス名によりbinディレクトリに移動
% pwd
/bin
% cd                  ←引数のディレクトリ名の省略
% pwd
/home/samp            ←自分のホームディレクトリを示している
% cd ../msadmin       ←相対パス名でmsadminディレクトリに移動
% pwd
/home/msadmin
% cd
% cd temp             ←相対パス名によりtempディレクトリに移動
% pwd
/home/samp/temp

mkdirコマンドとrmdirコマンド - ディレクトリの作成と削除

ファイルの種類や用途ごとにディレクトリを用意して,自分のファイルを整理できる.mkdir コマンドでディレクトリを作り,mv,cp,rmdirコマンドでファイルを移動したり消去したりして利用する.

mkdirコマンド
機能 ディレクトリの作成
書式 mkdir dir
オプション
引数 引数 dir ディレクトリの名前を指定する.同名のファイルやディレクトリが存在していると作成できない.

  rmdirコマンドは空のディレクトリ(該当するディレクトリ下 にディレクトリ及びレギュラーファイルが存在しない)以外は消去 することができない.ディレクトリをその下に存在するファイルご とに全部消すには,まず rmコマンドでファイルをすべて消した後,rmdirコマンドを実行する必要がある.

rmコマンドの-rオプションならばディレクトリをその下に存在するファイルを含めて消去できる.rmコマンドの別のオプションである -i,-fも-rとともに使うことができる.

rmdir コマンド
機能 ディレクトリの消去
書式 rmdir dir
オプション
引数 引数dirにディレクトリの名前を指定する.

rmdirとmkdirを使用した一連の例と実行結果を示す,

  • 使用例
% mkdir doc       ←「doc」という名前のディレクトリを作成
% ls -dF          ←作成できたかどうか確認のためリストを表示してみる
doc/     work/    ←ちゃんと表示された
% rmdir doc       ←docディレクトリの消去
% ls doc          ←もう一度確認してみる
doc not found     ←消去されたので見つからない
% rmdir work      ←workディレクトリの消去
rmdir: work: Directory not empty ←ディレクトリ内がからではなく消去できない
% rm -r work      ←workディレクトリの内部のファイルごと消去
% ls work         ←再度確認
work not found    ←workディレクトリは消滅した

duコマンドとdfコマンド - ファイル容量・ディスク容量の確認

duコマンドは,あるディレクトリの中に存在するファイルサイズの合計を計算して表示するコマンドである.複数の人と共有するUNIXマシンの場合,あまり自分だけがファイル容量を使用すると迷惑となるので,このコマンドで確認し,日頃から注意すること.

du コマンド
機能 ディレクトリ内のファイルサイズ合計の確認
書式 du [-k] [dir]
オプション
-k 結果をキロバイト単位で表示する.指定しないと512バイト単位での表示になる.
引数 引数dirにディレクトリの名前を指定する.省略するとカレントディレクトリが指定されたものと見なされる.

dfコマンドは,ディスク全体の使用状況を表示する.

df コマンド
機能 使用されたディスク容量の確認
書式 df
オプション
引数 なし

setコマンド - 環境変数の表示

UNIXのシェルには,環境変数と呼ばれる記憶領域が用意されている.環境変数はシェルの動作の制御などの目的に使用され,例えば現在シェルを起動しているユーザ名や,マシン名などを記憶している.

setコマンドでは,この環境変数の一覧を表示できる

set コマンド
機能 環境変数のセットと表示
書式 set
オプション
引数 なし
  • setコマンドで確認できる環境変数の一覧からPATHに含まれているディレクトリにコマンドが置かれている. そのほかのコマンドそのディレクトリ内を探せば見つけることができる.

echoコマンド - 変数やメッセージの表示

echoコマンドは,標準出力(通常は画面)にメッセージを表示することができる

echo コマンド
機能 変数や文字列の表示
書式 echo 対象
オプション
引数 "文字列"とすれば文字列を表示する
$name とすれば「name」と名前の付いた環境変数の値を表示する

メタキャラクタ機能

シェルのコマンド行において,ファイル名を生成し指定するためにメタキャラクタを使える.メタキャラクタとは,キャラクタを作るキャラクタという意 味で,パターン対応させることによって対応するファイル名を指定するものである.シェルはコマンド行を解釈する段階で,メタキャラ クタを対応する文字や文字列に置き換える.

メタキャラクタには次のようなものがある.

  • ? : アスキー文字の任意の1文字
  • * : アスキー文字の任意の文字列
  • []: 文字クラス,[ ]で囲まれた文字の中の1文字.[ ]の先頭に ^がある場合には,その中の文字以外のものを表す.
  • {文字列1,文字列2,...}: { , }でくくられている文字列のどれか1 つ

メタキャラクタを使用例を次に示す

% cd /bin
% ls ???
adb  awk  cat  csh  eqn  jsh  ldd  pwd  rsh  sum  tbl  tip
 (略)
% ls d*
daps        devattr     diff3       dispgid     dos2unix
 (略)
% ls [lm]*
last        lnttys      lp          mailx       mconnect    more
 (略)
            

リダイレクション機能

標準入力と標準出力

UNIXのコマンドでは入力は入力端末(キーボード)から行い,出力は 出力端末(画面,ウィンドウ)に行うものが多い.これらを標準入力と標準出力と呼ぶ.

同じような操作を行う時に,コマンド入力を毎回端末から入力したり,実行結果が画面出力では,その結果を手などで書き写さなければならなくなり面倒 である.そこで,ファイルに書き込んだテキストをコマンドの入力としたり,コマンドの出力をファイルに格納する機能が用意されている.UNIX(シェル) では,これを入出力の切り替え(リダイレクション,redirection)の機能をと呼ぶ.

入力をファイルから行う

コマンドに対する入力を,端末から行う代わりに,あらかじめ用意しておいたファイルから行うには次のようにする.

% command < file

標 準入力の切り替えは,「<」で行う.これで,コマンド(この例ではcommand)に対する入力をファイル(この例ではfileという名のファイ ル)から行うことになる.実行しようとするコマンドが入力を入力端末(キーボード)から要求する種類のものでなければ意味がない.

出力をファイルに格納する

コマンドからの出力をファイルに格納するには,次のようにする.

% command > file

標準出力の切り替えは,「>」で行う.これにより,コマンド(この例ではcommand)の実行結果が出力端末(画面,ウィンドウ)に表示さ れる代わりに指定のファイル(この例ではfileという名のファイル)に格納される.fileという名のファイルを見ることによって,後でゆっくりと,何 度でもファイルの内容を確認することができる.

fileに既存のファイル名を指定した場合には,元の内容が失われる(上書きされる)ので注意すること.既存のファイルへ追記するためには次のようにする

% command >> file

ファイルシステム

コマンドにおけるファイル指定については,ファイルとディレクトリの管理(ファ イルシステム)を参照のこと。

シェルスクリプト

コマンドをキーボードからその都度入力することを,「対話的な操作」と呼ぶ.これに対して実行したいコマンドをあらかじめ順番にならべたファイルを 用意しておき,自動的に連続して実行させることも可能である.このような操作を「バッチ処理」と呼ぶ.Unix系OSではこのバッチ処理を行うためにシェ ルスクリプトを記述できるようになっている.シェルスクリプトを参考にすること