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

Если Вы хотите узнать то, что текущий pid MySQL - Вы, может найти его в файле/var/run/mysqld/mysqld.pid (Thats в Ubuntu мог быть differnt в других дистрибутивах).

6
задан 11 May 2010 в 09:58
6 ответов

Я должен дать Kyle Brandt полный кредит выше. Так, если Вам нравится этот ответ ниже, нажмите треугольник Up на его сообщение для подъема его состояния.

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

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

#!/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
8
ответ дан 2 December 2019 в 23:57

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

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

Необходимо будет удалить эхо, конечно, и необходимо будет выполнить это с корневыми полномочиями. Я также всегда рекомендую некоторое время цикл вместо для цикла ls самостоятельно. Можно сохранить этот цикл для того, чтобы сделать что-либо с /etc/passwd.

8
ответ дан 2 December 2019 в 23:57
#!/bin/bash

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

Нет никакой исправности, регистрируясь в этом, и я записал это без любого тестирования, так быть осторожным.

(BTW, требованию "никаких скрытых файлов или папок" будет отвечать то, что скрытый файл в Unix является просто регулярным файлом с a. перед ним, и .username не будет действительным пользователем для показанного).

5
ответ дан 2 December 2019 в 23:57

Это могло бы помочь

   #!/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
3
ответ дан 2 December 2019 в 23:57

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

1
ответ дан 2 December 2019 в 23:57

поскольку я в ls -l /home/ | awk '{print $3}'; сделайте показанный-R $i/home/$i;готово
поскольку я в ls -l /home/ | awk '{print $4}'; сделайте chgrp-R $i/home/$i;готово

1
ответ дан 2 December 2019 в 23:57

Теги

Похожие вопросы