フォルダー内の sh ファイルに実行権限を追加しようとしていました。そのために、誤って次のものを使用しました:
find . -print0 -iname '*.sh' | xargs -0 chmod -v 744
出力は次のようになります。
mode of `.' changed from 0755 (rwxr-xr-x) to 0744 (rwxr--r--)
mode of `./codis.sh' changed from 0644 (rw-r--r--) to 0744 (rwxr--r--)
mode of `./ne fil.sw' changed from 0644 (rw-r--r--) to 0744 (rwxr--r--)
mode of `./.whois1.sh.swo' changed from 0644 (rw-r--r--) to 0744 (rwxr--r--)
mode of `./new file' changed from 0644 (rw-r--r--) to 0744 (rwxr--r--)
mode of `./ezik.sh' changed from 0644 (rw-r--r--) to 0744 (rwxr--r--)
mode of `./.whois1.sh.swp' changed from 0600 (rw-------) to 0744 (rwxr--r--)
mode of `./whois1.sh' retained as 0744 (rwxr--r--)
find部分の正しい使い方は
find . -iname '*.sh' -print0
そこで、次のような別の検索を作成しました。
find . \! -iname '*.sh' -print0 | xargs -0 chmod 600
非 sh ファイルの権限を元に戻せるようにするためです (一部のファイルの権限が 600 ではなく 644 になっているのがわかりますが、今は問題ではありません)。このコマンドの出力は次のようになります。
chmod: cannot access `./ne fil.sw': Permission denied
chmod: cannot access `./.whois1.sh.swo': Permission denied
chmod: cannot access `./new file': Permission denied
chmod: cannot access `./.whois1.sh.swp': Permission denied
私sudo
もそうでしたが、それでも何もありませんでした...
権限を正しく理解していないようです... 正しく理解していれば、そのディレクトリでコマンドを実行するには、x
ディレクトリに対する権限も必要です。direc
答え1
cmdfind
は現在のディレクトリ " .
" も検出します。このディレクトリの権限は に設定される600
ため、このディレクトリ内のファイルにアクセスする権限が失われます。
したがってcd ..
、chmod 700
上記のディレクトリから元に戻す操作を実行するとfind
、次のように現在のディレクトリが除外されます。
find . \! -path . \! -iname '*.sh' -print0 | xargs -0 chmod 600