#centos #cpanel
Вопрос:
Я пытаюсь использовать приведенный ниже скрипт, который предназначен для исправления прав доступа к файлам у всех пользователей cPanel на сервере. Скрипт возвращает ошибку в строке 32. Кто-нибудь может сказать мне, что я там делаю не так?
#!/bin/bash
# Script to fix permissions of accounts
if [ "$#" -lt "1" ];then
echo "Must specify user"
exit;
fi
USER=$@
for user in $USER
do
HOMEDIR=$(egrep "^${user}:" /etc/passwd | cut -d: -f6)
if [ ! -f /var/cpanel/users/$user ]; then
echo "$user user file missing, likely an invalid user"
elif [ "$HOMEDIR" == "" ];then
echo "Couldn't determine home directory for $user"
else
echo "Setting ownership for user $user"
chown -R $user:$user $HOMEDIR
chmod 711 $HOMEDIR
chown $user:nobody $HOMEDIR/public_html $HOMEDIR/.htpasswds
chown $user:mail $HOMEDIR/etc $HOMEDIR/etc/*/shadow $HOMEDIR/etc/*/passwd
echo "Setting permissions for user $USER"
find $HOMEDIR -type f -exec chmod 644 {} ; -print
find $HOMEDIR -type d -exec chmod 755 {} ; -print
find $HOMEDIR -type d -name cgi-bin -exec chmod 755 {} ; -print
find $HOMEDIR -type f ( -name "*.pl" -o -name "*.perl" ) -exec chmod 755 {} ; -print
fi
done
chmod 750 $HOMEDIR/public_html
if [ -d "$HOMEDIR/.cagefs" ]; then
chmod 775 $HOMEDIR/.cagefs
chmod 700 $HOMEDIR/.cagefs/tmp
chmod 700 $HOMEDIR/.cagefs/var
chmod 777 $HOMEDIR/.cagefs/cache
chmod 777 $HOMEDIR/.cagefs/run
fi
Вывод ошибок
$ ./fixperms.sh username
./fixperms.sh: line 32: syntax error near unexpected token `('
./fixperms.sh: line 32: ` find $HOMEDIR -type f ( -name "*.pl" -o -name "*.perl" ) -exec chmod 755 {} ; -print'
Ответ №1:
Попробуй вот так:
#!/bin/bash
# Script to fix permissions of accounts
if [ "$#" -lt "1" ];then
echo "Must specify user"
exit;
fi
USER=$@
for user in $USER
do
HOMEDIR=$(egrep "^${user}:" /etc/passwd | cut -d: -f6)
echo $HOMEDIR
if [ ! -f /var/cpanel/users/$user ]; then
echo "$user user file missing, likely an invalid user"
elif [ "$HOMEDIR" == "" ];then
echo "Couldn't determine home directory for $user"
else
echo "Setting ownership for user $user"
chown -R $user:$user $HOMEDIR
chmod 711 $HOMEDIR
chown $user:nobody $HOMEDIR/public_html $HOMEDIR/.htpasswds
chown $user:mail $HOMEDIR/etc $HOMEDIR/etc/*/shadow $HOMEDIR/etc/*/passwd
echo "Setting permissions for user $USER"
find $HOMEDIR -type f -exec chmod 644 {} -print
find $HOMEDIR -type d -exec chmod 755 {} -print
find $HOMEDIR -type d -name cgi-bin -exec chmod 755 {} -print
find $HOMEDIR -type f ( -name *.pl -o -name *.perl ) -exec chmod 755 {} -print
fi
done
chmod 750 $HOMEDIR/public_html
if [ -d "$HOMEDIR/.cagefs" ]; then
chmod 775 $HOMEDIR/.cagefs
chmod 700 $HOMEDIR/.cagefs/tmp
chmod 700 $HOMEDIR/.cagefs/var
chmod 777 $HOMEDIR/.cagefs/cache
chmod 777 $HOMEDIR/.cagefs/run
fi
Вам нужно избежать парантезиса (), используя
Кроме того, используя {}
, а не {} ;
вы значительно повысите скорость работы скрипта, потому что вы замените-exec, заканчивающийся от ; до , find оптимизирует создание подпроцесса, вызывая chmod только минимально возможное количество раз