开发thinkphp的第一步就是给Application目录(不包括其下的文件)777权限, 关闭selinux

时间:2023-03-08 16:54:17

开发thinkphp的时候, 总是会出现各种个样 的奇怪的毛病,

比如: 说什么Application目录不可写,

比如: 说什么 _STORAGE_WRITE_ERROR, 不能生成 Runtime/Cache/Home/下的缓存文件等.

作为初期开发, 可以不用考虑 安全和性能???

因此, 为了保证开发的顺利进行, 先把代码写出来, 因此, 第一步就是, 给APPLICATION 完全权限 777, 同时关闭selinux, 将selinux设为0.

就不会出现各种权限, 安全原因引起的 前期的无法 写下去 的问题.

为什么要给目录以777的权限呢?

  1. 这里的最后的那个7, 是针对other的, 而网站访问的人就是 other, 所以最后的这个7, 就是对web目录而言的;

  2. 目录的权限, 除了给以 write权限外, 还要给以 x 可执行 的权限, 因为: 目录的write权限 和 x权限 完全是不同的, 两者之间是不可以互相取代的:

    write权限是指: 在目录中, 可以add创建文件/目录; 删除文件/文件夹(不管文件的本身的权限是什么, 也不管文件的所有者是谁?); 重命名文件/目录; 最后是可以移动文件/子目录.

    而x 可执行权限, 是指 其他用户是否可以 进入 该目录, 是否可以 使用 cd 命令 进入该目录. 为什么又叫 可执行 权限呢? 因为 只有当你 可进入 cd 到 这个目录后, 你才可以在这个目录下 "执行" 命令. ... 如果你没有x命令, 那么即使你有read权限, 也是不能 读取目录里面的文件的!

  3. 事实上, 在任何地方 任何用户, 创建 目录的 时候, 默认的目录 权限就是 r-x, 也就是说, 默认的目录 对other 都是有 x 权限的, 否则, 你创建目录干 什么呢?

  4. 通常来说, 重要的, 最主要的, 还是通过 控制 写权限 来 控制目录的. 故目录的写权限 w 才是最重要的.

  5. 所以, 给目录 在原来的权限基础上: 755, 给以写权限, 就号了, 即777. 一点都不过分.

  6. 而对于文件, 就不同于目录的默认权限 755, 文件的默认权限是 644, 因为文件默认不会设置它为 可执行文件, 没有 x 权限. 所以它的默认权限是644.

  7. 而文件 即使它不是 可执行文件, 给它 以 x 权限, 让他成为可执行文件, 也没有什么额外影响. 所以 给全部 Appliatcion以777 权限是可以的.

  8. 但是, 如果你有洁癖, 确实是不想给文件 以执行的 权限,(或者是说 不想看到vim中 Nerdtree 可执行文件旁边的星号, ) .... 如果我们只是想给web(application目录下的 子目录, 以777 的权限, 而 web下的 文件 的权限本身 不要改变, 这时候, 可以参考下面的内容:

    先 chmod -R 777 /webpath,

    然后, 恢复目录下的文件 的原来的权限: find /webpath -type f -exec chmod 644 {} \;

  9. 理解以前的那么命令, 使用 find 命令和 其他命令 如ls 的 结合使用 : 就是上面的 , 使用 -exec .... {} \; 注意 这里 的{} \; 就相当于一个占位符, 代表前面的搜索到的 内容!

  10. 除了在终端下使用 chmod命令来修改文件的权限, 还可以 用php 提供的 chmod函数, 这里面的 权限参数, 就一定要使用 0777的 形式, 其中最前面的0 表示是 8 进制. 这个在 chmod函数只是不能省略的. chmod命令中其实 还是 0777, 仍然是八进制, 只是省略了而已!

  11. 注意, UID就是指的 文件的所有者. 在安全模式下, chmod函数, 会坚持所操作的文件, 和当前 脚本的文件 是否具有 相同的 UID. (即看它们是不是属于同一个所有者)...


有时候在linux调度一个站点时,为了排除文件权限问题最喜欢用 chmod -777 /web_path

可是要改回来怎么办,原来是目录为755 ,文件是644,

可以使用下面这种方法再改回来

find /path -type f -exec chmod 644 {} \; // -exec 后面的命令是以 {} \;结尾的, 记一个固定的就好了.

find /www/TianyaLVS -type d -exec chmod 755 {} \;

ls 命令, 本身是显示 某个目录下的 子目录和子 文件的 信息, 但是 , 如果要 显示 该目录自己呢? 显示它本身 自己的 信息 呢?

不用每次都切换 cd 到它的 父目录 去, 然后 用 ls 来显示, 直接 可以 使用 ls -d 就可以显示了.