chown
を/opt
と何らかの理由でchown
が親に飛びつき、すべてをかき立てました。
誰がなぜ/どのようにこれが起こるのか、そして将来的にそれを避ける方法を提案できますか?特定のディレクトリでコマンドを実行すると、効果的にジャンプしてルートディレクトリで実行できるというのは少し心配です。
ubuntu: /opt > Sudo chown -R root:www-data .*
chown: changing ownership of '../var/lib/lxcfs/proc/cpuinfo': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/proc/meminfo': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/proc/stat': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/proc/uptime': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/proc/diskstats': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/proc/swaps': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/proc': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/devices': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/blkio': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/hugetlb': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/rdma': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/pids': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/freezer': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/cpuset': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/memory': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/perf_event': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/cpu,cpuacct': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/net_cls,net_prio': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/name=systemd': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/unified': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs': No such file or directory
^C
:ubuntu: /opt >
これは、次を使用したために起こりました。
Sudo chown -R root:www-data .*
代わりにこれを使用する必要があった場合:
Sudo chown -R root:www-data ./*
まず、-R
は、ターゲットディレクトリの下のすべてのディレクトリに対して再帰的です。
さらに、*
は、現在のディレクトリの下にあるすべてのファイルとディレクトリに一致します。次に、.*
はすべてのファイルとディレクトリに一致します1レベル上の現在のディレクトリ。
これを今後回避するために、ls
コマンドを使用して、次の例のようにchown
コマンドを実行する前にパスを確認できます。
ls -a ./*
ls -a *
ls -a .*
ls -a ../*
これを回避する別の方法は、コマンドを実行するディレクトリへの絶対パスを常に使用することです。
次に例を示します。
Sudo chown -R root:www-data /opt/*
編集:
次のコマンドを使用して、/opt
の直下にあるすべての非表示のファイルまたはディレクトリをchmod
できます(非表示にする.
の後の最初の文字が、文字、数字、ダッシュ、またはアンダースコアであると想定し、ほとんどのファイル)。
for i in /opt/.[A-Za-z0-9-_]*; do Sudo chmod root:www-data "/opt/$i"; done
次のコマンドを実行することで、これがどのファイルを確認することができますchmod
:
ls /opt/.[A-Za-z0-9-_]*
コマンドの最初の部分:for i in /opt/.[A-Za-z0-9-_]*
は、 glob/opt/.[A-Za-z0-9-_]*
のすべての結果について、各結果を変数に割り当てることを示しています"私"。
このグロブでは、最初の文字は.
である必要があり、次の文字[A-Za-z0-9-_]
はA-Zまたはa-zである任意の文字であるか、0-9である任意の文字であるか、または-
または_
である必要があると述べています。
これにより、現在のディレクトリと現在のディレクトリの上のディレクトリを表す.
と..
の結果が除外され、非表示のファイルとディレクトリのみが含まれます。
コマンドの2番目の部分:do Sudo chmod root:www-data "/opt/$i"
は、$i
の現在の値に一致するすべての変数に対してコマンドを実行することを示します。
コマンドの3番目の部分:done
は、終了したことを示しています。
さらに、-R
オプションをchmod
とともに使用しました。-R
オプションは再帰的であり、すべてのディレクトリに適用されますandファイル。
オプションなしでchmod
コマンドのみを使用する場合、コマンドは指定した特定のファイルまたはディレクトリにのみ適用され、ディレクトリには再帰的に適用されません。
シェルグロブ.*
は..
(親ディレクトリ)と一致しますが、この場合は残念ながら/
です。
steeldriver@t400s:/opt$ ls .*
.:
..:
bin boot cdrom dev etc home initrd.img initrd.img.old lib lib32 lib64
libx32 lost+found media mnt opt proc root run sbin snap srv swapfile sys
tmp usr var vmlinuz vmlinuz.old
追加のディスカッションについては、以下を参照してください。
ドットで始まる.*
がすべてと一致するため、問題が発生しました。この式にはパスが含まれていないため、コンテキストは現在のディレクトリです。したがって、現在のディレクトリに.git
のような隠しファイルまたは隠しフォルダーがある場合は、それらを照合します。しかし、(そのフォルダでls -a
を実行するとわかるように).
および..
にも一致します
もちろん、..
は親ディレクトリなので、chmod -R
は親ディレクトリ内のすべてを再帰的にターゲットにします。