電子書籍の厳選無料作品が豊富!

Linuxのスラッシュ,ピリオドの意味がいまいちよくわかりません.
一応,スラッシュはディレクトリ,ピリオドはカレントディレクトリと理解しているのですが.

たとえばコピー例にすれば,

cp /hoge1/ /hoge2/

cp /hoge1 /hoge2

cp ./hoge1 ./hoge2

cp hoge1 hoge2

cp hoge1/ hoge2/



などではは,どのような意味の違いがあるのでしょうか?

また,スクリプト,abcがあったとして
./abc
などとすると実行できるのに,
abc
では実行できないのはなぜなのでしょうか?

A 回答 (5件)

> cp /hoge1/ /hoge2/


> と
> cp /hoge1 /hoge2

前者はhoge1,hoge2はディレクトリであると指示していることになります。ですから、もしhoge1,hoge2がファイルだった場合はエラーになります。
後者は指示していないのでファイルなのかディレクトリなのかをcpコマンドが自動で判別します。

> cp ./hoge1 ./hoge2
> と
> cp hoge1 hoge2
> と
> cp hoge1/ hoge2/

どれもカレントディレクトリの下のhoge1,hoge2を操作する点で同じですが、3つ目だけはディレクトリであることを指示しています。よってファイルだった場合はエラーになります。

> abc では実行できないのはなぜなのでしょうか?

単に abc と指定すると、シェルはpathという環境変数で指定されたディレクトリを順に探します。
pathにはおかしなプログラムを誤って実行しないように、普通カレントディレクトリ . は含めていません。ですから実行されないのです。
    • good
    • 0
この回答へのお礼

大体わかりました.
windowsだと真っ先にカレントディレクトリから探しますが,linuxは
それが含まれないということですね.
ただそうすると,
cp hoge1 hoge2
のような表記が通用するのが不思議に思いますが,これは仕様だと割り切るしかないのでしょうか
cp ./hoge1 ./hoge2
としたほうが正しいように思いますが?

お礼日時:2008/05/20 22:35

あれあれ??



cp/mv/rm/lsなどはUNIX系OSなら全部外部コマンドじゃありませんでしたか?

Linuxなら、/usr/bin/cpとか。
    • good
    • 0

Wr5様の述べられていることで十分だと思われますが、混同しやすいところなので少し追加してみます。



cpコマンドは、shellの内部コマンドなのでパス($PATH)とは全く関係なく実行できます。
またこの場合、hoge1 hoge2に関しては、コマンドではないのでこれもまたパス($PATH)とは全く関係ありません。

たとえば、スクリプト,abcがcpコマンドと同等の機能があるものとして考えた場合、abcは外部コマンドなので、パス($PATH)に場所が登録されていないと、

./abc

とする必要があるわけです。
    • good
    • 1

>windowsだと真っ先にカレントディレクトリから探しますが,linuxは


>それが含まれないということですね.
>ただそうすると,
>cp hoge1 hoge2
>のような表記が通用するのが不思議に思いますが,これは仕様だと割り切るしかないのでしょうか

pathが関係するのは「実行ファイル」の場合だけです。
# 実行属性のついたスクリプトファイルなども実行ファイルに含まれます。
    • good
    • 0

>>> スラッシュはディレクトリ



より正確には、

最初のスラッシュは、ルート(root)で、
それ以外のスラッシュはディレクトリと(ディレクトリまたはファイル)をつなぐ区切り記号です。


>>> ./abc
などとすると実行できるのに,
abc
では実行できないのはなぜなのでしょうか?

Linuxの場合、カレントディレクトリがパス($PATH)に含まれていないので、スクリプトまたはコマンドのある場所を正確に指定する必要があります。

./abcは相対パスで、/・・・・・・・・・・・・/abc は絶対パスの指定となります。
    • good
    • 0
この回答へのお礼

ありがとうございます,よくわかりました.
windowsとはちょっと違いますよね.

お礼日時:2008/05/20 22:36

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!