• ベストアンサー

chown -Rで .. だけが所有者変更されない

Cent OSで、sudo chown -R hogeuser:hogegroupと打ったら、「..」以外は、所有者と所有グループが変更されたのですが、「..」だけは変更されませんでした ■質問 ・なぜ「..」だけ変更されないのでしょうか? ※ちなみに「.」は、以前から「hogeuser:hogegroup」でした ・「..」「.」って何ですか? ・「一つ上の階層」とか「現在階層」の意味でしょうか? ・それの所有者ってどういう意味でしょうか?

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

  • ベストアンサー
  • vaidurya
  • ベストアンサー率45% (2714/5983)
回答No.1

..は、UNIX系OSでもMS-DOS系OSでも、共通の概念で 一つ上の階層を意味します。 ですから、Linux系OSで考えれば~/の上は必ず管理者が所有しているわけですから ~/では、..はrootが所有権となっています。 つまり、../は上にある存在するもので そのディレクトリー下を対象とした処理のすべては ../には関係ありませんし、~/../に対してのchownは、通常効果がありません。 ./はカレントディレクトリーを指します。 ~/はそのコマンドを発行したユーザーのホームディレクトリーを指します。 (rootの場合は/rootです) こういった記述は、バッチファイルやシェルスクリプトなどで重要な役割を持ちます。 ~/がなければ、ユーザーごとに、ユーザー名に合わせたスクリプトを書く羽目になります。 ./がなければ、常にフルパス記述が必要になり 場合によっては、対象のディレクトリーごとに別々のスクリプトを用意することになります。 厳密に言えば、それを条件分岐やオプションで対応する手もありますが… ~/,./,../があることによって、スクリプトはシンプルになり それだけバグのリスクも抑えられるわけです。 ちなみに、~/に相当するWindowsの場合の指定方法は%USERPROFILE%のようです。 なお、MS-DOS系とUNIX系の違いに、./に対しての認識の違いがあります。 MS-DOS系では./を使ったことがないという人も多いはずです。 MS-DOSではダウンロードしてきた自己展開アーカイブを、名前を入力すれば実行できます。 ですが、UNIX系OSではファイル名を入力しても実行されません。 それどころか、目の前にあるはずのファイルにTABキーによるファイル名補完も効きません。 ./が指定されていないからです。 MS-DOS系ではカレントディレクトリーが実行パスに設定されているので ./を指定しなくても、カレントディレクトリーにあるファイルがまっさきに実行されます。 セキュリティ上は、アホな仕様ですけどね。 UNIX系OSでは、カレントディレクトリーに実験的なファイルなどがあっても 明示的に./を付けて指定しなければ実行されないので、その分安全なのです。 そもそも、ソフトをどこにインストールするか決まっていないMS-DOS系に比べると インストール先が厳格で、追加導入も、dpkgやrpmで管理されていたり 管理者お手製スクリプトの置き場所として/usr/local/binが規定されていたりして カレントディレクトリーのファイルを実行するという機会自体、Linux系OSではあまりありません。

re97
質問者

お礼

回答ありがとうございました。 大変勉強になりましたー

その他の回答 (1)

  • entree
  • ベストアンサー率55% (405/735)
回答No.2

具体的にはsudo chown -R hogeuser:hogegroup *とタイプされたのでしょうか? 「*」には「.」(ドット)で始まるファイルは含めません。 .や..を含めたいのであれば、sudo chown -R hogeuser:hogegroup * .* とする必要があります。 ただ、「..」はご認識のとおり、「一つ上の階層」の意味なので、 これらを変更したいことはそんなに多くないかもしれません。 「現在階層」や、その階層に存在する隠しファイルも含めて変更したい場合は、 sudo chown -R hogeuser:hogegroup *の代わりに、 sudo chown -R hogeuser:hogegroup .とすればよいでしょう。

re97
質問者

お礼

回答ありがとうございました。 参考になりましたー