\documentstyle[epsf,ascmac,alltt,fancybox]{jarticle}
\title{コマンド}
\date{}
\author{}
\newcommand{\dg}{\gt}
\newcommand{\dm}{\min}
\setlength{\topmargin}{-12mm}
\setlength{\textheight}{24.5truecm}
\setlength{\textwidth}{17truecm}
\setlength{\oddsidemargin}{-8.5mm}
\setlength{\evensidemargin}{-8.5mm}
\newcommand{\丸数字}[1]
{{\ooalign{\hfill$\scriptstyle#1$\hfill\crcr$\bigcirc$}}}
\newcommand{\CR}{\ovalbox{\ooalign{\hfill\(\scriptstyle\hookleftarrow\)\hfill\crcr}}}
\begin{document}
\maketitle
コンピュータに情報を処理させるためには，命令をする必要がある．
最近では，複数のウインドウを開いてその様子をビジュアルに表現
するため，いろいろな命令の仕方が考えられるが，その最も
基本的な方法が，{\dg\bf ターミナルウインドウ}(terminal window)
({\tt kterm} など)より，{\dg\bf プロンプト}(prompt) に対して，
簡単な英語で命令をする方法である．
この簡単な英語を {\dg\bf コマンド}(command) という．
\begin{itembox}[l]{{\tt ls} コマンド}
\begin{alltt}
prompt\% \underline{ls}\CR
GNUstep/         Xrootenv.0       nsmail/
Mail/            embed_pcf.ps.gz  seminar/
\end{alltt}
\end{itembox}
プロンプトとは，{\tt prompt\%} を示し，
「入力を促す」という意味があり，もともと「促す」という英語である．
この {\tt ls} コマンドは，「カレントディレクトリのファイルまたは，
ディレクトリの一覧を表示する」コマンドで，UNIX の基本的なコマンド
の一つである．コマンドは，通常アルファベットの小文字で
表現される．

コマンドは次の形式になっている．
\begin{center}
{\tt\dg \underline{コマンド}~~<引数1>~~\(\cdots\)~~<引数N>}
\end{center}
引数には，
\begin{itemize}
\item オプション
\item ファイル名
\item その他の文字列
\end{itemize}
などがある．ほとんどのコマンドのオプション指定には通常 {\tt -} を使う
\footnote{{\tt ps} コマンドや {\tt tar} コマンドなど {\tt -} 
を使わないオプション指定をするコマンドもある．}．
そして，
コマンドと各引数の間は空白あるいはタブで区切らなければならない
(コマンドによって引数の数は異なる)．また，1 文字オプション
を複数個指定する場合には {\tt -} が省略できる．ただし，コマンドや引数など
に使う英字は大文字と小文字を区別する．

\section{オンラインマニュアルの使い方}
オンラインマニュアルを参照するためのコマンドは {\tt man} である．
\begin{itembox}[l]{{\tt man} コマンド}
\begin{alltt}
prompt\% \underline{man man}\CR
Formatting page, please wait...
\(<省略>\)
\end{alltt}
\end{itembox}
と入力すると {\tt man} コマンド自身についてのマニュアルを表示する．
例えば，{\tt ls} コマンドについて知りたければ，以下のようにする．
\begin{itembox}[l]{{\tt ls} コマンドのマニュアル表示}
\begin{alltt}
prompt\% \underline{man ls}\CR
\(<省略>\)
\end{alltt}
\end{itembox}
マニュアルの表示が 1 ページ以上になると，後述する {\tt more} コマンドや，
{\tt less} コマンドでページが制御されるので，スペースキーを押せば，
次に進めることができる．

通常，マニュアルは英語で読むが慣れない人のために，日本語でのマニュアルも
用意されている．{\tt jman} コマンドを使えばよい．
\begin{itembox}[l]{{\tt ls} コマンドのマニュアル表示}
\begin{alltt}
prompt\% \underline{jman ls}\CR
\(<省略>\)
\end{alltt}
\end{itembox}

\section{{\tt pwd}(ディレクトリの表示，Print Working Directory)}
ファイルを用途や分野別にまとめて保管するためにディレクトリを使う．
ユーザが現在作業しているディレクトリを
{\dg\bf カレントワーキングディレクトリ}\index{かれんとわーきんぐでぃれ
くとり@カレントワーキングディレクトリ}
(current working directory)\index{current working directory} という．
カレントワーキングディレクトリを知るには {\tt pwd} コマンドを使う．
\begin{itembox}[l]{{\tt pwd} コマンド}
\begin{alltt}
prompt\% \underline{pwd}\CR
/home/00pp999
\end{alltt}
\end{itembox}
この例では，ホームディレクトリがカレントワーキングディレクトリとなっているが，
カレントワーキングディレクトリ(以下，カレントディレクトリという) は，
次の {\tt cd} コマンドで移動することができる．

\section{{\tt cd}(ディレクトリの移動，Change Directory)}
{\tt cd} コマンドでカレントディレクトリを移動することができる．
ディレクトリの指定を行わないときは {\dg\bf ホームディレクトリ}
\index{ほーむでぃれくとり@ホームディレクトリ}(home directory)
\index{home directory}がカレントディレクトリになる．
\begin{itembox}[l]{{\tt cd} コマンド}
\begin{alltt}
prompt\% \underline{cd /}\CR\ \ \ \ \ \(\leftarrow\) ルートディレクトリへ移動
prompt\% \underline{pwd}\CR
/
prompt\% \underline{cd}\CR\ \ \ \ \ \ \(\leftarrow\) ホームディレクトリへ移動
pormpt\% \underline{pwd}\CR
/home/00pp999
prompt\% \underline{cd ..}\CR\ \ \ \ \ \(\leftarrow\) 親ディレクトリへ移動
prompt\% \underline{pwd}\CR
/home
prompt\% \underline{cd 00pp999}\CR\ \ \ \ \(\leftarrow\) 子ディレクトリへ移動
prompt\% \underline{pwd}\CR
/home/00pp999
\end{alltt}
\end{itembox}
{\tt ..} はカレントディレクトリの親ディレクトリを表し，
{\tt .} でカレントディレクトリそのものを表す．そのため
{\tt cd .} ではディレクトリの移動はない．

\section{{\tt ls}(ファイルやディレクトリの表示，LiSt)}
ディレクトリにあるファイルやディレクトリを知るには {\tt ls} コマンドを
使う．ディレクトリを指定しないときは，カレントディレクトリにある
ファイルまたは，ディレクトリを表示する．
\begin{itembox}[l]{{\tt ls} コマンド(1)}
\begin{alltt}
prompt\% \underline{ls}\CR\ \ \ \ \ \(\leftarrow\) オプションのない場合
GNUstep/         Xrootenv.0       nsmail/
Mail/            embed_pcf.ps.gz  seminar/
prompt\% \underline{ls /}\CR
bin/         etc/         lost+found/  root/        usr/
boot/        home/        mnt/         sbin/        var/
dev/         lib/         proc/        tmp/
prompt\% \underline{ls -a}\CR\ \ \ \ \ \(\leftarrow\) オプション{\tt a} 指定
./
../
.Tgif/
.WindowMaker-errors
.Xauthority
.Xdefaults
.alias
.bash_history
.bash_logout
.bash_profile
.bashrc
.canna
.cshrc
.emacs
.gnome/
.gnome-desktop/
.gnome_private/
.mc/
.mh_profile
.mh_profile.grb
.netscape/
.saves-1002-dhcp6239.it.nanzan-u.ac.jp\~{}
\(<略>\)
\end{alltt}
\end{itembox}

\begin{itembox}[l]{{\tt ls} コマンド(2)}
\begin{alltt}
prompt\% \underline{ls -l}\CR\ \ \ \ \ \(\leftarrow\) オプション l 指定
total 117
drwxrwxr-x   5 {\it name}    {\it group}      1024 Apr 10 14:52 GNUstep/
drwxr-xr-x  20 {\it name}    {\it group}      1024 May 12 17:10 Mail/
-rw-rw-r--   1 {\it name}    {\it group}       587 May 13 10:13 Xrootenv.0
-rw-rw-r--   1 {\it name}    {\it group}    113459 May  1 07:15 embed_pcf.ps.gz
drwx------   2 {\it name}    {\it group}      1024 Apr 10 15:40 nsmail/
drwxrwxr-x   5 {\it name}    {\it group}      1024 May 12 21:47 seminar/
\(<略>\)
\end{alltt}\end{itembox}

\begin{itemize}
\item {\tt l}オプション表示の意味 ***\newline
{\tt \begin{tabular}{lrlllrll}
許可情報 & リンク数 & 所有者 & グループ & サイズ & 日付 & 時間 & ファイル名\\
-rw-rw-r-- & 1 & {\it yourname} & {\it yourgroup} & 113459 & May 1 & 07:15 & enbed\_pcf.ps.gz
\end{tabular}}
\item 許可情報について\newline
{\tt ls -l} で表示されるファイルの許可情報は，大きく4 つのフィールドに分け
ることができる．最初のフィールド (1 文字) は，ファイルの種類を示し，
続く 3 つのフィールドは 3 文字ずつで，それぞれ所有者，グループ，
他人に対する許可情報を示している．
\end{itemize}

\begin{alltt}
   例)　　-rwxr-x--x
              ディレクトリ (-)  :   ファイル
              所有者 (rwx)      :   読み出し，書き込み，実行許可
              グループ (r-x)    :   読み出し，実行許可
              他人 (--x)        :   実行のみ許可
\end{alltt}

\begin{itembox}[l]{{\tt ls} コマンド(3)}
\begin{alltt}
prompt\% \underline{ls -a -l}\CR\ \ \ \ \ \(\leftarrow\) オプション a，l 指定
total 187
drwxr-xr-x  14 {\it name}    {\it group}      2048 May 13 10:42 ./
drwxr-xr-x   5 {\it name}    {\it group}      1024 Apr 10 14:49 ../
drwxr-xr-x   2 {\it name}    {\it group}      1024 May 12 22:23 .Tgif/
-rw-rw-r--   1 {\it name}    {\it group}         0 May 13 10:13 .WindowMaker-errors
-rw-------   1 {\it name}    {\it group}       311 May 13 10:13 .Xauthority
-rw-r--r--   1 {\it name}    {\it group}      1205 Mar 20 20:23 .Xdefaults
-rw-rw-r--   1 {\it name}    {\it group}        29 May  1 16:17 .alias
-rw-------   1 {\it name}    {\it group}      9262 May 13 10:13 .bash_history
-rw-r--r--   1 {\it name}    {\it group}        24 Mar 18 15:38 .bash_logout
-rw-r--r--   1 {\it name}    {\it group}       230 Mar 18 15:38 .bash_profile
-rw-r--r--   1 {\it name}    {\it group}       294 Apr 14 18:39 .bashrc
-rw-r--r--   1 {\it name}    {\it group}      5440 Mar 18 15:38 .canna
-rw-r--r--   1 {\it name}    {\it group}       754 Mar 20 22:28 .cshrc
-rw-r--r--   1 {\it name}    {\it group}     12104 May  1 13:47 .emacs
drwx------   3 {\it name}    {\it group}      1024 Apr 24 15:13 .gnome/
drwxrwxr-x   2 {\it name}    {\it group}      1024 Apr 24 15:00 .gnome-desktop/
drwx------   2 {\it name}    {\it group}      1024 Apr 24 15:00 .gnome_private/
drwxrwxr-x   2 {\it name}    {\it group}      1024 Apr 24 15:01 .mc/
-rw-r--r--   1 {\it name}    {\it group}       123 May  9 20:53 .mh_profile
-rw-r--r--   1 {\it name}    {\it group}       103 Apr 13 13:45 .mh_profile.grb
-rw-r--r--   1 {\it name}    {\it group}        96 Apr 13 11:17 .mh_profile.org
drwxr-xr-x   4 {\it name}    {\it group}      1024 May 13 11:16 .netscape/
-rw-rw-r--   1 {\it name}    {\it group}         0 May  2 15:26 .saves-1002-dhcp6239.it.n
\(<略>\)
\end{alltt}
\end{itembox}
上の例では，\verb:./:，\verb:../: や {\tt .Tgif} などの先頭に {\tt d} 
が付いている．これらは，ファイルではなくディレクトリであることを示して
いる．

各ファイルには，所有者と同時にグループ指定があり，
同一ファイルを複数の者で共有する場合などに指定する．
そこで，所有者と独立して，グループによる許可指定が可能となっている．

\section{{\tt cat}(ファイルの内容の表示とその他の機能，CATenate)}
ファイルの内容を表示させたいときは {\tt cat} コマンドを使う．
\begin{itembox}[l]{{\tt cat} コマンド}
\begin{alltt}
prompt\% \underline{cat .bashrc}\CR
# .bashrc

# User specific aliases and functions

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi
\(<略>\)
\end{alltt}\end{itembox}
{\tt cat} は本来，{\dg\bf 連結}(concatenate) \index{れんけつ@連結}
\index{concatenate} という意味であるが，上のように引数が
一つの時は，単にテキストファイルを表示する機能を果たす．ファイルの連結
を処理する方法は後述．

\section{{\tt echo} コマンド}
単に，文字列を表示するコマンドが {\tt echo} コマンドである．
このコマンドは，一見あまり有用でないように感じるかもしれないが，
後述する，シェルスクリプト(shell script) により，いくつかの
コマンドを組み合わせるときなどに有用である．
\begin{itembox}[l]{{\tt echo} コマンド}
\begin{alltt}
prompt\% \underline{echo this is testing script.}\CR
this is testing script.
\end{alltt}
\end{itembox}

\section{{\tt more} (1 画面分の表示) と {\tt less}}
{\tt more} は 1 画面分を越えるファイルを表示させるときに使う．
(使い方は {\tt cat} コマンドと同じ)．
\begin{itembox}[l]{{\tt more} コマンド}
\begin{alltt}
prompt\% \underline{more .Xrootenv.0}\CR
USERNAME=
CANNA_SERVER=localhost
XMODIFIERS=@im=kinput2
HISTSIZE=1000
CANNAHOST=localhost
HOSTNAME=localhost.localdomain
LOGNAME=yas
HISTFILESIZE=1000
MAIL=/var/spool/mail/yas
TERM=dumb
HOSTTYPE=i386
PATH=/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:
sr/bin/mh:/home/yas/bin
HOME=/home/yas
XFONTSIZE=normal
SHELL=/bin/bash
NEXINIT=set autodetect=jp+ fileencoding=euc-jp di
ing=euc-jp noskipdisplay
USER=yas
TK_KCPROTO=kinput2
LANGUAGE=ja
BASH_ENV=/home/yas/.bashrc
--More--(89%)
\end{alltt}
\end{itembox}
画面の左下に表示し終ったテキストが何 \% であるかを
{\tt --More--(\(??\)\%)} で表示する．
{\tt --More--(\(??\)\%)} が表示された状態で {\tt h} を押すと
{\tt more} についてのヘルプメッセージを表示する．

{\tt more} コマンドと同様に，{\tt less} コマンドがある．
その名は，{\tt more} を皮肉って，つけられた名前であるが，
機能はこちらの方が高い．起動は {\tt more} コマンドと同じである．

\begin{itembox}[l]{{\tt less} コマンド}
\begin{alltt}
prompt\% \underline{less Xrootenv.0}\CR
USERNAME=
CANNA_SERVER=localhost
XMODIFIERS=@im=kinput2
HISTSIZE=1000
CANNAHOST=localhost
HOSTNAME=localhost.localdomain
LOGNAME=yas
HISTFILESIZE=1000
MAIL=/var/spool/mail/yas
TERM=dumb
HOSTTYPE=i386
PATH=/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:
sr/bin/mh:/home/yas/bin
HOME=/home/yas
XFONTSIZE=normal
SHELL=/bin/bash
NEXINIT=set autodetect=jp+ fileencoding=euc-jp di
ing=euc-jp noskipdisplay
USER=yas
TK_KCPROTO=kinput2
LANGUAGE=ja
BASH_ENV=/home/yas/.bashrc
/home/00pp999/Xrootenv.0
\end{alltt}
\end{itembox}
この画面で，{\tt j} キー，{\tt h} キーを押すことにより，テキストを上下
することができる．{\tt h} キーを押すことによりヘルプが表示されるので
参考にするとよい．

\section{{\tt head} コマンド，{\tt tail} コマンド}
ファイルの最初の部分と，最後の部分を表示するコマンドが，
各々 {\tt head}，{\tt tail} コマンドである．

\begin{itembox}[l]{{\tt head} コマンド}
\begin{alltt}
prompt\% \underline{head Xrootenv.0}\CR
USERNAME=
CANNA_SERVER=localhost
XMODIFIERS=@im=kinput2
HISTSIZE=1000
CANNAHOST=localhost
HOSTNAME=dhcp6239.it.nanzan-u.ac.jp
LOGNAME=yas
HISTFILESIZE=1000
MAIL=/var/spool/mail/yas
TERM=dumb
\end{alltt}
\end{itembox}
このように {\tt head} コマンドより最初の 10 行を表示する．
逆に，{\tt tail} コマンドにより最後の 10 行を表示する．

この行数は，オプションにより変えることができる．
\begin{itembox}[l]{{\tt tail} コマンド}
\begin{alltt}
prompt\% \underline{tail -5 Xrootenv.0}\CR
DISPLAY=:0
LANG=ja_JP.ujis
OSTYPE=Linux
SHLVL=1
_=/usr/bin/env
\end{alltt}
\end{itembox}
{\tt -5} のように，ハイフン({\tt -}) に続いて数字 (行数) を
指定すればよい．
{\tt head} コマンドも同様に指定することができる．

\section{{\tt cp}(ファイルのコピー，CoPy)}
ファイルをコピーするときは {\tt cp} コマンドを使う．
\begin{itembox}[l]{{\tt cp} コマンド}
\begin{alltt}
prompt\% \underline{mule -nw test.txt}\CR
prompt\% \underline{ls test*}\CR
test.txt
prompt\% \underline{cp test.txt test1.txt}\CR
prompt\% \underline{ls test*}\CR
test.txt   test1.txt
\end{alltt}\end{itembox}
{\tt cp test.txt test1.txt} により {\tt test.txt} が {\tt test1.txt}
に複製された．{\tt ls} コマンドで {\tt *}(アスタリスク，星印，asterisk)
を使っているのは，{\tt test} で始まるファイル名のファイルを表示するためで
ある．

\section{{\tt mv}(ファイル名の変更，MoVe)}
ファイル名を変更するときには {\tt mv} コマンドを使う．
\begin{itembox}[l]{{\tt mv} コマンド}
\begin{alltt}
prompt\% \underline{mv test.txt backup.txt}\CR
prompt\% \underline{ls test*}\CR
test1.txt
prompt\% \underline{ls backup.txt}\CR
backup.txt
prompt\% \underline{mv backup.txt test.txt}\CR
prompt\% \underline{ls backup.txt}\CR
ls: backup.txt: No such file or directory
\end{alltt}\end{itembox}
{\tt mv} コマンドは，複製ではなく，もとのファイルが消去されていることに
注意しよう．そのため，ファイル名の変更に使う．

\section{{\tt rm}(ファイルの削除，ReMove)}
ファイルを削除するときは {\tt rm} コマンドを使う．
\begin{itembox}[l]{{\tt rm} コマンド}
\begin{alltt}
prompt\% \underline{ls test*}\CR
test.txt   test1.txt
prompt\% \underline{rm test1.txt}\CR
rm: `test1.txt'を削除してもよろしいですか(yes/no)? y
prompt\% \underline{ls test*}\CR
test.txt
prompt\% \underline{ls test1.txt}\CR
ls: test1.txt: No such file or directory
\end{alltt}\end{itembox}

\section{{\tt chmod} (ファイルのモード変更，CHange MODe)}
{\tt ls} コマンドの説明で各ファイルには，読み/書き/実行許可の属性が
つけられていることを説明した．また，各ファイルには所有者と同時に，
グループ属性がつけられていることも説明した．
\begin{center}
{\tt \begin{tabular}{lrllrlll}
許可情報 & リンク数 & 所有者 & グループ & サイズ & 日付 & 時間 & ファイル名\\
-rw-rw-r-- & 1 & {\it yourname} & {\it yourgroup} & 7 & May 13 & 13:08 & test.txt
\end{tabular}}\end{center}
{\tt chmod} コマンドは，この属性を変更する．その指定は 2 
通りある．一つは 3 桁の 8 進数で指定する方法と，アルファベットで指定す
る方法である．前者は，属性 {\tt -rw-r--r--} の最初の一桁を除いた 9 桁
を，ビットに対応指せた値 (この例では，{\tt 644}) というように，各属性と
して 3 桁の 8 進数で表す．従って，グループの書き込み許可を与えるのであ
れば，
\begin{itembox}[l]{{\tt chmod} コマンド(1)}
\begin{alltt}
prompt\% \underline{ls -l test.txt}\CR
-rw-rw-r--   1 {\it name}    {\it group}         7 May 13 13:08 test.txt
prompt\% \underline{chmod 0664 test.txt}\CR
prompt\% \underline{ls -l test.txt}\CR
-rw-r--r--   1 {\it name}    {\it group}         7 May 13 13:08 test.txt
\end{alltt}\end{itembox}
とすればよい．後者は，所有者({\tt u})，グループ({\tt g})，他人({\tt o})
と，アルファベットで指定し，読み({\tt r})，書き({\tt w})，
実行({\tt x})を，追加({\tt +})，削除({\tt -}) 演算子と組み合わせて指定
する．例えば，同様に，グループの書き込み許可を与えるのであれば，
\begin{itembox}[l]{{\tt chmod} コマンド(2)}
\begin{alltt}
prompt\% \underline{chmod g+w test.txt}\CR
prompt\% \underline{ls -l test.txt}\CR
-rw-rw-r--   1 {\it name}    {\it group}         7 May 13 13:09 test.txt
\end{alltt}\end{itembox}
とすればよい．この {\tt chmod} コマンドは，ファイルの所有者しか実行できない
(正確には，{\tt root}(特権ユーザ) も実行可能である) ので注意しよう．

\section{{\tt file}(ファイル属性の表示)}
バイナリファイルは {\tt cat} や {\tt more} では表示できない．それら
のファイルの属性が知りたいときには {\tt file} コマンドを使う．
\begin{itembox}[l]{{\tt file} コマンド}
\begin{alltt}
prompt\% \underline{file test.txt}\CR
test.txt: International language text
prompt\% \underline{file /bin/ls}\CR
/bin/ls: ELF 32-bit LSB executable, Intel 80386, version 1, dynamically linked, stripped
\end{alltt}\end{itembox}
ファイル {\tt /bin/ls} のファイル属性として表示された
{\tt ELF 32-bit LSB executable ...} は，バイナリファイルで
あることを示す．

\section{{\tt mkdir}(ディレクトリの作成，MaKe DIRectory)}
新たにディレクトリを作るには {\tt mkdir} コマンドを使う．
\begin{itembox}[l]{{\tt mkdir} コマンド}
\begin{alltt}
prompt\% \underline{mkdir test}\CR
prompt\% \underline{ls test*}\CR
test.txt

test:
\end{alltt}\end{itembox}
上段の {\tt test.txt} は，先ほど生成したファイルを示し，{\tt test:}
が今作成した {\tt test} ディレクトリである．

\section{{\tt rmdir}(ディレクトリの消去，ReMove DIRectory)}
ディレクトリを消すには {\tt rmdir} コマンドを使う．ただし，消した
いディレクトリの下にファイルまたは，ディレクトリが残っていると，
そのディレクトリは消すことはできない．
\begin{itembox}[l]{{\tt rmdir} コマンド}
\begin{alltt}
prompt\% \underline{rmdir test}\CR
prompt\% \underline{ls test*}\CR
test.txt
prompt\% \underline{mkdir test}\CR
prompt\% \underline{cd test}\CR
prompt\% \underline{mule foo.txt}\CR\ \ \ \ \(\leftarrow\) {\tt foo.txt} ファイルを生成
prompt\% \underline{cd ..}\CR
prompt\% \underline{ls test*}\CR
prompt\% \underline{rmdir test}\CR
rmdir: test: Directory not empty
prompt\% \underline{rm test/foo.txt}\CR
rm: `test/foo.txt'を削除してもよろしいですか(yes/no)? y
prompt\% \underline{ls test*}\CR
test.txt

test:
prompt\% \underline{rmdir test}\CR
prompt\% \underline{ls test*}\CR
test.txt
\end{alltt}\end{itembox}

\section{{\tt which} コマンド}
コマンドは，通常ファイルとして，ファイルシステムのどこかに存在している
\footnote{コマンド自身は，C 言語というプログラミングや，他のプログラミング
言語で書かれているのでその実行形式として，ファイルシステムの
どこかに存在している．}
その場所(どのディレクトリにあるか)を調べるのが {\tt which} コマンドである．
\begin{itembox}[l]{{\tt more} コマンドの場所}
\begin{alltt}
prompt\% \underline{which more}\CR
/bin/more
\end{alltt}
\end{itembox}
これにより，{\tt more} コマンドは {\tt /bin/more}，つまり，
ルートディレクトリ ({\tt /}) の下，{\tt bin} ディレクトリ ({\tt /bin}) の下
にあることがわかる．

{\tt chmod} コマンドも，同じディレクトリにある．
\begin{itembox}[l]{{\tt chmod} コマンドの場所}
\begin{alltt}
prompt\% \underline{which chmod}\CR
/bin/chmod
\end{alltt}
\end{itembox}

\section{{\tt type} コマンド}
{\tt which} コマンドでは，コマンドの場所が表示されない場合がある．
これは，別のコマンドを駆使して新たなコマンドを作っている場合や，
名前自身を変更した場合 (エイリアス処理(alias)) である．
\begin{itembox}[l]{{\tt which} でわからない場合}
\begin{alltt}
prompt\% \underline{which ls}\CR
prompt\% \underline{which which}\CR
\end{alltt}
\end{itembox}

そのようなときは，{\tt type} コマンドで知ることができる．
\begin{itembox}[l]{{\tt type} コマンド(1)}
\begin{alltt}
prompt\% \underline{type ls}\CR
ls is aliased to `ls -F'
prompt\% \underline{type which}\CR
which is aliased to `type -path'
\end{alltt}
\end{itembox}
ここでわかることは，{\tt ls} コマンドは，実は {\tt ls -F} 
を処理していることになり，{\tt which} コマンド自身は，
実は {\tt type -path} コマンドで処理されていることがわかる．

実際，{\tt which} と，{\tt type -path} では同じ処理となる．
\begin{itembox}[l]{{\tt which} コマンドと {\tt type} コマンド}
\begin{alltt}
prompt\% \underline{which more}\CR
/bin/more
prompt\% \underline{type -path more}\CR
/bin/more
prompt\% \underline{which ls}\CR
prompt\% \underline{type -path ls}\CR
\end{alltt}
\end{itembox}

{\tt type -type} によりコマンドの種類を調べることができる．
\begin{itembox}[l]{{\tt type -type} コマンド}
\begin{alltt}
prompt\% \underline{type -type more}\CR
file
prompt\% \underline{type -type ls}\CR
alias
prompt\% \underline{type -type which}\CR
alias
\end{alltt}
\end{itembox}

この他，{\tt type} コマンドは以下のオプションを使うことができる．
\begin{center}\begin{tabular}{c|l}
\hline
{\tt type} & 別名(alias) を調べる．\\
\hline
{\tt type -path} & コマンドの場所を調べる．{\tt which} コマンド． \\
\hline
{\tt type -type} & コマンドの種類を調べる．別名(alias)，ファイル(file) など \\
\hline
{\tt type -all} & 全ての情報を表示する．\\
\hline
{\tt type -help} & ヘルプを表示する．\\
\hline
\end{tabular}\end{center}

{\tt type -all} コマンドにより，上の情報を一度に表示することができる．

\section{{\tt pushd} コマンド，{\tt popd} コマンド}
ディレクトリを移動した後に，元にいたディレクトリに戻りたい，または，
その繰り返し(行ったり来たり)をしたいときがある．
そのようなときは，{\tt pushd} コマンド，{\tt popd} コマンドを多用
すればよい．

{\tt cd} コマンドの代わりに，{\tt pushd} コマンドを使って
ディレクトリを移動する．
\begin{itembox}[l]{{\tt pushd} コマンド}
\begin{alltt}
prompt\% \underline{pwd}\CR
/home/00pp999
prompt\% \underline{pushd /tmp}\CR\ \ \ \ \ \ \(\leftarrow\) /tmp ディレクトリへ移動 
/tmp \~
prompt\% \underline{pwd}\CR
/tmp
prompt\% \underline{pushd /etc}\CR\ \ \ \ \ \(\leftarrow\) /etc ディレクトリへ移動
/etc /tmp \~
prompt\% \underline{pwd}\CR
/etc
prompt\% \underline{dirs}\CR\ \ \ \ \ \ \(\leftarrow\) ディレクトリ情報
/etc /tmp \~
prompt\% \underline{popd}\CR\ \ \ \ \ \ \(\leftarrow\) ディレクトリを一つ戻る
/tmp \~
prompt\% \underline{pwd}\CR
/tmp
prompt\% \underline{popd}\CR
\~
prompt\% \underline{pwd}\CR\ \ \ \ \ \ \(\leftarrow\) 元のディレクトリに戻る
\~
\end{alltt}
\end{itembox}
{\tt pushd} コマンドを実行するたびに，カレントディレクトリが記憶されていく．
そのディレクトリをみるためには，{\tt dirs} コマンドで確かめることができる．
{\tt popd} コマンドにより，記憶されたディレクトリを一つづつ戻ることができる．

\end{document}
