zoukankan      html  css  js  c++  java
  • 彻底地/ 终于地, 解决 关于apache 权限的问题了:: 修改 DocumentRoot后的 403错误: have no permission to access / on this server

    1. 目录的权限都 应该设置 为 drwxr_xr_x, 即755, 而html下的文件的权限设置为; 644 即可!

    2. -x 只有目标文件对某些用户是可执行的或该目标文件是目录时才追加x 属性。

    3. -w权限, 可以

    4.  umask [-p] [-S] [mode]
             The  user  file-creation  mask  is  set to mode.  
      

    The -S option causes the mask to be printed in symbolic form;

    1. 默认的系统的umask是0002, 即: 目录的权限是775, 而文件的默认权限是 664.
      但是, 为了减少 组 的权限, 应该将组的 -w权限减去, 即将umask设置为 0022, 即目录的权限设置为 755, 而文件的权限设置为 644.
    在默认权限上,文件和目录是不一样的,
    对于一个目录,x权限是非常重要的 ,而对于一个文件,x权限在默认是不应该有的,因为文件大多是用来存储数据的
    ,所以在linux中,文件的默认权限应该是644,目录的默认权限是755
    
     
    要注意的是umask的分数指的是“默认值需要剪掉的权限”,
    
    所以新建文件时权限:rw--r--r--
    
    新建目录:rwxr-xr-x
    
    

    实际上, /etc下的所有文件/文件夹, 都是 属于root:root的! 要编辑这些东西, 都需要 root权限.

    如果提示, 不能连接" unable to connect server" 就修改 ServerName 为: localhost:80 即可解决.

    使用 su -c 操作的文件/目录, 包括: mv, cp等操作, 文件/目录对象 (包括 嵌套的 子目录/文件) 都成了, 自动转换为 root:root 的所有权.

    cp 操作目录的时候,需要加 -R, 但是mv本身就可以直接 操作目录, 即移动 目录的时候, 不需要加-R 选项. 直接就可以了.

    mv是: move, 而rm 则是 : remove 删除的缩写.


    如何区别httpd 2.2 还是2.4

    只要通过, 权限语句:
    如果是 Order Allow, Deny ...则是2.2
    如果是 require all granted, 或者 denied , 则是2.4.

    在多个比较深的目录层次 之间进行切换的时候, 使用的是: pushd, popd, 和 dirs命令: 参考: http://blog.163.com/benben_long/blog/static/199458243201211334556266/

    cd - : -表示 $OLDPWD, 是表示上一个目录. 所以, cd - 总是在当前目录和上一个目录之间切换.

    注意, directories stack: 会一直保存, 在pushd 命令的中间, 使用 cd命令的时候, 并不会清空 目录栈, 只是 替换栈中 的 最上面的 (第一个index=0)的那个目录...

    单独的pushd命令, 会将 dirs 目录栈中的 第0个目录和第1个目录交换, 并切换到 第1个目录.
    而当前目录总是位于 第0个, 即第0个 总是 当前目录!

    在dirs栈中切换目录的时候, 要使用 pushd +n, 必须带这个加号, 这时候, 才会到 目录栈中去 查找目录. 否则, 如果不带 + 号, 则认为是一个 "目录实体", "实体目录", 就会认为是 "pushd 2, 切换到名字为 "2" 的这样 的目录, 自然没有这个目录而报错"

    pre'requisite [pri' rekw2zit] n. adj. 前提条件; 先决条件, 前提的, 必要的...
    mangle pages: (严重)破坏页面..

    一般要注意, 关于程序 升级: upgrade的事情 , 一定要谨慎 最好是别作, 否则可能会 因为 包与包之间的 版本不一致, 而导致 出现各种问题!


    linux的目录,不必加上最后面的 slash" /

    apache的 虚拟目录: 就是 目录别名: alias, 跟虚拟主机 是不一样的!

    登陆phpmyadmin的方法是:

    authz是什么意思 : authz: 是 authentication的简写!

    在给php文件命名的时候, 可以根据文件的性质, 在php的前面加上 .inc.php, .xml.php, .css.php等命名方法.


    突然醒悟到/ 领悟到 : 在shell中自定义函数 或命令, 是多么重要 和必要啊, 为了提高工作/操作效率和方便, 如果没有这个, 那么你管理apache, mariadb, firewalld等是多么痛苦啊!必须要自己写: 进行自定义的函数和命令!!

    比如要在 su -c 'dnf install package_name_parameter' 中, 定义一个 命令/函数, 给 传递 包名称 参数. 这里就不能用 alias来实现了, 因为要作为参数来传递, 所以需要定义一个用户自定义函数:

    function  sidnf()
    {	
       if [ $# -eq 0 ] ; then
    	    echo 'Usage: sdnf PKG_TO_INSTALLED ...'
                exit 1
       fi
    
       si='dnf install '$1
       su -c  "$si"    ####  这里必须加双引号!  不加或加单引号 都要出错!!! 
        ## exit 这里不必显式的写exit, 让dnf的返回值作函数的返回值
    }
    
    1. 创建函数的语法,不必用function来声明,直接写,因为当shell检测到:小括号和大括号的时候,自动认为是一个函数了:foo(){...}
      (当然, 也可以照顾php中的习惯, 在函数名前可以加上 function 关键字)
    1. 可以直接在.bashrc中书写函数, 但是更为专业的写法是: 建立专门的 ~/bin目录,存放自定义命令文件,或者建立~/lib/sh/目录,专门存放自定义的shell 函数。 使用方法: 一是, 将他们加入到$PATH中; 二是, 或者加入到 .bashrc, 用 source 或. 点命令的方式执行 ; 三是, 在 其他脚本中, 引用 /调用 lib中的函数库! 1. 如果是在 foo.sh中使用函数,第一, 先定义函数, 其次, 调用函数: 调用方式是: myFunc para1 para2, 注意不需要加括号!

    深刻理解 "函数库"?

    1. 其实 ~/lib/目录下的 就是一个/多个 文件!
    2. 因为这个文件中,包含了很多个函数,所以叫函数库
      lib的意思: library, 库目录(就是一个文件集合的意思),里面可以存放 多个按目的/用途/模块等进行分门别类的 .sh /.c/.php/.class文件,分别叫做:sh库,c函数库, php函数库, php类库。

    调用函数库中的函数?

    #!/bin/bash  
    ### include lib 
    .  ~/lib/sh/libMYFUNCS.sh   // 调用库函数, 就是直接执行 库中的函数 文件.
    ### use function from lib 
    printUSERDETS 
    ### exit script 
    exit 0 
    

    函数定义的语法:

    [ function ] funname [()]
    
    {
    
        action;
    
        [return int;]
    
    }
    
    

    1、可以带function fun() 定义,也可以直接fun() 定义, 注意:定义时不带任何参数!可以在函数内部直接使用 参数代表符, 或参数占位符!$0.$1,....$n
    2、参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255)


    1、shell脚本中, 必须在调用函数地方之前,声明函数,shell脚本是逐行运行。shell不会像其它语言一样先预编译(所谓 预编译, 就像 预先 通知一样 , 这样即使函数是在调用的 位置后面, 也有效, 而不会出错) 。一次必须在使用函数前先声明函数。
    2、total=$(fSum 3 2); $()就是执行命令的另一种表示方式,它是命令,因此 各个输入参数直接用 空格分隔。
    函数/命令里面获得参数方法可以通过:$0…$n得到。 $0代表函数本身。
    3、函数返回值,只能通过$? 系统变量获得,直接通过=,获得是空值。其实,我们按照上面一条理解,知道 函数其实就是 一个命令,在shell获得命令返回值,都需要通过$?获得。

    shell中字符串的连接?

    1. 不用任何连接符号, 比如: . + 什么的, 而是直接将字符串 挨着写就是了
    2. 直接将两个字符串挨着写, 但是变量要使用 ${var} 的形式, 注意跟php变量的形式区别:php的变量是将整个 部分包括$ 放在大括号中的, 如: {$PHP}
    3. 变量用{}的母的, 只是 为了 区分 (变量在 "贪婪匹配"解析)的 时候, 将后面要链接的字符串也 当作变量名来处理,避免出错, 因此, 如果要连接的变量是放在最后面的话, 就不必使用 大括号进行分隔!

    鼠标和 光标: 不是一回事. 光标总是那个 "闪烁的短线", 不会变; 而鼠标 是用来 引导 光标的 , 而且其形状会 随时改变的.


    如何定义"永久性" 的umask?

    1. 有一个 显示 用户id的系统变量: $UID. 在 if [ ... ]; then 格式中, 分号 可以紧跟着 后中括号 ].
    2. umask 是一个builtin命令, 是命令, 既然是命令, 设置的格式就是 : umask mode 就不能是 : umask=mode 的方式了. 因为后者 umask=mode的方式 是用来 定义 "变量的" ,不是命令!
    3. 如果在 shell中 使用 umask mode的方式来 定义umask, 只能是临时的, 关闭shell后, umask又恢复了默认值,
    4. umask的默认值: 在 /etc/profile 文件中定义的!

    其中: if [ $UID -gt 199 ] && [ "id -un" = "id -gn" ]; then 数字比较大小用 -gt等表示, 而字符串比较可以直接用 等号= ; 注意 引号+反引号的使用; 表示 大于199 的用户并且 用户和组同名的, 使用 0002, 否则使用 0022. 比如: 你用 普通用户来查看umask, 看到普通用户设置的 是 0002, 而root查看 , 可知root用户 设置和 使用的就是 0022: 也就是说, root用户创建的东西, 对root组的权限限制更严, root组是没有-w写权限的(by default). 而普通用户的东西, 对组权限就要松些, 可以有-w权限, 这主要是因为root的东西更敏感, 跟安全的关系更大!

    1. 因此, 如果你想永久性地修改umask, 就在 /etc/profile中, 或~/.bashrc中, 使用 命令: umask 0022 而实际上 是可以不需要更改的!!!

    关于 , '', "" 三种转义符号的根深层的理解

    1. 转义能力是逐渐减弱的, 而 单引号是 除了 回车符之外, 可以转义其他所有特殊字符的, 比如: 可以转义$,所以 要输出变量就不能放在 单引号内, 单引号中的变量引用 $foo就要失效; 比如 反引号,单引号中的 反引号命令就不能被只相信! 而双引号 的能力, 就较弱的多 它主要是用来 界定字符串的, 表示他内部 东西, 是一个 字符串整体而已! 但是 $foo变量引用/ 反引号命令等都是有效 的!
    2. 也就是 总之, 一点 , 要在 shell脚本中 , 使 引号内的 变量/命令, 要有效的话, 都要使用 双引号 ! 所以, 你看到 在 shell中, 基本上很少使用 单引号的, 大多使用双引号, 就是 为了更灵活/ 更方便的 使用 变量引用/ 反引号命令.

    为什么 su -c '$cmd' 没有执行命令, 马上返回, 甚至没有报错呢?

    一 个 原因: 就是 在 命令中, 如果放在单引号中, 通常 只允许 字母和数字, 一般不允许 有特殊字符, 如!, @ # $ 等. 要么这些特殊字符, 解析出错, 要么直接认为 "该命令" 不认识, 不能识别, 就相当于 空的字符串, 空命令: 等同于 : su -c '' 所以, 就直接返回, 直接结束, 连报错都没有.

  • 相关阅读:
    springcloud 项目源码 微服务 分布式 Activiti6 工作流 vue.js html 跨域 前后分离
    springcloud 项目源码 微服务 分布式 Activiti6 工作流 vue.js html 跨域 前后分离
    OA办公系统 Springboot Activiti6 工作流 集成代码生成器 vue.js 前后分离 跨域
    java企业官网源码 自适应响应式 freemarker 静态引擎 SSM 框架
    java OA办公系统源码 Springboot Activiti工作流 vue.js 前后分离 集成代码生成器
    springcloud 项目源码 微服务 分布式 Activiti6 工作流 vue.js html 跨域 前后分离
    java 视频播放 弹幕技术 视频弹幕 视频截图 springmvc mybatis SSM
    最后阶段总结
    第二阶段学习总结
    第一阶段学习总结
  • 原文地址:https://www.cnblogs.com/bkylee/p/7725971.html
Copyright © 2011-2022 走看看