Я ищу команду Linux, которая может изменить владельца всех файлов, принадлежащих данному пользователю, предпочтительно в целевом каталоге, другому указанному пользователю.
Команда моей мечты будет выглядеть примерно так ...
chuser -R --olduser tom --newuser jerry
или
chuser -R --olduser 1066 --newuser 1492
Это мой сценарий ... У меня есть резервный файл (.tgz) с информацией о пользователях и группах. Он был взят с веб-сервера под управлением Apache и MySQL. Файлы в резервной копии находятся по всей системе и содержат файлы от нескольких разных пользователей и нескольких учетных записей системного типа, и важно, чтобы при восстановлении на новом сервере настройки не терялись. Проблема в том, что у пользователей на машине файлы восстанавливаются, чтобы не совпадать с теми, что в файле резервной копии. Например, на обеих машинах был пользователь MySQL, но у них разные идентификаторы пользователей, и на обеих машинах было несколько идентификаторов пользователей, принадлежащих разным пользователям. Это означает, что нет возможности синхронизировать пользователей на новом компьютере с пользователями на старом компьютере.
Я могу найти все файлы пользователей с помощью команды find, как это ...
find /decompressed-backup-dir -uid 1050
или
find /decompressed-backup-dir -user tom
Если, как я подозреваю, нет способа сделать то, что я хочу, с помощью одной команды, то, возможно, есть способ передать результаты команды find другой команде для обработки изменения владельца?
Я мог бы сделать это с помощью скрипта PHP, но в резервной копии есть 4 ГБ и десятки тысяч файлов, поэтому я не хочу использовать PHP или Perl, но я был бы рад сценарию оболочки, который мог бы справиться с этим.
источник
-uid
я использовал-user
Я думаю, что флаг --from в команде chown, вероятно, самый простой способ.
источник
brew install coreutils
иgchown
.Добавление к ответу SiteKickr ,
chgrp
не имеет--from
аргумента, но вы можете добиться того же сchown
опущением пользователя.Пример:
источник
Вы можете использовать
find
, как кто-то еще написал, чтобы сделатьchown
.Тем не менее, вам, возможно, не придется, так как
tar
позаботятся о вас за вас.Например, если вы сделаете
tar
наmachine A
котором пользовательtom
находится ,uid 500
а затемuntar
файл наmachine B
котором пользовательtom
находитсяuid 505
,tar
будет делать правильные вещи и сделать файлы , принадлежащиеuid 505
.источник
Ответ устанавливает оба пользователя и группу:
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 {} +
Просто чтобы добавить знания.
источник
newuser
часть. На странице руководства написано: «Если дано двоеточие и группа, но владелец не указан, изменяется только группа файлов; в этом случаеchown
выполняет ту же функцию, что иchgrp
».Если вам нужно рекурсивно сопоставить старые / новые идентификаторы владения, которые разрешаются одному и тому же
/etc/passwd
пользователю ,(что может произойти после того, как вы внедрили LDAP на сервер и в нем
/etc/passwd
есть повторяющиеся записи для каждого пользователя и группы),Вы можете использовать этот скрипт, который я написал: https://gist.github.com/siers/ded0a4158c900495f04c3ad965f4a544
Он создает отображение самостоятельно. Интерфейс программы, к сожалению, в коде. Добавьте несколько операторов отладки, если вам нужно выяснить, как и что он делает. Но это в значительной степени прославленный чоун с отображением, созданным из дубликатов
/etc/passwd
. Если это кому-нибудь пригодится, это было бы здорово. :)источник
Вы можете использовать
chown - R /directory/file
Эта команда изменит разрешение для всех экземпляров каталога
chown - R /directory
источник