我已将 Ubuntu PC 从 10.04 升级到 12.04。
问题是主文件夹的所有权限都错误。
因此,我做了以下事情:
sudo chown -R james:james /home/james/*
sudo chown -R james:james /home/james/.*
sudo chown -R htpc:htpc /home/htpc/*
sudo chown -R htpc:htpc /home/htpc/.*
但是最终您将获得 james:james 或 htpc:htpc 中两个文件夹中的所有文件,具体取决于您运行命令的方式。
它们是如何关联的以及我该如何修复它?
按照要求:
james@htpc:~$ ls -l /home
total 8
drwxr-xr-x 41 james james 4096 May 20 19:32 htpc
drwxr-xr-x 31 james james 4096 May 20 20:04 james
james@htpc:~$ ls -l /home/htpc
total 236
drwxr-xr-x 4 james james 4096 Nov 25 13:19 Desktop
drwxr-xr-x 2 james james 4096 Mar 13 2011 Documents
drwxr-xr-x 5 james james 4096 Dec 22 2010 Downloads
-rw-r--r-- 1 james james 179 Nov 18 2010 examples.desktop
-rwxr-xr-x 1 james james 85 Dec 27 2010 goback
-rw-r--r-- 1 james james 425 Nov 28 2010 modelines
drwxr-xr-x 5 james james 4096 Dec 27 2010 Music
drwxr-xr-x 22 james james 4096 Oct 29 2012 Pictures
drwxr-xr-x 2 james james 4096 Nov 18 2010 Public
drwxr-xr-x 2 james james 4096 Nov 18 2010 Templates
-rwxr-xr-x 1 james james 251 Dec 27 2010 testmode
drwxr-xr-x 2 james james 4096 Dec 23 2010 Videos
-rwxr-xr-x 1 james james 190672 Nov 6 2010 winetricks
james@htpc:~$
答案1
这是因为 shell 正在将“.*”扩展为“..”或上移一个目录。
在这种情况下,我认为最好使用 find
成为 root
sudo -i
运行查找
find /home/$user -exec chown $user:$user {} \;
将 $user 更改为适当的用户名
理论上,chown 应该与 -R 一起使用,不需要通配符
sudo chown -R $user:$user /home/$user
但我认为这会遗漏隐藏文件或 .文件,这就是为什么 RoboJ1M 尝试使用“.*”而导致问题的原因。
答案2
每个文件夹都包含一个名为 的文件..
。此文件的特殊之处在于它指向包含当前工作目录的目录。例如:
$ pwd
/path/to/dir
$ cd ..
$ pwd
/path/to
由于您指定了.*
参数,因此 shell 会将其扩展为以“.”开头的每个文件,包括..
。这意味着您的操作在当前工作目录中的所有内容上运行,但也在父目录 ( /home
) 上运行。由于您指定了递归,因此您将文件夹中的每个文件和目录更改/home
为您指定的任何所有权。事实上,您可能已经更改了系统上每个文件的所有者。我建议运行ls -l /
以检查是否发生了这种情况 - 如果发生了,您可能会遇到问题。
答案3
我在我的 EC2 主机上使用它来修复主文件夹权限。
#fix home directories
cd /home/
for i in *; do
useradd $i
chown -R $i:$i /home/$i
done
如果您使用 -R,则不需要使用通配符。只需在顶层使用 chown,其余部分保持不变。正如其他人所说,.* 匹配 ..