Назад | Перейти на главную страницу

Сценарий Bash для восстановления прав собственности на каталог и файл

Мой клиент попросил меня развернуть несколько папок в нескольких домашних каталогах для веб-сайтов его клиентов. Я сделал это с помощью сценария Bash, но в итоге он использовал разрешения учетной записи root.

Как мне создать сценарий Bash, который берет каждую папку в / home /пользователь (не скрытые файлы или папки), получает права собственности пользователя и группы на эту папку, а затем выполняет команду chown -R {user}. {group} / home /пользователь?

На серверах работает CentOS Linux.

Я должен полностью отдать должное Кайлу Брандту выше. Итак, если вам нравится этот ответ ниже, щелкните треугольник вверх на его сообщении, чтобы поднять его статус, пожалуйста.

Тем не менее, я улучшил его распорядок и счел своим долгом опубликовать его здесь и отметить как окончательный ответ.

Все, что я добавил в распорядок Кайла, - это убедиться, что мы касаемся только домашнего каталога, то есть строки со звездочками в нем. Затем я убеждаюсь, что этот домашний каталог все еще существует. После этого я делаю заявление chown. И как сказал Кайл - удалите ключевое слово «echo», и оно действительно выполнит задачу. Затем я добавил "-R" в chown, чтобы заставить его работать рекурсивно на случай, если проблема может быть глубже в домашнем каталоге.

#!/bin/bash

while IFS=':' read -r login pass uid gid uname homedir comment; do
    if [[ "$homedir" = **/home/** ]]; then
        if [ -d "$homedir" ]; then
            echo chown -R $uid:$gid "$homedir";
        fi
    fi
done < /etc/passwd

Я думаю, что вы спрашиваете как-то наоборот. Вы не хотите брать каждую папку, а затем находить пользователя, скорее вы хотите взять пользователя и найти его домашнюю папку.

#!/bin/bash
while IFS=':' read -r login pass uid gid uname homedir comment; do 
    echo chown $uid:$gid "$homedir"; 
done < /etc/passwd

Конечно, вам нужно будет удалить эхо, и вам нужно будет запустить это с правами root. Я также всегда рекомендую цикл while вместо цикла for ls себя. Вы можете сохранить этот цикл для любых действий с /etc/passwd.

#!/bin/bash

for f in $( ls /home/ );
  do chown -R $f:yourgroup /home/$f
done

Здесь нет проверки на работоспособность, и я написал это без какого-либо тестирования, так что будьте осторожны.

(Кстати, требование «никаких скрытых файлов или папок» будет выполняться тем фактом, что скрытый файл в Unix - это просто обычный файл с. Перед ним, и .username не будет действительным пользователем для chown).

Это может помочь

   #!/bin/bash
    for file in `ls -a | grep -v '^\.'`
    do
            if [[ -d $file ]]
            then
                    fowner=`ls -ld $file | nawk '{print $3}'`
                    fgroup=`ls -ld $file | nawk '{print $4}'`
                    chown -R $fowner:$fgroup $file
            fi
    done

Использовать getent чтобы получить имя пользователя, имя группы и домашний каталог каждого пользователя, чей идентификатор пользователя больше или равен 500, и применить их через chown -R. Кроме того, в настоящее время это user:group.

для меня в ls -l /home/ | awk '{print $3}'; do chown -R $ i / home / $ i; готово
для меня в ls -l /home/ | awk '{print $4}'; do chgrp -R $ i / home / $ i; готово