##权限管理

   

       owner,group,other

属主,属组,其他

 

###权限:

        read write execute

          r   w    x

        用户的不拥有某位权限,则使用-占位

      r-x:读和执行的权限

      r--:只读权限

      rw-:读写权限

        使用8位数来表示

      r:4

      w:2

      x:1

文件:

      r:可以使用内容查看类的命令来显示其相关内容

      w: 可以使用编辑器修改其内容

      x:可以将其发起一个进程

目录:

      r:可以使用ls命令查看目录内容的文件信息

      w:可以创建、删除文件

      x:可以使用ls -l命令来查看目录内容的文件信息,并且可以使用cd命令切换此目录为工作目录:

***修改文件的属主和属组 :仅管理员可执行,chownchgrp***   

###chmod命令

操作三类用户的权限:使用8进制形式

    chmod OCTAL -MODE file ...

    u:属主

     g:属组

     o:其他

     a:所有

     =:操作指定类型用户的权限

     +/—:操作置顶类型用户的单个权限

     参照其他文件的权限为当前文件来赋权

     chmod --reference=参照文件名 文件名

操作指定类别用户的权限:使用u,g,o,a来赋权,基于=或+/-来进行  

    参照其他文件的权限当文件赋权限

###umask

     

     创建文件:666-umask

            文件默认决不允许出现执行权限:

     创建目录:777-umask

     root:022

     如果用户名和基本组名一致:002,否则为022   

###修改文件的属主或属组:chown,chgrp

   

    chown [option] UserName [{:|.} GroupName] file ...

-R : 递归

-- reference

###权限应用模型:  

   

  1.进程的属主,是否与文件的属主相同,如果相同,进程则以文件属主的权限来访问文件,否则,进程的属主所属的组,是否其中之一与文件的属组相同,如果相同,进程则以文件属组的权限来访问文件;否则,进程则以文件的其他用户的权限来访问文件

  2.总结权限管理:chmod chown chgrp umask

 

###练习

 1.新建一个用户openstacl ,但不给其创建家目录,创建完成后使用su命令切换至此目录,查看其命令提示符及PATH和HOME两个环境变量的值 

     

    useradd -M openstack

    su -openstack

    echo $PATH $HOME

  

 2.复制/etc/skel目录为/home/openstack 

 

      cp -r /etc/skel /home/openstack

 

 3. 改变/home/openstack 及其 内部文件的属主属组均为openstack;

 

  chown -R openstack.openstack /home/openstack 

 

 4./home/openstack及其内部的文件,属组合其他用户没有任何访问权限

        

        chmod -R go=--- /home/openstack

        su - openstack

        echo $PATH $HOME 

   

 5. 新建系统组MySQL,新建系统用户MySQL ,属于MYSQL组,要求没有家目录且shell 为/sbin/nologin;

     

    groupadd -r mysql

    useradd -r -s /sbin/nologin -g mysql mysql 

 6.  新建GID为600的组doyle,新建用户gentoo ,要求家目录为/users/gentoo,密码同用户名字

         

          groupadd -g 600 doyle

          mkdir /users

          useradd -d /users/gentoo gentoo

          passwd gentooo

 7. 新建用户centos,其家目录为/users/centos,密码同用户名字

       

        useradd -d /users/centos centos;

        passwd centos;

  

 8. 新建用户www,其家目录为/users/www,删除www用户,但保留其家目录

    

        useradd -d /users/www www;

  userdel www

 

 

 9. 用户gentoo和centos均为doyle为其附加组

   

    usermod -a -G doyle gentoo

    usermod -a -G doyle centos

     

##bash介绍

 shell:人机交互界面,

 bash:  命令解释器,解析器

 

###bash特性之六:

快捷键

    Ctrl+a:跳至命令行首

    Ctrl+e:跳至命令行尾

    Ctrl+u:删除命令行首至当前光标所在处的内容

    Ctrl+k:删除当前光标所在处至命令行尾的内容

    Ctrl+l:清屏,相当于clear命令

    Ctrl+c:终止或者取消命令

    Ctrl+z:将当前命令送至后台(fg调回命令)

###bash特性之七:补全功能

  命令补全:在PATH中搜索补全

  

    shell命令:内部,外部

        外部:在系统某路经下有一个可执行程序

    PATH,一组以冒号分隔的路径

   

  路径补全:在给出的打头路径下补全,如果没有打头路径,则为当前目录

           

           使用tab补全

         

###bash特性之八:

     

     提供编程环境

    支持使用变量

    支持程序控制

     

***#!/bin/bash被称为shebang***

###练习

  1.创建一个组newgroup,id号为4000

     

  2.创建一个用户doyle ,id 号为3001 ,附加组为newgroup;

  3.创建目录/tmpj/hellodirxyz

  4.复制/etc/fstab至上面的目录中

  5.改变目录及内部文件的属主和属组为doyle

  6.让目录及内部文件的其他用户没有任何权限

###bash的特性之九:bash中的变量

  

 弱类型语言变量:

   

       1.不强制区分变量的类型,无论存储何种数据,均已字符格式进行

       2.无须事先声明:用到时,直接使用,直接赋值

       bash:动态编程语言,是弱类型语言

 变量的类型:

本地变量:只对当前shell进程有效,对其子shell以及其他shell都无效

      

        定义变量: [set]Var_Name="Value"

      

        引用变量: ${Var_Name}

      

        撤销变量:unset Var_Name

     

  局部变量:只对某一部分有效

        

        定义变量:local Var_Name="Value"

  

  环境变量:对其shell进程及其子shell有效:

   

 

  定义:export Var_Name="var name"

  注意不要和当前环境的环境变量冲突 

