• ベストアンサー

Linuxのスラッシュ,ピリオドの意味

Linuxのスラッシュ,ピリオドの意味がいまいちよくわかりません. 一応,スラッシュはディレクトリ,ピリオドはカレントディレクトリと理解しているのですが. たとえばコピー例にすれば, cp /hoge1/ /hoge2/ と cp /hoge1 /hoge2 cp ./hoge1 ./hoge2 と cp hoge1 hoge2 と cp hoge1/ hoge2/ などではは,どのような意味の違いがあるのでしょうか? また,スクリプト,abcがあったとして ./abc などとすると実行できるのに, abc では実行できないのはなぜなのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • tokichim
  • ベストアンサー率42% (88/205)
回答No.2

> 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にはおかしなプログラムを誤って実行しないように、普通カレントディレクトリ . は含めていません。ですから実行されないのです。

take_zoo
質問者

お礼

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

その他の回答 (4)

  • mashkun
  • ベストアンサー率23% (86/364)
回答No.5

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

  • auty
  • ベストアンサー率58% (284/486)
回答No.4

Wr5様の述べられていることで十分だと思われますが、混同しやすいところなので少し追加してみます。 cpコマンドは、shellの内部コマンドなのでパス($PATH)とは全く関係なく実行できます。 またこの場合、hoge1 hoge2に関しては、コマンドではないのでこれもまたパス($PATH)とは全く関係ありません。 たとえば、スクリプト,abcがcpコマンドと同等の機能があるものとして考えた場合、abcは外部コマンドなので、パス($PATH)に場所が登録されていないと、 ./abc とする必要があるわけです。

  • Wr5
  • ベストアンサー率53% (2177/4070)
回答No.3

>windowsだと真っ先にカレントディレクトリから探しますが,linuxは >それが含まれないということですね. >ただそうすると, >cp hoge1 hoge2 >のような表記が通用するのが不思議に思いますが,これは仕様だと割り切るしかないのでしょうか pathが関係するのは「実行ファイル」の場合だけです。 # 実行属性のついたスクリプトファイルなども実行ファイルに含まれます。

  • auty
  • ベストアンサー率58% (284/486)
回答No.1

>>> スラッシュはディレクトリ より正確には、 最初のスラッシュは、ルート(root)で、 それ以外のスラッシュはディレクトリと(ディレクトリまたはファイル)をつなぐ区切り記号です。 >>> ./abc などとすると実行できるのに, abc では実行できないのはなぜなのでしょうか? Linuxの場合、カレントディレクトリがパス($PATH)に含まれていないので、スクリプトまたはコマンドのある場所を正確に指定する必要があります。 ./abcは相対パスで、/・・・・・・・・・・・・/abc は絶対パスの指定となります。

take_zoo
質問者

お礼

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

