Duk*_*gal 23 permissions chown
我试图在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 >
Run Code Online (Sandbox Code Playgroud)
ste*_*ver 45
不幸的是,在这种情况下,shell glob.*匹配..(父目录)是/:
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
Run Code Online (Sandbox Code Playgroud)
有关其他讨论,请参阅:
mch*_*hid 25
发生这种情况是因为您使用了:
sudo chown -R root:www-data .*
Run Code Online (Sandbox Code Playgroud)
当您应该使用它时:
sudo chown -R root:www-data ./*
Run Code Online (Sandbox Code Playgroud)
首先,-R对目标目录下的所有目录都是递归的。
此外,*将匹配当前目录下的所有文件和目录。接下来,.*将匹配当前目录上一级的所有文件和目录。
为避免将来发生这种情况,您可以ls在执行chown命令之前使用该命令来验证路径,如以下示例所示:
ls -a ./*
ls -a *
ls -a .*
ls -a ../*
Run Code Online (Sandbox Code Playgroud)
避免这种情况的另一种方法是始终使用您希望运行命令的目录的完整路径。
下面是一个例子:
sudo chown -R root:www-data /opt/*
Run Code Online (Sandbox Code Playgroud)
编辑:
您可以对chmod所有隐藏的文件或目录直接使用以下命令/opt(假设.使它们隐藏的第一个字符是字母、数字、破折号或下划线,这对于大多数文件应该是正确的)。
for i in /opt/.[A-Za-z0-9-_]*; do sudo chmod root:www-data "/opt/$i"; done
Run Code Online (Sandbox Code Playgroud)
您可以chmod通过运行以下命令来验证这将使用哪些文件:
ls /opt/.[A-Za-z0-9-_]*
Run Code Online (Sandbox Code Playgroud)
命令的第一部分:for i in /opt/.[A-Za-z0-9-_]*表示,对于glob 的 所有结果,/opt/.[A-Za-z0-9-_]*将每个结果分配给变量“i”。
这里的 glob 表示第一个字符必须是.,下一个字符 [A-Za-z0-9-_]必须是 AZ 或 az 或任何数字 0-9 或 a-或 a 的任何字符_。
这样就可以排除的结果.和..代表当前目录和当前目录上面的目录,将只包括隐藏文件和目录。
命令的第二部分:do sudo chmod root:www-data "/opt/$i"表示对与 的当前值匹配的所有变量运行该命令$i。
命令的第三部分:done说我完成了。
此外,您使用了-R选项 withchmod并且该-R选项是递归的,将应用于所有目录和文件。
当您只使用chmod没有选项的命令时,该命令将仅适用于您提供的特定文件或目录,而不会递归适用于目录。
你的麻烦来了,因为.*匹配所有以点开头的东西。上下文是当前目录,因为此表达式不包含路径。因此,如果.git当前目录中有任何隐藏文件或文件夹,您将匹配它们。但是(正如您将通过ls -a在该文件夹中运行看到的那样),您还将匹配.和..
并且..,当然,是父目录,所以chmod -R递归定位父目录中的所有内容。
| 归档时间: |
|
| 查看次数: |
5469 次 |
| 最近记录: |