cd (UNIX)

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動先: 案内検索

cd(シーディー、change directory)は、シェル等の(プロセスの)現在のワーキングディレクトリ(カレントディレクトリ)を変更するコマンドである。chdir という名前だったりそのような別名があることもある。原理的に外部コマンドとして実装することが不可能であり、かならずシェル等の内部コマンド(ビルトインコマンド、en:Shell builtin)として実装される。

ディレクトリファイルシステム中の論理的な区分であり、ファイルを保持するために使われる。ディレクトリは他のディレクトリをも含めることができる。cdコマンドはサブディレクトリ(子ディレクトリ)に移動したり、親ディレクトリに移動したり、ルートディレクトリ(すべてのディレクトリの祖先ディレクトリ)に一気に移動したり、ある与えられたディレクトリに移動したりすることができる。

次の図は何らかのファイルシステムの一部分を示している。1つのファイル ("text.txt")と3つのサブディレクトリを含むユーザのホームディレクトリ~で表している[1])が示されている。

Chdir example.png


もしカレントディレクトリがホームディレクトリ(~)であれば、「cd games」というコマンドを実行した後で「ls」と実行すると、例えば次のような結果が得られる。

me@host:~$ ls
workreports games encyclopedia text.txt
me@host:~$ cd games
me@host:games$

ユーザはこの時点で"games"ディレクトリにいる。 似たようなことをMS-DOSで実行すると次のようになる。MS-DOSにはバージョンによってホームディレクトリの概念が存在しないこともある[2]

C:\>dir
workreports <DIR> Wed Oct 9th 9:01
games <DIR> Tue Oct 8th 14:32
encyclopedia <DIR> Mon Oct 1st 10:05
text txt 1903 Thu Oct10th 12:43
C:\>cd games
C:\games>

cdに引数を与えずに実行した場合、システムによって異なる振る舞いをする。例えばMS-DOSやWindowsではカレントドライブとそのカレントディレクトリが、その絶対パスの文字列で表示される(Unixのpwdに類似)。Unixではシェル変数 $HOME に設定されたディレクトリ(通常はユーザのホームディレクトリがログイン時に環境変数として設定されている)に移動する。

バッチファイルシェルスクリプト内でcdが実行された場合の効果もシステムによって異なる、というように考える者がいるようだが、シングルタスクのMS-DOSで学習した結果、根本的にプロセスの概念をわかっていないと、そのような把握になるものと思われる。すなわち、MS-DOSのバッチファイルはサブプロセスとして実行されるのではなく、そのシェル自身の入力を一時的に切替えるだけのものであるため、バッチファイル内でのcdコマンドはそのシェル自身に影響する。Unixのシェルでは普通、シェルスクリプトをそのシェル自身に対するコマンド列として実行するか( source あるいは . コマンド)、サブプロセスとして実行されるシェル(サブシェル)で実行するか(通常の外部コマンドのようにして実行した場合)を選べるため、結果はそれに応じて異なる。

[編集]

  1. ^ '~' を、通常はユーザのホームディレクトリが設定されている変数 $HOME として解釈するか否かはシェルの実装に依存する。
  2. ^ どちらかというとユーザの脳内の概念の問題であることがある。

外部リンク[編集]

  • cd(1) man page(SunOS リファレンスマニュアル 1 : ユーザーコマンド) - オラクル