如何将一个用户的所有文件更改为另一用户?


39

我正在寻找一个Linux命令,该命令可以将属于给定用户(最好是目标目录中)的所有文件的所有权更改为另一个指定用户。

我的梦想命令看起来像这样...

chuser -R --olduser tom --newuser jerry

要么

chuser -R --olduser 1066 --newuser 1492

这是我的情况...我有一个备份文件(.tgz),其中保留了用户和组信息。它来自运行Apache和MySQL的Web服务器。备份中的文件来自整个系统,并且包含来自多个不同用户和多个系统类型帐户的文件,这是在新服务器上还原设置时不会丢失设置的关键。问题是正在还原文件的计算机上的用户与备份文件中的用户不匹配。例如,两台计算机都有一个MySQL用户,但是它们具有不同的用户ID,并且两台计算机上都存在多个属于不同用户的用户ID。这意味着无法将新计算机上的用户同步到旧计算机上的用户。

我可以使用以下find命令找到所有用户文件...

find /decompressed-backup-dir -uid 1050

要么

find /decompressed-backup-dir -user tom

如我所怀疑的,如果无法用单个命令来完成我想要的事情,那么也许有一种方法可以将find命令的结果传递给另一个命令来处理所有权更改?

我可以使用PHP脚本执行此操作,但是备份中有4GB内存和成千上万个文件,因此我不想使用PHP或Perl,但我对可以处理它的Shell脚本感到满意。

Answers:




7

通过SiteKickr添加到答案中chgrp没有--from参数,但是您可以chown通过省略用户来实现相同的目的。

例:

chown -R --from=:currentgroup :newgroup /some/directory

6

您可以find像其他人一样使用来做chown

但是,您可能不必像tar为您那样照顾事情。

例如,如果你犯了一个tarmachine A这里的用户tomuid 500untar上的文件machine B,其中用户tomuid 505tar会做正确的事,让所拥有的文件uid 505


有趣的花絮,我没有意识到。因此,tar不仅存储uid,而且还存储与uid关联的名称。
Nicholi

3
原始tar格式仅存储数字信息。POSIX在80年代后期引入的UStar格式添加了名称。因此,这些天您遇到的任何焦油几乎都是对的。
Ciclamino

1

答案设置用户和组:

find /decompressed-backup-dir -uid 1050 -exec chown newuser:newgroup {} +

但是,如果您只想更改属于某个用户的文件组,就无法使用chown(据我所知),而是使用chgrp

find /decompressed-backup-dir -uid 1050 -exec chgrp newgroup {} +

并仅更改属于某个组的文件组,例如:

find /decompressed-backup-dir -gid 400 -exec chgrp newgroup {} +

只是为了增加知识。


1
实际上,您可以只保留newuser零件。手册页说:“如果给出了冒号和组,但省略了所有者,则仅更改文件组;在这种情况下,chown执行与相同的功能chgrp。”
Ben Voigt 2014年

0

如果您需要递归将解析为同一/etc/passwd用户的旧/新所有权ID映射

(在将LDAP引入服务器并/etc/passwd为每个用户和组重复条目后可能会发生),

您可以使用我编写的脚本:https : //gist.github.com/siers/ded0a4158c900495f04c3ad965f4a544

它自己创建映射。不幸的是,程序的接口在代码中。如果您需要调查它是如何工作的,请添加一些调试语句。但这几乎是一个光荣的chown,其中包含根据中的重复项创建的映射/etc/passwd。如果这对任何人都有用,那将真的很酷。:)


-2

您可以使用 chown - R /directory/file

此命令将更改目录所有实例的权限 chown - R /directory

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.