根据以前的所有者更改文件所有权

根据以前的所有者更改文件所有权

我是一个比较新的 Linux 用户。我更换了电脑,并从 CentOS 6 开始使用 CentOS 7。

因此,我将以前的硬盘连接到新电脑上以备份我的文件。现在,复制文件(并保留权限和所有内容),文件将所有者显示为 500(我猜这是我以前的 UID)。

有什么办法可以将它们更改为我的新用户名吗?我想排除显示其他所有者(如 501)的文件。

编辑:

例子:

ls -l
total 3
-rw-rw-r--.  1 500 500        210 Jan 10  2012 about.xml
drwxr-xr-x.  2 500 500       4096 May 15  2013 apache
drwxrwxr-x.  2 500 500       4096 Dec  9  2012 etc

现在,我可以chown -R xyz:xyz .让它们看起来像:

ls -l
total 3
-rw-rw-r--.  1 xyz xyz        210 Jan 10  2012 about.xml
drwxr-xr-x.  2 xyz xyz       4096 May 15  2013 apache
drwxrwxr-x.  2 xyz xyz       4096 Dec  9  2012 etc 

但我只是想知道是否有某种命令可以将用户 500 映射到用户“xyz”。

谢谢。

答案1

如果我理解正确的话,您想要将用户 #500 拥有的某个目录(或根目录)内的所有文件的所有者更改为另一个用户拥有,而不修改任何其他用户拥有的文件。您处于这种情况是因为您从另一台计算机复制了整个目录树,其中该树内的文件由许多不同的用户拥有,但您只对更新那些由“您的”用户拥有的文件感兴趣时刻,而不是用户 #501 或任何其他用户拥有的任何文件。

GNUchown支持--from=500可以与递归选项结合使用-R来执行此操作的选项:

chown -R --from=500 yourusername /path/here

如果您有 GNU ,这将是最快的选择chown,在 CentOS 上您应该这样做。

或者可以使用find在任何系统上:

find /path/here -user 500 -exec chown yourusername '{}' '+'

find将递归地查看 内的每个文件和目录/path/here,匹配用户 #500 拥有的所有文件和目录。对于所有这些文件,它将chown yourusername file1 file2...根据需要执行多次。命令完成后,用户 #500 拥有的所有文件都将归yourusername.您需要运行该命令才能root更改文件所有者。

您可以通过运行相同的find命令来检查是否有任何掉队者,而无需运行命令:

find /path/here -user 500

此时不应列出任何文件。


一个重要的警告:如果用户 #500 拥有的任何文件是符号链接,则chown默认情况下将更改符号链接指向的文件的所有者,而不是链接本身。如果您不信任正在检查的文件,则这是一个安全漏洞。chown -h在这种情况下使用。

答案2

该命令的一个问题chown(但这实际上取决于chown()系统调用)是它删除了权限中的 setuid 和 setgid 位作为一种安全措施。

它也不涵盖 ACL。

要解决这个问题,一种方法可以是rsync在目录本身上使用更新模式和选项--usermap

$ ls -ln
total 6732
-rwsr-xr-x  1 1002 1000 6888896 Nov  3 21:50 a
drwxr-xr-x+ 2 1002 1000    4096 Nov  3 21:46 x

$ getfacl -n x
# file: x
# owner: 1002
# group: 1000
user::rwx
group::r-x
other::r-x
default:user::rwx
default:user:1002:rwx
default:group::r-x
default:mask::rwx
default:other::r-x

$ sudo rsync -rAau --usermap=1002:1000 . .

$ ls -ln
total 6732
-rwsr-xr-x  1 1000 1000 6888896 Nov  3 21:50 a
drwxr-xr-x+ 2 1000 1000    4096 Nov  3 21:46 x

$ getfacl -n x
# file: x
# owner: 1000
# group: 1000
user::rwx
group::r-x
other::r-x
default:user::rwx
default:user:1000:rwx
default:group::r-x
default:mask::rwx
default:other::r-x

文件所有者和 ACL 条目中的 1002 均更改为 1000。

它还将正确处理符号链接。

相关内容