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

wai*_*ace 4 users recursive files chown

我是一个中等的 linux 用户。我更换了我的 PC,并从 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
Run Code Online (Sandbox Code Playgroud)

现在,我可以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 
Run Code Online (Sandbox Code Playgroud)

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

谢谢你。

Mic*_*mer 6

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

GNUchown支持一个选项--from=500,您可以将其与-R递归选项结合使用来执行此操作:

chown -R --from=500 yourusername /path/here
Run Code Online (Sandbox Code Playgroud)

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

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

find /path/here -user 500 -exec chown yourusername '{}' '+'
Run Code Online (Sandbox Code Playgroud)

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

您可以通过运行相同的find命令而无需运行命令来检查任何落后者:

find /path/here -user 500
Run Code Online (Sandbox Code Playgroud)

此时它不应该列出任何文件。


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