位置变量:

  $1,......$n

特殊变量

     

          $0:脚本名称自身

        $?:上一条命令的执行状态

        状态用数字表示:0-255

        0:表示成功

            1-255:失败,1.2.127.255预留

  $$ 

  $!

  $#

  $*

变量的命名要求:

      

       只能使用数字,字母,和下划线组成

       不能以数字开头

       不能使用程序中的关键字

       见名知义

  

***不带任何参数的set,显示当前系统的所有变量***

***环境变量:用来定义bash的工作特性,用来保存当前会话的属性信息***

***显示所有环境变量:export env ,printenv***

###bash的配置文件:持久保存用户配置

   profile类:为交互式登录的用户提供配置

         

             /etc/profile 全局

  /etc/profile.d/*.sh 全局

  ~/.bash_profile 个人配置,仅对当前用户有效

         

      功能:

       设定环境变量

       运行命令或者脚本

 

   bashrc 类:非交互工登录用户提供配置

  

     /etc/bashrc:全局

      ~/.bashrc:个人配置

  

     功能:

       设定本地变量

       定义命令别名

  

   登陆类型:

       

        交互式登录:直接通过终端输入用户信息登陆系统

         su - UserName或su -l UserName:

        如何读取配置文件

        /etc/profile -->/etc/profile.d/*.sh -->~/.bash_profile-->~/.bashrc -->/etc/bashrc

        非交互式登录:

        su UseName

    图形界面下的终端

    执行脚本的时候,先设置配置文件

如何读取配置文件

            ~/.bashrc -->/etc/bashrc -->/etc/profile.d/*.sh

通知shell重读系统文件      

    source(.) 重读配置文件

###bash脚本:面向过程的编程中

 

顺序执行:默认法则,逐条执行各命令

选择执行:分支,条件判断,符合条件的分支予以执行

循环执行:将同一段代买反复执行有限次,所以,循环必须有退出条件,否则将陷入死循环  

 

####循环控制语句

  for循环

     

      for var_Name in 列表; do

      循环体(正常执行的执行命令)

      语句1

      语句2

      语句3

      ...

  done

***bash -n 脚本文件 检查脚本文件语法是否错误***    

      while

      until

###列表的生成方法:

        生成数字列表{start..end}、seq[start][stop]

      seq 起始数字、步长,结束数字

for:通过使用一个变量去遍历给定列表中的每个元素。在每次变量赋值时执行一次循环体,直至赋值完成所有元素退出循环

  

    总结:生成列表方式

       1.直接给出列表

       2.使用文件名通配的机制生成列表

       3.可以使用{}或seq命令生成数字序列

       4.使用命令生成  

  

     

     

##文本处理类的命令

##  wc    

   

  wc[option][file]...

    -l:统计行数

    -c:统计字节数

    -w:统计单词数    

##  tr 转换字符或删除字符

   tr '集合1' ’集合2‘

   tr -d ’字符集合‘    

     

###cut:根据制定的分隔符切片,并显示出需要显示的片

  cut  选项 参数 

  

    -d字符:指定分隔符

    -f数字:指定要显示的字段

       单个数字:一个字段

       多个离散字段:逗号分隔

       多个连续字段:-分隔

 

###sort:按字符进行比较

   

sort[options] file

    -f:忽略大小写

    -n:对数字进行排序

    -t:指定分隔符

    -k 数字:指定分隔后进行比较字段

    -u:重复的行,只显示一行

    uniq:移除重复的行

    -c:统计每一行出现的次数(靠着的行)

    -d:仅显示出现最少两次的行

    -u:仅显示不重复的行

##练习

  (1) 切换指centos用户,定义本地变量FirstVar ,其值为“test variable”

  

        su -centos

        FirstVar="test variable"

   (2)  另一个终端,使用gentoo用户查看FirsVar变量的值,如果没有值,为什么? 

         

         只对当前shell进程有效,对其子shell以及其他shell都无效

  (3)  声明一个变量CurTime,其值为当前系统

           

           curTime=`date +%T`

  (4)  使用echo命令显示“the current time is:” is 后跟上curtime变量的值 

  

        echo "the current time is: $curTime"

  (5) 回至centos用户的终端,复制/etc/pam.d目录至/tmp目录中,并重命令为test;

  

   cp -r /etc/pam.d/ /tmp/test

  (6)  声明变量fileName,其值为刚才复制的目录/tmp/test

  

          fileName="/tmp/test"

  (7) 修改变量filename所表示的目录及其内部所有文件的其他用户均没有任何访问权限;

   

          chmod -R o=$fileName

  (8) centos用户是否可以修改变量filename所表示的目录的属主和属组? 如果能,将其改变gentoo用户和gentoo组;如果不能,则使用root用户修改

##脚本练习

 练习一: 写一个脚本,用file命令显示/var/log目录下每个文件的内容类型;

     提示:列表生产的方法为/var/log/* 

     

 练习二:写一个脚本

  1.创建一个/tmp/scripttest目录,用变量保存目录名‘

  2. 在目录里创建测试文件tfile1-tfile20

  3. 创建用户testuser1和testuser2;

  4. 将tfile1-ftile10的属主和属组改为testuser1;

  5. 将tfile1-tfile20的属主和属组改为testuser2