我是一个比较新的 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。
它还将正确处理符号链接。