関連するQ&A

  • URL末尾のスラッシュ

    基本的なことだと思いつつも、うまく検索できなかったので質問させてください。 通常URL中の/は、ディレクトリを表しますが、特にブログのトラックバック等でcgiやphpといったスクリプトの後にスラッシュがついているのをみかけます。 (例) http://hoge-hoge.jp/~/trackback.cgi/4 この場合の/は何を意味するのでしょうか。

    • ベストアンサー
    • Perl
  • シェルスクリプトでファイルのコピー【gcc】

    Linuxのシェルスクリプトでgccでコンパイルしたファイルを連番でコピーするスクリプトの書き方があれば教えて下さい。 連番とはgccでhoge1.cをコンパイルした後スクリプトを実行すればhoge1をコピーしたhoge2.cが出来上がるという意味です

  • Linuxでのコマンドの使い方

    Linuxでのコマンドの使い方 Linuxでは、ホームディレクトリ(/home/(ユーザー名)、/root など)から 直接、コマンド(cp,mv,ifconfigなど)を入力して実行できたはず、 と思っていたのですが、できません。 /sbin/(コマンド) と入力すれば実行できます。 何か設定が悪いのでしょうか? CentOSでの話です。

  • linuxでディレクトリをコピーしようとするとomitting directoryというエラー

    linuxでディレクトリをコピーしようとするとomitting directoryというエラーが出てコピーできません。 root@aaaaa# cp -p /home/dir1/ /home/dir2 cp: omitting directory `/home/dir1/' ちなみにこのディレクトリのパーミッションはdrwxr-xr-xです。 なんでしょうかこれは?

  • Linuxでシェルスクリプトがフルパスだと実行できない

    Linuxでシェルスクリプトがフルパスだと実行できない こんにちは 現在linuxでシェルスクリプトを記載していて、やっと出来た!と思ったら、なぜかフルパスで実行すると失敗します。 中身は例えば #!bin/sh echo "hello" とし、ファイル名をtest.shとします。 実行時にカレントからだと上手くいきます。 ./test.sh ただし、フルパスで実行するとうまくいきません。 ./home/user/test.sh エラーは以下 bash: ./home/dv3/tet.sh:No such file or directory 所有者はrootでグループもrootにしてあります。 シェルの権限は755にして、rootで実行しています。 なぜカレントだと上手くいき、フルパスだと上手くいかないのでしょうか? パスが必要なコマンドも入っていないのに。。。 どなたかご教授いただけると幸いです。 宜しくお願い致します。

  • Linux初心者です。cpコマンドの使い方について質問させてください。

    Linux初心者です。cpコマンドの使い方について質問させてください。 あるディレクトリ(dirA)の中身を、隠しファイルも含めてすべて、 別のディレクトリ(dirB)の配下へとコピーしたいのですが、 ====================================================== > cp dirA/* dirB とすると、隠しファイルがコピーされず、 > cp dirA dirB とすると、dirBの配下に新たにdirAが作られてしまいます。 ====================================================== コピー元のdirAとコピー先のdirBを統合して、なおかつ 隠しファイルもコピーしたいのですが、 > cp dirA/* dirB; cp dirA/.* dirB のようにコマンドを二つに分けるしかないのでしょうか。 一つのコマンドでできる方法がありましたら、 ご教授お願いします。

  • cpコマンドのオプションについて

    現在、Linuxについて学習を進めていますが、cpコマンドの以下のオプションの意味の違いが分かりませんので、ご教授いただけますでしょうか。 -a : コピー元のファイルとディレクトリを再帰的にコピー。 -r : ディレクトリ内を再帰的にコピー。 ちなみに、-rは使うなと書いてあるサイトもありました。

  • Linuxのchdir(カレントディレクトリが移動できない)

    環境はLinuxおよびcygwinです。 chdir()関数でカレントディレクトリを移動するプログラムを作成しようとしていますが、プログラムの実行後、「pwd」コマンドでカレントディレクトリを確認してもカレントディレクトリが移動されていません。 ソースコード(一部) chdir("/home/hogehoge"); としても、カレントディレクトリは移動せず、pwdコマンドで、 /home/hogehoge になりません。 chdir()関数はエラーを返していません。 もしくは、cdコマンドのソースコードが入手できれば、一番よいのですが・・・Linuxのカーネルやその他のソースコードを展開してもどこにあるか分かりません。 どなたかご教授お願いします。

  • CGIファイル内の CGI呼出しのパスについて

    CGI 内からの .cgi ファイルの呼出しのパスについて質問があります。 動作環境は linux - apache - perl です perl の cgi ファイル内で次のように、同じ /cgi-bin ディレクトリ内の reset.cgi をコールしています。 ========== #!/usr/bin/perl (省略) if($form[0] =~ /reset/){ `reset.cgi`; } ========== バッククォートで実行していますが、これでは動作せず、 ./reset.cgi と ピリオド,スラッシュを前に付けると動作します。 少し調べた結果、カレントディレクトリのパスが通っていないのかと考え、 /etc/profile の PATHに下記のように ピリオド を追加してリブートしたところ、 export PATH=$PATH:. ホームディレクトリなどで作成した シェルスクリプトは ./ なしで動くようになりましたが、 /cgi-bin ディレクトリ内の前述のような呼出しは動作しませんでした。 後は httpd.conf などの編集が必要なのかもしれませんが、 良く分かりませんでした。 申し訳ありませんが、教えて頂けると助かります。 よろしく御願い致します。

    • ベストアンサー
    • CGI
  • LinuxのASTEC-X

    今、大学でLinuxのASTEC-Xを使って勉強しています。 その中で、絶対パス、相対パス、カレントディレクトリ、ホームディレクトリなどの用語あるいは作業が全くわかりません。 教科書を見ても専門用語ばっかりで全く意味がわかりません。 それぞれ、どういう意味か教えてください。