Ищем файлы, принадлежащие нужному пользователю и группе, причем такие, что для одного из трех прав доступа к файлу пользователь имеет это право, но не группа.
find / -user userx -group groupz \( -perm -u+r ! -perm -g+r -o \
-perm -g+w ! -perm -g+w -o \
-perm -g+x ! -perm -g+x \) -print
Обратите внимание, что это может вернуть любой тип файла, включая символические ссылки, для которых права доступа и владения не имеют значения во многих вариантах unix. Чтобы исключить символические ссылки, добавьте ! -type l
.
Если вы хотите действовать с файлами, используйте -exec
.
Если все, что вы хотите сделать, это согласовать групповые разрешения с разрешениями пользователя, вы можете свободно выполнить chmod g=u
.
find / -user userx -group groupz ! -type l -exec chmod g=u {} +
Могу я предложить альтернативный метод?
Не пытайтесь переместить все /usr/*
дерево, так как вы упомянули, что это сломало systemd, а также, кажется, не требуется для решения ваших проблем с интенсивным RW и/или большим объемом неиспользуемого пространства (вы можете просто двигаться/usr/portage
)
Скопируйте /usr/portage
на удаленный жесткий диск через rsync, работающий с LiveCD
/mnt/hdd
/usr/portage
ln -s /mnt/hdd/gentoo/usr/portage /usr/portage
Я предпочитаю не изменять каталоги по умолчанию(/usr/portage
по умолчанию, но я считаю, что вы можете изменить этот )без необходимости, и если я хочу, чтобы они находились на другом жестком диске, я просто создам на них символическую ссылку. Вы можете просто создать еще один раздел только для /usr/portage
и смонтировать его непосредственно в /usr/portage
, но я предпочитаю делать что-то вроде монтирования всех моих данных в один большой удаленный раздел в /mnt/data
, а затем создавать символические ссылки на каталоги по мере необходимости. Я, вероятно, тоже /home
поселился бы здесь.
Возможно две отдельные схемы разделов вот так:
/mnt/os_data
/mnt/my_data
Думаю, вы поняли суть.
rsync
для перемещения /usr
во время установки Gentoo, куда нужно переместить /usr
? На это намекает вопрос ServerFault. Да, вы точно можете (копировать, а не перемещать? ), но я бы всегда использовал Live USB для таких вещей. В используемой системе вполне вероятно, что какой-то процесс записывает в /usr
, пока вы его копируете,что потенциально может привести к неполной передаче.
rsync
, меняются ли владельцы файлов/каталогов, поскольку LiveUSB основан на дистрибутиве Debian? Нет, пока вы используете -a
, разрешения должны быть сохранены для локальной копии.
rsync
, кроме -a
для архива? Комментарии в выбранном ответе на AskUbuntu намекают на добавление -H
для обеспечения соблюдения жестких ссылок, но тогда ОП противоречит комментариям в своем собственном ответе. Как обсуждалось в комментариях, если вы ищете -a
в man rsync
, он исключает -H
, -A
и -X
. Эти флаги сохраняют жесткие ссылки, списки управления доступом и расширенные атрибуты. Я сильно сомневаюсь, что /usr
содержит что-либо из этого, но на всякий случай нет ничего плохого в использовании флагов. Если источник их не использует, то и сохранять нечего, поэтому rsync
будет работать так же, как если бы вы не использовали флаги. Я также предпочитаю использовать -P
, что позволяет продолжить прерванную передачу, а также показывает ход выполнения копирования.