bash环境配置:
   
    配置文件,生效范围划分,存在两类:
        全局配置:
            /etc/profile, /etc/profile.d/*.sh
            /etc/bashrc
        个人配置:
            ~/.bash_profile
            ~/.bashrc

    按功能划分,存在两类:
        profile类:为交互式登录的shell提供配置
            /etc/profile, /etc/profile.d/*.sh
            ~/.bash_profile

            功用:
                (1) 定义环境变量,例如PATH、PS1
                (2) 运行命令或脚本

        bashrc类:为非交互式登录shell提供配置
            /etc/bashrc
            ~/.bashrc

            功用:
                (1) 定义命令别名;
                (2) 定义本地变量;

    变量:内存空间,变量名
        类型:
            环境变量:作用范围当前shell进程及其子进程
            本地变量:作用范围当前shell进程
            局部变量:作用范围仅为当前shell进程中某代码片断(通常为函数上下文)

            位置变量:$1, $2
            特殊变量:$?

        变量定义方式:
            bash内置变量:可直接调用,内置了许多环境变量,例如PATH等
            自定义变量:
                变量赋值:变量名=值

        bash弱类型:
            变量存储数据时,默认均采用字符形式;任何变量可以不经声明,直接引用;

                120:24bits
                120: 8bits

    定义本地变量:
        name=value

        查看:set

    定义环境变量:
        export name=value
        declare -x name=value

        查看:env, printenv, export

    撤消变量:
        unset name

    引用变量:
        ${name}, $name

    bash中的引用符号:
        '': 强引用,变量替换不会发生
        "":弱引用
        ``: 命令引用

   
    shell登录类型:
        交互式登录:
            直接通过终端进行的登录;
            通过su -l Username命令实现的用户切换;

        非交互式登录:
            图形界面下打开的命令行窗口;
            执行脚本;
            su Username;

    配置文件作用次序:
        交互式登录:
            /etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc

        非交互式登录:
            ~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh

    编辑配置文件定义的新配置如何生效?
        (1) 重新登录;
        (2) 让当前shell进程去重新读取指定的配置文件;
            source /PATH/TO/SOMEFILE
            . /PATH/TO/SOMEFILE
            注意:副作用

    问题:
        1、定义对所有用都生效的别名?
        2、如果仅需要PATH环境变量的修改仅对root用户生效,该如何操作?


Linux文件系统上的特殊权限
   
    权限模型:
        u, g, o
            r, w, x

    进程的安全上下文:
        前提:进程有属主(进程以哪个用户的身份运行);文件有属主和属组;
        (1) 用户是否能够把某个可执行程序文件启动为进程,取决于用户对程序文件是否拥有执行权限;
        (2) 程序启动为进程后,此进程的属主为当前用户,也即进程的发起者;进程所属的组,为发起者的基本组;
        (3) 进程拥的访问权限,取决其属主的访问权限:
            (a) 进程的属主,同文件属主,则应用文件属主权限;
            (b) 进程的属主,属于文件的属组,则应用文件属组权限;
            (c) 则应用其它权限;

    SUID:
        (1) 任何一个可执行程序文件能不能启动为进程:取决于发起者对程序文件是否有执行权限;
        (2) 启动为进程之后,其属主不是发起者,而程序文件自己的属主;这种机制即为SUID;

        权限设定:
            chmod u+s FILE...
            chmod u-s FILE...

        注意:
            s: 属主原本拥有x权限;
            S: 属主原本无x权限;

    SGID:
        默认情况下,用户创建文件时,其属级为此用户所属的基本组;
        一旦某目录被设定了SGID权限,则对此目录拥有写权限的用户在此目录中创建的文件所属的组为目录的属组,而非用户的基本组;

        权限设定:
            chmod g+s FILE...
            chmod g-s FILE...

    Sticky:
        对于一个多人可写的目录,此权限用于限制每个仅能删除自己的文件;

        权限设定
            chmod o+t FILE...
            chmod o-t FILE...

    SUID, SGID, STICKY
        000
        001
        010
        011
        100
        101
        110
        111

        chmod 4777 FILE
        chmod 3755 DIR

    练习:
       

1、让普通用户能使用/tmp/cat去查看/etc/shadow文件;

2、创建目录/test/data,让某组内普通用户对其有写权限,且创建的所有文件的属组为目录所属的组;此外,每个用户仅能删除自己的文件;