
シェルで遊んでいて、./ と入力しました。次の出力が表示されます。
bash: ./: Is a directory
「./」は、指定された名前のディレクトリが存在するかどうかをチェックするようです。私の理解が正しいかどうかを確認するために、これに関するドキュメントを探していましたが、オンラインでは何も見つかりませんでした。誰かこれについて説明してくれませんか?
答え1
これについての一般的な定義はBashのマニュアルには載っていないかもしれないが、POSIX仕様(セクション パス名解決):
特別なファイル名ドットは、その前のファイル名で指定されたディレクトリを参照します。
さて、 しかない場合、前任者は何でしょうか.
? 重要な部分を強調しました。
パス名がスラッシュで始まっていない場合は、パス名の最初のファイル名の前のパス名が現在の作業ディレクトリプロセスの
また、
少なくとも1つのスラッシュ以外の文字を含み、1つ以上の末尾のスラッシュで終わるパス名は、パス名に1つのドット文字(「.」)が追加されたものとして解決される。
したがって、 と入力する./
と として解決され./.
、基本的に現在の作業ディレクトリを指します。 シェルに何かを入力して を押すとEnter、シェルは最初の部分をコマンドとして実行しようとします。 (基本的に最初の空白までの最初の一連の文字です。)
というコマンドや実行ファイルは存在しない./.
ため、失敗し、./
「はディレクトリです」と表示されます。興味深いことに、.
はコマンド (組み込みコマンドで、 としても見つかりますsource
) なので、次のように入力すると、.
次のようになりますbash: .: filename argument required
。
答え2
他の人が書いているように、./
は現在のディレクトリの名前です。./
bash プロンプトで入力して Enter キーを押すと、現在のディレクトリをコマンドとして実行しようとしましたが、当然失敗し、bash は「それはできません。 は./
ディレクトリであり、ディレクトリをコマンドとして実行することはできません。」というメッセージ (言い換えると) を表示しました。
答え3
は.
現在のディレクトリを意味します。./
現在のディレクトリ内のすべてのファイルのプレフィックスとして使用します。
同様に、..
前の(上位の)ディレクトリを意味します。これは、上位レベルのディレクトリに移動するときによく使用されます。例:cd ../../../
次の内容のファイルシステムがあるとします:
# Comments start with a hash and aren't parsed
/ # root directory
/foo/ # first level directory
/foo/bar/ # second level directory
/foo/bar/baz # third level directory
/foo/bar/baz/qux # a file in the third level directory
第 3 レベルのディレクター (baz) で を実行すると、ls
が表示されますqux
。 を実行するとls .
、 を実行した場合と同じ出力が得られ、 を実行した場合も同じ出力が得られますls ./
。
3 番目のレベルのディレクトリ (baz) にいる場合、 とls ..
のls ../
両方を実行すると が表示されますbaz
。つまり、1 つ上のレベルのディレクトリの内容が表示されます。
答え4
Linux では、 ./ は現在のディレクトリを意味します ( ../ は親ディレクトリを参照します)。
ls -a を実行すると、. と .. がディレクトリとしてリストされます (. は隠しディレクトリを表すため、-a が必要です)