Bash递归列出子目录

Date:  2015/8/19   Sort:  编程开发 3738 Views / 1 Comments 

  由于Linux本身权限管理的复杂性,加上SELinux权限管理的蛋疼性,在配置Apache服务器(httpd)时遇到403几乎是家常便饭。这种情况一般与以下几点有关:

    1. 所访问的目录没有可执行权限(chmod +x);

    2. 所访问的目录的上级目录没有执行权限;注意这里的“上级目录”是递归处理的,即从“/”到所访问的目录必须都有可执行权限。如果其中某一层目录缺少,都会导致403错误;

    3. 所访问的目录的安全上下文不属于httpd(chcon -t httpd_sys_content_t);

    此外,PHP脚本运行时进行的include/include_once/require/require_once操作也要求相应目录具有可执行权限。


  处理递归路径尤其麻烦。之前一直采用的是在文件管理器(Dolphin)下修改文件夹的权限,并且勾选“将更改应用到所有的子文件夹和其中的文件”。然而如果不希望文件也具有可执行权限,就比较麻烦了。以下是解决方法:

    列出当前目录的子目录:
        ls -d */
    递归列出当前目录的子目录:
        ls -FR|grep /$,ls -ap | grep "/"
    递归列出当前目录的子目录,末尾不含"/":
        tree -id
    递归列出当前目录的子目录,末尾不含"/",并加上相对路径:
        tree -ifd
    所以,如果要将所有子目录都加上可执行权限,就是:
        chmod +x $(tree -ifd)


(部分资料来源:http://dpinglee.blog.163.com/blog/static/14409775320111151066562)

转载本站文章请注明,转载自:WTZ的小博[ http://wiblog.net/]
知识共享许可协议 本作品采用知识共享署名 4.0 国际许可协议进行许可。

更多

评论(1)条

assignment代寫
2018-06-05 05:00
您可以使用在线文件管理来向管理员反馈意见。只要去专业术语领域,并在这个领域获得更好的生活模式。用移动你的时间,并在这里获得基本模式。