- ベストアンサー
chmod u-x .*の動作について
- chmod u-x .*というコマンドを実行すると、カレントディレクトリ内の.(ドット)から始まる全てのファイルのユーザの実行権限が削除されます。
- 実行する際には注意が必要で、親ディレクトリや親の親ディレクトリまで実行権限が変わってしまう可能性があります。
- 実際の動作結果は環境によって異なりますが、RHEL4とFedora6の場合は同じ結果が得られました。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>ほとんどのサイトでこう紹介されています。 >「.」 カレントディレクトリを意味します >「..」 一つ上のディレクトリを意味します。 これは正しいです。 >なので私は、 >「.」を「現在の作業しているディレクトリ」を指す >キーワードのように誤認していました。 キーワードというのは当たらないです。. .. はディレクトリ名です。 >実際には「.」と「..」の説明は >. 現在作業しているディレクトリの絶対パスの省略形 >.. 一つ上のディレクトリの絶対パスの省略形 >であり これは違います。省略形ではありません。 >カレントディレクトリが「/home/foo」で「cd .」のコマンドを実行した場合で説明すると >「cd .」は「cd 現在作業しているディレクトリ」 >その結果「カレントディレクトリの移動はなし」ということではなく 「移動無しということではなく」という部分は合ってます。 >「cd .」とした場合、 >「.」はカレントディレクトリ「/home/foo」のシンボリックリンクのような扱いの為 「シンボリックリンクのような」はだいたい当たってます。 実際は、/home/foo/. は、 /home/foo のハードリンクです。 >「cd /home/foo」を実行したのと同じであり「作業ディレクトリを変更した結果、同じディレクトリに戻ってきた」ということですね。 これは合ってます。 i-node 及び ハードリンク について勉強されると理解が深まると思います。
その他の回答 (1)
- osamuy
- ベストアンサー率42% (1231/2878)
pwd = /home/foo だから、 . = /home/foo で、 .. = /home になります。 shell は、「.*」という入力を受けると、それを一致するファイル名に展開します。 すなわち、/home/foo下においては、 chmod u-x .* = chmod u-x . .. .bas以下略 を実行することでなるので、/homeは書き換わってしまいます。 echo .* を実行してみては。
お礼
私の説明不足もあり、欲しい答えとは少し異なっていましたが、 素早い回答どうもありがとうございました。
補足
「chmod u-x /home」も 「echo .*」の動作については理解していますが、 お恥ずかしながら 「.」と「..」ファイルについて認識が Linuxを覚えた当初から間違っていたみたいですね。 ほとんどのサイトでこう紹介されています。 「.」 カレントディレクトリを意味します 「..」 一つ上のディレクトリを意味します。 なので私は、 「.」を「現在の作業しているディレクトリ」を指す キーワードのように誤認していました。 実際には「.」と「..」の説明は . 現在作業しているディレクトリの絶対パスの省略形 .. 一つ上のディレクトリの絶対パスの省略形 であり カレントディレクトリが「/home/foo」で「cd .」のコマンドを実行した場合 で説明すると 「cd .」は「cd 現在作業しているディレクトリ」 その結果「カレントディレクトリの移動はなし」ということではなく 「cd .」とした場合、 「.」はカレントディレクトリ「/home/foo」のシンボリックリンクのような扱いの為 「cd /home/foo」を実行したのと同じであり 「作業ディレクトリを変更した結果、同じディレクトリに戻ってきた」ということですね。
お礼
「i-node」もそうですけど、「ハードリンク」が答えの中で一番重要だったような気がします。 おかげ様でディレクトリ構造について理解が深まりました。 ありがとうございます。
補足
「.」と「..」の実態がハードリンクだと教えていただいたので早速コマンドで確認したところ確かにそうなっていました。 [root@baz /]# ls -ia1 / | grep home 13991937 home [root@baz /]# ls -ia1 /home/ 13991937 . 2 .. 13991938 bar 14843913 foo [root@baz /]# ls -ia1 /home/foo/ 14843913 . 13991937 .. 14843928 .bash_history 14843923 .bash_logout 14843920 .bash_profile 14843914 .bashrc 14843915 Maildir 14843921 etc 14843919 public_html