Linux 符号链接文件的Chmod

Linux 符号链接文件的Chmod,linux,bash,awk,sed,Linux,Bash,Awk,Sed,最近,我试图访问一个符号链接的文件,但收到“拒绝访问”的消息。因此,我想要一种方法来更改所有符号链接的目标文件。在chown(即sudo chmod-R 775/var/www/)中有一种方法可以做到这一点,但在chmod中没有。很奇怪。有没有人有更好的方法做到这一点: ls-lR/var/www/| grep^l | awk'{print$11,$12,$13,$14}| sed-e's/[:space:]*$/'| sed's/*/'&/'| xargs-n1 sudo chmod 775

最近,我试图访问一个符号链接的文件,但收到“拒绝访问”的消息。因此,我想要一种方法来更改所有符号链接的目标文件。在chown(即sudo chmod-R 775/var/www/)中有一种方法可以做到这一点,但在chmod中没有。很奇怪。有没有人有更好的方法做到这一点:

ls-lR/var/www/| grep^l | awk'{print$11,$12,$13,$14}| sed-e's/[:space:]*$/'| sed's/*/'&/'| xargs-n1 sudo chmod 775

  • ls-lR/var/www/
    查找/var/www中的所有文件
  • grep-l
    过滤掉所有符号链接的文件
  • awk{print$11、$12、$13、$14}
    打印所有文件,包括其中带有空格的文件(空格越多,数字越多)
  • sed-e的/[:space:][]*$/'
    通过在awk中包含空格来删除尾随空格
  • sed的/*/“&”/
    在每个文件周围添加引号,以包括其目录中带有空格的文件
  • xargs-n 1 sudo chmod 775
    chmod对找到的所有文件都起作用吗

如果链接名中有空格,您的
awk
可能会失败

与其尝试将其全部放在管道中,不如使用一个简单的循环:

find /var/www -type l -print0 | while IFS= read -r -d link ; do
   rp=$(realpath "$link")
   chmod 775 "$rp"
done
如果您必须解析
ls
的输出,那么

ls -lR | sed -n 's/^l.* -> //p' | sed 's/.*/"&"/'

可能会给你一个比你的
grep
-
awk
管道更好的选择这里有什么奇怪的?请注意:像
find/var/www-type l-exec chmod 0775{}这样做可能更容易
instead您想更改链接的权限,还是它指向的文件?@beepbeep在我刚刚测试的Ubunutu系统上,“chmod”更改的是真实文件的权限,而不是符号链接的权限。您正在尝试更改符号链接的权限吗?