Shell脚本,用于向目录和目录内的文件添加完全读写和执行权限

Shell脚本,用于向目录和目录内的文件添加完全读写和执行权限,shell,chmod,Shell,Chmod,我对shell脚本非常陌生,但至少我尝试过一些东西,但都不起作用。我想为我网站的httpdocs文件夹以及所有用户和组的httpdocs/mysite文件夹和php文件httpdocs/mysite/_conn.php添加读写和执行权限 我有以下内容,但不起作用,change permission.sh #!/bin/bash /bin/date >> /tmp/event_handler.log chmod g=drwx "/var/www/vhosts/domain.com/h

我对shell脚本非常陌生,但至少我尝试过一些东西,但都不起作用。我想为我网站的
httpdocs
文件夹以及所有用户和组的
httpdocs/mysite
文件夹和php文件
httpdocs/mysite/_conn.php
添加读写和执行权限

我有以下内容,但不起作用,
change permission.sh

#!/bin/bash
/bin/date >> /tmp/event_handler.log 
chmod g=drwx "/var/www/vhosts/domain.com/httpdocs"
chmod o=drwx "/var/www/vhosts/domain.com/httpdocs"
chmod u=drwx "/var/www/vhosts/domain.com/httpdocs"
chmod g=drwx "/var/www/vhosts/domain.com/httpdocs/mysite"
chmod o=drwx "/var/www/vhosts/domain.com/httpdocs/mysite"
chmod u=drwx "/var/www/vhosts/domain.com/httpdocs/mysite"
chmod g=drwx "/var/www/vhosts/domain.com/httpdocs/mysite/_conn.php"
chmod o=drwx "/var/www/vhosts/domain.com/httpdocs/mysite/_conn.php"
chmod u=drwx "/var/www/vhosts/domain.com/httpdocs/mysite/_conn.php"

上面的脚本不起作用。我需要在此
更改权限.sh
文件中进行哪些更改?

chmod o=drwx
无效,您需要使用
chmod o+rwx

完整脚本:

#!/bin/bash
/bin/date >> /tmp/event_handler.log 
chmod ugo+rwx "/var/www/vhosts/domain.com/httpdocs"
chmod ugo+rwx "/var/www/vhosts/domain.com/httpdocs/mysite"
chmod ugo+rwx "/var/www/vhosts/domain.com/httpdocs/mysite/_conn.php"

您甚至可以将3个
chmod
命令组合成一个,正如我上面所示。

我创建了两个函数来实现相同的想法,具有不同的可访问性级别

它们中的每一个都运行
find
并指定file或dir(
-type
d或f),然后设置相应的priv,从而包括
x
以使其可读

#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ chmod RWX ~~~~~~~
echo "Defining function 'chmod_group_rw' which requires single pathname passed"
function chmod_group_rw() {
  DEST=${1?'which path? (Can use *name* if all matches desired)'}
  find ${DEST} -type d -exec chmod 770 {} \;
  find ${DEST} -type f -exec chmod 660 {} \;
}
echo "Defining function 'chmod_all_rw' which requires single pathname passed"
function chmod_all_rw() {
  DEST=${1?'which path? (Can use *name* if all matches desired)'}
  find ${DEST} -type d -exec chmod 777 {} \;
  find ${DEST} -type f -exec chmod 666 {} \;
}
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ chmod RO ~~~~~~~
echo "Defining function 'chmod_archive_readonly' which requires single pathname passed"
function chmod_archive_readonly() {
  DEST=${1?'which path? (Can use *name* if all matches desired)'}
  find ${DEST} -type d -exec chmod 555 {} \;
  find ${DEST} -type f -exec chmod 444 {} \;
}
它有助于不必记住所有细节,并且可以用于发送它的任何路径

其中任何一个都可以在shell脚本中定义,然后在需要时调用,例如:

#!/bin/bash
/bin/date >> /tmp/event_handler.log
function chmod_all_rw() {
  DEST=${1?'which path? (Can use *name* if all matches desired)'}
  find ${DEST} -type d -exec chmod 777 {} \;
  find ${DEST} -type f -exec chmod 666 {} \;
}
chmod_all_rw "/var/www/vhosts/domain.com/httpdocs"

我会尝试一下,过一会儿让你知道。那没用。可能是服务器上的某些其他脚本阻止添加rwx权限。实际上,我正在通过API在Plesk中创建一个新网站,并且我已经设置了一个事件处理程序,每当创建一个新主机时,它都会执行一个
.sh
文件。该
.sh
文件具有应应用权限的上述代码。不幸的是,它不适用。有什么想法吗?使用shell上的
触摸foobar
创建一个新文件,然后输入
chmod ugo+rwx foobar
查看是否有任何错误。最后,使用
ls-loobar
命令检查权限。正如我所说,我是
sh
新手。我不知道怎么做。我的意思是我不知道触摸和ls-l命令或热执行它们。@Illusion如果
/var/www/vhosts/domain.com/httpdoc
这些都是root所有的,你需要
sudo chmod
,这是从@anubhava的回答中收集到的,要为其设置权限的文件的所有权必须是您,而不是root用户或任何其他用户。